Hello. I am trying to implement a slope compensation by using the ramp generator for the comparator. I have set Comp1Regs.RAMPMAXREF_SHDW = 0xFFFF and Comp1Regs.RAMPDECVAL_SHDW = 100. When running the program in debug, I watch the register RAMPSTS and see that it is unchanged from 0. This is strange because I set the "rampmaxref" to max. This is then probably caused by an absence of a PWMSYNC
signal? I set DACCTL.bit.RAMPSOURCE = 0 which should make my EPWM1 as the ramp source. And I set EPwm1Regs.HRPCTL.bit.PWMSYNCSEL = 1, so the PWMSYNC should be generated when is CTR = 0. What else am I missing?
Here is the initialization code for the ramp and PWM1:
InitEPwm();
EALLOW;
EPwm1Regs.TBPRD = 900; // (100 KHz @ 60MHz clock)
EPwm1Regs.TBCTL.bit.PRDLD = 1; // immediate load
EPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical mode
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Phase loading disabled
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.TBPHS.all = 0; // time-base Phase Register
EPwm1Regs.TBCTR = 0; // time-base Counter Register
EPwm1Regs.TBCTL.bit.FREE_SOFT = 2; // free run on emulation suspend
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // Set PWM1A on Zero
// Define an event (DCAEVT2) based on
// Comparator 1 Output
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP1OUT; // DCAH = Comparator 1 output
EPwm1Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI; // DCAEVT2 = DCAH high(will become active
// as Comparator output goes high)
EPwm1Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT2; // DCAEVT2 = DCAEVT2 (not filtered)
EPwm1Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC; // Take async path // Enable DCAEVT2 as a
EPwm1Regs.TZSEL.bit.DCAEVT2 = 1;
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWM1A will go low
EPwm1Regs.HRPCTL.bit.PWMSYNCSEL = 1; //The PWMSYNC is CTR = 0;
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 1; // select SOC from zero match
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // generate pulse on 1st event
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; // enable shadow mode
EPwm1Regs.CMPCTL.bit.LOADAMODE = 2; // reload on CTR=zero
EDIS;
SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 1; // Enable clock to the Comparator 1 block
Comp1Regs.COMPCTL.bit.COMPDACEN = 1; //The comparator is powered up
Comp1Regs.COMPCTL.bit.SYNCSEL = 0x1; //Synchronous version
Comp1Regs.COMPCTL.bit.QUALSEL = 0x2; //3 clocks
Comp1Regs.COMPCTL.bit.CMPINV = 0x0; //pass through
Comp1Regs.COMPCTL.bit.COMPSOURCE = 0x0; //The inverting input is internal DAC
Comp1Regs.DACCTL.bit.DACSOURCE = 1; //Internal ramp
Comp1Regs.DACCTL.bit.RAMPSOURCE = 0; //EPWM1 is the ramp source
Comp1Regs.RAMPDECVAL_SHDW = 100; //Initial slope
Comp1Regs.RAMPMAXREF_SHDW = 0xFFFF;