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.

[参考译文] TMS320F28335:HRPWM 占空比变化问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/594080/tms320f28335-hrpwm-duty-cycle-change-problem

器件型号:TMS320F28335

我正在使用具有单面调制功能的 Delfino F28335 HRPWM 外设。 对于我的应用、我需要更改 PWM 载波。 即 TBPRD 寄存器中的值大约为150kHz 至300kHz、具体取决于外部控制消息。 这种变化我有一个问题、在少数情况下、其中一个 PWM 会停止工作。 我使用三个 HRPWM、通常在变化后牵引它们正常工作、其中一个每4-5次停止调制。 这种情况不规律地发生、似乎取决于当前的占空比值。 这一问题似乎还与以下事实有关:有问题的 PWM 具有比其他两个更高的高频成分、从而导致更快地更改占空比值。 占空比由基于 McBSP 使用 DMA 更新的同步填充整数阵列的中断过程加载。

代码片段–中断设置部分、ISR_Run 是一个汇编程序、用于计算和馈送 EPWM 和 HRPWM 占空比/边沿位置:

                  EALLOW;

                                     PieVectTable.EPWM1_INT =&ISR_Run;    //映射中断

                  EDIS;

                  PieCtrlRegs.PIEIER3.bit.INTx1 = 1;                                 // PIE 电平启用、Grp3 / Int1

                  EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRL_CMPB;     // CMPB 事件上的 INT

                  EPwm1Regs.ETSEL.bit.INTEN = 1;                                                                        //启用 INT

                  EPwm1Regs.ETPS.bit.INTPRD = et_1st;                                         //在每个事件上生成 INT

 

//启用外设、全局 INT 和更高优先级的实时调试事件:

                  IER |= M_INT3;         //启用连接到 EPWM1-6 INT 的 CPU INT3:

                  EINT;                          //启用全局中断 INTM

                  ERTM;                        //启用全局实时中断 DBGM

 

PWM 载波值的变化目前只是简单的分配:

                  (* ePWM[1]).TBPRD =(prd);

                  (* ePWM[2]).TBPRD =(PRD);

                  (* ePWM[3]).TBPRD =(PRD);

                  (* ePWM[4]).TBPRD =(PRD);

                  (* ePWM[5]).TBPRD =(prd);

              (* ePWM[6]).TBPRD =(PRD);

 

为了消除这一问题,我应该做些什么? 也许应该在占空比改变之前重新配置一些 PWM 寄存器或执行 PWM 中断? 我已经做了一些不同的变通办法,但目前没有成功。

Pawel

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

    我写信告诉您、C2000团队成员已被分配到此帖子、应该很快回答。

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

    大家好、Pawel、

    可能发生的情况如下所示:
    您正在将300写入 PWM 的 TBPRD、它是500。  在这种情况下、如果您在 TBCTR 为454时写入新值、可能会出现问题。  计数器必须一直递增计数、直到它溢出(2^16)、返回0、然后在 PWM 再次按预期输出之前、计数器将重新计数到300。

    如果您的 PWM 输出不是直接相关的并且不需要同步、那么最简单的操作就是将 TBPRD 写入配置为影子化。  请参阅器件 ePWM 用户指南中的 TBCTL[PRDLD]。  
    http://www.ti.com/product/TMS320F28335/technicaldocuments#doctype6

    [如果您的 PWM 之间具有同步功能、则仍可以使事情正常工作、 您可能需要仔细考虑、以免发生潜在的干扰-您可能希望使用影子负载、还希望始终如一地使 PWM 周期写入与 PWM 计时器同步]

    希望这对您有所帮助!


    谢谢、
    Brett

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

    您好、Brett、

    感谢您提供了富有洞察力的答案、我将在我的项目中查看它并返回结果。

    此致、Pawel