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.

[参考译文] LAUNCHXL-F280049C:ePWM 相移和同步

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/933458/launchxl-f280049c-epwm-phase-shift-and-syncro

器件型号:LAUNCHXL-F280049C

大家好、我叫 Iulian Popa。

我是´m 萨拉戈萨大学的学生。 我´m 您的开发板'LAUNCHXL-F280049C'、当我尝试控制某些 PWM 信号时、我有一些问题和疑问。

首先、我使用:

-  CodeComposer 版本9.3

-  C2000Ware 版本3.1.0.00

我´m 使用3个 PWM 模块来控制全桥(我必须使用的 PWM 信号由 HW 施加)。 ePWM 信号如下:

- ePWM_7 A 和 B 输出

- ePWM_6输出 A

- ePWM_4输出 A

当我想同步 ePWM 输出并将 ePWM_7设置为"主器件"以及 ePWM6和 ePWM4的相移时、我的问题就会开始。 我一直在阅读 TI 论坛上的其他主题、例如: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/906918?tisearch=e2e-sitesearch&keymatch=F28004x%252525252525252520PWM%252525252525252520PhaseShift

我将模块的初始化保留在下面(ePWM5_B 是另一个东西、忽略它):

void Config_ePWM_Outputs (void){

SYSCTL_DisablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//tiene que IR Aqui porque Sino no SE SINCRONIZA BIEN EL EPWM

ePWM_enablePhaseShiftLoad (EPWM4_base);
ePWM_enablePhaseShiftLoad (EPWM6_BASE);

///------------------------------ >ePWM_7_A_B (H1 - L1)<--------------- 
EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
//--------------------------------
ePWM_setTimeBaseCounterMode (EPWM7_BASE、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setTimeBasePeriod (EPWM7_BASE、EPWM7_PERIOD);
ePWM_setPhaseShift (EPWM7_BASE、0U);
//--------------------------------
ePWM_setCounterCompareValue (EPWM7_BASE、ePWM_COUNTER_COMPARE_A、EPWM7_Buty);
//--------------------------------
ePWM_setClockPrescaler (EPWM7_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
//--------------------------------
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_OUTPUT A、ePWM_AQ_OUTPUT 低电平、ePWM_AQ_OUTPUT ON_TIMEBASE_UP_CMPA);
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------



///------------------------------ >ePWM_6_A (H2)<----------------- 
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//跟随先前的 PWM
//--------------------------------
ePWM_setTimeBaseCounterMode (EPWM6_BASE、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setTimeBasePeriod (EPWM6_BASE、EPWM6_PERIOD);
ePWM_setPhaseShift (EPWM6_BASE、100U);
//--------------------------------
ePWM_setClockPrescaler (EPWM6_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
//--------------------------------
ePWM_setCounterCompareValue (EPWM6_BASE、ePWM_COUNTER_COMPARE_A、EPWM6_Buty);
//--------------------------------
ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------


///------------------------------ >ePWM_4_A (L2)<--------------- 
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//跟随先前的 PWM
//--------------------------------
ePWM_setTimeBaseCounterMode (EPWM4_base、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setTimeBasePeriod (EPWM4_base、EPWM4_PERIOD);
ePWM_setPhaseShift (EPWM4_base、0U);
//--------------------------------
ePWM_setClockPrescaler (EPWM4_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
//--------------------------------
ePWM_setCounterCompareValue (EPWM4_base、ePWM_COUNTER_COMPARE_A、EPWM4_Duty);
//--------------------------------
ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------


///------------------------------ >ePWM_5_B (12V_ISO)<--------------
//--------------------------------
ePWM_setClockPrescaler (EPWM5_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
ePWM_setEmulationMode (EPWM5_base、ePWM_emulation_free_run);
//--------------------------------
ePWM_setTimeBaseCounter (EPWM5_base、0);
ePWM_setTimeBasePeriod (EPWM5_base、EPWM5_PERIOD);
ePWM_setPeriodLoadMode (EPWM5_base、ePWM_PERIOD_LOAD);
ePWM_setTimeBaseCounterMode (EPWM5_base、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setCounterCompareValue (EPWM5_base、ePWM_COUNTER_COMPARE_A、EPWM5_Duty);
ePWM_setCounterCompareShadowImage LoadMode (EPWM5_base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_PERIOD);
//--------------------------------
ePWM_setActionQualifierShadowImage LoadMode (EPWM5_base、ePWM_ACT_QUALTER_A、ePWM_AQ_LOAD_ON_CNTR_ZERO);
ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------

SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、SYSCTL_SYNC_IN_SRC_EPWM7SYNCOUT);
SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM1、SYSCTL_SYNC_IN_SRC_EPWM7SYNCOUT);
SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//启用 PWM 同步和时钟

} 


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

    您好!

    [引用 user="Iulian Ovidiu Popa"]当我要同步 EPWM 输出并将 EPWM_7设置为"主"ePWM6和 ePWM4的相移时,问题就会开始。

    首先、感谢您在创建新线程之前参考您的查询的现有论坛帖子。
    您提到的帖子中已经提供了同步链结构。
    如果 PWM7作为主器件、您可以生成如图所示的同步脉冲输出、将其作为 SYNCOUT 发送并作为 EXTSYNCIN 回送至 PWM4和6。

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


    大家好、感谢您的回答。 我已经尝试实施您告诉我的内容。 但是、我无法实现 ePWM7和 ePWM 4、6之间的相移。 ¿您能从我的第一篇帖子中检查我的 ePWM 配置吗?¿解决方案我还做些什么?

    此致、我等待您的回复。 Iulian

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

    ´ve,我读的是错误的回答。 这对我很有用。 Ty 

    如果有人需要、我将配置保留在这里:

    void Config_ePWM_Outputs (void){

    SYSCTL_DisablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//tiene que IR Aqui porque Sino no SE SINCRONIZA BIEN EL EPWM

    ePWM_enablePhaseShiftLoad (EPWM4_base);
    ePWM_enablePhaseShiftLoad (EPWM6_BASE);

    ///------------------------------ >ePWM_7_A_B (H1 - L1)<---------------
    ePWM_setSyncOutPulseMode (EPWM7_BASE、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
    //--------------------------------
    ePWM_setTimeBaseCounterMode (EPWM7_BASE、ePWM_COUNTER_MODE_UP);
    //--------------------------------
    ePWM_setTimeBasePeriod (EPWM7_BASE、EPWM7_PERIOD);
    ePWM_setPhaseShift (EPWM7_BASE、0U);
    //--------------------------------
    ePWM_setCounterCompareValue (EPWM7_BASE、ePWM_COUNTER_COMPARE_A、EPWM7_Buty);
    //--------------------------------
    ePWM_setClockPrescaler (EPWM7_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
    //--------------------------------
    ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_OUTPUT A、ePWM_AQ_OUTPUT 低电平、ePWM_AQ_OUTPUT ON_TIMEBASE_UP_CMPA);
    ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
    //--------------------------------

    ///------------------------------ >ePWM_6_A (H2)<-----------------
    ePWM_setSyncOutPulseMode (EPWM6_BASE、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    //--------------------------------
    ePWM_setTimeBaseCounterMode (EPWM6_BASE、ePWM_COUNTER_MODE_UP);
    //--------------------------------
    ePWM_setTimeBasePeriod (EPWM6_BASE、EPWM6_PERIOD);
    ePWM_setPhaseShift (EPWM6_BASE、200U);
    //--------------------------------
    ePWM_setClockPrescaler (EPWM6_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
    //--------------------------------
    ePWM_setCounterCompareValue (EPWM6_BASE、ePWM_COUNTER_COMPARE_A、EPWM6_Buty);
    //--------------------------------
    ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
    //--------------------------------


    ///------------------------------ >ePWM_4_A (L2)<---------------
    ePWM_setSyncOutPulseMode (EPWM4_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    //--------------------------------
    ePWM_setTimeBaseCounterMode (EPWM4_base、ePWM_COUNTER_MODE_UP);
    //--------------------------------
    ePWM_setTimeBasePeriod (EPWM4_base、EPWM4_PERIOD);
    ePWM_setPhaseShift (EPWM4_base、350U);
    //--------------------------------
    ePWM_setClockPrescaler (EPWM4_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
    //--------------------------------
    ePWM_setCounterCompareValue (EPWM4_base、ePWM_COUNTER_COMPARE_A、EPWM4_Duty);
    //--------------------------------
    ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPA);
    //--------------------------------


    ///------------------------------ >ePWM_5_B (12V_ISO)<--------------
    //--------------------------------
    ePWM_setClockPrescaler (EPWM5_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
    ePWM_setEmulationMode (EPWM5_base、ePWM_emulation_free_run);
    //--------------------------------
    ePWM_setTimeBaseCounter (EPWM5_base、0);
    ePWM_setTimeBasePeriod (EPWM5_base、EPWM5_PERIOD);
    ePWM_setPeriodLoadMode (EPWM5_base、ePWM_PERIOD_LOAD);
    ePWM_setTimeBaseCounterMode (EPWM5_base、ePWM_COUNTER_MODE_UP);
    //--------------------------------
    ePWM_setCounterCompareValue (EPWM5_base、ePWM_COUNTER_COMPARE_A、EPWM5_Duty);
    ePWM_setCounterCompareShadowImage LoadMode (EPWM5_base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_PERIOD);
    //--------------------------------
    ePWM_setActionQualifierShadowImage LoadMode (EPWM5_base、ePWM_ACT_QUALTER_A、ePWM_AQ_LOAD_ON_CNTR_ZERO);
    ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
    //--------------------------------

    SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM1、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
    SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);


    SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//启用 PWM 的同步和时钟