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.
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.
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 Subrahmanya.
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
}