您好!
我有一个解决方案、使用3个 ePWM 模块生成3个具有相同频率和相同占空比的 PWM 信号。 ePWM 模块配置为通过以下方式相互相移:
- 相对于主同步、ePWM8没有相移
- ePWM6具有相对于 ePWM8的8个时钟相移
- ePWM4相对于 ePWM6具有16个时钟相移
ePWM8配置为具有高分辨率。
所有3个 ePWM 模块的其余配置是相同的。 唯一的区别是上述相位。
EPwmxRegs.TBPRD = 224U;
EPwmxRegs.CMPB = 112U;
EPwmxRegs.TBPHS.half.TBPHS =相位;
EPwmxRegs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwmxRegs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwmxRegs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwmxRegs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwmxRegs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwmxRegs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwmxRegs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwmxRegs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwmxRegs.CMPCTL.bit.LOADAMODE = CC_CTR_PRD;
EPwmxRegs.CMPCTL.bit.LOADBMODE = CC_CTR_PRD;
EPwmxRegs.AQCTLB.bit.ZRO = AQ_SET;
EPwmxRegs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwmxRegs.AQCTLB.bit.PRD = AQ_NO_ACTION;
在正常运行期间、一切都运行良好。 但是、我的目的是在运行时更改频率和占空比。 为此、我将使用当 ePWM4 TBCTR = 0时触发的 ISR。 在 ISR 内、我将更改所有 ePWM 模块的 TBPRD 和 CMPB 值。 在禁用相移的情况下、功能运行良好-我可以看到所有3个信号的频率都发生了变化。 但是、如果我启用相移、那么我会在 ePWM8上看到100%占空比、对于 ePWM4和 ePWM6、频率保持恒定、如初始配置所定义的那样、在~401kHz。
根据我从初始应答中的理解、更改频率应与启用相移时在周期内更改 TBPRD 值一样简单。
我还尝试了不同的 ISR 触发器、例如使用 ePWM6和 ePWM8时 TBCTR =0、TBCTR == PRD。
您有什么想法吗? 我们将不胜感激。
期待您的回复、并提前感谢您!
此致、
LEV