Part Number: TMS320F280049C
I am configuring the ePWM trip in my code using the CMPSS module.
I have configured the required modules for this trip path:
- CMPSS module
- ePWM X-BAR
- ePWM Digital Compare and Trip Zone registers
The trip is configured based on the CMPSS DACHVAL reference value. But I am seeing a constant offset between the configured DAC reference and the ADC raw value at which the trip actually happens.
DACHVAL is 1000 then the adc raw value at the trip is -> 500
DACHVAL is 2000 then the adc raw value at the trip is -> 1500.
DACHVAL is 3000 then the adc raw value at the trip is -> 2500.
Im sharing the code for the configuration.
what is the reason for that?
// testing
AnalogSubsysRegs.CMPHPMXSEL.bit.CMP2HPMXSEL = 1; // for ADC C1
Cmpss2Regs.COMPCTL.bit.COMPDACE = 1U; // Enable CMPSS module
Cmpss2Regs.COMPCTL.bit.COMPHSOURCE = 0U; // High comparator negative input = DAC |Positive input = external CMPSS analog input
Cmpss2Regs.COMPCTL.bit.COMPHINV = 0U; // Do not invert high comparator output
Cmpss2Regs.COMPCTL.bit.CTRIPHSEL = 0U; // Select asynchronous comparator output for CTRIPH |This gives fastest trip response
Cmpss2Regs.COMPCTL.bit.CTRIPOUTHSEL = 0U; // Select asynchronous comparator output for CTRIPOUTH
Cmpss2Regs.COMPDACCTL.bit.SELREF = 0U; // DAC reference = VDDA
Cmpss2Regs.COMPDACCTL.bit.DACSOURCE = 0U; // DAC value source = shadow register
Cmpss2Regs.COMPDACCTL.bit.SWLOADSEL = 0U; // DAC load on SYSCLK
Cmpss2Regs.DACHVALS.bit.DACVAL = 3000U; // Set DAC high threshold = mid ADC value
Cmpss2Regs.DACHVALA.bit.DACVAL = 3000U;
Cmpss2Regs.COMPSTSCLR.bit.HLATCHCLR = 1U; // Clear CMPSS high comparator latch if used earlier
Cmpss2Regs.COMPCTL.bit.COMPLSOURCE = 0; // inverting out of comp driven by dac5
Cmpss2Regs.DACLVALS.bit.DACVAL = 0; // not using lower dac
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX2 = 0U; // Route CMPSS1 CTRIPH to EPWM XBAR TRIP4
EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX2 = 1U; // Enable MUX0 for TRIP4
EPwm4Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3U;
EPwm4Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; // Generate event when DCAH is high
EPwm4Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1; // Use original/unfiltered DCAEVT1 signal
EPwm4Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; // Asynchronous trip path
EPwm4Regs.TZSEL.bit.DCAEVT1 = 1U; // Enable DCAEVT1 as one trip source
EPwm4Regs.TZCTL.bit.TZA = TZ_FORCE_LO;
EPwm4Regs.TZCTL.bit.TZB = TZ_FORCE_LO;
// Clear old trip flags
EPwm4Regs.TZCLR.bit.DCAEVT1 = 1U;
EPwm4Regs.TZCLR.bit.OST = 1U;
EPwm4Regs.TZCLR.bit.INT = 1U;