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.

F28035 control card kit ePWM phase control count up

I am trying to produce a phase difference between ePWM1 and ePWM2. On ePWM2 I have phase enabled and phase value non zero. Still ePWM1A and ePWM2A are in phase on the scope traces. Any suggestions/questions?

Thank you.

Code currently running:

void InitEPwm1Example()

{

// Setup TBCLK

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up

EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period

EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading

EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0

EPwm1Regs.TBCTR = 0x0000; // Clear counter

// EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; // Clock ratio to SYSCLKOUT

// EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;

EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV32; // Clock ratio to SYSCLKOUT

EPwm1Regs.TBCTL.bit.CLKDIV = TB_HSDIV10;

// Setup shadow register load on ZERO

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;

EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

// Set Compare values

EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A value

EPwm1Regs.CMPB = EPWM1_MIN_CMPB; // Set Compare B value

// Set actions

EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // Set PWM1A on Zero

EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Clear PWM1A on event A, up count

EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // Set PWM1B on Zero

EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Clear PWM1B on event B, up count

// Interrupt where we will change the Compare Values

EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event

#if 0

EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT

EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event

#endif

// Information this example uses to keep track

// of the direction the CMPA/CMPB values are

// moving, the min and max allowed values and

// a pointer to the correct ePWM registers

epwm1_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA & CMPB

epwm1_info.EPwm_CMPB_Direction = EPWM_CMP_UP;

epwm1_info.EPwmTimerIntCount = 0; // Zero the interrupt counter

epwm1_info.EPwmRegHandle = &EPwm1Regs; // Set the pointer to the ePWM module

epwm1_info.EPwmMaxCMPA = EPWM1_MAX_CMPA; // Setup min/max CMPA/CMPB values

epwm1_info.EPwmMinCMPA = EPWM1_MIN_CMPA;

epwm1_info.EPwmMaxCMPB = EPWM1_MAX_CMPB;

epwm1_info.EPwmMinCMPB = EPWM1_MIN_CMPB;

}

void InitEPwm2Example()

{

// Setup TBCLK

EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up

EPwm2Regs.TBPRD = EPWM2_TIMER_TBPRD; // Set timer period

EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Enable phase loading

EPwm2Regs.TBPHS.half.TBPHS = 0x0100; // Phase is 0

EPwm2Regs.TBCTR = 0x0000; // Clear counter

EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV32; // Clock ratio to SYSCLKOUT

EPwm2Regs.TBCTL.bit.CLKDIV = TB_HSDIV10;

// Setup shadow register load on ZERO

EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;

EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

// Set Compare values

EPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA; // Set compare A value

EPwm2Regs.CMPB = EPWM2_MAX_CMPB / 2; // Set Compare B value

// Set actions

EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // Clear PWM2A on Period

EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Set PWM2A on event A, up count

EPwm2Regs.AQCTLB.bit.ZRO = AQ_SET; // Clear PWM2B on Period

EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Set PWM2B on event B, up count

// Interrupt where we will change the Compare Values

EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event

EPwm2Regs.ETSEL.bit.INTEN = 1; // Enable INT

EPwm2Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on every event

// Information this example uses to keep track

// of the direction the CMPA/CMPB values are

// moving, the min and max allowed values and

// a pointer to the correct ePWM registers

epwm2_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Count up CMPA

epwm2_info.EPwm_CMPB_Direction = EPWM_CMP_UP; // Count up CMPB

epwm2_info.EPwmTimerIntCount = 0; // Zero the interrupt counter

epwm2_info.EPwmRegHandle = &EPwm2Regs; // Set the pointer to the ePWM module

epwm2_info.EPwmMaxCMPA = EPWM2_MAX_CMPA; // Setup min/max CMPA/CMPB values

epwm2_info.EPwmMinCMPA = EPWM2_MIN_CMPA;

epwm2_info.EPwmMaxCMPB = EPWM2_MAX_CMPB;

epwm2_info.EPwmMinCMPB = EPWM2_MIN_CMPB;

}