STM32 ADC

一.引入

在学习ADC之前首先我们要知道什么是ADC,ADC有什么用?

引用百度上的一句话,我们处在数字时代,但是我们的视觉,听觉,感觉,嗅觉,等感知的却是一个模拟时代,如何将两者联系起来就需要模拟数字转换器(ADC),和数字模拟转换器(DAC)显身手的时候了。

说的很玄乎,简单理解就是通过我们的设备将摸不到的温度,显示成37摄氏度,然后你就知道该穿什么衣服了。

而在我们嵌入式的应用中呢,任何一个信号系统,都需要我们的传感器探测电压,电流,温度,压力,等信号,然后通过放大电路放大,在通过ADC转化为数字信号,有了数字信号,就可以通过单片机等MCU进行处理,得到我们想要的数据。

如果我们想使用ADC,有像stm32这种的mcu自己内部集成了ADC,也可以选用外部的ADC通过IIC,串口等方式与MCU进行对接,不管哪种方式,ADC的原理和实现是一样的。

针对不同的应用场景我们选取的时候肯定要根据自己的需求来,成本,精度,速度等很多方面来选取ADC。比如我们想采集一个不需要很准确的信号的时候就可以选用MCU内部的10位的ADC,向我们医疗设备要求精度高,采样快,我们可以选用一些外部牛逼的ADC。

一说到ADC,都会问是10位的,12位的还是16位的,那么这又是什么意思呢??

10位就是10位2进制的意思0-1023

12位就是12位2进制的意思0-4095

16位就是16位2进制的意思0-65534

说的也就是ADC的分辨率。

比如说我们想采集一个3.3v的电压值,3.3v分成1024份表示和分成65535份表示,

那当然65535表示的精度更高。

这里我们老是说多少“份”,好low偶,ADC里叫LSB,也就是1023 LSB。记住了偶。

 

二.如何选择ADC

当然我们在选择ADC的时候除了要知道他的分辨率,参考电压,还有速度之外。还要知道一些ADC的性能指标。这些性能指标会影响你的采集精度,虽然你可以说后期通过各种牛逼算法校准过来,但这些属于你的基础,你非得选个1.5米的小个子去扣篮,你鞋再牛逼也不太可能啊。

就好像我们在选择手机拍照的时候,总是喜欢对比摄像头多少万像素,但是有时你会发现

苹果800万像素有时比你2000万像素的山寨机拍照效果还好。(要考虑综合参数)

 

下面是一个stm32 ADC部分的datasheet

STM32 ADC_第1张图片

 

1.总未调整误差(ET):实际转换曲线与理想转换曲线最大差别

 

STM32 ADC_第2张图片

2.偏移误差(EO):实际转换-理想转换

STM32 ADC_第3张图片

 

3.增益误差(EG):最后一次转换-理想转换

 

STM32 ADC_第4张图片

4.微分线性误差(ED):实际步长和理想步长的最大差别。

STM32 ADC_第5张图片

 

5.积分线性误差(EL):实际转换点与终点连线的最大差别。

STM32 ADC_第6张图片

 

上面是ADC的一些内部特性,里面的误差由厂家来把控,不用我们操心,你家说在这个范围,肯定是在这个范围,只要确定这个范围值满足不满足你的项目。

但是选型完毕,你就万事大吉了?打好了地基,并不说明你盖好了高楼。

 

三.外部的ADC误差来源:

1.电源噪声

通常参考电压 = 电源电压 = 3.3VDC (PS:也有5v等等)

当电源噪声叠加到电源电压上,引起测量误差。

           电源电压:   3.3VDC

           输入信号:   1.0VDC

           电源噪声:   0.04VDC

  误差:   1 / (3.34-3.26)*4096      (12位AD)

 

2.输入噪声

当输入噪声叠加到电源电压上,引起测量误差。

          电源电压:3.3VDC

          输入信号:1.0VDC

          输入信号噪声:0.04VDC

 误差: (1.04-0.96) / (3.3)*4096      (12位AD)

 

3.信号源阻抗的影响

STM32 ADC_第7张图片

源阻抗RAIN和芯片内部电阻RADC,影响充电时间,

从而影响测量结果,Tc =(RAIN+RADC)*CADC。

 

4.信号外部电容和PCb分布电容影响

STM32 ADC_第8张图片

外部电容CAIN和分布电容CP,影响充电时间、频

率,从而导致测量误差。

 

上面基本上误差的引入分析完了,当然只是说的一些大碴子,肯定还有很多其他的小误差,这里不说了。

 

四.如何来减小误差

  1. 通过降低电源的噪声提高采样准确性

STM32 ADC_第9张图片

电源和地线之间增加0.1uF和1-10uF钽电容。

 

2.通过降低输入信号的噪声

  增加外部滤波器,如RC低通滤波,带通、高通滤波等,保证需要频率信号有效,阻断或限制不需要的噪声。

  通过信号的多次采样,通过软件平均的方法,可有效消除不频繁变化模拟信号上的噪声。

 

3.调整ADC采集的动态范围

STM32 ADC_第10张图片

 充分利用AD可测量的范围,提高参考电压和采用前置放大器。

 

4.选取合适的源阻抗

  假设最大允许误差1/2LSB,也就是VAIN-VC=1/2LSB,VC为内部实际电压,VAIN为输入电压。

  已VAIN=VREF输入时,ts为采样时间,计算最大源阻抗。

Rmax=(RAIN  +  RADC)max

N为ADC分辨率

Rmax=ts  /  (CADC  *  ln(2^(N+1)))

 

最终计算公式:

 

例:

fADC=14MHz,CADC=8pF,RADCmax=1kΩ,当采样Ts=7.5秒时,误差1/2LSB时的RAINmax是多少

 

5.合理布线减小数字信号(I/O引脚)对模拟信号的影响

 

STM32 ADC_第11张图片

信号线用地线隔离

 

6.减小EMI(电磁干扰)

 采用屏蔽线将远距离信号连接到PCB,屏蔽层在信号接收端接地。如下图

STM32 ADC_第12张图片

 

7.合理PCB 布局,采用数字模拟分开布局方式

STM32 ADC_第13张图片

8.合理PCB布局,采用独立电源给模拟和数字供电,星型网络连接模拟,数字地

STM32 ADC_第14张图片

 

9.高输入阻抗源信号采样减小采样误差的方法

 

STM32 ADC_第15张图片

   当S1开关闭合时,Csh上电压会施加到输入管脚上,当采样结束S2断开时,Csh上电压不能有效释放,导致测量电压不准,通过添加Cext减小,使得采用完成后,Csh上电压得到有效释放如1/2LSB。

STM32 ADC_第16张图片

STM32 ADC_第17张图片

 

当我们把前期工作做好之后,再通过牛逼的算法加持(平滑等),一定能够获得满足要求的精度。

 

你可能感兴趣的:(stm32,传感器(外设))