« 上一篇下一篇 »

MCU通用ADC使用总结(以AT为例)

一、非5V容忍(FT)的引脚,如果输入的电压高于3.3V,会导致ADC测量值完全不准,测出来的数值看起来像是被抬高了。

这个是因为最近在做一个项目,需要用到MCU ADC的多个通道来检测电压,但是调试程序时发现,ADC测量到的值和用万用表实测的值差异相当大,几乎就是毫不相干。为了进一步验证,又测了MCU内部的1.2V参考电压,发现测出来的值达到了满幅,数值为4095,换算成电压是3.3V,这就非常奇怪,因为只要MCU正常工作,内部的1.2V参考电压总是在1.2V左右才是对的。

然后又以为是程序的问题,用了AT官方的例程代码,现象照旧,然后这时把搭载MCU的核心板放在其他的底板上测量,发现内部1.2V参考电压是正常的,但是装在整机上就不正常,这下大致知道是硬件原因导致的该问题,但一时间无法确认到底是硬件哪里有问题。

然后听同事说,之前碰到过这种情况,只要给MCU非5V容忍的IO输入了5V电压,ADC的检测值就完全不对,于是就照着这个方向来找问题。先是从整机上单独引出供搭载MCU的核心板的电源+5V,发现这时内部1.2V参考电压测量是正常的,于是就用排线加排针,把核心板用线把全部IO连起来,然后一根一根拨掉,终于找到了原因,确实是某个IO一接入外面电压就会导致整个ADC测量出错,一量该IO的电压,居然有3.7V,这里大概知道就是因为进某个IO的电压过高的原因导致ADC测量值异常。

然后反复的测试,发现了不只一个IO,一共有4个IO都会产生这种影响,然后量了这4个IO的电压,几乎都是3.6V以上。断开这4个脚和外部电压的连接,再把剩余其他所有的脚都接上,这时发现内部参考电压测量也是正常的,所以就是这4个IO的输入电压过高,导致了ADC测量值异常,也可以说是整体被抬高了。

但是这里有一个疑问,就是通过AT的data sheet可以查到,即使是非5V容忍的IO,能够允许的输入电压最大值也可以去到4.0V,但是现在只是3.7V就已经导致ADC工作不正常了,所以这里无法理解,到底是手册的参数虚标,还是说手册没说清楚,难道是4V以下保证数字部分正常,模拟部分不正常???这也太奇怪了吧。

总之,进入ADC测量IO的电压一定不能高于3.3V,而且也不是只有ADC测量脚,其他所有的非5V容忍的IO,都要遵循这个原则,要从设计上就要保证

后面,把上面有问题的4个IO进来的电压通过调整分压电阻把电压降到3.3V以下后,所有的脚接上,ADC的测量值也是正确的了。


二、以后和客户对接需求,一定要明确到每一个实现上的细节。

1、就比如上面ADC的问题,本来对接时就要求过对方,电压一定要保证在0~3.3V之间,结果板子给过来还是出了问题,一方面是他们根本没测试过,二方面是我自己也没意识到,本来可以一检查就看出问题的,但是可能也是缺少经验,所以才折腾了不少时间。

2、检测的信号是直流还是交流,这些都要说清楚,有些东西你觉得是常识,可是有些人就是人才,基本常识都没有,这些东西不确认好,后期出了问题,我也得跟着折腾,没必要。

3、有些时候思路还是要开扩点,比如上面ADC的问题,在自己底板上没问题,在人家整机上有问题,就没有想到先从电源开始,一步一步的缩小问题范围,老是觉得硬件不知道是哪里有问题,但是本来接的就只有这些IO,一个一个的断开来试,肯定能找出问题的,不是电源有问题那就只能是IO有问题,IO没问题那肯定是电源有问题,所以思路还是要开扩些。


2023.11.07 21:36 于花都