Other Parts Discussed in Thread: C2000WARE
Dear sir ,
1.We are developing Motor Controler based on C2000 28376S , we need to create Complementary PWMs singlas Per Phase (total of 3 phases)
2. each Phase will connect to PWM module (1,2,3) , signal A will be used for high side MOSFET , signal B will be used for low side MOSFET (the signlas are connected trough proper gate drivers )
3. PWMXA and PWMXB should be complementary signals with proper dead time , which we able to successfully configure
the issue we have is to make thhse signals as high resoultion PWM complementary signals
my question , is it possible to achive such configuration (Complementary high resoultion PWM signals ) ?
below is snippet code for tyring to make high resoultion PWM signnals
EALLOW;
EPwmRegHandle->TBPRD = EPWM_TIMER_TBPRD; // Set timer period
EPwmRegHandle->TBCTL.bit.PHSEN =TB_ENABLE; // Enable phase loading
EPwmRegHandle->TBCTL.bit.PHSDIR = TB_UP; // count up after SYNC
EPwmRegHandle->TBCTL.bit.PRDLD = TB_SHADOW;
EPwmRegHandle->TBCTL2.bit.PRDLDSYNC = 0; //PRD on CTR=0 and SYNC
EPwmRegHandle->TBPHS.bit.TBPHS = 0; // Phase is always 0°
EPwmRegHandle->TBCTR = 0x0; // Clear counter
EPwmRegHandle->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count down
EPwmRegHandle->TBCTL.bit.HSPCLKDIV = TB_DIV1; // High Speed Clock ratio to SYSCLKOUT
EPwmRegHandle->TBCTL.bit.CLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwmRegHandle->TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Output sync is connected to input sync
EPwmRegHandle->CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Use shadow mode
EPwmRegHandle->CMPCTL.bit.SHDWBMODE = CC_SHADOW; // Use shadow mode
EPwmRegHandle->CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD; // Load registers every ZERO or PERIOD
EPwmRegHandle->CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD; // Load registers every ZERO or PERIOD
/*High resolution PWM */
EPwmRegHandle->CMPA.bit.CMPAHR = 0;
EPwmRegHandle->CMPB.bit.CMPBHR = 0;
EPwmRegHandle->TBPHS.bit.TBPHSHR = 0x0;
/*Clear High Resolution Configuration*/
EPwmRegHandle->HRCNFG.all = 0x0;
/*Enable High Res. CH-A */
EPwmRegHandle->HRCNFG.bit.EDGMODE = HR_REP;
EPwmRegHandle->HRCNFG.bit.CTLMODE = HR_CMP;
EPwmRegHandle->HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD;
//* Enable High Res. CH-B (if using Deadband)
EPwmRegHandle->HRCNFG.bit.EDGMODEB = HR_FEP;
EPwmRegHandle->HRCNFG.bit.CTLMODEB = HR_CMP;
EPwmRegHandle->HRCNFG.bit.HRLOADB = HR_CTR_ZERO_PRD;
EPwmRegHandle->HRPCTL.bit.TBPHSHRLOADE = 1;
EPwmRegHandle->HRPCTL.bit.HRPE = 0; //must be disable of duty cycle control
EPwmRegHandle->HRMSTEP.bit.HRMSTEP = 32;
/* Action Qualifer */
EPwmRegHandle->AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on CAU
EPwmRegHandle->AQCTLA.bit.CAD = AQ_CLEAR; // Clear PWM1A on CAD
EPwmRegHandle->AQCTLB.bit.CBU = AQ_SET; // Set PWM1B on event B, up count
EPwmRegHandle->AQCTLB.bit.CBD = AQ_CLEAR; // Clear PWM1B on event B, down count
/* Disable Dead-band */
EPwmRegHandle->DBCTL.bit.OUT_MODE = DB_DISABLE;
/* Clear Trip Zone configuration*/
EPwmRegHandle->TZCTL.all=0;
EPwmRegHandle->TZSEL.all=0;
EPwmRegHandle->TZDCSEL.all=0;
EPwmRegHandle->DCTRIPSEL.all=0;
/*Confiure Dead Band module if Enable (Dead time+ Polarity of OUTA/OUTB relative to ePWMxA) */
/*High Resolution Dead time */
EPwmRegHandle->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //FED+RED
EPwmRegHandle->DBCTL.bit.POLSEL = dead_band_polarity; // A same as CMD B is inverted
EPwmRegHandle->DBCTL.bit.IN_MODE = DBA_ALL; //A is Source for Falling and rising Edge
EPwmRegHandle->DBCTL.bit.SHDWDBREDMODE = 1;
EPwmRegHandle->DBCTL.bit.SHDWDBFEDMODE = 1;
EPwmRegHandle->DBCTL.bit.LOADREDMODE = 0; // Load on Counter == 0
EPwmRegHandle->DBCTL.bit.LOADFEDMODE = 0; // Load on Counter == 0
EPwmRegHandle->DBCTL.bit.HALFCYCLE = 1; //Need for High resolution Dead band
EPwmRegHandle->DBRED.bit.DBRED = EPWM_DB_RED_DLY; //RE delay DBRED*TCLK/2
EPwmRegHandle->DBREDHR.bit.DBREDHR = 0x0; //val *256 (where val is number of steps)
EPwmRegHandle->DBFED.bit.DBFED = EPWM_DB_FED_DLY; //FE delay DBFED*TCLK/2
EPwmRegHandle->DBFEDHR.bit.DBFEDHR = 0x0;//val *256 (where val is number of steps)
EPwmRegHandle->HRCNFG2.bit.EDGMODEDB = HR_BEP;//HR_BEP; // DBREDHR and DBFEDHR
EPwmRegHandle->HRCNFG2.bit.CTLMODEDBRED = 0; // Load on ZRO
EPwmRegHandle->HRCNFG2.bit.CTLMODEDBFED = 0; // Load on ZRO
EDIS;
in various testing , i have partly succeeded to achive high resoultion complementary PWM signlas only if
1. set Edge mode for channle A to Rising Edge (e.g. MEP mechansim)
2.set Edge mode for channel B to Falling Edge
.....
when i am updating pwm command( if i am not updating EPwm1Regs.CMPB.bit.CMPBHR , i see difference of the high resoultion)
EPwm1Regs.CMPA.bit.CMPA <= coarse resoultion
EPwm1Regs.CMPA.bit.CMPAHR <= fine resoultion
EPwm1Regs.CMPB.bit.CMPBHR <= fine resoultion
even tough it's partaly working , on some value i see jitter , and strange behavior
can you please advise on this matter ?