需求:
在第N个周期任意时刻计算并更新第N+1个周期的占空比 ,同时使能PWM信号,希望第N+1个周期时PWM信号使能(连续增减计数,载波过零点开始计算)。
之前软件是2812的,利用EV模块的ACTRA和ACTRB两个寄存器实现脉冲同步开关,即要求在载波过零点使能比较器的行为,ACTRA和ACTRB是带shadow寄存器的,可以实现这样的功能,代码片段如下:
/#define ACTR_INIT_STATE ( \
COMPARE1_AH| \
COMPARE2_AL| \
COMPARE3_AH| \
COMPARE4_AL| \
COMPARE5_AH| \
COMPARE6_AL )
#define ACTR_FL_STATE ( \
COMPARE1_FL | \
COMPARE2_FL | \
COMPARE3_FL | \
COMPARE4_FL | \
COMPARE5_FL | \
COMPARE6_FL )
// 载波过零时生效
void EnablePWM(PWMGEN *p)
{
EvaRegs.ACTRA.all = ACTR_INIT_STATE;
}
// 载波过零时生效
void DisablePWM(PWMGEN *p)
{
EvaRegs.ACTRA.all = ACTR_FL_STATE;
}
目前代码移植到28335平台,ePWM通过AQCTLA和AQCTLB两个寄存器来定义比较匹配时的行为,实际使用中发现这两个寄存器不带shadow,设置以后马上生效,因此在第N个周期,软件设置完以后PWM就开始输出,而不是在第N+1个周期的载波过零点开始输出,如何才能达到同步开关PWM信号呢?即第N个周期的任意时刻使能PWM信号以后,信号到第N+1个周期的载波过零点才开始生效?之前2812的EV模块是可以做到这一点的,28335的ePWM模块是升级版,不会没有这个功能吧?