TMS320F280049: EPWM发波不正确

Part Number: TMS320F280049

您好,我在使用epwm模块时配置了EPWM1-5五路,他们的周期是相同的,且都与EPWM1同步(CNT=0时)。对EPWM1配置了一个中断,每三个周期触发一次,在中断函数内对EPWM2-5的AQ进行设置。具体的代码如下:

中断函数的配置,其中利用ConfigEpwm()函数对EPWM2-5的AQ进行设置

ConfigEpwm()函数如下:

目前出现的问题是,如果我把EPWM2的AQ和死区先配置,再配置EPWM3的AQ和死区,就会导致EPWM3、4、5发波不正确,具体的波形如下:(红色是中断函数中的GPIO翻转,以表明进入哪一次中断;黄色和蓝色分别是EPWM3A和EPWM3B。此处只看了EPWM3,此时EPWM4和5的波形和EPWM3一样)

而如果我先配置EPWM2的AQ和EPWM3的AQ,再配置EPWM2的死区和EPWM3的死区。此时可以得到正确的波形,波形如图所示。此时EPWM4和EPWM5的AQ和死区配置的代码可以随意放置顺序都不会出错。

  • 这是对应的错误波形

    这是对应的正确波形

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 您目前的问题是什么

  • 您好,我目前的问题是不知道为什么配置代码位置的差异会导致不同路epwm发波出错。因为配置的代码是没有改变的,只是在同一个函数中交换了DB和AQ寄存器的配置位置。

  • 我们再次查看一下,请等待我们的回复。

  • 在配置任何ePWM寄存器之前,您能确认TBCLKSYNC=0吗?那么,当设置完ePWM初始化后,TBCLKSYNC=1吗?
    如果您正在使用Device_init()函数,默认情况下,所有时钟/外围设备都已启用,这可能是您在初始化ePWM时看到此行为的原因。
    为ePWM2或ePWM3设置AQ然后DB的顺序不应影响输出。

  • 您好,请问我该怎么确定配置前后的TBCLKSYNC的值呢,有什么操作是可以去确保的吗。目前我又出现了新的问题,我在epwm1的中断里面对epwm4和5的CMPA和CMPB进行赋值(两个EPWM都和EPWM1同步),但是偶尔会出现出中断函数执行完后的第一二个周期EPWM发波不正确的情况(并非每次中断,间歇性出现)。但是我是十个周期进一次中断,后续8个周期的epwm的波形又是正常的,说明CPMA和CMPB的配置是对的,只是赋值前后可能出现了一点问题。

  • 在中断中配置epwm4和5的代码如下:

    void PWM_SetSR(int Dir, int Period, int Delay, int Width) { //设置开关时间
    switch(Dir) {
    case FORWARD: // 正向
    if(Delay >= 0) {
    EPwm4Regs.TBCTL.bit.PHSDIR = 0; // 同步方向:0->Count-Down[56滞后14]; 1->Count-Up[56超前14]
    EPwm4Regs.TBPHS.bit.TBPHS = Delay; //!!!!!!同类型的TBPHS寄存器改过,后面注意查
    EPwm5Regs.TBCTL.bit.PHSDIR = 0; // 同步方向:0->Count-Down[56滞后14]; 1->Count-Up[56超前14]
    EPwm5Regs.TBPHS.bit.TBPHS = Delay; //!!!!!!同类型的TBPHS寄存器改过,后面注意查
    }
    else {
    EPwm4Regs.TBCTL.bit.PHSDIR = 1;
    EPwm4Regs.TBPHS.bit.TBPHS = -Delay;
    EPwm5Regs.TBCTL.bit.PHSDIR = 1;
    EPwm5Regs.TBPHS.bit.TBPHS = -Delay;
    }
    EPwm4Regs.CMPA.bit.CMPA = Width;
    EPwm4Regs.CMPB.bit.CMPB = Period - Width;
    EPwm5Regs.CMPA.bit.CMPA = Width;
    EPwm5Regs.CMPB.bit.CMPB = Period - Width;
    break;

    default:
    break;
    }
    }

  • 问题波形如下图所示:

    其中黄色的波形和蓝色的波形分别对应epwm5a和epmw5b,二者驱动半桥的对管,红色波形是黄色波形驱动管的VDS。在错误发生时,蓝色波形的占空比突然增大(从时间上看似乎是配置的CAU关断变成了PRD关断),紧接着黄色驱动丢波,蓝色波形又提前开通。但后续又能正常发波。