ePWM采用UPDOWN计数,使能shadow register,各个寄存器在载波过零即TBCTR=0生效。
AQ设置如下:
ePwm->AQCTLA.bit.ZRO = AQ_SET; ePwm->AQCTLA.bit.CAU = AQ_CLEAR; ePwm->AQCTLA.bit.CAD = AQ_SET; ePwm->AQCTLB.bit.ZRO = AQ_CLEAR; ePwm->AQCTLB.bit.CAU = AQ_SET; ePwm->AQCTLB.bit.CAD = AQ_CLEAR;
即载波过零ZRO时将PWMxA拉高,上升计数匹配CAU时PWMxA拉低,下降计数匹配CAD时PWMxB拉高。PWMxB是PWMxA的互补信号,实际可以只看PWMxA。
PWM的封锁是使用AQCSFRC寄存器强制所有PWM为低电平,同样是载波过零生效。
实际测试如下图所示:

其中通道07信号SYNCO为载波过零点,通道06为开启PWM的时刻,剩下00-05为6路PWM信号。开启PWM信号以后,在下个周期的过零点,shadow register加载到active register,PWM正式开启。
问题主要出在第一个开关周期,实际为了测试,将首个开关周期的占空比设置为0.5,在使能PWM信号的下一个周期载波过零点,三个PWMxA信号没有按照预期拉高,导致PWMxA信号的占空比丢失了一半,如上图中的三个红框。
除了第一个开关周期,剩下的就全部正常了。想咨询下造成这种情况的原因以及相关解决方案。



