本文以STM32F1系列单片机为例,因为不同系列单片机的ADC参数是不一样的。
在《STM32中文参考手册》中可以看到关于ADC的一些关键介绍如下:
● ADC供电要求:2.4V到3.6V
● ADC输入范围:VREF- ≤ VIN ≤ VREF+
所以理论上来说ADC的测量范围是0-3.6V,但实际上我们给单片机都是3.3V供电,所以实际ADC的测量范围是0-3.3V
一、当被测电压VIN范围为0-3.3V
如下图若0<VIN<3.3V,直接连到MCU的ADC口即可测量电压值
二、当被测电压VIN最大值超过3.3V
如下图若0<VIN<10V,很明显10V超过了3.3V,如果直接连到MCU的ADC口会导致单片机损坏,所以这个时候就不能直连。比较常规的方法是通过电阻进行分压。
如下图通过R5和R6的分压,可以通过很简单的欧姆定律算出来:Vadc=1/3*VIN,由于0<VIN<10V,所以0<Vadc<3.3V
注意:需要留意分压电阻的阻值,避免错误配置导致电压过大,很明显下面就是错误的电阻分压配比。
三、当被测电压VIN最大值超过3.3V的第二种方法
被测电压超过3.3V除了上面的方法,还有另外一种方法,如下图,为了看起来方便和清楚,我将滤波电容都去掉了,实际项目中记得需要加滤波电容提高稳定性。
下图原理为本科知识点:基尔霍夫电流定律,即电流流入之和等于电流流出之和
(3.3-Vadc)/10+(VIN-Vadc)/30=Vadc/15
Vadc=(VIN+10)/6
由于0<VIN<10V,所以-10V<Vadc<10V
总结:
在用ADC测量电压的时候,需要留意被测电压范围,如果0V<V<3.3V,可以直接测量;
如果V>3.3V,可以用上面的第二种和第三种方式;
如果V>3.3V且可能V<0V,可以用第三种方式。
注意需要留意电阻的配比,欢迎大家进行讨论。
|