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.
大家好,代码如下,我配置了PWM频率40kHz,上下计数模式,TBPRD=750。 CMPA=0,CMPB=750。 TBCLK=SYSCLK=60MHz。
void Initepwm2 ()
{
EPwm2Regs.TBPRD = 750;//40kHz
EPwm2Regs.TBPHS.Half.TBPHS = 0x0000;
EPwm2Regs.TBCTR = 0x0000;
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm2Regs.CMPA.Half.CMPA = 0;
EPwm2Regs.CMBB =750;
EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm2Regs.AQCTLB.bit.PRD = AQ_SET;
EPwm2Regs.AQCTLB.bit.CBD = AQ_CLEAR;
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;
EPwm2Regs.ETSEL.bit.inten = 1;
EPwm2Regs.ETPS.bit.INTPRD = ET_1st;
}
有了这样的代码,我应该总是对PWMA和PWMB输出都很低。
但事实是,我在PWMB上总是只能得到一次12.5us (=750TBCLK,这是PWM周期的一半)的高脉冲。 PWMA始终较低。
然后我更改了CMPA=50,波形如下所示。 可以看到,PWMB输出在TBCTR =0开始时变为高,并开始递增,当TBCTR =TBPRD时变为低
我已经检查 了EPwm2Regs.AQCTLB.bit.ZRO=00,这意味着当TBCTR =0时,PWMB上不应该有任何操作。
YELYE-PWMA,
蓝PWMB。
那么为什么PWMB上只有一个脉冲?
您好,Howard:
我不在办公室,所以我没有任何硬件可以尝试,但这很可能是由于第一个周期完成后卷影寄存器被加载(下一个计数器=0)。 您是否可以尝试强制执行同步事件或类似事件以触发阴影以进行活动负载? 这将取决于您的阴影配置要使用的适当事件。
此致,
克里斯
您好,Howard:
我正在准备一个板来尝试这个。 我们强烈建议使用阴影模式。 我将向您详细说明原因。
此致,
克里斯
您好,Howard:
我复制了该问题,并确定这是因为事件优先级。 请参考 表9。 ePWM User's Guide (ePWM用户指南)的UP-DOWN Count Mode (上行-下行计数模式)的action-Qualifier Event Priority (操作限定符事件优先级)
CMPA和CMBB事件的优先级高于TBCTR =0。 您已将通道A配置为在CMPA上清除并在TBCTR =0上设置。 在启动时,这两种情况都同时发生,因为CMPA=0。 由于CMPA具有更高的优先级,因此PWM输出被清除。 在通道B上,由于您已将CMPB=750设置为不存在优先级冲突,因此发生了TBCTR =0事件。
此致,
克里斯
我注意到了那张桌子。 它没有解释,因为当发生TBCTR =0事件时,我没有配置任何通道B输出更改。
我希望您注意到,通道A没有任何问题,只有通道B