器件型号: TMS320F280049C
我正在 使用 CMPSS 模块在代码中配置 ePWM 跳闸。
我已配置此跳闸路径所需的模块:
- CMPSS 模块
- ePWM X-BAR
- ePWM 数字比较和跳闸区域寄存器
跳闸是根据 CMPSS DACHCAL 基准值进行配置的。 但我可以看到所配置的 DAC 基准与实际发生跳闸的 ADC 原始值之间存在恒定偏移。
DACHCAL 为 1000、则行程时的 ADC 原始值为-> 500
DACHCAL 为 2000、则行程时的 ADC 原始值为-> 1500。
DACHCAL 为 3000、则行程时的 ADC 原始值为-> 2500。
Im 共享用于配置的代码。
这是什么原因?
//测试
AnalogSubsysRegs.CMPHPMXSEL.bit.CMP2HPMXSEL = 1; //对于 ADC C1
Cmpss2Regs.COMPCTL.bit.COMPDACE = 1U; //启用 CMPSS 模块
Cmpss2Regs.COMPCTL.bit.COMPHSOURCE = 0U; //高电平比较器负输入= DAC |正输入=外部 CMPSS 模拟输入
Cmpss2Regs.COMPCTL.bit.COMPHINV = 0U; //不反转高电平比较器输出
Cmpss2Regs.COMPCTL.bit.CTRIPHSEL = 0U; //为 CTRIPH 选择异步比较器输出|这可提供最快的跳闸响应
Cmpss2Regs.COMPCTL.bit.CTRIPOUTHSEL = 0U; //为 CTRIPOUTH 选择异步比较器输出
Cmpss2Regs.COMPDACCTL.bit.SELREF = 0U; // DAC 基准= VDDA
Cmpss2Regs.COMPDACCTL.bit.DACSOURCE = 0U; // DAC 值源=影子寄存器
Cmpss2Regs.COMPDACCTL.bit.SWLOADSEL = 0U; //在 SYSCLK 上加载 DAC
Cmpss2Regs.DACHVALS.bit.DACVAL = 3000U; //设置 DAC 高阈值= ADC 中值
Cmpss2Regs.DACHVALA.bit.DACVAL = 3000U;
Cmpss2Regs.COMPSTSCLR.bit.HLATCHCLR = 1U; //如果更早使用、请清除 CMPSS 高电平比较器锁存器
Cmpss2Regs.COMPCTL.bit.COMPLSOURCE = 0; //由 dac5 驱动的反相输出
Cmpss2Regs.DACLVALS.bit.DACVAL = 0; //不使用较低的 DAC
EPwmXbarRegs.TRIP4MUX0TO15CFG.BITS.MUX2 = 0U; //将 CMPSS1 CTRIPH 路由到 ePWM XBAR TRIP4
EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX2 = 1U; //为 TRIP4 启用 MUX0
EPwm4Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3U;
EPwm4Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; //当 DCAH 为高电平时生成事件
EPwm4Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1; //使用原始/未滤波的 DCAEVT1 信号
EPwm4Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC;//异步跳闸路径
EPwm4Regs.TZSEL.bit.DCAEVT1 = 1U; //启用 DCAEVT1 作为一个跳闸源
EPwm4Regs.TZCTL.BIT.TZA = TZ_FORCE_LO;
EPwm4Regs.TZCTL.BIT.TZB = TZ_FORCE_LO;
//清除旧的行程标志
EPwm4Regs.TZCLR.bit.DCAEVT1 = 1U;
EPwm4Regs.TZCLR.bit.OST = 1U;
EPwm4Regs.TZCLR.bit.INT = 1U;