STM32 精准采集ADC电压,误差分析

您所在的位置:网站首页 八位dac电路可分辨的最小输出电压为10mv STM32 精准采集ADC电压,误差分析

STM32 精准采集ADC电压,误差分析

2023-08-30 05:40| 来源: 网络整理| 查看: 265

ADC模块采集电压流程

数字世界和模拟世界的桥梁,对于嵌入式软件而言,大家止于采集功能的实现。

本文目的在于深入理解ADC,积累技术做出更加稳定优秀的产品。

在这里插入图片描述 STM32 大部分系列都是使用SAR 逐次逼近型电压采集 VIN是采集的模拟输入口,VREF表示参考电压。Sa PIN和内部ADC的开关。Sb 接地开关。

电压采集阶段 在这里插入图片描述 电压采集阶段就是内部电容充电的过程。Sb闭合后ADC内部(这里称之为采样保存电路,并不是转换器核心)的电容会进行充电,这个过程需要消耗一定的时间。一但采集完成,相当于复制了一份模拟输入引脚的 电压值。采集阶段完成后这个时候VIN已经不需要了,也就是说这个Pin 上的电压已经采集完毕。 在这里插入图片描述 等效电路就是VIN对电容2C进行充电。 前面说道这里是采用保持电路,所以有保持阶段 在这里插入图片描述 这个阶段就是各个电容充电完毕,在ADC核心转换器工作前的这断时间。这个时候VIN PIN模拟输入引脚已经和ADC断开了。Sb开路。 也就是说实际上ADC 转换核心转换的是采样保持电路的电压。所以务必要根据手册,明确采样阶段最小用时,确保充电阶段完成。 在这里插入图片描述 其等效电路入上图所示电容器一断的电压为-VIN

转换阶段 这个阶段的重点在于每次二分。 在这里插入图片描述

在这里插入图片描述 这里设计到一些电路的知识,如果是软件开发会比较难懂 在这里插入图片描述 在这里插入图片描述

具体的过程讲起来比较复杂,软件工程师只需要对其逐次逼近转换的二分思路有理解即可。

这个可能会因为各个芯片的转换核心而异

在这里插入图片描述 本节重点: 1.ADC的采样保持电路 ,采集VIN电压,形成副本供ADC转换核心使用 2.电压转换逐次逼近转换的二分思路 0.5+0.25+0.125+…=1 在这里插入图片描述 关于采样时间,采样时间是电容充电的过程,如上图所示,实线代表充电过程虚线代表放电。 t =RC, C 为采样电容,R为充电回路的电阻。 一般来说需要5 RC采样时间,这样内部电容可以精准的采集到输入电压。 在这里插入图片描述 5RC 时间大概采集到两端电压的99.3% 在这里插入图片描述 6RC 时间大概采集到两端电压的99.8% 这个电压值永远都无法充电到100%V,一般来说5RC的时间,认为充满。

5RC 充满到99.3%,还有千分之七的电压未采集。 7/1000 一般的ADC 12位 1/4049的采样精度。这个时候需要去看产品的设计要求。一般情况下不需要做补偿。

ADC module 转换误差

对于STM32 ADC,电压的最小可检测增量变化用LSB表示为:

1 LSB 表示ADC模块可分辨的最小电压 12 位ADC 其一个单位表示V* 1/4096 10 位ADC 其一个单位表示V* 1/1024

为了后面书写方便 1LSB的系数表示为 12 位ADC P = 1/4096 ,10 位ADC P= 1/1024

满量程转换电压V V 满量程转换电压,这部分不同的ADC和电路有不同的设计 V =(VREF+)-(VREF-) 一般采用这种

V =(VREF+)-(VSSD) 其中VSSD可以为GND。这取决于电路设计。

resault = Vin/V *P 其中Vin为需要采集的电压 Vin在不同的ADC模块中有不同的配置 Vin = Vi -VGND,对地电压 Vin = Vp -Vn 差分输入电压。 Vin = Vp- Vref- 一般而言是最后一种,取决于电路的连接情况和ADC模块。

把ADC作为一个系统而言,Vin是系统的输入,resault 是系统的输出

V是系统内部的电压,其如果变化,那么输出结果变化。转换结果的稳定性就会受到影响。 在这里插入图片描述 ADC器件内部的误差

1.偏移误差 offset

offset一般指的是偏移误差,较正确值产生的一段位移。

理想情况下,当模拟输入介于0.5 LSB和1.5 LSB之间时,数字输出应为1。

V >0.5 LSB 输出1,V0.5LSB +W 时输出才为1,V0 也就是Eo >0 在这里插入图片描述

w < 0 时 在这里插入图片描述 可通过应用固件轻松校准偏移误差。也就是在ADC初始化的时候 calibration

ADC Calibration 是一个很复杂的学问。我们只需要记得,一定要开启。

增益误差是指ADC实际传输特性曲线和理想传输特性曲线的偏差程度。增益误差的单位是%FSR(满量程值)。如果没有校准,那么增益误差会限制信号输出的准确性 在这里插入图片描述 红线为理想ADC的传输特性曲线,蓝线为实际ADC的传输特性曲线。 当然蓝色曲线在红色上方误差为 + ,再下方是为 -

微分线性误差 手册用 Linearity error 来表示。他表示了ADC器件在所有的数值点上对应的模拟值,和真实值之间误差最大的那一点的误差值。 输出数值偏离线性最大的距离 在这里插入图片描述 积分线性误差为任何实际转换和端点相关线间的最大偏离。 在这里插入图片描述 总未调整误差 总未调整误差( TUE)为实际和理想传输曲线间的最大偏离。此参数指定可能发生的会导致 理想数字输出与实际数字输出之间最大偏离的总误差。 在这里插入图片描述

ADC环境导致的误差

其中有很多是硬件工程师需要关注的问题,软件工程师需要对误差的来源有认识。 在必要的情况下,要求硬件工程师一起参与问题的分析。

1.参考电压噪声:电源的噪声导致参考电压波动,从而对ADC转换值产生影像 2.参考电压/电源调节:负载及其输出阻抗导致电源输出下降,影响到参考电压

3.外部参考电压参数 当使用外部参考电压源( VREF+引脚上)时,该外部参考源有一些重要参数。必须考虑三个 参考电压规格:温度漂移、电压噪声和长期稳定性

4.模拟输入信号噪声 在采样时间内,小而高频率的信号变化可导致较大转换误差。

5.最大输入信号幅度的ADC动态范围匹配不佳 被采集的信号电压波动范围,占ADC总量程的比例。

6.模拟信号源电阻的影响 在源和引脚之间的模拟信号源的阻抗或串联电阻( RAIN),可能会因为流入引脚的电流而导 致其上的电压降。通过电阻为RADC的开关控制内部采样电容( CADC)的充电。 在这里插入图片描述 7.PCB源电容和寄生电容的影响 在转换模拟信号时,必须考虑源电容和模拟输入引脚上的寄生电容 一般情况下低频信号不用考虑,当然需要结合RC时间常数来考虑 在这里插入图片描述 8.注入电流的影响 任何模拟引脚(或紧邻的数字输入引脚)上的负注入电流都可能在ADC输入中产生泄漏电流。 在这里插入图片描述

9.温度影响 温度对ADC精度有重要影响。它主要产生两种重要误差:偏移误差漂移和增益误差漂移。这些误差可以在微控制器固件中得到补偿 一般来说会制作一张温度和转换值的对应表格,用来修正温度对ADC的影像。

10.I/O引脚串扰 由于I/O之间的电容耦合,切换I/O可能会在ADC的模拟输入中产生一些噪声。彼此距离很 近或交叉的PCB走线可能会产生串扰。 内部切换数字信号和I/O会产生高频噪声。由于电流浪涌,切换高灌电流I/O可能导致电源 电压小幅下降。 PCB上与模拟输入走线交叉的数字走线可能影响模拟信号

在这里插入图片描述 11.EMI产生的噪声 在这里插入图片描述

如何得到最佳ADC精度

ADC自校准功能或通过微控制器固件可以轻松补偿偏移误差和增益误差。

参考电压/电源噪声最小化(硬件设计),一般来说使用噪声小的电源,增加滤波电路。

MCU端去耦,引脚间产生耦合 在这里插入图片描述

参考电压/电源调节 电源的负载会产生变化,需要保证电压供给VREF 不会应为负载变化而变动

模拟输入信号噪声消除

1.多次求平均值 2.添加外部滤波器 3.添加白噪声或三角波扫描来改善分辨率。软件工程师只需要去求平均值。 4.将ADC动态范围与最大信号幅度进行匹配 在这里插入图片描述 使用前置放大器。相对来说使用Gain的器件会引入误差,需要考虑是否划算。 在这里插入图片描述 5.模拟源电阻 (硬件方法) 6.源频率条件 vs. 源和寄生电容 (硬件 方法) 7.温度影响补偿 前面说过用查表 8.注入电流最小化(硬件方法) 9.I/O引脚串扰最小化 在这里插入图片描述 10.减少EMI所致噪声(硬件方法) 11.将模拟和数字布局分开(硬件方法) 12.隔离模拟和数字电路电源(硬件方法)

提高精度的软件方法

1.平均采样 多次采样会消耗跟多时间 2.数字滤波 3.AC测量的快速傅里叶变换 4.ADC校准:偏移、增益、位权重校准 5.使CPU生成的内部噪声最小化 软件上比较高端的操作,在采样和转换周期数字静默

实践方法

1.多次求平均值

在这里插入图片描述 多次就平均值的 方法比较常见。采样N次,求N次采样的平均值。如果N为2的倍数,可以用位移的方法快速求得平均值。 在这里插入图片描述 总转换时间 = (采样数 * ADC 转换时间) + 计算时间 额外的开销在与采样次数 和 计算时间。

uint16_t ADC_GetSampleAvgN(uint8_t N) { uint32_t avg_sample =0x00; uint16_t adc_sample[8]={0,0,0,0,0,0,0,0}; uint8_t index=0x00; /* 得到 N 个 ADC 采样 */ for (index=0x00; index avg_sample += adc_sample[index]; } /* 计算 N 个 ADC 采样的均值 */ avg_sample /= N; /* 返回均值 */ return avg_sample; }

基于先取 N 个 ADC 采样,将它们从最大值到最小值 (或相反顺序)排序,然后删除两端的 X 个采样。 此平均方法比之前一个更有效,因为它删除了会影响平均的两端值,而且它在执行时间和转换精度之间给出了一个较好的折中。 在这里插入图片描述 同样额外的开销是计算时间。

ADC 的软件滤波方法

1.限制幅度滤波 两次采样值的差值如果过大,则认为最近一次的值采集误差较大,舍去。

该方法需要对采样值的变化幅度有所认知。也就是信号在采样间隔下的波动范围。采样值的波动超过原始信号的波动幅度认为采集到的数据 收到干扰,故舍弃采样值。

2.中间值 采样多次,按照数值大小排列,去中间值为采样值

对于信号的波动速度比较慢的信号效果比较好

3.求平均值 采样多次直接求平均

采样多次意味着时间跨度较长,平均值的意义是一段时间的中间值。所以灵敏度比较低 适合随机扰动的系统

4.递推平均

按照时间顺序,设定窗口大小,移动窗口进行采样

5.中值平均

采样N个值,去掉最大最小 计算平均值

6.限幅平均 根据1方法,求平均值

7.一阶低通 y=K本次结果+(1-K)上次结果

8.加权平均 采样多次,每次采样的结果分配权重,取得平均值

9。消抖 在一段时间内采样值波动幅度在可接收范围内,认为抖动消除

10.限制幅度消除抖动 1,9方法结合



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3