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.

How to configure center aligned PWM and ADC sampling 28069

Hi C2000 gurus,

I am using a Piccolo 28069 to control 3 phase servo motors in an industrial inverter application. I would like to modify my setup for center aligned pwm pulses and sample phase adc's at the center of a PWM pulse to get more accurate readings. Essentially I want to run center aligned PWM's and trigger adc sampling. I need help/hints determining which PWM registers to configure on the PWM's for the following. 

1. Which registers do I look  at to ensure the PWM's are configured center aligned? I'm currently using a example macro

#define PWM_INIT_MACRO(ch1,ch2,ch3,v) \
/* Setup Sync*/ \
(*ePWM[ch1]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
(*ePWM[ch2]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
(*ePWM[ch3]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
\
/* Allow each timer to be sync'ed*/ \
(*ePWM[ch1]).TBCTL.bit.PHSEN = 1; \
(*ePWM[ch2]).TBCTL.bit.PHSEN = 1; \
(*ePWM[ch3]).TBCTL.bit.PHSEN = 1; \
\
/* Init Timer-Base Period Register for EPWM1-EPWM3*/ \
(*ePWM[ch1]).TBPRD = v.PeriodMax; \
(*ePWM[ch2]).TBPRD = v.PeriodMax; \
(*ePWM[ch3]).TBPRD = v.PeriodMax; \
\
/* Init Timer-Base Phase Register for EPWM1-EPWM3*/ \
(*ePWM[ch1]).TBPHS.half.TBPHS = 0; \
(*ePWM[ch2]).TBPHS.half.TBPHS = 0; \
(*ePWM[ch3]).TBPHS.half.TBPHS = 0; \
\
/* Init Timer-Base Control Register for EPWM1-EPWM3*/ \
(*ePWM[ch1]).TBCTL.all = PWM_INIT_STATE; \
(*ePWM[ch2]).TBCTL.all = PWM_INIT_STATE; \
(*ePWM[ch3]).TBCTL.all = PWM_INIT_STATE; \
\
/* Init Compare Control Register for EPWM1-EPWM3*/ \
(*ePWM[ch1]).CMPCTL.all = CMPCTL_INIT_STATE; \
(*ePWM[ch2]).CMPCTL.all = CMPCTL_INIT_STATE; \
(*ePWM[ch3]).CMPCTL.all = CMPCTL_INIT_STATE; \
\
/* Init Action Qualifier Output A Register for EPWM1-EPWM3*/ \
(*ePWM[ch1]).AQCTLA.all = AQCTLA_INIT_STATE; \
(*ePWM[ch2]).AQCTLA.all = AQCTLA_INIT_STATE; \
(*ePWM[ch3]).AQCTLA.all = AQCTLA_INIT_STATE; \
\
/* Init Dead-Band Generator Control Register for EPWM1-EPWM3*/ \
(*ePWM[ch1]).DBCTL.all = DBCTL_INIT_STATE; \
(*ePWM[ch2]).DBCTL.all = DBCTL_INIT_STATE; \
(*ePWM[ch3]).DBCTL.all = DBCTL_INIT_STATE; \
\
/* Init Dead-Band Generator for EPWM1-EPWM3*/ \
(*ePWM[ch1]).DBFED = v.Deadband; \
(*ePWM[ch1]).DBRED = v.Deadband; \
(*ePWM[ch2]).DBFED = v.Deadband; \
(*ePWM[ch2]).DBRED = v.Deadband; \
(*ePWM[ch3]).DBFED = v.Deadband; \
(*ePWM[ch3]).DBRED = v.Deadband; \
\
/* Init PWM Chopper Control Register for EPWM1-EPWM3*/ \
(*ePWM[ch1]).PCCTL.all = PCCTL_INIT_STATE; \
(*ePWM[ch2]).PCCTL.all = PCCTL_INIT_STATE; \
(*ePWM[ch3]).PCCTL.all = PCCTL_INIT_STATE; \

 

2. Which registers do I look at to ensure the PWM Trigger the ADC SOC at the center? I think I should be still looking at PWM registers.

For example, my current setup uses the following for setting my ADC SOC source.

EPwm4Regs.ETSEL.bit.SOCAEN = 1; /* Enable SOCA */ 
EPwm4Regs.ETSEL.bit.SOCASEL = 2; /* Enable period event for SOCA */ 
EPwm4Regs.ETPS.bit.SOCAPRD = 1; /* Generate SOCA on the 1st event */ 
EPwm4Regs.ETCLR.bit.SOCA = 1; /* Clear SOCA flag */

Any help or suggestions is appreciated.