大家好,代码如下,我配置了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上只有一个脉冲?


