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.

[参考译文] TMS320F280049C:HRPWM 模式不工作,阴影模式设置为在 CTR=PRD 上加载

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1074535/tms320f280049c-hrpwm-mode-not-working-with-shadow-mode-set-to-load-on-ctr-prd

部件号:TMS320F280049C
“线程”中讨论的其它部件:C2000WARETMS320F28379D

使用 设置为在 CTR = PRD 上加载的阴影模式时,无法在 ePWM1上获得高分辨率输出。  我已经学习了 HRPWM_ex1_Duty_SFO C2000ware HRPWM 示例并进行了修改以证明这一点(代码粘贴在下面)。

我可以看到,当 HRPWM 阴影负载事件设置为 HRPWM_LOPM_ON_CNTR_ZERO 时,PWM 占空比输出上有一个精细的分辨率。 但是,对于  HRPWM_LOload_ON_CNTR_句 点 ,则没有。 这是已知限制吗?

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//#############################################################################
//
// FILE: hrpwm_ex1_duty_sfo.c
//
// TITLE: HRPWM Duty Control with SFO.
//
//! \addtogroup driver_example_list
//! <h1>HRPWM Duty Control with SFO</h1>
//!
//! This example modifies the MEP control registers to show edge displacement
//! for high-resolution period with ePWM in Up count mode
//! due to the HRPWM control extension of the respective ePWM module.
//!
//! This example calls the following TI's MEP Scale Factor Optimizer (SFO)
//! software library V8 functions:
//!
//! \b int \b SFO(); \n
//! - updates MEP_ScaleFactor dynamically when HRPWM is in use
//! - updates HRMSTEP register (exists only in EPwm1Regs register space)
//! with MEP_ScaleFactor value
//! - returns 2 if error: MEP_ScaleFactor is greater than maximum value of 255
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    你好,Guz,

    我无法在 TMS320F28379D 上观察到这些情况。 在 EPwm1Regs.CMPCTL.LOADAMODE 和 LOADBMODE 中设置了哪些值。 您可以尝试以下方法:EPwm1Regs.CMPCTL.LOADAMODE = 0x01;EPwm1Regs.CMPCTL.LOADBMODE = 0x01;在 Init 的其他部分。

    此致

    莱昂

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

    你好,莱昂,我也尝试过,但我没有效果。 我看到高分辨率 PWM 输出的唯一时间是 HRCNFG.HRLOAD = 0x00。

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

    Gus,让我尝试在加计数模式下使用 HRPWM 查找我的代码。

    本原始示例是否使用了加计数模式?

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

    我可能自己写了这个例子,但我不记得... 我还应该有所有的旧文件。

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

    我的 HRPWM 示例:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //
    // Set up counter mode
    //
    EPWM_setTimeBaseCounterMode(ePWM[j], EPWM_COUNTER_MODE_UP);
    EPWM_disablePhaseShiftLoad(ePWM[j]);
    EPWM_setClockPrescaler(ePWM[j],
    EPWM_CLOCK_DIVIDER_1,
    EPWM_HSCLOCK_DIVIDER_1);
    EPWM_setSyncOutPulseMode(ePWM[j], EPWM_SYNC_OUT_PULSE_DISABLED);
    //
    // Set up shadowing
    //
    EPWM_setCounterCompareShadowLoadMode(ePWM[j],
    EPWM_COUNTER_COMPARE_A,
    EPWM_COMP_LOAD_ON_CNTR_PERIOD);
    EPWM_setCounterCompareShadowLoadMode(ePWM[j],
    EPWM_COUNTER_COMPARE_B,
    EPWM_COMP_LOAD_ON_CNTR_PERIOD);
    //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    这要求负载设置为:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    HRPWM_setMEPEdgeSelect(ePWM[j], HRPWM_CHANNEL_A, HRPWM_MEP_CTRL_FALLING_EDGE);
    HRPWM_setMEPControlMode(ePWM[j], HRPWM_CHANNEL_A, HRPWM_MEP_DUTY_PERIOD_CTRL);
    HRPWM_setCounterCompareShadowLoadEvent(ePWM[j], HRPWM_CHANNEL_A, HRPWM_LOAD_ON_CNTR_ZERO_PERIOD);
    HRPWM_setMEPEdgeSelect(ePWM[j], HRPWM_CHANNEL_B, HRPWM_MEP_CTRL_FALLING_EDGE);
    HRPWM_setMEPControlMode(ePWM[j], HRPWM_CHANNEL_B, HRPWM_MEP_DUTY_PERIOD_CTRL);
    HRPWM_setCounterCompareShadowLoadEvent(ePWM[j], HRPWM_CHANNEL_B, HRPWM_LOAD_ON_CNTR_ZERO_PERIOD);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    NIMA,

    感谢您的关注。 我确实看到,当负载设置更改为 HRPWM_LOload_ON_CNTR_zero_period 时,高分辨率输出将按预期工作。