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.

[参考译文] TMS320F28075:某些条件下的 HRPWM 异常

Guru**** 2616675 points

Other Parts Discussed in Thread: TMS320F28075, TMS320F28035

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/673864/tms320f28075-hrpwm-anomaly-under-certain-conditions

器件型号:TMS320F28075
主题中讨论的其他器件: TMS320F28035

大家好、

我遇到的 HRPWM 问题与 本主题中提到的问题类似。 我在 TMS320F28035 (ePWM 1类)和 TMS320F28075 (ePWM 4类)上都看到了这种情况。

此问题表现为 PWM 输出上出现不必要的干扰。  在实际应用中、我使用了许多外设、例如 ADC、ECAP、ECAN、SPI、CPU 计时器和中断、CLA 等。但我花了一些时间找到了最小可能的代码、这使我能够重现问题、这似乎只涉及 ePWM 外设。

下面的示波器屏幕截图显示了干扰。 它是通过在 TMS320F28035 controlCARD 上运行的小型程序实现的。

GPIO0上的黄色信号是 EPWM1A。 蓝色信号是使用 EPWM2A 生成的基准信号、其边缘配置为事件 CTR = PRD 和 CTR = ZRO。

首先、请注意我尝试过的事项:

  • ePWM 周期(TBPRD)和时钟速度(TBCTL[CLKDIV] TBCTL[HSPCLKDIV])似乎对问题没有任何影响。
  • 我已经尝试过使用和不使用自动转换功能、但它似乎没有改变任何问题。
  • 我已经尝试过使用 SFO ()函数的 MEP 后台校准,但似乎没有任何改变。
  • 我已经尝试使用内部振荡器和外部石英、但它不会改变任何问题。

用于重现问题的代码如下所示:

EALLOW;
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;
SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK = 1;

EPwm1Regs.TBCTL.bit.CTRMODE = 2;
EPwm1Regs.AQCTLA.bit = 1;CAU = 1;
EPwm1Regs.AQCTLA.bit.CAD = 2;
EPwm1Regs.TBPRD = 200;
EPwm1Regs.CMPA.half.CMPA = 50;
EPwm1Regs.CMPCTL.bit.LOADAMODE = 1;// PRD 上的负载= EPwm1Regs.HRCMS.CMPAD.CLUS.CLUS.CLUS.CLUS.CLP=










0
;EPwCMP1.THR1.TL.CLPAD.CLPAD.CLPAD.CLUS.CLPAD.CLPAD.CLPAD.1R1R1RGMES.CLP= 1;EPWCLPAD.CLPAD.CLPAD.CLPAD.CLP1.T1.T1.TL.R1CLPAD.CLPAD.CLPAD.CLPAD.CLPSRR = 1;EPWCLPAD.CLPAD.CLP1.T1.T1.T1.THR0.CLPAD.CLPAD.CLPAD.CLPAD.CLPAD.CLPAD.
EPwm1Regs.CMPA.half.CMPAHR =(200U << 8);
} 

该程序所做的就是在零值和非零值之间切换 CMPAHR。

只有当 ePWM 以向上向下计数(TBCTL[CTRMODE]= 2)运行并且微边沿位置逻辑控制下降边沿(HRCNFG[EDGMODE]= 2)并且 CMPAHR 负载事件在脉冲之外被编程(当 PWM 信号为0时)时、这个问题才会出现。

最后一种情况是因为我在两种配置中看到了问题:

  1. CTR=ZRO 为中心的脉冲(AQCTLA[CAU]= 1/AQCTLA[CAD]= 2 / HRCNFG[HRLOAD]= 1)
  2. CTR=PRD 为中心的脉冲(AQCTLA[CAU]= 2/AQCTLA[CAD]= 1/HRCNFG[HRLOAD]= 0)

此外、干扰的宽度似乎与 CMPAHR 的值相关、如下面的两张图片所示。 第一个是 CMPAHR 设置为130步、第二个是 CMPAHR 设置为230步。

 

 

这就是我目前掌握的所有信息、但如果您需要了解任何其他信息、请告诉我。

谢谢、

皮埃尔

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

    皮埃尔、我想看看这个。 您能否发送 CCS 项目、以便我将所有内容都与您的设置相匹配?

    NIMA

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

    你好、Nima、

    请参见随附的 CCS project.e2e.ti.com/.../HRPWM_5F00_GLITCH.zip

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

    我将在 F28379D 控制卡上进行测试、因为我们不再制造 f28075控制卡。

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

    这是一个 F28035项目、我在 F28035 controlCARD 上运行它、而不是在 F28075上运行。

    皮埃尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到 ePWM 在 CTR=ZERO 上加载影子寄存器、而 HRPWM 在 CTR=ZERO 和 CTR=PRD 上加载。 您能否在 CTR=ZERO 时尝试在 EPWM 和 HRPWM 负载下生成此代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Nima、

    我尝试了以下配置:

    EPwm1Regs.TBCTL.bit.CTRMODE = 2;
    EPwm1Regs.AQCTLA.bit.CAU = 1;
    EPwm1Regs.AQCTLA.bit.CAD = 2;
    EPwm1Regs.TBPRD = 200;
    EPwm1Regs.CMPA.Half.CMPA = 50;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;// CTR 上的负载= ZRO
    EPwm1Regs.HRPWR.bit.MEPOFF = 0;
    EPwm1Regs.HRCNFG.bit.EDGMODE = 2;
    EPwm1Regs.HRCNTL.bit.LOAD = 0;/ LOAD = 0 

    结果是没有干扰。

    另一方面、下一个配置会导致出现干扰:

    EPwm1Regs.TBCTL.bit.CTRMODE = 2;
    EPwm1Regs.AQCTLA.bit.CAU = 1;
    EPwm1Regs.AQCTLA.bit.CAD = 2;
    EPwm1Regs.TBPRD = 200;
    EPwm1Regs.CMPA.Half.CMPA = 50;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;// CTR 上的负载= ZRO
    EPwm1Regs.HRPWR.bit.MEPOFF = 0;
    EPwm1Regs.HRCNFG.bit.EDGMODE = 2;
    EPwm1Regs.HRCNFG.bit.LOAD = 1;PRD = 1;/ LOAD = 1 

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

    NIMA、

    请参阅下表、总结我可以在 F28035 controlCARD 上观察到的不同行为。

    AQCTLA[CAU]/AQCTLA[CAD] CMPCTL[LOADAMODE] HRCNFG[HRLOAD] 观察到的行为
    清除(1)/设置(2) CTR 上的负载= PRD (1) CTR 上的负载= PRD (1) 异常
    清除(1)/设置(2) CTR 上的负载= PRD (1) CTR 上的负载= ZRO (0) 好的
    清除(1)/设置(2) CTR 上的负载= ZRO (0) CTR 上的负载= PRD (1) 异常
    清除(1)/设置(2) CTR 上的负载= ZRO (0) CTR 上的负载= ZRO (0) 好的
    设置(2)/清除(1) CTR 上的负载= PRD (1) CTR 上的负载= PRD (1) 好的
    设置(2)/清除(1) CTR 上的负载= PRD (1) CTR 上的负载= ZRO (0) 异常
    设置(2)/清除(1) CTR 上的负载= ZRO (0) CTR 上的负载= PRD (1) 好的
    设置(2)/清除(1) CTR 上的负载= ZRO (0) CTR 上的负载= ZRO (0) 异常

    您是否能够重现此问题?

    谢谢、

    皮埃尔

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

    是的、我已经尝试了一些条件、我执行了"看到有害的脉冲"。 现在、在我调查问题时、您能否继续使用其中一个工作条件进行工作? 我怀疑这是一个已知条件、可以记录在案。

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

    NIMA、

    是的、一段时间以来、我一直使用其中一个工作条件作为变通办法。

    这些有害的脉冲在产生交叉传导时可能会导致大量损坏。

    此致、

    皮埃尔

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

    您在调查中是否取得了任何进展?

    谢谢、
    皮埃尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仍在进行中。 完成后、我将发布结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否尝试一下、让我知道您得到了什么结果?

    您可以设置其余操作吗? 例如、当不需要它们时、将它们设置为无操作或它们所需的实际状态。

    //动作限定符寄存器位定义*/AQCTL
    
    ZRO // 1:0操作计数器=零
    PRD // 3:2操作计数器=周期
    CAU // 5:4操作计数器=比较 A 递增
    CAD // 7:6操作计数器=比较 A 递减
    CBU // 9:8操作计数器=比较 B 递增
    CBD // 11:10操作计数器=比较 B 递减 

    我主要关注 ZRO 和 PRD。 请尝试将其设置为无操作、或在需要时将其拉高或拉低。

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

    问题出在 HRMSTEP。 您没有启用 AUTOCONV、也没有运行 SFO 来校准 HRPWM。 这决定了元素延迟以及 SYSCLK 周期中适合的元素数量。 如果选择了更多元素、则通过元素传播而延迟的边沿将在不需要的位置发生。

    您只需打开 AUTOCONV 即可快速修复。 但请花一些时间通读
    www.ti.com/.../spruge8e.pdf

    并查看中的示例代码
    http://dev.ti.com/tirex/#/

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

    NIMA、

    我已经使用 HRPWM 6年了、我非常了解数据表。 请注意我的第一条消息:

    • 我已经尝试过使用和不使用自动转换功能、但它似乎没有改变任何问题。
    • 我已经尝试过使用 SFO ()函数的 MEP 后台校准,但似乎没有任何改变。


    我将运行我随 autoconv 和 SFO 发送给您的代码、并向您发送示波器图片、以便您自己查看。

    皮埃尔

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

    NIMA、

    1. 在向上/向下计数模式中、我找不到用于占空比控制的 HRPWM 示例代码。 它们在哪里?
    2. 请查找随附的一个小型 CCS 项目、其中包含您要求的所有功能:AUTOCONV、SFO 和所有未使用的事件均按您的要求设置为零(无操作)。
    3. 您可以在示波器捕获中看到异常仍然是 present.e2e.ti.com/.../HRPWM_5F00_GLITCH_5F00_2.zip

    谢谢、

    皮埃尔

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

    皮埃尔

    我很困惑。 我在启用了 AUTOCONV 的情况下尝试了您发送给我的代码、但未出现异常。 我将再次尝试并分享结果。

    NIMA

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

    您是否在重现异常方面取得了任何进展?

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

    是的、这是使用 AUTOCONV 的代码和示波器的屏幕截图、没有异常。

    void main (void){
    initClock();
    initFlash();
    
    __EALLOW ();
    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;
    SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK = 1;
    
    EPwm1Regs.TBCTL.bit.CTRMODE = 2;
    EPwm1Regs.AQCTLA.bit.CAU = 1;
    EPwm1Regs.AQCTLA.bit.CAD = 2;
    EPwm1Regs.TBPRD = 200;
    EPwm1Regs.CMPA.half.CMPA = 50;
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; //影子模式
    EPwm1Regs.CMPCTL.bit.LOADAMODE = 2;// CTR 上的负载= PRD
    EPwm1Regs.HRPWR.bit.MEPOFF = 0;
    EPwm1Regs.HRCNFG.bit.EDGMODE = 2;
    EPwm1Regs.HRCNFG.bit.AUTOCONV = 1;
    EPwm1Regs.HRCNFG.bit.HRLOAD = 1;//在 CTR 上加载= PRD
    
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
    SysCtrlRegs.PCLKCR0.bit.TBCLKPA =
    
    
    
    
    1;(EPwCMRP.8
    
    )= 0.1nC);SYCMRCMRC.0<1;EP_RCMRCMRP.US.US.CLUS.R (<1);EP_RCMRCMRP.8)< EP_RCMRP.1nC (<1);EP_RCMH (EP1nC.0_RP.1nc.p_RP.1nC = 0.1nC);EP_RCMH (0.
    
    

    我还介绍了 AUTOCON、以展示不使用 AUTOCONV 或 MEP_SFO 库是如何导致问题的。

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

    NIMA、

    当我解释我的问题时、您要求我将我的 CCS 项目发送给您、我确实这样做了。 如果您认为已经证明异常现象已经消失、请将整个项目发送给我、而不仅仅是代码片段。

    到目前为止、我仍然确信即使启用了 AUTOCONV、也会发生异常。 我开始怀疑我们的设置可能有差异。 使用的是哪个部件? 它是 TMS320F28035吗? 如果是,它在 controlCARD 上吗? 您是否正在运行我发送给您的确切代码、或者您是否编写了自己的 CCS 项目?

    此外、您的示波器的带宽是多少?

    皮埃尔

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

    皮埃尔

    我已附加 CCS 项目。  e2e.ti.com/.../autoconv.zip

    我在集线站上使用 F28035控制卡。我使用100MHz、1GSamples/s 示波器。   

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

    谢谢! 我明天会再试一次。 我基本上拥有与您相同的硬件。

    皮埃尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对此进行了任何更新? 我很好奇、当我们使用相同的控制卡并使用相同的代码进行设置时、我们如何在这种类型的 Matter 上获得不同的结果。

    请在您运行代码后立即通知我、以便我们可以再次比较注释。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    皮埃尔

    我正在检查您的问题是否已使用我发送给您的示例 CCS 项目得到解决。 请告诉我问题是否仍然存在。

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

    我还没有时间进行测试。 我会随时向您发布。

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

    我再次测试了我发送给您的 HRPWM_GLITCH_2.zip 项目、我再次可以确认存在异常。 您是否确定在运行它时不更改任何内容?

    我还测试了您发送的项目。 您需要对其进行检查、因为您的代码从未向 HRMSTEP 寄存器写入换算系数、因此自动转换始终会产生零值。 因此、在这个示例中 HRPWM 永远无法正常工作。 请参阅数据表 SPRUGE8E 中的表7。

    我对问题可能是什么有了新的想法、但我需要测试其他一些东西。 您能否更正代码并再次进行测试?

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

    您是否找到了正确初始化 HRMSTEP 寄存器的时间来再次运行示例项目?

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

    我发现第一个非常重要的事情是 HRCNFG 必须配置为在上-下模式时在 CTR=0和 PRD 上加载。
    据此:
    e2e.ti.com/.../2558177

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

    我阅读了这条消息、但正如我在前面的消息中所解释的、在这种配置中、异常现象会出现。 但是、我处于一个特殊情况、因为我在向上/向下计数模式下使用 HRPWM、而不是用于周期控制、而是用于占空比控制。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    皮埃尔

    器件的运行频率是多少? 还有 EPWMCLK?

    下面是我在实验室中看到的内容:

    1.我们必须将 CMPAHR 值保持在每个粗略步进的最大 MEP 步进数以下(不使用自动转换)
    2.当我们处于向上向下计数模式时、HRPWM 负载必须同时在 CTR=0和 PRD 上发生。

    当我为 CMPAHR 使用低于115的值时、我发现不会发生异常。

    我将要求我们的系统团队为此提供帮助。 因为我认为 MEP 步进的数量远远大于115、所以我们应该能够使用更大的值。

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

    您好、Pierre、

    我刚刚完成了这个帖子、我相信我有一个解释和解决方案(尽管您已经找到/实施了它)。

     配置中的关键部分是 HR 边沿控制只应用于下降边沿(EDGMODE = 2)。

    当 AQ 设置在 CAD 匹配上"设置"输出并在"CAU"匹配上重置输出时、当计数器递增计数时、下降沿发生。 因此、HRLOAD 应该被配置为在0上加载。 我还会选择 LOADAMODE = 0来保持该周期的所有值同步、但这不是一个必要的条件。

    类似地、当 AQ 设置在 CAU 匹配时"设置"输出并在"CAD"匹配时重置输出时、当计数器递减计数时、下降沿发生。 因此、HRLOAD 应该被配置为在 PRD 上加载。  根据您的控制要求、LOADAMODE 可以是 PRD 或0。

    当 HR 边沿控制被应用于上升边沿和下降边沿时(EDGMODE = 3)、HRLOAD 应该被选择载入0或者 PRD。

    但愿这对您有所帮助。

    Hrishi

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

    Hrishi、您好!

    实际上、我尝试使这些值保持同步、因为同时更新 CMPA 和 CMPAHR 似乎是合乎逻辑的。  

    但是、在这种情况下、正是异常的出现方式:当我尝试同步它显示的值时。

    我一直在应用的变通办法是、不同步值、这样我就可以获得一些有用的东西。 CMPA 的更新需要在下一个上升沿之前发生、而 CMPAHR 的更新只需要在下一个下降沿之前发生。

    我仍然不知道为什么会出现异常、但我认为您的消息是对我的变通办法应该有效的确认。 您能否查看此消息所附的图表并确认我的理解是否正确?  

    谢谢、

    皮埃尔