《Thread 中讨论的其他器件: LAUNCHXL-F280049C》
工具/软件:
您好:
我使用的是 LaunchXL-F28P65X、我配置了 2 个 ePWM、我想通过带有 CAN 消息的 C#接口打开和关闭它们。
我在 LaunchXL-F280049C 上做了类似的设置,使用一次性行程,强制它这样:
ePWM->TZFRC.bit.OST = 1;//触发 PWM
ePWM->TZCLR.bit.OST = 1;//清除跳闸 PWM
它运行得很好。
我在 65x 上尝试相同的方法、 但它无法可靠工作、有时会按预期工作、有时不会关闭 PWM。
我阅读了关于二极管仿真、最小死区和非法组合逻辑子模块的内容、并使用 AQCSFRC 中的“连续软件强制“寄存器找到了另一种解决方案。
ePWM->AQCSFRC.bit.CSFA = 1;// 01b =强制低电平
ePWM->AQCSFRC.bit.CSFB = 1;// 01b =强制低电平
和
ePWM->AQCSFRC.bit.CSFA = 0; //重新开启 PWM
ePWM->AQCSFRC.bit.CSFB = 0;
但这不适用于我们当前的 DB 设置、因为我处于高电平活动互补状态(EPWMxB 反转)。 因此、当我强制 EPWMxA 为低电平时、EPWMxB 变为高电平。
PWM->pstEPwmAddr->DBCTL.BIT.POLSEL = 0x2;
为此、我找到了另一种解决方案、即在使用 CSF 强制 ePWM 为低电平之前切换到高电平有效模式、并在 ePWM 重新导通之前切换回高电平有效互补模式。
ePWM->DBCTL.BIT.POLSEL = 0x0;
ePWM->AQCSFRC.bit.CSFA = 1;// 01b =强制低电平
ePWM->AQCSFRC.bit.CSFB = 1;// 01b =强制低电平
/////////////////////
ePWM->DBCTL.BIT.POLSEL = 0x2;
ePWM->AQCSFRC.bit.CSFA = 0; //重新开启 PWM
ePWM->AQCSFRC.bit.CSFB = 0;
这种解决方案似乎能按我们的需要发挥作用、但我不确定它是最佳方法。 有什么我遗漏的吗? 还是有更好的方法?
谢谢!
