This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28379D: EPWM1的TBPRD从影子寄存器加载方式实际效果与设置效果不一致

Part Number: TMS320F28379D


interrupt void UserISR(void)
{
    if(syncAdjEna == 1)
    {
        EALLOW;
        EPwm1Regs.TBCTL.bit.PRDLD = 0;                      //Enable shadow
        EPwm1Regs.TBCTL2.bit.PRDLDSYNC = 0;             //TBCTR = 0:shadow->active
        EPwm1Regs.TBPRD = 4166*2;
        EDIS;
        GpioDataRegs.GPBTOGGLE.bit.GPIO38 = 1;
        cnt = 15;
        syncAdjEna = 0;
    }
    if(cnt > 1)
    {
        if(cnt == 14)
        {
            EALLOW;
            EPwm1Regs.TBCTL.bit.PRDLD = 0;                      //Enable shadow
            EPwm1Regs.TBCTL2.bit.PRDLDSYNC = 0;
            EPwm1Regs.TBPRD = 4166;
            EDIS;
            GpioDataRegs.GPBTOGGLE.bit.GPIO38 = 1;
        }
        else if(cnt == 13)
        {
            GpioDataRegs.GPBTOGGLE.bit.GPIO38 = 1;
        }
        else if(cnt == 12)
        {
            GpioDataRegs.GPBTOGGLE.bit.GPIO38 = 1;
        }
        cnt--;
        if(cnt == 2) cnt = 0; 
    }
    PieCtrlRegs.PIEACK.all |= PIEACK_GROUP11;
}

目标:UserISR中断中增大EPWM1 TBPRD值(4166*2),下一次进UserISR中断再恢复为原值(4166)

配置基础:EPWM1计数器采用向上向下计数方式,TR=0和TR=PRD时触发EPWM1SOCA,SOCA触发ADC中断,ADCAINT1触发CLA中断,每两次CLA中断触发一次UserISR中断(频率24K,一个周期41.65us)并且翻转IO电平(以此电平作为过零点信号,波形为蓝色所示),UserISR中断里改变TBPRD前翻转另一个IO电平(波形为绿色所示), 配置为:

        EPwm1Regs.TBCTL.bit.PRDLD = 0;                      //Enable shadow
        EPwm1Regs.TBCTL2.bit.PRDLDSYNC = 0;             //TBCTR = 0:shadow->active

根据配置,效果应该是蓝色波形其中一个周期变长(时间为41.65*2us),但实际效果为其中两个周期变长(时间为62us,即为41.65us的1.5倍,看起来似乎TBPRD从影子寄存器加载时机并不是设置的零点,而是顶点,这是为什么?),如下图所示:

EPwm1Regs.TBCTL.bit.PRDLD设置为1,立即加载模式,波形是正常的:

请问为什么配置为过零点再从影子寄存器里加载TBPRD值效果不正确?应该如何配置?