前言:最近开发中遇到一个问题,某一路ADC通道采集的AD值波动比较厉害,达到9个hex值波动,对此进行了分析排查......
1 排除硬件因素
用示波器对电路图上该ADC通道的测试点进行电压测量,发现电压比较稳定,换算下来顶多2个hex值波动,对此排除硬件因素。
2 分析该ADC通道特殊性
调试发现出问题的AD通道所在的Adc内核还有其它通道的AD值也会存在波动。然后在MCAL配置中,对ADC模块配置进行对比分析,发现只有AdcHwUint2中有两个Group用了不同触发源触发,其它的Adc内核都只用了一个触发源,为此怀疑是触发源的问题。为此将AdcHwUint2中两个Group改成同一触发源触发,结果波动消失,证明猜测正确。然后进行了触发源方向相关怀疑...
3 采样转换时间接近
由于触发源不同且触发源的周期不一致,导致两个Group转换时间可能非常接近导致这种现象。措施:将ATOM3_0修改为ATOM1_2,且参考ATOM1_1,触发时间间隔50us。结果:波动现象还有。排除采样转换时间接近的怀疑点。
4 GTM本身的问题:不能同时用两个ATOM通道
措施:将Group2改为软件触发。结果:波动现象还有。
5 配置的采样时间,预充时间不够
措施:增大采样时间,预充时间。结果:波动现象还有。
6 修改各种配置参数尝试
接下来就对于ADC的一些MCAL配置进行修改验证,结果发现开启AdcHwUint2中的闲时预充功能,波动异常没有了。芯片手册对这个参数的描述为,Adc空闲时(即不转化)会将采样电容预充到2.5V。那样对于转化2.5V以上模拟信号的速度将会快一点(如0-5V和2.5-5V,后者时间少)。问了下英飞凌的人,他们说一般这个选项开启比较好,至于为什么不开启会导致这种现象,解释不通。
7 结论
得出结论:开启闲时预充使能会让配置了两个触发源(无论硬件触发软件触发)的Adc内核中adc采样波动变正常。原因不知。