Tool/software: TI C/C++ Compiler
I want to generate PWM signal in PWM pin 2A and 3A depending on the sensing signal in ADC05. The program required is such that when sensed signal in pin ADC05>1 then PIN 2A generate high frequency signal and PIN 3A should be high. Similarly, when ADC05<=1 then PIN 3A generate high frequency signal and PIN 2A should be high. I am not able to generate expected signal and including my program below, please help me to solve the problem.
void init_dpwm2(void)
{
Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 0; //disable everything
Dpwm2Regs.DPWMCTRL0.bit.CLA_EN = 1;
Dpwm2Regs.DPWMCTRL1.bit.GPIO_A_EN = 1; //turn off DPWM2A for now
Dpwm2Regs.DPWMCTRL1.bit.GPIO_B_EN = 1; //turn off DPWM2B for now
// Enable CBC and Blanking windows
Dpwm2Regs.DPWMCTRL0.bit.MULTI_MODE_CLA_A_OFF = 1; // Enable cycle by cycle current limit.
Dpwm2Regs.DPWMCTRL0.bit.BLANK_A_EN = 1; // Enable blanking
Dpwm2Regs.DPWMBLKABEG.all = 0x0000;
Dpwm2Regs.DPWMBLKAEND.all = 0x0500;
Dpwm2Regs.DPWMFLTCTRL.bit.A_MAX_COUNT = 2;
Dpwm2Regs.DPWMFLTCTRL.bit.ALL_FAULT_EN = 1; //enable this for OVP
Dpwm2Regs.DPWMCTRL2.bit.SAMPLE_TRIG_1_EN = 1; //enable sample trigger1
Dpwm2Regs.DPWMCTRL0.bit.PWM_MODE = 2; //triangular mode
Dpwm2Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN = 1; //slave mode
Dpwm2Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1; //update right away
Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 1;
}
void init_dpwm3(void)
{
Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 0; //disable everything
Dpwm3Regs.DPWMCTRL0.bit.CLA_EN = 1;
Dpwm3Regs.DPWMCTRL1.bit.GPIO_A_EN = 1; //turn off DPWM2A for now
Dpwm3Regs.DPWMCTRL1.bit.GPIO_B_EN = 1; //turn off DPWM2B for now
// Enable CBC and Blanking windows
Dpwm3Regs.DPWMCTRL0.bit.MULTI_MODE_CLA_A_OFF = 1; // Enable cycle by cycle current limit.
Dpwm3Regs.DPWMCTRL0.bit.BLANK_A_EN = 1; // Enable blanking
Dpwm3Regs.DPWMBLKABEG.all = 0x0000;
Dpwm3Regs.DPWMBLKAEND.all = 0x0500;
Dpwm3Regs.DPWMFLTCTRL.bit.A_MAX_COUNT = 2;
Dpwm3Regs.DPWMFLTCTRL.bit.ALL_FAULT_EN = 1; //enable this for OVP
Dpwm3Regs.DPWMCTRL2.bit.SAMPLE_TRIG_1_EN = 1; //enable sample trigger1
Dpwm3Regs.DPWMCTRL0.bit.PWM_MODE = 2; //triangular mode
Dpwm3Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN = 1; //slave mode
Dpwm3Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1; //update right away
Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 1;
}
void standard_interrupt(void)
{
poll_adc();
rectify_vac();
Ic = 0.0;
AdcRegs.ADCCTRL.bit.SW_START=0;
Ic = AdcRegs.ADCAVGRESULT[5].all;
AdcRegs.ADCCTRL.bit.SW_START = 1; //RESTART
LoopMuxRegs.FILTERMUX.bit.FILTER1_FE_SEL = 0; //use EADC2 to drive filter 1
Dpwm2Regs.DPWMCTRL1.bit.GPIO_A_EN = 1;
Dpwm3Regs.DPWMCTRL1.bit.GPIO_A_EN = 1;
LoopMuxRegs.FILTERMUX.bit.FILTER1_FE_SEL = 0; //use EADC2 to drive filter 1
if(Ic<0.987)
{
Dpwm2Regs.DPWMCTRL1.bit.GPIO_A_EN = 0; //now turn on neutral PWM
Dpwm3Regs.DPWMCTRL1.bit.GPIO_A_VAL = 1; //and then drive line always high
}
else
{
Dpwm2Regs.DPWMCTRL1.bit.GPIO_A_VAL = 1; //line drive low
Dpwm3Regs.DPWMCTRL1.bit.GPIO_A_EN = 0; //now disable neutral PWM
}
}