目录
1、ADC简介
ADC全称是Analog-to-Digital Converter模数转换器。
ADC作用:将时间连续,幅值也连续的模拟信号转换为时间离散,幅值也离散的数字信号
作为硬件工程师,日常用到ADC的需求其实很多,例如制作一个数字电源,单片机需要采样电流电压值来作为反馈,进行PID控制。大部分的嵌入式MCU都集成了ADC,位数有12位,16位不等。但是对于一些对于采样精度还有速度要求比较高的场合,需要用到外置的高速ADC。
基本原理:把输入的模拟信号按规定的时间间隔进行采样,并与一系列标准的电压进行比较,使其对应的二进制数值逐次收敛,直至输入电压与内部比较电压一致时为止,然后输出代表该电压的二进制值。
奈奎斯特(Nyquist)采样定理:采样率fs必须大于被测信号感兴趣最高频率分量的两倍,该频率通常被称为奈奎斯特频率fN。用公式显示就是fs>2*fN
将模拟转换成数字的形式有两个步骤:采样和量化。MCU是无法直接读取模拟量的,所以需要通过“ADC”进行转换,采集模拟量并将模拟量转换成数字量,这样MCU才能获取这个数据。一般ADC是这样进行工作的:举个例子,例如温度,不同温度下温度传感器的材料会有不同的表现,例如热敏电阻,随着温度的改变电阻值会产生变化,那么电阻两端的电压值就会发生变化,“模数传感器”就是将采集到的电压值按照比例转换成对应的二进制数,这样MCU就可以读取这个二进制数,然后再根据比例计算出当前的温度。
采样保持放大器(Sample-And-Hold Amplifier)
2、常见的ADC类型
还有一种积分型,速度最慢
缺点:积分时间决定转换精度,因此牺牲转换速度可以提升精度,在早期的一些仪表转换精度要求不高的场合应用,后来的ADC很少采用这种架构了。
优点:抗噪声能力强。对于零点正负的白噪声,积分时可以消除。
积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。
3、ADC的主要参数
(1) 工作电压,基准电压、参考电压(内外部)
参考电压:adc的参考电压决定能测多高的电压,如adc参考基准为1.2v,精度为12位,则在adc测量时是将1.2v的电压分为(2的12次方)4096个等份,每份0.00029V。在adc输入电压超过1.2v时,adc值还在4096。
adc位数adc位数越高,精度越高,如adc精度为12位则可将电压分为4096份。adc精度为10位则可将电压分为1024份
(2) 分辨率Resolution:ADC的位数(或1/2n)
分辨率是ADC最基本的参数,可以用表示每个模拟信号值的位数(二进制)来表示。一个12位ADC能表示2的16次方不同的模拟信号值,位数越多,转换的精度越高,分辨率也就越大。注意,ADC的精度并不仅仅取决于分辨率。(3)最小分辨率One least significant bit, LSB
又称最小分辨率,要记住这个参数的英文LSB,满量程值除以ADC的分辨率就是LSB,分辨率是最小能够分辨的模拟电压值,就比如说一个4位的ADC,数字量最高可以表示2的4次方也就是16,满量程5V,那么最小的分辨率就是5/16=0.31V,也就是说这个ADC最小辨认的电压是0.31V,可以用数字量0001表示0.31V这个模拟量。LSB越小表明ADC的精度越高。
(4) 转换时间Conversion Time
因为将一个模拟信号值转换成一个数字量不能瞬间完成,这个过程需要一定的时间转换时间的导数就是转换速率。指完成一次从模拟转换到数字的AD转换所需的时间的倒数(频率)。转换时间是衡量一个ADC是不是高速的主要指标。高速ADC转换时间小于1us,低俗ADC转换时间大于300us。常用单位是ksps和Msps,表示每秒采样千/百 万次(kilo / Million Samples per Second)。
积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率。
(5) 采样速率Sampling Time
这里说的采样速率就是我们最高的ADC采样频率,也就是数据手册中的Maximum Sampling Frequency。ADC的采样速率必须小于转换速率,常用单位是 ksps 和 Msps,表示每秒 采样千/百万次
(6) 量程 full-scale range, FSR
作为测量元件,量程一定是需要关注的,指的是允许输入的模拟信号范围。
(7) 精度:绝对精度和相对精度(受INL和DNL的影响)
ADC的精度自然是相对参考电压而言的,那么基准电压就要稳,电源要稳,
作为时钟的晶振要稳,PCB设计中地要处理好,
高速信号要匹配好,干扰要隔离开,还有软件上的N多配置选择要恰当
3.1 静态参数
1)微分非线性Differential nonlinearity,DNL
用通俗易懂的语言来描述这个DNL特性就是说,理论上我们用数字量的台阶去给模拟电压值进行编码的时候,台阶的宽度应该都是一样的,也就是说当ADC输入和输出是呈线性关系的时候,每次模拟输入按照最小分辨率LSB进行步进的时候,数字输出就增加1,也就是0000变成0001的一个过程。但是由于DNL,导致可能当数字输出由1000变成1001的时候,模拟值的变化却不是按照LSB进行增长的,可能会多一点也可能少一点,我们来假设一下最坏的情况,就是某一时刻由于DNL误差导致正向多了0.5LSB,下一个时刻负向少了0.5LSB,可能会导致编码时丢码,如下图所示。
那么很多的ADC都会有一个NMC参数(No Missing Codes)就是不丢码的范围,保证不会出现DNL这种导致丢码的极限情况。如下图所示:
2) 积分非线性(Integral nonlinearity,INL)
积分大多跟累计误差有关,根据实际的模拟出一条曲线。INL是指ADC器件在所有的数值点上对应的模拟值和真实值之间误差最大的那一点的误差值,表示测量值的绝对误差。下图绿色虚线所示用的表示理想曲线方法是两点法,就是把头和尾用直线连起来。红色虚线是根据实际的情况模拟出的曲线,找到两个曲线纵坐标差距最大的点。我博主个人的理解INL和ADC累计的误差有关,DNL和ADC单次步进的误差有关,正好对应了微分(瞬时)和积分(累计)的特点
3.2 动态参数
动态参数指的是以下的参数会在ADC实际运行中会不断产生变化。
1)信纳比(SINAD)
信纳比指的是信号+噪声+谐波的功率与谐波+噪声的功率比值 。
计算公式:SINAD=(S+N+D)/(D+N),即输出信号功率与其余所有非输出信号功率之比。SINAD很好地反映了ADC的整体动态性能,因为它包括所有构成噪声和失真的成分。
2)信噪比(SNR)
信号与噪声的比值,计算公式如下所示,需要根据FFT进行计算。
理想状态下只考虑ADC的量化噪声,可以推导出SNR理想值
3)有效位数(ENOB)
4) 总谐波失真(THD)
英文全名是Total Harmonic Distortion,这个参数比较常见,输入信号与系统所有谐波的总功率比。指输出信号比输入信号多出的谐波成分。谐波失真是系统不完全线性造成的。所有附加谐波电平之和称为总谐波失真。总谐波失真与频率有关。一般说来,1000Hz频率处的总谐波失真最小。ADC输出中的谐波失真是由ADC特性中存在的任何非线性引起的。每个实用的ADC都具有非线性特性。结果,每个实际ADC的输出中都存在谐波。DNL和INL是ADC特性非线性的量度,而THD是ADC输出中产生的谐波失真的量度。
5) 无杂散动态范围(SFDR)
英文全称是 Spurious-Free Dynamic range,意为无杂散动态范围,反映了FFT分析频谱中信号幅值与最大谐波的距离关系。所以SFDR值越大则说明系统的噪声水平越低,ADC的动态性能越好。单位dBc是相对于载波频率幅度,dBFS是相对于ADC满量程范围。
对于高速ADC,若要最大程度地提高SFDR,存在两个基本限制:第一是前端放大器和采样保持电路产生的失真;第二是ADC编码器部分的实际传递函数的非线性所导致的失真。提高SFDR的关键是尽可能降低以上两种非线性。
4、怎么计算ADC的值
1、首先确定ADC用几位表示,最大数值是多少;
比如一个8位的ADC,最大值是0xFF,就是255。
2、然后确定最大值时对应的参考电压值;
一般而言最大值对应3.3V。这个你需要看这个芯片ADC模块的说明。寄存器中有对于输入信号参考电压的设置。有些是电压输入的1/3。
3、要计算电压,就把你的ADC数值除以刚才确定的最大数值再乘以参考电压值;
比如你ADC值为0x80(份数),那么实际值就是0x80/(0xFF+1)*3.3V = 1.65V。
4、计算出来的电压值只是ADC管脚处的电压值;
你可以用电压表量一下,计算值和实际值是否一样。至于放大器等等,都是芯片外部的事情。外部电路怎么接,和芯片ADC的采样值无关。
5、如果你想知道芯片外部某处的电压,你需要从得出的ADC管脚处的电压(比如刚才的1.65V),再根据电路图进行计算