历史上的今天
今天是:2025年03月03日(星期一)
2021年03月03日 | 单片机提高ADC精度总结
2021-03-03 来源:eefocus
在常用传感器中,模数转换器是其中至关重要的环节,模数转换器的精度以及系统的成本直接影响到系统的实用性。因此。如何提高模数转换器的精度和降低系统的成本是衡量系统是否具有实际应用价值的标准。

图 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元件,在选取采样时间时也必须参考采样电容充电的时间常数
上一篇:单片机显示原理(LCD1602)
下一篇:单片机的状态机框架编写
史海拾趣
|
SIP2010信号与图像处理国际会议(Ei&ISTP index)征文 Signal and Image Processing (SIP 2010) Special Track within WiCOM2010 CALL FOR PAPERS   ...… 查看全部问答> |
|
最近在研究用ce6.0+6410定制系统,打算把flash分成两个区,一个存放系统镜像文件等, 剩下的空间用作存储设备,存放应用程序等。目前按照以下的代码修改后,存在一些问题, 例如:系统启动后,只是加载整个flash作为一个分区(表明分区不成功), ...… 查看全部问答> |
|
在网上查了很多资料,AT926x系类的ARM内置看门狗基本上很少用,都推荐使用外部看门狗,我尝试了好多天使用内置的看门狗来监控自己的应用程序,但都没有找到切入点,十分不甘心,向大家学习。 先把我的尝试简单介绍一下: Kernel\\Watchdog目录下 ...… 查看全部问答> |
|
最近在移植UCOS-II,但是发现里面的信号量用法不是成对使用的. 既在一个任务里用 OSSemPend(Signal,0,&err); 而在另一个任务里用OSSemPost(Signal); 我不明白其中的原理,不是成对使用的吗? 在一个任务里 OSSemPend(Signal,0,&err); //自己的 ...… 查看全部问答> |
|
用directshow做camera处理,但我从Transform的IMediaSample *pIn取出来的图像就是花屏,,请问是为什么?怎么办?难道这个手机 用directshow做camera处理,但我从Transform的IMediaSample *pIn取出来的图像就是花屏,,请问是为什么?怎么办?难道这个手机不能用directshow?… 查看全部问答> |
|
建立一个动态WCE Dymanic-Link Library 驱动文件的步骤(急啊,帮忙解决) 我现在的步骤如下:(WINCE6.0) 1、在driver目录下ADD->new sources subproject,然后建立一个WCE Dymanic-Link Library 子工程 2、程序代码有GPIO.app,gpio.h 3、然后定义 GPIO.def LIBRARY GPIO EXPORTS GPI_Init &n ...… 查看全部问答> |




