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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/943899/tms320f28075-hrpwm-not-behaving-as-expected

器件型号:TMS320F28075

您好!

我的客户使用 HRPWM 输出占空比 PWM 来驱动降压控制器的高侧。

理论上、输出电流应与降压转换器的占空比成正比。 通过查看电流、我们可以看到生成的 PWM 占空比。  

我们无法使用示波器来测量占空比、因为分辨率不足以看到如此小的占空比变化。

我们得到以下结果:

预期占空比 占空比增量 CMPA CMPAHR 测量的电流 预期电流 TBPRD
0.215279 129. 10752 1 1 600
0.215579 0.003. 129. 22528 1.1. 1.2. 600
0.215879 0.003. 129. 34560. 1.2. 1.4. 600
0.216179. 0.003. 129. 46336. 1.3. 1.6. 600
0.216479 0.003. 129. 58112 1.4. 1.8 600
0.216779 0.003. 130 4352 2. 2. 600

CMPA 递增1时、电流始终会有较大的跳变。

设置如下所示、自动转换被启用。

EPWM1Regs.CMPA.All=(uint32)((float) DutyToCmpCst*(dutycycle));

DutyToCmpCst=TBPRD<<16=600*65536。

占空比从0.215279跳至0.215579:波形为平均电流

占空比从0.215579跳至0.215879:

占空比从0.215879跳至0.216179:

占空比从0.216179跳至0.216479:

占空比从0.216479跳至0.216779:

因此、我们怀疑占空比没有像我们预期的那样增加、但我们不知道哪里有问题。

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

    这是在 PRD 向上-向下计数模式中?

    NIMA

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

    是的、是的、它是向上计数和向下计数模式。

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

    我在您的代码中看到您也在使用死区模块。 我将查看我是否可以在代码中发现问题。

    您能否向我发送一个包含配置的.c 文件? 或者在这里发布代码块?

    NIMA

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

    NIMA、

    谢谢。 我已经向您发送了.c 文件。

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

    从您的 c 代码开始、在 HRPWM CTR 向上/向下计数模式下、您必须在 CTR=ZRO 和 PRD 时使用影子加载模式。

    NIMA

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

    NIMA、

    您是不是说我们应该在 CTR=ZRO 和 PRD 上都使用影子加载模式、而不仅仅是 PRD?

    为什么?

    您是否使用我们的相同配置进行了测试、是否可以重复相同的结果?

    谢谢。

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

    好的、在查看整个代码后、我发现在设置中唯一不正确的地方是:

    1.卷影加载模式的向上/向下计数:

    (* ePWM[n]).cmPCTL.bit.LOADAMODE = CC_CTR_PRD;
    (* ePWM[n]).cmPCTL.bit.LOADBMODE = CC_CTR_PRD; 

    这些必须为 CC_CTR_zero_PRD。

    2.对于 HRPWM、您需要:

    (* ePWM[n]).HRCNFG.bit.EDGMODE = HR_FEP;
    (* ePWM[n]).HRCNFG.bit.CTLMODE = HR_CMP;
    (* ePWM[n]).HRCNFG.bit.HRLOAD = HR_CTR_PRD; 

    边沿模式需要是上-下模式中的两个边沿: HR_BEP

    HRCNFG CTLMODE 正确。

    HRLOAD 必须再次为: HR_CTR_zero_PRD

    您能否在设置上测试此项?

    如果没有、我可以在我的设置上运行这个代码、并将其与下面的 HRPWM 代码进行比较、以查看导致跳转的设置是什么不同的。

    ePWM_setEmulationMode (ePWM[j]、ePWM_emulation_free_run);
    
    //
    //设置 TBCLK
    //
    ePWM_setTimeBasePeriod (ePWM[j]、period-1);
    ePWM_setPhaseShift (ePWM[j]、0U);
    ePWM_setTimeBaseCounter (ePWM[j]、0U);
    
    //
    //初始设置占空比50%
    //
    HRPWM_setCounterCompareValue (ePWM[j]、HRPWM_COUNTER_COMPARE_A、(周期/2 << 8)+ 1);
    HRPWM_setCounterCompareValue (ePWM[j]、HRPWM_COUNTER_COMPARE_B、(周期/2 << 8)+ 1);
    
    
    //
    //设置计数器模式
    //
    ePWM_setTimeBaseCounterMode (ePWM[j]、ePWM_COUNTER_MODE_UP_DOWN);
    ePWM_DisablePhaseShiftLoad (ePWM[j]);
    ePWM_setClockPrescaler (ePWM[j]、
    ePWM_CLOCK 分频器_1、
    ePWM_HSCLOCK_DEVIDER_1);
    ePWM_setSyncOutPulseMode (ePWM[j]、ePWM_SYNC_OUT_PULSE_DISABLED);
    
    
    //
    //设置隐藏
    //必须为 CTR =(ZER & PRD)
    //
    ePWM_setCounterCompareShadowImage LoadMode (ePWM[j]、
    ePWM_COUNTER_COMPARE_A、
    ePWM_COMP_LOAD_ON_CNTR_zero_period);
    ePWM_setCounterCompareShadowImage LoadMode (ePWM[j]、
    ePWM_COUNTER_COMPARE_B、
    ePWM_COMP_LOAD_ON_CNTR_zero_period);
    
    //
    //设置操作
    //
    
    ePWM_setActionQualifierAction (ePWM[j]、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 高电平、
    ePWM_AQ_output_on_timebase_up_CMPA);
    ePWM_setActionQualifierAction (ePWM[j]、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 低电平、
    ePWM_AQ_output_on_timebase_down_CMPA);
    
    ePWM_setActionQualifierAction (ePWM[j]、
    ePWM_AQ_OUTPUT _B、
    ePWM_AQ_OUTPUT 高电平、
    ePWM_AQ_output_on_timebase_up_CMPB);
    ePWM_setActionQualifierAction (ePWM[j]、
    ePWM_AQ_OUTPUT _B、
    ePWM_AQ_OUTPUT 低电平、
    ePWM_AQ_output_on_timebase_down_CMPB);
    
    
    HRPWM_setMEPEdgeSelect (ePWM[j]、HRPWM_CHANGE_A、HRPWM_MEP_CTRL_RISTing_and_FALLING_EDGE);
    HRPWM_setMEPControlMode (ePWM[j]、HRPWM_CHANGE_A、HRPWM_MEP_Duty_Period_CTRL);
    
    //
    //设置隐藏
    //必须为 CTR =(ZER & PRD)
    //
    HRPWM_setCounterCompareShadowImage 事件(ePWM[j]、HRPWM_CHANGE_A、HRPWM_LOAD_ON_CNTR_ZERO _PERIOD);
    
    HRPWM_setMEPEdgeSelect (ePWM[j]、HRPWM_CHANGE_B、HRPWM_MEP_CTRL_Rising 和_FALLING_EDGE);
    HRPWM_setMEPControlMode (ePWM[j]、HRPWM_CHANGE_B、HRPWM_MEP_Duty_Period_CTRL);
    
    //
    //设置隐藏
    //必须为 CTR =(ZER & PRD)
    //
    HRPWM_setCounterCompareShadowImage 事件(ePWM[j]、HRPWM_CHANGE_B、HRPWM_LOAD_ON_CNTR_ZERO _PERIOD);
    
    HRPWM_enableAutoConversion (ePWM[j]);
    
    //
    //打开高分辨率周期控制,以使负荷在两个边沿上获取 HR。
    //
    
    HRPWM_enablePeriodControl (ePWM[j]);
    HRPWM_DisablePhaseShiftLoad (ePWM[j]); 

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

    NIMA、

    正如您所说,我们已尝试设置:但问题仍然存在。

    1.卷影加载模式的向上/向下计数:

    1
    2.
    (*ePWM[n]).CMPCTL.bit.LOADAMODE = CC_CTR_PRD;
    (*ePWM[n]).CMPCTL.bit.LOADBMODE = CC_CTR_PRD;

    这些必须为 CC_CTR_zero_PRD。

    边沿模式需要是上-下模式中的两个边沿: HR_BEP

    HRCNFG CTLMODE 正确。

    HRLOAD 必须再次为: HR_CTR_zero_PRD

    1.我们需要您的帮助来找出问题的原因。

    2.此外、您能否解释我们为什么应该使用 CC_CTR_zero_PRD、而不是仅使用 PRD 或仅使用零?

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

    我正在设置硬件以在 F2837xD 上运行代码、因为它具有相同的 ePWM 模块。

    在高分辨率模块中使用递增/递减计数的 TBCTR 时、必须使用 ZERO PRD 的影子加载模式。 CMPx 寄存器内的值具有另一层内部阴影、该阴影必须在 zero_PRD 处进行内部更新(不是由用户完成)。  

    NIMA

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

    Howard、

     

    1. 是的、未使用 HRPWM_CONFIG。
    2. 是的、使用 PWM_1chHiResUpDwnCnt_CNF。

    当使用 TBCTR 向上/向下模式并且您想要使用占空比控制时、您必须具有以下配置:

     

    边沿模式

    控制模式占空比(事实上 TRM 只显示“这是占空比或周期控制模式”),这是正确的。 它说占空比、但它实际上是占空比和周期。

    影子模式始终(PRD 和零)必须执行此操作。 如果不是这样、ePWM 的内部逻辑将不会正确运行。

     

    占空比/周期控制将为您提供对周期的 HR 模式访问,对于占空比控制,CMPAHR Increase 部分移动一个边沿(PRD 之前的上升沿),靠近 PRD,同时将下降沿从 PRD 移开。 因此、它要么增加您的占空比、要么降低您的占空比、但将两个边沿彼此靠近或彼此远离。

     

    Howard、可能我为您创建的三个示例可以帮助您了解所需代码的设置。

     

    您能否查看以下三个示例、或让客户查看以下三个示例?

     

    Ex1为递增计数模式。

    EX3是计数器递增/递减模式、显示周期控制。

    Ex4是计数器递增/递减模式下的占空比控制。

     

    Nimae2e.ti.com/.../hrpwm_5F00_ex1_5F00_duty_5F00_sfo.ce2e.ti.com/.../hrpwm_5F00_ex3_5F00_prdupdown_5F00_sfo.ce2e.ti.com/.../hrpwm_5F00_ex4_5F00_duty_5F00_updown_5F00_sfo.c

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

    Howard、

    您是否能够查看上述内容?

    您能告诉我上面的任何示例/注释是否帮助您找到了问题吗?

    从上面的示例之一开始、您能否向我发送一个包含更新内容的示例 C 文件、以便我可以检查我的设置以查看问题是否仍然存在?

    NIMA

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

    Howard、

    我们如何处理这个问题? 接下来我可以为什么提供帮助? 客户是否尝试过我发送的示例?

    NIMA

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

    Howard、

    我们如何处理这个问题?

    NIMA

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

    NIMA、

    我们已经尝试过您提供的示例、但问题仍然存在。

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

    在我的示例中、HR 负荷没有按预期变化? 我已经验证了示波器上 HR 占空比的变化。  

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

    Howard、

    我认为、如果客户使用了我的经验证的示例、并且电流测量值仍然存在跳变、那么它必须来自信号链中的其他位置。 如果可以、请客户将示波器连接到 ePWM 输出 GPIO、并查看值如何变化以及 HRPWM 信号如何变化。 我已验证所有值均已被扫过、并跳过预期的 HR 值。

    NIMA

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

    NIMA、

    如何测量 HRPWM 信号变化、由于高分辨率部件变化非常小、因此很难观察占空比变化。

    您是否使用短周期占空比进行测试、从而使占空比变化相对容易观察?

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

    要查看变化、请在上升沿触发示波器、然后在下降沿开启示波器、在切换 CMPx 值时尽可能接近您看到的变化。 每次我更改 CMPx 值时、我可以看到 MEP 换算系数跳转。

    但您必须在一个边沿触发示波器、然后在另一个边沿放大。

    NIMA