单片机提高ADC精度总结
在常用传感器中,模数转换器是其中至关重要的环节,模数转换器的精度以及系统的成本直接影响到系统的实用性。因此。如何提高模数转换器的精度和降低系统的成本是衡量系统是否具有实际应用价值的标准。

图 1 ADC工作流程
一、ADC简单介绍
ADC可分为SAR型、积分型、Σ-Δ型、折叠型等方式。SAR ADC因其功耗低、精度高、面积小等特点而被用于超大规模IC和片上系统中。SAR ADC的精度是关键参数。SAR ADC有采样、量化和编码等三种功能。三种功能中,采样最重要。采样的精确性决定了ADC的转换精度。逐次逼近型 ADC 中电路模块主要包括:S/H 电路、电容阵列、比较器、逐次逼近控制逻辑、时钟及偏置电路等,而 S/H 电路、电容阵列、比较器是高精度逐次逼近型 ADC 设计的关键。
首先由采祥保持电路采集并保持某点信号一段时间,在保持的这段时间里,对该点信号进行量化处理,以0或1数字编码形式输出,该串数字码与不同权重的参考电压相乘再相加,就是该点的电压值。按照这种方式,每隔一定周期就可以量化连续的模拟信号某点的电压值,采样点越多,还原的模拟信号就会越精确。

图 2 不同ADC架构性能总结
ADC的精度是整个电路和系统精度至关重要的部分。ADC的精度和分辨率是两个不同的概念。精度指转换后所得结果相对与实际值的准确度;分辨率是指转换器所能分辨的模拟信号的最小变化值。一般来讲,分辨率越高,转换误差越小;但影响精度的因素较多,分辨率很高的ADC,可能并不一定具有很高的精度。
所谓嵌入式模数转换器是指将模拟多路开关、采样保持、A/D转换、微控制器集成在一个芯片上。经常采用逐次比较型进行A/D转换,模拟输入信号一般为非负单极性。且输入信号的电压范围为0~AVREF。
二、影响ADC精度参数
在验证ADC性能的时候,可以通过相关参数衡量其性能优劣,这些参数大体分为两大类,即静态参数和动态参数。
1、ADC静态特性参数
静态特性与时间无关,它是指实际量化特性与理想量化特性之间存在的偏差,包括:积分非线性误差(Integral Non-Linearity:INL)、微分非线性误差(Differential Non-Linearity; DNL)、增益误差(Gain error)、失调误差(Offset error)、分辨率(resolution)。
(1)增益误差(Gain error)
ADC 模块的输入、输出是线性关系。但实际上, ADC模块是存在增益误差和偏移误差的, 其中增益误差是实际曲线斜率和理想曲线斜率之间的偏差, 偏移误差(或失调误差)是0 V输入时实际输出值与理想输出值(0 V)之间的偏差。

(2)积分非线性误差(Integral Non-Linearity:INL)
模数转换器的积分非线性误差用来衡量实际特性曲线与理想特性曲线的最大差值,它表示了实际有限精度曲线相对与理想有限精度曲线的偏移量,可以用来估算谐波失真,通常以百分数或LSB为单位。

(3)微分非线性误差(DNL)
微分非线性误差为每个量化阶梯上测量的相邻编码之间的距离,通常是由电路元器件的非理想因素引入的模拟増量偏移值,以百分比或LSB为单位。

2、ADC动态特性参数
ADC的动态特性参数通常与ADC的转换速率和输入信号频率相关。主要包括:信噪比(SNR)、信噪失真比(SNDR)、无杂散动态范围(SFDR)、总谐波失真(THD)、有效位数(ENOB)。
3、温度湿度环境及电源电压的波动引起的误差、采样电压的波动
在实际应用中,由于环境温度、湿度等参数的变化可能会引入一些误差。电源电压的不稳定也会带来一定的误差,采样电压的波动(可能是由于高频信号叠加,或者其他随机干扰信号),对整个系统的精度产生影响,电源电压变化引起的转换误差在高精度要求场合不可忽略。
4、其他因素
模数转换器(ADC)想要在实际应用中达到标称的精度,仅仅依赖ADC模块本身是不够的,实际的测量精度还会受到一系列外在因素的影响,例如:
•ADC时间配置(包括采集时间、转换时间、采样时间、采样时钟抖动等等)
•电源性能(噪声和内部阻抗)
•数据采集系统中数字和模拟部分的隔离情况
•内部阻抗与外部阻抗的匹配
•输入/输出开关切换的影响
•PCB布局布线
三、提高ADC精度方法
软件算法提高精度(常用的方法)
在运用具有内置模数转换模块的嵌入式单片机来进行模数转换的过程中,为了提高分辨率或对微弱信号采样识别,目前比较常用的方法主要是采用过采样技术来实现低于最小采样分辨率的微弱信号采样。该技术是通过多次对输入的采样信号叠加白噪声后,再模数转换输出,然后对输出取平均值。 在采样过程中,导致采样电压波动的因素有很多。可能是由于外界的随机信号干扰引起。也可能是由于电路中产生的谐波信号引起的周期性干扰信号。用软件滤波方法则可以有效减小此类误差。常用滤波算法如下:
算术平均滤波法
递推平均滤波法(又称滑动平均滤波法)
中值滤波法
一阶滞后滤波法
加权平均滤波法
针对环境及电压波动解决方案如下:
(1)采用高精度稳定电源供给,减少电源电压变化误差。
基准电压是提供ADC转换时的参考电压,是保证转换精度的基本条件。在要求较高精度时,基准电压要考虑单独用高精度稳定电源供给。此外,外加模拟电源和数字电源也要尽量采用稳定性高(电源电压敏感度<0.002%)、受温度变化小的电源。当然可以选择温度系数比较好、精度比较高的电源模块提供稳定的电压。但是由于高精度的电源管理模块价格往往不菲,会大大增加系统的成本。在本设计中,采用市场上面比较常见的LDO作为电源电压。
(2) 利用数学变换减小运算误差,减小温度漂移、湿度、环境等及电源电压的波动引起的误差。


(3)利用软件滤波方法。
针对增益误差和偏移误差解决方案如下:
(1)最小二乘法和一元线性回归(直线拟合问题) 用稳定信号源产生多个标准电压, 通过输入ADC通道记录采样值。然后利用最小二乘和一元线性回归思想处理数据, 求出的拟合最佳曲线, 使得各个坐标点到该最佳曲线的距离的平方和(残差平方和)最小。
(2)在用计算机对模拟信号采集情况下,将编码器零电平信号读入计算机内存中相应的单元,然后才开始采样程序的执行。在采样程序中,将采集到的数据与零电平相减,从而基本上消除偏移温漂误差。
ADC时间配置
在器件中,采样时间等于一个ADC时钟周期。该ADC模块的采样时间不仅依赖于ADC时钟,还与其他配置有关,如NXP芯片中可以通过修改ADCx_CFG1寄存器中的ADLSMP位和ADCx_CFG2寄存器中的ADLSTS位来对采样时间进行配置。因此,总的转换时间并不会随采样时间增加而显著增加,这种特性在高输入阻抗的情况下尤其有用。
ADC硬件处理
为了使ADC达到最佳的性能,我们需要正确地设计和配置整个系统。在硬件方面,可进行以下配置,例如: • 在芯片电源引脚间放置0.1uF的电容,电容应尽可能地贴近芯片封装(每对电源引脚间放置一个电容)
•在芯片电源引脚间放置约为100uF的电容
•PCB走线长度应该尽量短 •在实际应用设计中应充分考虑PCB走线上寄生参数的影响
•必须小心处理模拟电源以及参考引脚,使它们的噪声幅度最小 •针对数字部分和模拟部分使用不同的供电电源和地平面
•如果数字部分和模拟部分连接到了相同的供电电源,则应该在数字部分和模拟部分之间使用一个小的电感或磁珠进行连接
•使用地平面将有噪声的数字元件与模拟元件隔离开来,走线时用模拟地将模拟信号包围起来
外部RC元件的取值会从本质上影响ADC转换的精度,为了获得最佳的ADC性能,我们需要小心对待并设计外部RC元件,在选取采样时间时也必须参考采样电容充电的时间常数
单片机提高ADC精度总结的更多相关文章
- 利用过采样技术提高ADC测量微弱信号时的分辨率
1. 引言 随着科学技术的发展,人们对宏观和微观世界逐步了解,越来越多领域(物理学.化学.天文学.军事雷达.地震学.生物医学等)的微弱信号需要被检测,例如:弱磁.弱光.微震动.小位移.心电.脑电等[1 ...
- AVR单片机教程——ADC
ADC 计算机的世界是0和1的.单片机可以通过读取0和1来确定按键状态,也可以输出0和1来控制LED.即使是看起来不太0和1的PWM,好像可以输出0到5V之间的电压一样,达到0和1之间的效果,但本质上 ...
- LK光流算法:提高计算精度和增加搜索范围
LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...
- STM32的ADC精度提高方法
1.精度稳定低一点参考电压VREF稳定: 2.通过设置不同的ADC时钟 和 采样周期 来确定出最适合自己系统的参数: 3.测试思路: 在同样SMPx下,设定不同的时钟得到不同采样时间值: 在同样时钟下 ...
- 【安富莱二代示波器教程】第6章 示波器设计—双通道ADC驱动
第6章 示波器设计—双通道ADC驱动 本章节为大家讲解示波器的ADC驱动,采用STM32自带ADC实现.关于STM32F429的ADC,可以说处处有地雷,不小心就踩上了,如果简单的使用, ...
- STM32F103ZET6 核心板制作指引
学点啥系列之 --STM32F103ZET6 核心板制作指引 原创资料,转载请联系 作者的话:会画stm32F103ZET6的话,rct6啥的简直不要太简单 一.电路总览 图1:电路整体 二.单片机部 ...
- FIR定点提高精度的trick_02
作者:桂. 时间:2018-02-05 19:36:08 链接:http://www.cnblogs.com/xingshansi/p/8419182.html 一.概述 本文简要记录FIR的小tr ...
- STC 单片机ADC实现原理
模数转换器原理 数模转换器( analog to digitI converter,ADC),简称为A/D,ADC是链接模拟世界和数字世界的桥梁.它用于将连续的模拟信号转换为数字形式离散信号.典型的, ...
- 单片机ADC检测4-20mA电路,以及计算方法
单片机ADC检测4-20mA电路,以及计算方法 转载:https://www.hongchangzidonghua.com/?id=24 1,手里有一个4-20mA输出的压力传感器,假设测量范围是0M ...
随机推荐
- Linux常用的安全加固
一.账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险. 操作步骤userdel <用户名> //删除不必要的账号.passwd -l <用户名> //锁定 ...
- 软件——eclipse debug小技巧
1.开启调试: 在代码编辑处右键单击,在弹出菜单中点击Debug As开始调试 2.几个快捷键: F5:跟入Step into, 一般会跟踪进入到调用函数的函数体,Step Over则不会跟踪进入,直 ...
- Spring Cloud Stream学习(五)入门
前言: 在了解完RabbitMQ后,再来学习SpringCloudStream就轻松很多了,SpringCloudStream现在主要支持两种消息中间件,一个是RabbitMQ,还有一个是KafK ...
- EEGLAB-批量处理.dat数据及保存脑电地形图
步骤 1.先在图形界面操作一遍准备做的操作. 2.在命令行窗口输入 EEG.history 获取刚刚操作都用到哪些语句. 3.稍加修改即可以写一个批量化函数来读取生成数据. 4.在 EEGLAB\ee ...
- [zoj3593]扩展欧几里得+三分
题意:给一个数A,有6种操作,+a,-a,+b,-b,+(a+b),-(a+b),每次选择一种,用最少的次数变成B. 思路:由于不同的操作先后顺序对最后的结果没有影响,并且加一个数与减一个相同的数不能 ...
- Mysql 常用函数(6)- replace 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html replace 的作用 将某些字符串替换成新的字符 ...
- js日期格式与时间戳相互转换
本文转自:https://blog.csdn.net/Lc_style/article/details/80626748 1.将日期格式转化为时间戳: var date = new Date('201 ...
- RxJava之并发处理(SerializedSubject)
在并发情况下,不推荐使用通常的Subject对象,而是推荐使用SerializedSubject,并发时只允许一个线程调用onnext等方法! 官方说明: When you use an ordina ...
- JavaScript之ES5的继承
自从有了ES6的继承后,ES5的继承也退出了舞台,在实际开发也不会用得着: 先看看ES6的继承 class Father{ constructor(a){ console.log(a); } play ...
- 如何搭建一个WEB服务器项目(六)—— 上传图片至服务器
上传图片(用户头像)至服务器 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验.先谢谢 ...