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 的功能在 epwm1A 和 epwm2A 之间建立相移。

Guru**** 2524460 points
Other Parts Discussed in Thread: TIDM-02002, TIDM-02013, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1278434/tms320f280049c-want-to-establish-an-phase-shift-between-epwm1a-and-epwm2a-via-enabling-the-function-of-hrpwm

器件型号:TMS320F280049C
主题中讨论的其他器件:TIDM-02013、TIDM-02002 C2000WARE

我想在2个 EPWM 通道之间实现相移、例如下面的波形(从简单时基 EPWM 通道获得):[ syscfg. TI 示例库下载的示例]

我下载了另一个 HRPWM 示例(syscfg)并成功运行、但无法在两个 HRPWM 通道(epwm1A 和 epwm2A)之间建立相移。

我已经从 TI 示例库(示例名称:epwm_ex3_synchronization)中学到了相移设置、并将其相移设置扩展为 HRPWM 配置、但失败了。

我不了解 HRPWM 通道和简单 ePWM 通道之间的基本相移逻辑。

在 TI 示例库中、我没有找到 HRPWM 同步示例、我可以在那里了解它。

您能否检查由 syscfg 工具生成的 HRPWM 相移代码。  

请帮助我解决这个 HRPWM 相移问题。 谢谢你。

void ePWM_init (){


HRPWM_setClockPrescaler (myEPWM1_base、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);
EPWM_setTimeBasePeriod (myEPWM1_base、370);
HRPWM_setTimeBaseCounter (myEPWM1_base、0);
HRPWM_setTimeBaseCounterMode (myEPWM1_base、EPWM_COUNTER_MODE_UP);

//相移函数
HRPWM_disablePhaseShiftLoad (myEPWM1_BASE);
HRPWM_setPhaseShift (myEPWM1_BASE、0);
HRPWM_setSyncOutPulseMode (myEPWM1_BASE、EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

EPWM_setCounterCompareValue (myEPWM1_base、EPWM_COUNTER_COMPARE_A、130);
HRPWM_setCounterCompareShadowLoadMode (myEPWM1_base、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO _PERIOD);
EPWM_setCounterCompareValue (myEPWM1_base、EPWM_COUNTER_COMPARE_B、130);
HRPWM_setCounterCompareShadowLoadMode (myEPWM1_base、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO _PERIOD);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
HRPWM_setActionQualifierAction (myEPWM1_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
HRPWM_setDeadBandDelayPolarity (myEPWM1_BASE、EPWM_DB_FED、EPWM_DB_POLICY_ACTIVE_LOW);
HRPWM_setDeadBandDelayMode (myEPWM1_base、ePWM_DB_RED、TRUE);
HRPWM_setRisingEdgeDelayCount (myEPWM1_base、12);
HRPWM_setDeadBandDelayMode (myEPWM1_base、ePWM_DB_FED、true);
HRPWM_setFallingEdgeDelayCount (myEPWM1_base、12);
HRPWM_setDeadBandCounterClock (myEPWM1_BASE、EPWM_DB_COUNTER_CLOCK_HALF_CYCLE);
HRPWM_enableAutoConversion (myEPWM1_base);
HRPWM_setMEPEdgeSelect (myEPWM1_base、HRPWM_CHANNEL_A、HRPWM_MEP_CTRL_FALLING_EDGE);
HRPWM_setHiResCounterCompareValueOnly (myEPWM1_base、HRPWM_COUNTER_COMPARE_A、50);
HRPWM_setCounterCompareShadowLoadEvent (myEPWM1_base、HRPWM_CHANNEL_A、HRPWM_LOAD_ON_CNTR_PERIOD);
HRPWM_setMEPEdgeSelect (myEPWM1_base、HRPWM_CHANNEL_B、HRPWM_MEP_CTRL_FALLING_EDGE);
HRPWM_setHiResCounterCompareValueOnly (myEPWM1_base、HRPWM_COUNTER_COMPARE_B、50);
HRPWM_setCounterCompareShadowLoadEvent (myEPWM1_base、HRPWM_CHANNEL_B、HRPWM_LOAD_ON_CNTR_ZERO _PERIOD);
HRPWM_setHiResTimeBasePeriodOnly (myEPWM1_base、185);


HRPWM_setDeadbandMEPEdgeSelect (myEPWM1_BASE、HRPWM_DB_MEP_CTRL_RED_FED);
HRPWM_setClockPrescaler (myEPWM2_base、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);
ePWM_setTimeBasePeriod (myEPWM2_base、370);
HRPWM_setTimeBaseCounter (myEPWM2_base、0);
HRPWM_setTimeBaseCounterMode (myEPWM2_base、EPWM_COUNTER_MODE_UP);

//相移函数


HRPWM_enablePhaseShiftLoad (myEPWM2_base);
HRPWM_setPhaseShift (myEPWM2_base、40);
HRPWM_setSyncOutPulseMode (myEPWM2_base、EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);


EPWM_setCounterCompareValue (myEPWM2_base、EPWM_COUNTER_COMPARE_A、130);
HRPWM_setCounterCompareShadowLoadMode (myEPWM2_base、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareValue (myEPWM2_base、EPWM_COUNTER_COMPARE_B、130);
HRPWM_setCounterCompareShadowLoadMode (myEPWM2_base、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
HRPWM_setActionQualifierAction (myEPWM2_base、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
HRPWM_setDeadBandDelayPolarity (myEPWM2_BASE、EPWM_DB_FED、EPWM_DB_POLICY_ACTIVE_LOW);
HRPWM_setDeadBandDelayMode (myEPWM2_base、ePWM_DB_RED、TRUE);
HRPWM_setRisingEdgeDelayCount (myEPWM2_base、12);
HRPWM_setDeadBandDelayMode (myEPWM2_base、ePWM_DB_FED、true);
HRPWM_setFallingEdgeDelayCount (myEPWM2_base、12);
HRPWM_setDeadBandCounterClock (myEPWM2_BASE、EPWM_DB_COUNTER_CLOCK_HALF_CYCLE);
HRPWM_enableAutoConversion (myEPWM2_base);
HRPWM_setMEPEdgeSelect (myEPWM2_base、HRPWM_CHANNEL_A、HRPWM_MEP_CTRL_RISING_AND_FALLING_EDGE);
HRPWM_setHiResCounterCompareValueOnly (myEPWM2_base、HRPWM_COUNTER_COMPARE_A、70);
HRPWM_setCounterCompareShadowLoadEvent (myEPWM2_base、HRPWM_CHANNEL_A、HRPWM_LOAD_ON_CNTR_ZERO _PERIOD);
HRPWM_setMEPEdgeSelect (myEPWM2_base、HRPWM_CHANNEL_B、HRPWM_MEP_CTRL_RISING_AND_FALLING_EDGE);
HRPWM_setHiResCounterCompareValueOnly (myEPWM2_base、HRPWM_COUNTER_COMPARE_B、70);
HRPWM_setCounterCompareShadowLoadEvent (myEPWM2_base、HRPWM_CHANNEL_B、HRPWM_LOAD_ON_CNTR_ZERO _PERIOD);
HRPWM_setHiResTimeBasePeriodOnly (myEPWM2_base、185);
HRPWM_setDeadbandMEPEdgeSelect (myEPWM2_BASE、HRPWM_DB_MEP_CTRL_RED_FED);

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

    我们的 DigitalPower SDK 有几个具有 HR 相移配置的项目。 您可能需要尝试使用这些工程之一作为参考。 如果您尚未安装 SDK、可以通过以下链接在线浏览:

    https://dev.ti.com/tirex/global?id=digital_power_c2000ware_sdk_software_package

    也许可以查看 TIDM-02013或 TIDM-02002工程。

    惠特尼

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

     惠特尼先生、您好!

    我已下载以下 SDK 文件并检查。 该文件还包含4个 HRPWM 示例、其中没有一个示例讨论相移。

    以下示例显示了路径:

    (C:\ti\c302_sdk_5_00_00_ Ware_Digital Ware_Digital)

    我使用了这个示例(HRPWM_ex3_prd_updown_SFO)、并修改到加法计数器中、然后尝试在以下基准示例(epwm_ex3_synchronous)上创建一个相移、但它没有用。

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

    抱歉,我应该更具体一些——在 SDK 中,而不是进入 c2000ware 文件夹,看看 solutions 中的示例项目。 您将在其中看到我之前提到的 TIDM_02002和 TIDM_020013工程的文件夹。 然后、您可以打开配置了 PWM 的 HAL 文件、并查看用于启用相移的方法。

    惠特尼