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.

[参考译文] TMS320F2809:如何实时锁定 PWM?

Guru**** 2342960 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/590781/tms320f2809-how-to-lock-on-pwm-in-real-time

器件型号:TMS320F2809

我使用 F2809 ePWM 来控制4个开关。  它是 UP_DOWN 计数模式、在 zero_period 上加载。  我将使用2个 PWM 通道、例如 ePwm1a、ePwm1b 用于2个开关、ePwm2a 和 ePwm2b 用于2个其他开关、总共4个。  我正在尝试在特定时间段锁定 PWM 通道的状态(如所示、Pwm1a 在整个周期中处于开启状态、而 Pwm1b 在整个周期中处于关闭状态)。  延迟必须绝对最小化、即使在很短的时间内、也无法让它们改变状态。  下面是我的代码看起来的样子。

问题是、在初始化和某些边缘情况下、我会遇到一些意外行为。  我在阅读 ePWM 参考指南 spru791f.pdf、在第2.4.4节中、它说只将介于1和 TBPRD-1之间的值加载到 CMPA 中。  我还应该如何根据正弦波的值锁定 PWM 端口?

_iq 正弦波;

if (sinewave >_IQ(0))//命令**高于** 0
{
EPwm1Regs.CMPA.half.CMPA =_IQmpy (正弦波、TBPRD);//正弦波时间周期
EPwm2Regs.CMPA.half.CMPA = 0; //锁定 PWM 互补开/关
}
else //命令**低于**0
{
EPwm1Regs.CMPA.half.CMPA = 0; //锁定 PWM 互补开/关
EPwm2Regs.CMPA.half.CMPA =_IQmpy (正弦波、TBPRD);//正弦波时间周期 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    James、

    您是否了解过跳闸区域子模块? 它允许您强制 PWM 输出(低电平、高电平、切换或不起作用)。 它使用 TZ1至 TZ6作为输入。 通读该部分、并告诉我您是否认为这适用于您的应用。 ePWM 参考指南的第2.7节对此进行了说明

    此致、
    Cody