Dear All,
I have a problem, with EPWM Module synchronization, I used LaunchXL F28377S and I need to synchronize EPWM6, EPWM7, and EPWM8 counter and implement some phase shift for interleave buck application. the problem is no matter the value I put in TBPHS Registers, the EPWM6, EPWM7, and EPWM8 remain in the same phase.
I use EPWM6, EPWM7, and EPWM8 since EPWM1 doesnt have connected to output pin, and only EPWM2, EPWM6, EPWM7, and EPWM8, has the A and B module connected to the output pin.
does any body has any idea what's wrong?
Regards,
Arief,
void ConfigureEPWM(void)
{
EALLOW;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0x0;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0x0;
EDIS;
EALLOW;
// Assumes ePWM clock is already enabled
// Assumes ePWM6 clock is already enabled in InitSysCtrl();
EPwm6Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm6Regs.ETSEL.bit.SOCASEL = 1; // Select SOC from from CPMA on counter = 0
EPwm6Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EDIS;
//=====================================================================
// Configuration
//=====================================================================
// Initialization Time
//========================// EPWM Module 6 config
EALLOW;
EPwm6Regs.TBPRD = PWM_PRD; // Period = 1600 TBCLK counts
EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm6Regs.TBPHS.bit.TBPHS = 0x0000; // Phase is 0
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode
EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module
EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream module
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR; // set actions for EPWM1A
EPwm6Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm6Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
EPwm6Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Low complementary
EPwm6Regs.DBFED = PWM_DB; // FED = 50 TBCLKs
EPwm6Regs.DBRED = PWM_DB; // RED = 50 TBCLKs
// EPWM Module 7 config
EPwm7Regs.TBPRD = PWM_PRD; // Period = 1600 TBCLK counts
EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm7Regs.TBPHS.bit.TBPHS = 1200;
EPwm7Regs.TBCTL.bit.PHSDIR = 1;
EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode
EPwm7Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave module
EPwm7Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-through
EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm7Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm7Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR; // set actions for EPWM2A
EPwm7Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm7Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Low complementary
EPwm7Regs.DBFED = PWM_DB; // FED = 50 TBCLKs
EPwm7Regs.DBRED = PWM_DB; // RED = 50 TBCLKs
// EPWM Module 8 config
EPwm8Regs.TBPRD = PWM_PRD; // Period = 1600 TBCLK counts
EPwm8Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm8Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm8Regs.TBPHS.bit.TBPHS = 1200
EPwm8Regs.TBCTL.bit.PHSDIR = 1;
EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode
EPwm8Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave module
EPwm8Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm8Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-through
EPwm8Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm8Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm8Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm8Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm8Regs.AQCTLA.bit.CAU = AQ_CLEAR; // set actions for EPWM3A
EPwm8Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm8Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
EPwm8Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Low complementary
EPwm8Regs.DBFED = PWM_DB; // FED = 50 TBCLKs
EPwm8Regs.DBRED = PWM_DB; // RED = 50 TBCLKs
// Run Time (Note: Example execution of one run-time instant)
EDIS;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0x1;
EDIS;
//=========================================================
EPwm6Regs.CMPA.bit.CMPA = 4000; // adjust duty for output EPWM1A
EPwm7Regs.CMPA.bit.CMPA = 4000; // adjust duty for output EPWM2A
EPwm8Regs.CMPA.bit.CMPA = 4000; // adjust duty for output EPWM3A
}