玩过STM32的小伙伴都知道,STM32内部AD采集的电压范围是0-3.3V,但如果我们想采集一些传感器信号,传感器信号不一定输出0-3.3V的电压信号,比如说有的传感器输出是0-5V,甚至有的传感器输出的是-5V到+5V,包含这种负电压的情况,我们该怎么采集?
方案1:外部AD
使用外部AD配合SPI通讯进行采集,此方案可以一招解君愁,比如说AD7606芯片,可以采集±10V以内的电压,这样0-5V自然不在话下,而且AD7606是16位的采集精度,能满足大部分的采样需求,所以个人强烈推荐外部AD采集的方案,但有时考虑到成本或者电子基础,无法使用外部AD的话,请看方案2
方案2:电阻分压
电阻分压方案很简单,我直接用一个20k和30k的电阻串联,输入0-5V,在30k的输入端就可以被分压成0-3V,这样就可以采集0-3V的电压了,注意:我们在电路设计时,一般要留有余量,不要顶着3.3V的量程去设计电路,否则有可能会烧毁MCU,这就得不偿失了。
但电阻分压虽然简单,不过有很大的弊端,因为涉及到一个原因叫做“阻抗”,阻抗这个词,我一直理解不好,这两天有点新的体会:阻抗就说是电路中对电流的阻碍作用,直流电路中,可以看做电阻,交流电路中,可以看作电感或电容,就像是电流通过电路时的“摩擦力”,它决定了电流流动的难易程度。你可以把它想象成水流通过管道时,管道的粗细、弯曲程度和水的流速。这些因素都决定了水流的快慢。
为什么单纯电阻分压纯在弊端呢?答案就是 很有可能阻抗不匹配
信号源阻抗(例如传感器的输出阻抗)和ADC输入阻抗之间的不匹配,会导致信号衰减。具体而言,若信号源的阻抗较高,而ADC的输入阻抗较低,ADC会从信号源中“吸取”一部分电流,造成信号电压下降。这种衰减会使得采集的信号强度变小,降低采样精度。因为ADC通常会有一个采样保持电容,它用来保持采样瞬间的输入电压值。为了使采样结果准确,输入信号需要在电容上迅速且稳定地充电。如果信号源阻抗较高(例如,源阻抗在几千欧姆到几十千欧姆之间),采样保持电容的充电过程将变慢,从而导致电容未能及时充电到准确电压,进而影响采样的精度。
继续以水流为例,我个人非常喜欢用水流来理解电流。
想象你在家里用水管给花园浇水,水管有不同的直径(大小)。如果水管一端非常宽,而另一端非常窄,水流就会遇到阻力,甚至可能倒流或者喷溅,导致水流不顺畅。同样的道理,电信号从一个设备传输到另一个设备时,如果两者的阻抗(相当于水管的大小)不匹配,信号就无法顺畅地传递,甚至可能出现反射、衰减或失真。
方案2:电阻分压+电压跟随
一般传感器的内阻,我们不好得到,所以个人感觉,考虑阻抗匹配不如考虑电压跟随器隔离阻抗,采用电阻分压配合一个电压跟随器,便可以解决这个问题,这也是为什么很多电子工程师在AD采集端之前要加一个电压跟随器,关于电压跟随器,个人理解就是一个缓冲器,增益为1,也就是说不会对信号的电压进行放大,输出电压等于输入电压。
那这时候会有小伙伴问:既然输出电压等于输入电压,那么要电压跟随器的作用是什么?
这时候就要提出电压跟随器的另一个特性:高输入阻抗,低输出阻抗,说人话就是
这使得它能够驱动较大的负载而不导致输出电压下降。它能够向后级电路提供足够的电流,适应更大的负载,可以在不影响前级电路的情况下,将信号输出到后级电路,起到信号隔离的作用;
下面就是一个电阻分压配合电压跟随器的例子:
仿真后电压结果
这就是一个比较常用的解决方案,希望对大家有所帮助!