Hi,
I have configured my PWM timer initilization for inverter which are complementary and PWM outputs are gated (Init_Timer function below). I am using EPWM1 interrupt to process ADC data only.
InitPWMs-1/2/3()
{
// Allow synchronization
TBCTL.bit.SYNCOSEL = 0;
TBCTL.bit.PHSEN = 0;
TBCTL.bit.CLKDIV = 0;
TBCTL.bit.HSPCLKDIV = 0;
TBPHS.half.TBPHS = 0;
TBCTL.bit.FREE_SOFT = 2;
TBPRD = 5000;
CMPA.half.CMPA = 2500;
TBCTL.bit.CTRMODE = 2;
TBCTR = 0;
CMPCTL.bit.SHDWAMODE = 0;
CMPCTL.bit.SHDWBMODE = 0;
// Next PWM is set zero when CTR reaches zero and moved from Shadow to Active.
CMPCTL.bit.LOADAMODE = 0;
CMPCTL.bit.LOADBMODE = 0;
// Set actions: ACTIVE LOW-HIGH
AQCTLA.bit.CAU = 0x1;
AQCTLA.bit.CAD = 0x2;
// Setup the deadband - Active high complementary PWMs
DBCTL.bit.OUT_MODE = 0x3;
DBCTL.bit.POLSEL = 2;
DBCTL.bit.IN_MODE = 0x0;
DBRED = 10;
DBFED = 10;
}
With an interface I was able to change the duty cycle varying from 10% to 100% duty cycle and with fixed frequency and could able to see different PWM outputs. I was trying to configure a shorted PWM case which means
EPWM1A-> 12.5V or 100% EPWM1B -> 0V or 0%
EPWM2A-> 12.5V or 100%. EPWM2B -> 0V or 0%
EPWM3A-> 12.5V or 100%. EPWM3B -> 0V or 0%
or vice versa.
Inorder to acheive this,as per the document. I have set my PWM registers as below. In this case, my PWM just stops and never starts. Only option is to reset the processor and run the PWM. Short()
{
EPwm1Regs.TBPRD = PWM_PERIOD;
EPwm2Regs.TBPRD = PWM_PERIOD;
EPwm3Regs.TBPRD = PWM_PERIOD;
EPwm1Regs.half.bit.CMPA = 0x0000
EPwm2Regs.half.bit.CMPA = 0x0000
EPwm3Regs.half.bit.CMPA = 0x0000
}
Can I acheive this with this configuration or Am I missing some thing or IS THERE ANY MAGIC? I have referred EPWM document as well as SPRAA1 doc also. Replies greatly appreciated.
Thanks alot,
Regards,
Kuldeep