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.

[参考译文] TMS320F280049:如何在周期结束时关闭 PWM 输出 A 和 B

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1637766/tms320f280049-how-to-turn-off-pwm-outputs-a-and-b-on-the-end-of-the-period

器件型号: TMS320F280049

我使用 PWM1 输出作为互补输出:


EPwm1Regs.DBCTL.BIT.OUT_MODE = DB_FULL_ENABLE;
EPwm1Regs.DBCTL.BIT.POLSEL = DB_ACTV_HIC;
EPwm1Regs.DBCTL.BIT.IN_MODE = DBA_ALL;


我正在寻找一种在 PWM 周期结束时关闭两个输出的方法。 关闭意味着两个输出都会变为低电平。 然后、当它们需要在周期开始时再次导通时(根据设置的 CMPA 提供互补输出)。
无法使用 AQCSFRC 寄存器关闭、因为这种情况发生在死区模块之前。 这就是导致输出 A 为低电平但输出 B 为 HI 的原因、无论我如何在 AQCSFRC.CSFB 中设置它。

我当前正在使用 TZCLR.bit.OST = 1U 关闭两个输出、但我需要将其与 PWM 周期同步、而不会消耗 CPU 时间。 有这样的解决方案吗?

感谢你的帮助。

此致

Martin

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

    尊敬的 Martin:

    正确 — AQCSFRC 在死区模块之前工作、因此不能使用它强制两个输出为低电平。 跳闸区模块位于信号链中的死区之后、这就是 OST 方法实际上会强制两个输出正确低电平的原因。

    问题只是同步。 有一些替代方案。 如果您不愿意使用 CPU 时间(例如 SW/ISR 实现)、则可以考虑硬件替代方案 、例如通过 GPIO→输入 XBAR 实现的 CBC 跳闸(无 ISR,周期同步导通)。 在这里、您可以通过输入 XBAR、将软件控制的 GPIO 作为逐周期 (CBC) 跳闸路由到 TZ 引脚。 CBC 跳闸每个周期自动清除。 请告诉我、这类工具是否可用于您的用例。

    此致、

    Allison

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

    尊敬的 Allison:

    这是一个有趣的想法,但我不理解 CBC 将如何帮助我这个。 CBC 与 OST 一样、立即关闭 PWM、并且与周期不同步。 此外,它在没有我干预的情况下每一个新的时期被清除。 我想在需要时重新开启输出。

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

    尊敬的 Martin:

    我建议使用器件发出的另一个信号作为跳闸源(您可以与 ePWM 同步、例如与 PRD 同步的另一个 PWM)、前提是您可以这样做并且与目标一致(如果我可能有误解,请纠正我)。  

    对于 CBC 和这样的硬件跳闸源、您不需要任何 CPU 周期来在周期内关闭 PWM,也不需要在新周期开始时再次将其打开 — 所有这些都是预先配置的。  

    此致、

    Allison

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

    谢谢、这当然奏效。 我要尝试一下。