行业动态

了解最新公司动态及行业资讯

当前位置:首页>新闻中心>行业动态
全部 330 公司动态 4 行业动态 106 单片机解决方案 130 解决方案 91

单片机(MCU)与模数转换器(ADC)简介

时间:2021-02-22   访问量:3
模数转换器或ADC有许多不同的实现。本文概述了主要类型,它们的特征和局限性。几乎所有的单片机都有内置的ADC。即使是基于AVR ATMega系列的小型Arduino,也拥有它们。本文的最后一部分讨论了使用此类ADC时应注意的一些问题。但是首先我们将回顾模数转换的基础。
 
 
一、模拟到数字转换的基础
 
ADC由图1中的示意图符号表示。它仅显示了一个模拟输入及其等效的数字输出。所示示例为一个N位ADC。N通常是6到24之间的任何值,常见的是8、10、12或16。
 
输入是电压,范围为0到最大值,取决于实际ADC。假设有N位,则可能有2^N个数字值,则以1位表示的值为(V ADCMAX / 2 ^N)。
 
作为一个例子,如果给定ADC的最大输入值是5.0V,并且所述ADC是10位类型的,则每个比特代表(5V / 2^10),5.00 / 1024,或约4.89mV。因此,该特定ADC的分辨率或量化步长为4.89mV。这是其绝对的理论分辨率。
 
在这种特殊情况下,无法将信号解析为优于±(4.89mV / 2)的分辨率。此限制称为量化误差,并且所有ADC甚至是完美ADC都具有一定程度的量化误差,具体取决于ADC的分辨率。
 
实用的ADC具有更多的误差源。两个这样的错误是:差分非线性(DNL)和积分非线性(INL)错误。在为特定应用指定ADC时必须考虑这些因素。
 
当ADC输出应保持不变时,DNL错误就会发生。例如,假设给定输入的当前输出代码为01101100,并且输入值增加了量化步长的一半。然后,代码应为01101100 +1位或01101101。
 
当输入电压低于当前输入电压时,也会发生相反的情况。有时,由于各种原因不会发生这种情况。在这种情况下,据说ADC具有±1位DNL误差。
 
如果量化级别未在整个输入范围内均匀分布,则会发生INL错误。例如,假设某个特定的ADC具有12位或4096个计数的分辨率和4.096V基准电压。每个位数精确地代表了1.000mV的输入电压变化。
 
因此,4096 mV的输入电压应提供1111 1111 1111的输出,即0xFFF。对于某些ADC,4095mV甚至4094mV的输入仍将提供0xFFF的数字输出。发生的是,在整个输入范围内,1位的值变化很小,只有1.001mV或0.999mV。累积的误差导致精度为一或两位的满量程误差。
 
稍后将看到,有许多外部因素会进一步降低ADC输出精度。
 
单片机ADC
 
二、ADC的使用
 
有多种实现ADC的方法。接下来的几节介绍了一些较常见的部分。为了使本文相对简短,仅给出每个此类实现的简单且有些不完整的描述。
 
1.单斜率和双斜率积分ADC
 
单斜率ADC的框图如图2所示。基本操作非常简单。电容器从输入源充电,直到其电压达到V Ref为止,此时比较器跳闸。充电时,由时钟供电的数字计数器也在进行计数。当比较器跳闸时,它将停止计数,此时达到的计数代表模拟输入。
 
 
这种方法最常见的变体之一是双斜率积分ADC。在其中,电容器放电,然后对计数器值求平均值。此技术减轻了积分电容器中介电吸收的影响,介电吸收的影响可能导致ADC读数错误。
 
这种类型的ADC是准确的,但是非常慢。例如,它最常用于万用表中,其中精度比速度更重要。
 
2.Sigma-Delta Σ-ΔADC
 
Sigma-Delta或Σ-? ADC框图如图3所示。从输入端开始,差动放大器产生的输出为 V in和DAC输出。
 
1位DAC的输出可以是以下两个值之一:-V Ref或+ V Ref。在这种情况下,最好将积分器视为取前一个值和当前输入值的移动平均值。
 
所以,开始,假设 V in固定在高于0V的很小一点,以便比较器跳闸。其值将为高或1。然后DAC输出为+ V参考。在下一轮中,将从当前值V in中减去该值。由于先前的值为0V,因此积分器输出现在将为– V ref。比较器输出现在将为0,而DAC输出将为at – V参考。
 
在下一个样本中,由于先前的值是– V Ref,并且差动放大器实际上减去-V Ref,因此将V Ref加到V in。比较器输出将因此为1。
 
此过程继续进行,因此,对于0V的V in,比较器输出将为101010…的稳定流。记住逻辑1意味着V Ref,0表示-V Ref,则如果取N个样本并取平均值,则很容易发现平均值为0V。比较器之后的处理块将简单地将其输出为单个值0000 ...假定为(V Ref – -V Ref)或2 x V Ref。
 
现在,假设V in为1V,这是一个5V ADC;±V Ref为±2.5V。按照与之前相同的步骤进行操作,输出将为:1011101…该输出为1.07V。
 
但是,如果采样更多,则精度会更高,并且该值接近1.00V。因此,Sigma-Delta需要许多样本才能生成一个输出。换句话说,需要对输入信号进行过采样以减少ADC转换误差。
 
Sigma-Delta ADC通常用于数字化音频信号,并在某些单片机中用作ADC。
 
 
三、闪存ADC
 
闪存ADC的操作也许是最容易理解的。图4给出了闪存ADC的框图。仅仅是许多比较器,每个比较器都被提供了比前一个电压高一个位值的参考电压。因此,对于一个8位ADC,需要256个这样的比较器。对于10位,则需要1024。
 
闪存转换器速度很快。它无需任何采样或繁重的后处理即可直接转换输入。问题在于,它需要大量的比较器,并且许多比较器在芯片上占用大量的硅空间。因此,仅在需要其他ADC实现方法无法达到的极高速度时才使用闪存ADC。
 
刚刚描述的内容实际上称为全闪存ADC。一种常用的变体是半闪存ADC。它使用两步过程将实际转换链中所需转换器的数量减少一半。
 
首先,将输入信号与精确设置为一半V Ref的电平进行比较。如果它较低,则最高有效位MSb设置为0,并且将输入电压馈送到比较器链,参考电压设置为V Ref / 2实际获得剩余位。
 
如果输入信号高于V Ref / 2,则MSb设置为1,从输入信号中减去V Ref / 2。例如,可以通过使基准电阻的下端偏移+ V Ref / 2来实现。
 
比较器链再次用于获取其余位。因此,从本质上讲,这使用的是全闪存比较器数量的一半,但要付出额外的比较代价。例如,该技术还可扩展为具有四分之一闪存ADC。
 
 
四、逐次逼近寄存器(SAR)
 
这是中速ADC中最常使用的ADC技术。SAR ADC的框图如图5所示。SAR操作是该ADC的关键。最初,它设置为DAC范围的中点。
 
比较器输出将为高电平或低电平,具体取决于输入是高于还是低于DAC输出电平。
 
现在,输入位于DAC范围的上半部或下半部。现在,将DAC设置为DAC输入所处正确范围的上半部或下半部的中点,从而有效地将该范围减小到整个范围的四分之一。
 
重复此过程,依次缩小输入所处的范围,直到放大到正确的值为止。
 
另一种看待这种情况的方式是说,在第一次迭代之后,将知道输入的MSbit,根据比较器输出是低电平还是高电平,它的值为0或1。在下一次迭代之后,将知道下一个MSbit。重复该过程,直到所有输出位都已知为止。
 
未提及的一件事是“跟踪并保持”或“ T&H”块。如果在ADC转换过程中更改输入值,则迭代过程将被中断。T&H块仅在转换开始时捕获输入值,并在整个转换过程中保持该值。
 
如图6所示。T&H输出将输入信号的值保持在被触发的点,而不管输入信号随后的作用如何。转换完成后,T&H将再次返回以跟踪输入信号。
 
SAR ADC是使用最广泛的ADC,并且是大多数单片机的内置ADC中发现的ADC。有些使用Sigma-Delta ADC,但大多数使用SAR ADC。
 
SAR ADC的框图

T&H框图
 
五、单片机ADC
 
几乎所有的单片机都有内置的ADC,大多数具有多路复用输入。为了有效使用,应考虑其局限性。
 
首先,根据目前为止的内容,很明显,输入范围不能超过ADC V Ref,必须遵守ADC的转换速率限制。
 
例如,Arduino Uno的最大ADC转换速率小于10KHz。因此,根本无法通过该ADC采样20Hz至20KHz带宽的完整音频。
 
基于单片机的ADC的问题都归结为单片机是CMOS器件这一事实,并且用于制造单片机的硅工艺与实现模拟电路模块不太兼容。
 
因此,例如,DAC和比较器不使用精密电阻器,因为这些电阻在CMOS硅工艺中确实很难实现。取而代之的是,它们采用了功能等效的设计,即使用电容器。最终结果是单片机的ADC输入具有相对较低的阻抗,该阻抗也是电容性的。
 
更重要的是,输入阻抗在转换过程中会有所变化。这一切都意味着,如果信号源的输出阻抗很高,则ADC倾向于给出相差甚远的转换结果。图7举例说明了这一点。
 
在此示例中,ADC用于读取6V电池电压。为了不使电池过度放电,将R1和R2都选择为20KΩ,以便在电池电压为6V时ADC输入为3.0V。ADC的V Ref为3.3V;因此,一切都应该正常工作。
 
但是,典型的单片机ADC的输入阻抗约为10KΩ,如图所示,它与R2并联。这将在电池电压读数中引起很大的误差。这种情况下的解决方案是使用一个外部缓冲器来驱动ADC输入。
 
ADC输入阻抗影响的图示
 
使用单片机ADC时应考虑的最后一件事是ADC参考。在某些单片机中,这只是单片机VDD。可以肯定的是,单片机VDD来自稳压器,但是稳压器与适当的参考电压之间存在很大差异。
 
这很容易导致至少两位精度损失。因此,现在12位单片机ADC更像是10位ADC,并且没有计算DNL和INL错误贡献。最重要的是要意识到这些限制,并确定单片机ADC是否适合该应用。


上一篇:如何使用单片机驱动MOS管驱动大电流?

下一篇:什么是开关模式电源?如何选择的开关模式电源

在线咨询

点击这里给我发消息 售前咨询专员

点击这里给我发消息 售后服务专员

在线咨询

免费通话

24小时免费咨询

请输入您的联系电话,座机请加区号

免费通话

微信扫一扫

微信联系
返回顶部