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.

[参考译文] TMS320F28035:TMS320F28035 PWM 问题:比较更新前最后一个周期的持续时间不正确

Guru**** 2614265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/693841/tms320f28035-tms320f28035-pwm-issue-the-duration-of-last-period-before-compare-update-is-not-correct

器件型号:TMS320F28035

您好!

我想使用 ePWM1-3来生成3 个互补 PWM、但遇到了一个问题。

我的配置是:PWM 频率为50kHz(20us /周期),并将占空比从20%->80%->20%更改为20%。

但我发现 比较更新之前的最后一个周期的持续时间不正确。 通常、持续时间为20us、但最后一个持续时间仅为16us。

波形如下所示:

 

源代码复制自 TI 参考手册- TMS320x2802x、2803x Piccolo 增强型脉宽调制器(ePWM) Module.pdf、我只需修改 TBPRD。

根据我的理解、启用影子模式后、只有当 TB 计数器变为零时、比较才会更新。 持续时间始终为20us。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    文森特
    是的、这就是影子模式的工作方式。 请在运行初始化代码后读回您的 ePWM 配置。
    影子模式是否处于活动状态?

    此致、
    Cody
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我导出 ePWM1设置、似乎一切正常。

    R ePWM1_TBCTL 0x0000000F 0x0012
    R ePWM1_TBSTS 0x0000000F 0x0001
    R ePWM1_TBPHS 0x0000000B 0x00000000
    R ePWM1_TBCTR 0x0000000F 0x0000
    R ePWM1_TBPRD 0x0000000F 0x0258
    R ePWM1_TBPRDHR 0x0000000F 0x0000
    r ePWM1_CMPCTL 0x0000000F 0x0000 -->通过将 bit 4和 bit 6设置为零,已启用影子模式
    R ePWM1_CMPA 0x0000000B 0x01C20000
    R ePWM1_CMPB 0x0000000F 0x0000
    R ePWM1_AQCTLA 0x0000000F 0x0060
    R ePWM1_AQCTLB 0x0000000F 0x0000
    R ePWM1_AQSFRC 0x0000000F 0x0000
    R ePWM1_AQCSFRC 0x0000000F 0x0000
    R ePWM1_DBCTL 0x0000000F 0x000B
    R ePWM1_DBRED 0x0000000F 0x000A
    R ePWM1_DBFED 0x0000000F 0x000A
    R ePWM1_TZSEL 0x0000000F 0x0000
    R ePWM1_TZDCSEL 0x0000000F 0x0000
    R ePWM1_TZCTL 0x0000000F 0x0000
    R ePWM1_TZEINT 0x0000000F 0x0000
    R ePWM1_TZFLG 0x0000000F 0x0000
    R ePWM1_TZCLR 0x0000000F 0x0000
    R ePWM1_TZFRC 0x0000000F 0x0000
    R ePWM1_ETSEL 0x0000000F 0x0009
    R ePWM1_ETPS 0x0000000F 0x000F
    R ePWM1_ETFLG 0x0000000F 0x0001
    R ePWM1_ETCLR 0x0000000F 0x0000
    R ePWM1_ETFRC 0x0000000F 0x0000
    R ePWM1_PCCTL 0x0000000F 0x0000
    R ePWM1_HRCNFG 0x0000000F 0x0000
    R ePWM1_HRPWR 0x0000000F 0x0000
    R ePWM1_HRMSTEP 0x0000000F 0x0000
    R ePWM1_HRPCTL 0x0000000F 0x0000
    R ePWM1_TBPRDM 0x0000000B 0x02580000
    R ePWM1_CMPAM 0x0000000B 0x01C20000
    R ePWM1_DCTRIPSEL 0x0000000F 0x0000
    R ePWM1_DCACTL 0x0000000F 0x0000
    R ePWM1_DCBCTL 0x0000000F 0x0000
    R ePWM1_DCFCTL 0x0000000F 0x0000
    R ePWM1_DCCAPCTL 0x0000000F 0x0000
    R ePWM1_DCFOFFSET 0x0000000F 0x0000
    R ePWM1_DCFOFFSETCNT 0x0000000F 0x0000
    R ePWM1_DCFWINDOW 0x0000000F 0x0000
    R ePWM1_DCFWINDOWCNT 0x0000000F 0x0000
    R ePWM1_DCCAP 0x0000000F 0x0000

    仍然不知道为什么最后一个周期不正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是预期的。 请记住、某些低电平时间实际上是 CMPA 上上升沿发生之前 PWM 周期的一部分。 由于您处于向上/向下计数模式、因此它是一个对称波形、 每个 PWM 开关周期脉冲每侧的低电平时间相等。

    如果您增加占空比、CMPA 小于20%占空比、因此在增大占空比时、波形的低部分(20%占空比的末尾和80%占空比的开始)将缩短 (在上升沿之前的当前周期内减少计数)。 当您从80%转换回20%时、我还希望您看到较低的部分。

    查看此情况的最佳方法是设置另一个与此 PWM 同步的 PWM。 在零和周期上切换 PWM 输出、以便您可以清楚地看到这些点在 PWM 周期中的位置。

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

    啊、我明白了。 你的是对的。 当从80%转换回20%时、较低的部分会更长。

    那么、如果我更改为向上计数模式、那么这种现象应该消失、对吧?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、如果它处于向上计数模式、则每个上升沿之间的时间是恒定的(等于周期)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在增-减模式下、每个连续周期导通时间中间之间的时间是恒定的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    文森特

    无论使用哪种模式、当您更改占空比或频率时、PWM 都会失真。 这不是 C2000、只是改变波形的一个事实。 当占空比恒定为20%时、您可以在波形中的任何给定点为周期设置光标、并看到20%的净占空比。 无论您如何处理、当您转换到任何其他占空比并执行相同的练习时、都会有一个到下一个周期的非完美转换。 这不会影响大多数应用程序、但这是由您根据系统确定的。

    您可以通过更改计数模式来更改失真所在的位置、但它仍将位于某个位置。 您还可以查看在多个 PWM 开关周期内转换到80%的情况,例如20->40>60>80%,这可能会降低对系统的影响。

    此致、
    Kris