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 Phase-Shift and Syncro

Part Number: LAUNCHXL-F280049C

Hi, my name is Iulian Popa.

I´m a student from Univerity of Zaragoza in Spain. Im using one of your development board 'LAUNCHXL-F280049C' and I have some questions and problems when I´m trying to control some PWM signals.

First of all, Im using:

-  CodeComposer version 9.3

-  C2000Ware version 3.1.0.00

I´m trying to control a Full Bridge with 3 PWM modules (The PWM signals that I have to use are imposed by HW). The EPWM signals are the following:

- ePWM_7 A and B outputs

- ePWM_6 output A

- ePWM_4 output A

My problem starts when I want to sync up the ePWM outputs and set the ePWM_7 as "Master" and Phase-Shift the ePWM6 and ePWM4. I've been reading other threads from TI forums like this one: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/906918?tisearch=e2e-sitesearch&keymatch=F28004x%252525252525252520PWM%252525252525252520PhaseShift

I leave below my initialization of the modules (ePWM5_B is another stuff, ignore it):

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_DUTY);
    //----------------------------------------------
    EPWM_setClockPrescaler(EPWM7_BASE, EPWM_CLOCK_DIVIDER_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_LOW, 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;// follow Previous 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_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    //----------------------------------------------
    EPWM_setCounterCompareValue(EPWM6_BASE, EPWM_COUNTER_COMPARE_A, EPWM6_DUTY);
    //----------------------------------------------
    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;// follow Previous 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_DIVIDER_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_DIVIDER_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_SHADOW_LOAD);
    EPWM_setTimeBaseCounterMode(EPWM5_BASE, EPWM_COUNTER_MODE_UP);
    //----------------------------------------------
    EPWM_setCounterCompareValue(EPWM5_BASE, EPWM_COUNTER_COMPARE_A, EPWM5_DUTY);
    EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_PERIOD);
    //----------------------------------------------
    EPWM_setActionQualifierShadowLoadMode(EPWM5_BASE, EPWM_ACTION_QUALIFIER_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); // Enable sync and clock to PWM

}


I await your response, regards. Iulian
  • Hi,

    Iulian Ovidiu Popa said:
    My problem starts when I want to sync up the ePWM outputs and set the ePWM_7 as "Master" and Phase-Shift the ePWM6 and ePWM4.


    First of all, thank you for referring to the existing forum posts for your query before creating a new thread.
    The sync chain structure is already provided in the posts you've referred.
    If PWM7 as to be master, you can generate a sync pulse output as shown in the diagram, send this out as SYNCOUT and loop it back as EXTSYNCIN to PWM4 and 6.


  • Hi, thanks for your response. I have tried to implement what you have told me. However I cannot implement the Phase Shift between the ePWM7 and the ePWM 4, 6. ¿Can you check my ePWM configuration from my first post?¿Sholud I do something else?

    I await your response, regards. Iulian

  • Okey, i´ve been reading in a wrong way your reply. It works for me. Ty .

    I leave here my configuration if someone need it:

    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_DUTY);
    //----------------------------------------------
    EPWM_setClockPrescaler(EPWM7_BASE, EPWM_CLOCK_DIVIDER_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_LOW, 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_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    //----------------------------------------------
    EPWM_setCounterCompareValue(EPWM6_BASE, EPWM_COUNTER_COMPARE_A, EPWM6_DUTY);
    //----------------------------------------------
    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_DIVIDER_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_DIVIDER_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_SHADOW_LOAD);
    EPWM_setTimeBaseCounterMode(EPWM5_BASE, EPWM_COUNTER_MODE_UP);
    //----------------------------------------------
    EPWM_setCounterCompareValue(EPWM5_BASE, EPWM_COUNTER_COMPARE_A, EPWM5_DUTY);
    EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_PERIOD);
    //----------------------------------------------
    EPWM_setActionQualifierShadowLoadMode(EPWM5_BASE, EPWM_ACTION_QUALIFIER_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); // Enable sync and clock to PWM

    }