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.

[参考译文] TMS320F28375S:当我更改 PWM PRD 值时、PWM 占空比中有一个周期的错误开关

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1476478/tms320f28375s-when-i-change-the-pwm-prd-value-there-is-an-incorrect-switch-in-the-pwm-duty-cycle-for-one-cycle

器件型号:TMS320F28375S

工具与软件:

我将 ePWM 频率设置为16kHz、然后将其切换至8kHz。

我在影子模式下设置 PRD 负载、 在影子模式下设置 CMPA 负载、并且 EPwmRegs.CMPCTL.bit.LOADAMODE = 0x02、在 CNT = ZERO 和 PRD 中加载 CMPA。

当 CNT=CMPAU 时、我将 ePWM 输出设定为高电平、当 CNT=CMPAD 时、输出为低电平。

我在16kHz 的中断内运行程序、然后在中断服务例程中更新 PRD 值和 CMPA 值。 我的 CMPA 值始终获取 PRD 值的一半。 代码的运行时序列大致如下图。所示

如果图像不清楚,让我解释一下: 顶行表示固定的中断触发时间(16kHz)。 下面的两个垂直箭头表示代码的近似执行位置:首先更改 PRD 值(从12500更改为6250)、然后计算新的 CMPA 值(从6250更改为3125)。 在两个箭头之前、PWM 波形为16kHz、占空比为50%。 在两个箭头后面、PWM 切换到占空比为50%的8kHz 波形。 第二行是计数器(CNT)值。 第三行是预期的 EPWM 波形。 第四行是示波器捕获的实际波形。

在代码执行开关的周期(箭头所在的周期)中、我设置了 PRD=12500、设置了 CMPA=0.5*PRD。 由于影子寄存器的作用、它们将在下一个周期中生效。 因此、在箭头所在的周期内、当 CNT=3125时、PWM 输出从低电平切换到高电平、当 CNT=6250时、我预计输出会 保持高电平、直到 CNT 回落到3125。 不过、我测得 ePWM 高电平时间是预期持续时间的一半、仅为25%、当 CNT = 6250时、看起来 PWM 输出为低电平。 为什么会发生这种情况?

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

    您好!

    发生这种情况很合理、因为周期和 CMPA 不会同时更新。 周期将首先更新至 PRD = 12500、而 CMPA 此时仍为 CMPA = 3125、这将导致25%的占空比。 处理可变频率时、有一个简单的解决方法。  

    应使用全局加载功能并在 CNT=ZERO 上全局加载这些功能。

    根据 TRM、启用该功能后、  对于所有启用了该模式的寄存器、从影子寄存器到活动寄存器的内容传输发生在同一事件中  由全局影子到活动加载控制寄存器(GLDCTL[GLDMODE])中的配置位定义。 这将解决您的问题。

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

    您好!

       我有一些我不明白的器件。  尽管我没有同时更新 CMPA 和 PRD、但这两个值都是在下一个 PWM 到达之前的中断时刻更新的。 这种时间差是否也会导致这种结果? 此外、您会说:"周期将首先更新至 PRD = 12500、而 CMPA 此时仍将为 CMPA = 3125、这会导致25%的占空比。" 如果是这种情况、我不应该得到75%的占空比呢? 从波形中可以看到、PWM 输出在 CMPAU 上确实从低电平变为高电平、但在 CNT=6250时会从高电平变为低电平、我觉得这很难理解。

       此外、我将尝试全局加载、看看它是否可以解决我的问题。

    谢谢。

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

    您好!

    使用变频时、建议使用全局加载机制、以确保从影子寄存器到活动寄存器的所有传输都在同一事件下发生。

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

    您好!

       该问题已通过您提到的全局加载模式解决。

    谢谢。