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.
在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的写入可能未同步到实际工作寄存器。
可以从以上两方面考虑修改程序。