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.

TMS320F280049C: 请问在使能Rising Edge Delay和Falling Edge Delay后我是不是就不能对epwm的cmpa和cmpb进行独立赋值了

Part Number: TMS320F280049C
Other Parts Discussed in Thread: SYSCONFIG

在sysconfig中我是如此配置的

下面是生成的db代码

EPWM_setDeadBandDelayPolarity(myEPWM1_BASE, EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_LOW);
EPWM_setDeadBandDelayPolarity(myEPWM1_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);
EPWM_setDeadBandDelayMode(myEPWM1_BASE, EPWM_DB_RED, true);
EPWM_setRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_RED_LOAD_ON_CNTR_ZERO);
EPWM_disableRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);
EPWM_setDeadBandDelayMode(myEPWM1_BASE, EPWM_DB_FED, true);
EPWM_setFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_FED_LOAD_ON_CNTR_ZERO);
EPWM_disableFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);

现在我需要完成对某个epwm的cmpa和cmpb的独立赋值

EPwm1Regs.CMPA.bit.CMPA = (uint16_t)CCRdata;
EPwm1Regs.CMPB.bit.CMPB = -(uint16_t)CCRdata;

EPwm2Regs.CMPA.bit.CMPA = -(uint16_t)CCRdata;
EPwm2Regs.CMPB.bit.CMPB = (uint16_t)CCRdata;
if(EPwm1Regs.CMPA.bit.CMPA<=0)
{
EPwm1Regs.CMPA.bit.CMPA = 0;
}
if(EPwm1Regs.CMPB.bit.CMPB<=0)
{
EPwm1Regs.CMPB.bit.CMPB = 0;
}
if(EPwm2Regs.CMPA.bit.CMPA<=0)
{
EPwm2Regs.CMPA.bit.CMPA = 0;
}
if(EPwm2Regs.CMPB.bit.CMPB<=0)
{
EPwm2Regs.CMPB.bit.CMPB = 0;
}

连接上逻辑分析仪后发现并未对cmpb进行独立赋值

cmpb跟随我的cmpa的赋值了

  • 您好,

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

  • CMPA通常用于RED(上升沿触发),CMPB用于FED(下降沿触发)。若未明确配置死区输入源,此时直接操作CMPA/CMPB可能被死区逻辑覆盖。

    此外,禁用了这个寄存器加载(EPWM_disableRisingEdgeDelayCountShadowLoadMode),导致CMPA/CMPB的写入可能未同步到实际工作寄存器。

    可以从以上两方面考虑修改程序。