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: PHASE SHIFT BETWEEN TWO PULSES

Part Number: TMS320F280049C

I AM USING CODE COMPOSER STUDIO FOR GENERATING  PHASE SHIFT BETWEEN TWO PULSES, USING MATLAB C2000 VLOCKSET I COULD ABLE TO OBTAIN THE PHASE SHIFT AND DEAD BAND IN THE PULSES. BUT IN CODE COMPOSER STUDIO I AM NOT ABLE TO. HEREWITH I HAD GIVEN BELOW THE CODING I DONE. KINDLY HELP ME OUT

USING CODE C


* Author: Deepti
*/

#ifndef PWM_H_
#define PWM_H_
#include "driverlib.h"
#include "device.h"
//#include "board.h"

// Declaration
#define EPWM4_TIMER_TBPRD 5000UL
#define EPWM5_TIMER_TBPRD 5000UL
#define EPWM6_TIMER_TBPRD 5000UL
#define EPWM7_TIMER_TBPRD 5000UL


// function prototype
void initEPWM4(void);
void initEPWM5(void);
void initEPWM6(void);
void initEPWM7(void);

// PWM4 FUNCTION CALLED
void initEPWM4()
{
// Set-up TBCLK

EPWM_setTimeBasePeriod(EPWM4_BASE, EPWM4_TIMER_TBPRD);

// SYNC OUT EVENT

EPWM_setSyncOutPulseMode(EPWM4_BASE,EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
EPWM_setPhaseShift(EPWM4_BASE, 0U);
EPWM_setTimeBaseCounter(EPWM4_BASE, 0U);


// SYNC EVENT
//EPWM_setCountModeAfterSync(EPWM4_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);

// Set Compare values
EPWM_setCounterCompareValue(EPWM4_BASE,EPWM_COUNTER_COMPARE_A,2500);
EPWM_setCounterCompareValue(EPWM4_BASE, EPWM_COUNTER_COMPARE_B,0);

// Set up counter mode

EPWM_setTimeBaseCounterMode(EPWM4_BASE, EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad(EPWM4_BASE);
EPWM_setClockPrescaler(EPWM4_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

// Set up shadowing

EPWM_setCounterCompareShadowLoadMode(EPWM4_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode(EPWM4_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);

// Set actions

EPWM_setActionQualifierAction(EPWM4_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(EPWM4_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);

}

// PWM5 FUNCTION CALLED
void initEPWM5()
{
// Set-up TBCLK

EPWM_setTimeBasePeriod(EPWM5_BASE, EPWM5_TIMER_TBPRD);
EPWM_setTimeBaseCounter(EPWM5_BASE, 0U);

// SYNC EVENT
EPWM_setCountModeAfterSync(EPWM5_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);

// PHASE SHIFT VALUE

EPWM_setPhaseShift(EPWM5_BASE, 2000U);

//
EPWM_setSyncOutPulseMode(EPWM5_BASE,EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);

// Set Compare values

EPWM_setCounterCompareValue(EPWM5_BASE,EPWM_COUNTER_COMPARE_A,2500U);
EPWM_setCounterCompareValue(EPWM5_BASE, EPWM_COUNTER_COMPARE_B,0U);

// Set up counter mode

EPWM_setTimeBaseCounterMode(EPWM5_BASE, EPWM_COUNTER_MODE_UP_DOWN);
EPWM_setClockPrescaler(EPWM5_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

// Set up shadowing

EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);

// Set actions

EPWM_setActionQualifierAction(EPWM5_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(EPWM5_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
}

// PWM6 FUNCTION CALLED

/*void initEPWM6()
{

// Set-up TBCLK

EPWM_setTimeBasePeriod(EPWM6_BASE, EPWM6_TIMER_TBPRD);
EPWM_setPhaseShift(EPWM6_BASE, 0U);
EPWM_setTimeBaseCounter(EPWM6_BASE, 0U);

// Set Compare values

EPWM_setCounterCompareValue(EPWM6_BASE,EPWM_COUNTER_COMPARE_A,2500);
EPWM_setCounterCompareValue(EPWM6_BASE, EPWM_COUNTER_COMPARE_B,0);

// Set up counter mode

EPWM_setTimeBaseCounterMode(EPWM6_BASE, EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad(EPWM6_BASE);
EPWM_setClockPrescaler(EPWM6_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

// Set up shadowing

EPWM_setCounterCompareShadowLoadMode(EPWM6_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode(EPWM6_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);

// Set actions

EPWM_setActionQualifierAction(EPWM6_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(EPWM6_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);

}

// PWM7 FUNCTION CALLED
void initEPWM7()
{

// Set-up TBCLK

EPWM_setTimeBasePeriod(EPWM7_BASE, EPWM7_TIMER_TBPRD);
EPWM_setPhaseShift(EPWM7_BASE, 2000U);
EPWM_setTimeBaseCounter(EPWM7_BASE, 0U);

// Set Compare values

EPWM_setCounterCompareValue(EPWM7_BASE,EPWM_COUNTER_COMPARE_A,2500);
EPWM_setCounterCompareValue(EPWM7_BASE, EPWM_COUNTER_COMPARE_B,0);

// Set up counter mode

EPWM_setTimeBaseCounterMode(EPWM7_BASE, EPWM_COUNTER_MODE_UP_DOWN);
// EPWM_disablePhaseShiftLoad(EPWM6_BASE);
EPWM_setClockPrescaler(EPWM7_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

// Set up shadowing

EPWM_setCounterCompareShadowLoadMode(EPWM7_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode(EPWM7_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);

// Set actions

EPWM_setActionQualifierAction(EPWM7_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(EPWM7_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);

}

*/
#endif PWM_H_

  • Hello,

    You need to enable phase shift using the EPWM_enablePhaseShiftLoad function for phase shifting to be used.

    I don't see anything in your code that would configure dead-band, are you wanting to use dead-band on your EPWM outputs?

    Thank you,

    Luke

  • /*
     * pwm.h
     *
     *  Created on: 03-Jun-2023
     *      Author: Deepti
     */
    
    #ifndef PWM_H_
    #define PWM_H_
    #include "driverlib.h"
    #include "device.h"
    //#include "board.h"
    
    // Declaration
    #define EPWM4_TIMER_TBPRD    5000UL
    #define EPWM5_TIMER_TBPRD    5000UL
    #define EPWM6_TIMER_TBPRD    5000UL
    #define EPWM8_TIMER_TBPRD    5000UL
    
    
    // function prototype
    void initEPWM4(void);
    void initEPWM5(void);
    void initEPWM6(void);
    void initEPWM8(void);
    
    // PWM4 FUNCTION CALLED
    void initEPWM4()
    {
        // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM4_BASE, EPWM4_TIMER_TBPRD);
    
        // SYNC OUT EVENT
    
       EPWM_setSyncOutPulseMode(EPWM4_BASE,EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
        //EPWM_setPhaseShift(EPWM4_BASE, 0U);
        EPWM_setTimeBaseCounter(EPWM4_BASE, 0U);
    
    
        // SYNC EVENT
        //EPWM_setCountModeAfterSync(EPWM4_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);
    
            // Set Compare values
            EPWM_setCounterCompareValue(EPWM4_BASE,EPWM_COUNTER_COMPARE_A,2500);
            EPWM_setCounterCompareValue(EPWM4_BASE, EPWM_COUNTER_COMPARE_B,0);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM4_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_disablePhaseShiftLoad(EPWM4_BASE);
        EPWM_setClockPrescaler(EPWM4_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
            // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM4_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM4_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
           // Set actions
    
        EPWM_setActionQualifierAction(EPWM4_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM4_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    
    }
    
          // PWM5 FUNCTION CALLED
    void initEPWM5()
    {
          // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM5_BASE, EPWM5_TIMER_TBPRD);
        EPWM_setTimeBaseCounter(EPWM5_BASE, 0U);
    
        // SYNC EVENT
        EPWM_setCountModeAfterSync(EPWM5_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);
    
        // PHASE SHIFT VALUE
    
        EPWM_setPhaseShift(EPWM5_BASE, 2000U);
        EPWM_enablePhaseShiftLoad(EPWM5_BASE);
    
        //
      //  EPWM_setSyncOutPulseMode(EPWM5_BASE,EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    
         // Set Compare values
    
        EPWM_setCounterCompareValue(EPWM5_BASE,EPWM_COUNTER_COMPARE_A,2500U);
        EPWM_setCounterCompareValue(EPWM5_BASE, EPWM_COUNTER_COMPARE_B,0U);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM5_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_setClockPrescaler(EPWM5_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
       // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
       // Set actions
    
        EPWM_setActionQualifierAction(EPWM5_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM5_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    }
    
       // PWM6 FUNCTION CALLED
    
    void initEPWM6()
    {
    
        // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM6_BASE, EPWM6_TIMER_TBPRD);
    
        // SYNC OUT EVENT
    
        EPWM_setSyncOutPulseMode(EPWM4_BASE,EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
        //EPWM_setPhaseShift(EPWM6_BASE, 0U);
        EPWM_setTimeBaseCounter(EPWM6_BASE, 0U);
    
        // Set Compare values
    
        EPWM_setCounterCompareValue(EPWM6_BASE,EPWM_COUNTER_COMPARE_A,2500);
        EPWM_setCounterCompareValue(EPWM6_BASE, EPWM_COUNTER_COMPARE_B,0);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM6_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_disablePhaseShiftLoad(EPWM6_BASE);
        EPWM_setClockPrescaler(EPWM6_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
        // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM6_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM6_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
        // Set actions
    
        EPWM_setActionQualifierAction(EPWM6_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM6_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    
    }
    
       // PWM7 FUNCTION CALLED
    void initEPWM8()
    {
          // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM8_BASE, EPWM8_TIMER_TBPRD);
        EPWM_setTimeBaseCounter(EPWM8_BASE, 0U);
    
        // SYNC EVENT
        EPWM_setCountModeAfterSync(EPWM8_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);
    
        // PHASE SHIFT VALUE
    
        EPWM_setPhaseShift(EPWM8_BASE, 2000U);
        EPWM_enablePhaseShiftLoad(EPWM8_BASE);
    
        //
      //  EPWM_setSyncOutPulseMode(EPWM5_BASE,EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    
         // Set Compare values
    
        EPWM_setCounterCompareValue(EPWM8_BASE,EPWM_COUNTER_COMPARE_A,2500U);
        EPWM_setCounterCompareValue(EPWM8_BASE, EPWM_COUNTER_COMPARE_B,0U);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_setClockPrescaler(EPWM8_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
       // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM8_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM8_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
       // Set actions
    
        EPWM_setActionQualifierAction(EPWM8_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM8_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    }
    
    
    #endif  PWM_H_
    

    as per the program i am getting the phase shift for EPWM5, but EPWM 8 is coming in phase with EPWM4,6 eventhough phase shift function is given. i had enclosed the code for the same.

  • EPWM8 will always be synchronized by EPWM7. Refer to this diagram in the EPWM chapter:

    If you are not generating a SYNCOUT pulse from EPWM7, EPWM8 will not receive any SYNCIN signal, however you can configure EPWM7 to select EPWM4 syncout as it's SYNCIN signal and then configure EPWM7 to generate a SYNCOUT pulse whenever it receives a SYNCIN pulse using the TBCTL register. This will effectively cause EPWM8 to be synchronized by EPWM4.