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.

[参考译文] TMS320F280049C:如何反转16 ePWM 输出?

Guru**** 2524500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1187685/tms320f280049c-how-to-inverse-16-epwm-output

器件型号:TMS320F280049C

您好!

我的项目需要这个 MCU 16 ePWM 输出为负逻辑:高电平为 PWM 禁用;低电平为启用以驱动 MOSFET (电压电平 转换器导致这个问题、但只能通过 MCU 编程来解决)。 我想知道如何实现这一目标:

(1) 单元在上电复位后全部16个 PWM 处于高电平(或 HI)。

(2)在故障跳闸或软件强制停止后、将这些 PWM 设为高电平(不能使用 EPwm1Regs.AQCSFRC.ALL = 0x0A 等)

(3) 是否可以使用 CLB 来反向 PWM 输出?

非常感谢您的帮助。

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

    您可以使用 CLB、但什么会阻止您以不同的方式实现 ePWM 逻辑、从而使设置/清除操作相反?

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

    你好、Nima、

    感谢您的回答。 另一个问题:是否有足够的 CLB 资源来 反转16 PWM 信号?  我看到 TRM 只引用 EPWM1 ~ 4 (实例名称)。

    谢谢

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

    您只有4个 CLB 逻辑块。 每个 CLB 逻辑块都有自己的输入。 您无法使用其他4个 ePWM。 仅1-4到 CLB。 您可以使用 ePWM 执行任何所需的操作。 您不需要 CLB 进行反转。

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

    你好、Nima、

    我使用 DBCTL 对 PWM_A 和 B 对进行编程。  S0 = 1;S1 = 1;S2 = 1;S3 = S4 = S5 = S6 = S7 = 0。

    正常运行(PWM_A 或 B 低电平-> MOSFET 导通)是可以的。  

    要停止 PWM (强制  PWM_A 或 B 为高电平)、 请设置 EPwm1Regs.AQCSFRC.bit.CSFA = 2;设置 EPwm1Regs.AQCSFRC.bit.CSFB = 2。

    但是、它只能强制 PWM_A 为高电平、但 PWM_B 仍为低电平。  我想知道如何强制 PWM_A 和 B 都处于高电平。

    谢谢

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

    很抱歉、有问题不清楚。

    需要做的是强制 PWM_A 和 PWM_B 都为高电平。  但 EPwm1Regs.AQCSFRC.bit.CSFA  = 2; EPwm1Regs.AQCSFRC.bit.CSFB = 2。  只能强制 PWM_A 为高电平、 PWM_B 仍处于低电平。

    谢谢

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

    您有 TRIPZONE 模块。 触发区模块可以控制 A 和 B 输出并覆盖、因为它位于死区模块之后。

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

    你好、Nima、

     它应该起作用。  所以、我设置:(1) EPwm1Regs.TZSEL.bit.DCAEVT1 = TZ_ENABLE;(2) EPwm1Regs.TZCTL.bit.DCAEVT1 = TZ_FORCE_HI;然后让我们:.TZFRC.bit.DCAEVT1 = 1。 它显示 EPwm1Regs.TZFlG.bit.DCAEVT1为1。 但是、它仅 显示 PWM_A 为高电平。 PWM_B 拒绝变为高电平。

    谢谢、

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

    此外、对于 ePWM_B、我添加了 TZFRC.DCBEVT1 = 1 对于 DCBEVT1、设置和操作与上述 DCAEVT1相同(EPwm1Regs.TZCTL.bit.DCBEVT1 = TZ_FORCE_HI、等)。  结果没有任何变化。 是否有缺失?

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

    您是否为 B 操作配置了 TZCTL:

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

    你好、Nima、

    我执行了它、上次重播中显示了这一点。 请查看其调试值:

    但结果相同。 听起来 DBCTL 的设置(PWM_A 和 B 作为一个互补方)就是 这样。 不知道。  

    谢谢

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

    我认为死区模块不会导致这种情况。 TZ 应该能够覆盖所有内容。

    对于 TZCTL、将其他未使用的 DCBEVT2和 TZ2更改为"不执行任何操作"选项。

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

    你好、Nima、

    我明白了。 它现在可以工作了。

    非常感谢  你的帮助。

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

    太棒了! 确保为下一个有相同问题的人点击所有相关答案上的绿色"验证答案"按钮、以了解解决方案的路径。