论坛

关于互补PWM程序的一点疑问

此问题已被解答
All Replies
  • 秀才396分

    在TI官方给出的电源套件-TIDM-1001 LLC的PWM_HB_LLC_2PHIL_SR.c里面有关于互补PWM的初始化程序,我感觉有问题,向大家请教下,请不吝指教。

    我只留下关键代码,其他的一些初始化代码略去

    void PWM_HB_LLC_2PHIL_SR(int16 n, int16 m, int16 period)//这里用的是EPWM1A和1B,所以n=1
    {

    (*ePWM[n]).TBPRD = period/2;

    (*ePWM[n]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;

    // Counter Compare Submodule Registers
    (*ePWM[n]).CMPA.bit.CMPA = 1; // Start with 50% duty (Avoid using CMP = 0)
    (*ePWM[n]).CMPB.bit.CMPB = period/2 - 1; // Start with 50% duty (Avoid using CMP = PRD)

    // Action Qualifier SubModule Registers//以下三行设定的是EPWM1A 50%占空比输出,没什么问题
    (*ePWM[n]).AQCTLA.bit.ZRO = AQ_CLEAR;
    (*ePWM[n]).AQCTLA.bit.CAU = AQ_SET;
    (*ePWM[n]).AQCTLA.bit.PRD = AQ_CLEAR;
    // xB AQ output is inverted by DB for RED on xB output//以下三行设定的是EPWM1B 50%占空比输出,我的问题就在这儿,感觉1B和1A同相位,而不是相位互补
    (*ePWM[n]).AQCTLB.bit.PRD = AQ_SET;
    (*ePWM[n]).AQCTLB.bit.CBD = AQ_CLEAR;
    (*ePWM[n]).AQCTLB.bit.ZRO = AQ_SET;

    }

    按照代码里的Action Qualifier设置,我觉得波形应该如下图所示

    这里是不是有什么问题,或者是我的理解错了

    C2000 MCU learner

  • 进士3800分

    是否有设置DBCTL中的POLSEL寄存器

    LiveSine

  • 秀才396分

    有(*ePWM[n]).DBCTL.bit.POLSEL = DB_ACTV_HIC;但是那个波形图是根据AQ画出来的,这里的DBCTL中的POLSEL寄存器有影响吗,感觉还是不是互补的

    C2000 MCU learner

  • 进士3800分

    这个就是选择为互补模式,在EPWM相关的手册中有提到,还有就是OUT_MODE是设置上升沿死区和下降沿死区是否启用的,IN_MODE是设置基准是由A决定还是B决定

    下图就是解释不通的POLSEL寄存器配置对波形的影响

    LiveSine

  • 秀才396分

    好的,感谢你,我再去看看文档,做下实验

    C2000 MCU learner

  • 秀才10分

     但是手册里还有这样一句话:The waveforms for these typical cases are shown in Figure 14-34. Note that to generate equivalent waveforms to Figure 14-34, configure the action-qualifier submodule to generate the signal as shown for EPWMxA. 所谓的图14-34就是你给出的图形。能不能这样理解,只要设置了死区的POLSEL为ActiveHIC,那么对EPWMxB的设置就会被忽略,系统直接按照EPWMxA的波形进行互斥输出。

  • 进士3800分

    是的,在这个情况下,EPWMxB不用配置也可以的,会直接按照EPWMxA的波形进行互斥输出

    LiveSine

  • 秀才615分

    重点是最后输出到引脚的信号逻辑关系,epwm文档里面有个信号逻辑图的,SPRUGE9E page 54