单片机提高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 ...
随机推荐
- 细说 PEP 468: Preserving Keyword Argument Order
细说 PEP 468: Preserving Keyword Argument Order Python 3.6.0 版本对字典做了优化,新的字典速度更快,占用内存更少,非常神奇.从网上找了资料来看, ...
- CentOS安装jsoncpp
两种安装方式: 通过cmake安装 通过scons安装 cmake安装见cmake安装jsoncpp,scons安装见下文. 1. 安装scons .tar.gz export MYSCONS=/ro ...
- tomcat日志清理
删除指定IP的日志后,删除自身 import os import time import sys ip="127.0.0.1" logpath="/var/lib/tom ...
- JAVA基础篇 之 类的初始化
类中属性的隐式初始化,代码如下,我们看下不同类型默认的初始值是什么 创建一个Demo类如下: class Demo { int a; byte b; short c; long d; boolean ...
- 【Scala】什么是隐式转换?它又能用来干嘛?该怎么用
文章目录 定义 隐式参数 隐式转换 隐式值:给方法提供参数 隐式视图 将Int和Double类型转换为String 狗狗学技能(使用别的类中的方法) 使用规则 定义 隐式参数 隐式参数指在函数或者方法 ...
- db连接池
目前常用的连接池有: DBCP:org.apache.commons.dbcp.BasicDataSource dataSource: 要连接的 datasource (通常我们不会定义在 serve ...
- 一文搞懂HMM(隐马尔可夫模型)-转载
写在文前:原博文地址:https://www.cnblogs.com/skyme/p/4651331.html 什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无 ...
- 阿里面试居然跟我扯了半小时的CyclicBarrier
一个大腹便便,穿着格子衬衫的中年男子,拿着一个贴满Logo的Mac向我走来,看着稀少的头发,我心想着肯定是顶级技术大牛吧!但是我也是一个才华横溢的人,稳住我们能赢. 面试官:您好,先做一下自我介绍吧! ...
- equals方法和 == 的使用
equals方法的使用 equals方法 源码展示: public boolean equals(Object obj) { return (this == obj); } 解析: equals方法默 ...
- Centos7下设置ceph 12.2.1 (luminous)dashboard UI监控功能
前言 本文所使用的集群是作者在博客 Centos7下部署ceph 12.2.1 (luminous)集群及RBD使用 中所搭建的集群 dashboard是为了完成对集群状态进行UI监控所开发的功能, ...