主题中讨论的其他器件:C2000WARE、 ISO5451
您好!
在 F280049上使用 ePWM 模块的半桥逆变器正弦输出电压存在失真问题。
此设计通过 ePWM2A 和 ePWM2B 输出的互补输出生成正弦 PWM。 以下是与代码相关的片段:
/*------------------------------------------------------------------------------------------------------------------------------------------ */
/*--PWM 初始化--*/
EALLOW;
//时基子模块寄存器
ePWM_setPeriodLoadMode (base、ePWM_Period_shadow_load);
EPWM_setTimeBaseCounterMode (base、EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad (base);
ePWM_setClockPrescaler (base、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);
ePWM_setTimeBasePeriod (base、PWM_PERIOD_TICK);//设置 PWM 周期
EPWM_setTimeBaseCounter (base、0);
EPWM_setPhaseShift (base、0);
//计数器比较子模块寄存器
EPWM_setCounterCompareValue (base、EPWM_COUNTER_COMPARE_A、0);
EPWM_setCounterCompareValue (base、EPWM_COUNTER_Compare_B、0);
EPWM_setCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);
//设置为立即模式
EPWM_disableCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_A);
EPWM_disableCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_B);
//动作限定器子模块寄存器
//要开始,请不要将 PWM 配置为执行任何操作
HWREGH (base + ePWM_O_AQCTLA)=0;
HWREGH (base + ePWM_O_AQCTLB)=0;
EPWM_setActionQualifierAction (base、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_HIGH、ePWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction (base、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_LOW、ePWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
//互补 PWM,OUTA 和 OUTB 的 PWMA 源
EPWM_setDeadBandCounterClock (base、EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
EPWM_setRisingEdgeDelayCount (base、PWM_dbred_ticks);
EPWM_setFallingEdgeDelayCount (base、PWM_dbred_ticks);
ePWM_setDeadBandDelayMode (base、ePWM_DB_RED、TRUE);//寄存器 DBCTL 位 OUT_MODE;S1=1->信号路径中的红色
ePWM_setDeadBandDelayMode (base、ePWM_DB_FED、TRUE);//寄存器 DBCTL 位 OUT_MODE;S0=-> FED IN B 信号路径
ePWM_setRisingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);//寄存器 DBCTL 位 in_mode;S4=0 -> RED 和 FED 的输入信号 ePWMA
ePWM_setFallingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);//Reg DBCTL 位 DEDB_MODE (S8)=0;IN_MODE S5=0 ->馈送的输入信号 ePWMA
EPWM_setDeadBandDelayPolarity (base、EPWM_DB_FED、EPWM_DB_POLICY_ACTIVE_LOW);// Reg DBCTL 位 POLSEL (S3)=1 -> OUTB 反转
EPWM_setDeadBandDelayPolarity (base、EPWM_DB_RED、EPWM_DB_POLICY_ACTIVE_HIGH);//Reg DBCTL 位 POLSEL (S2)=0->OUTA 未反转
/*--ISR 中的 PWM 在开环中生成--*/
invDutyPU =(spll1.sine)* invVoRefInst * 0.8;
invDutyPU=(invDutyPU>(Float)(0.8)?(float)(0.8):invDutyPU;
invDutyPU=(invDutyPU<(float)(-0.8)?(float)(-0.8):invDutyPU;
EPWM_setCounterCompareValue (INV_PWM_BASE、EPWM_COUNTER_COMPARE_A、(uint16_t)(pwmDutyVar +(pwmDutyVar*invDutyPU)));//pwmDutyVar 是 PWM 周期计数的一半
/*------------------------------------------------------------------------------------------------------------------------------------------ */
请参阅使用上述代码生成的输出电压波形(随附图像中的蓝色波形)。 在负半个周期内、波形出现小幅失真。 为了确保失真是由 PWM 模块生成的 PWM 导致的、我们交换了逆变器晶体管驱动器输出、保持输入不变。 然后失真出现在正半周期。
您能帮助我们了解一下这是否与我们怀疑的 PWM 生成相关吗?
此致、
维贾伊