上文总结了主要常见的重要ADC的技术指标,本文来梳理两个方面的内容,常见的ADC类型及原理,以及可能容易掉进去的坑。
谈谈我为什么整理这个文章吧,工程师往往关注点更多在于功能,而忽略了性能。为什么会忽略性能呢?因为可能缺少对于原理的深入探究,那么使用时可能失之毫厘,谬以千里。性能往往不好,稳定性也可能不佳。帽子扣大点说是缺少匠心,其实这也是大学教育非常不足的地方。而我个人的观点是,即使是工程师也需要一点科学家的素养,希望小伙伴们都尽可能的将一些技术要点的本原深挖,不要浮于表面。这也是国内科技领域现今急需要去发展提升的地方,如果每个技术领域的我辈中人,都能深耕自己的领域,探求技术的本原,又何惧美帝如此猖狂嚣张!
<strong>ADC类型</strong>
<strong><font color="#004a85">积分型ADC</font> </strong>
<p><strong>优点</strong>:</p>
<ul>
<li>积分型ADC分辨率高,位数可做到12位甚至更高</li>
<li>线性度非常好。本质上,输入端与一个集成的参考电压相比较来决定输出端,所以线性度将取决于比较器的精度。</li>
<li>电路实现拓扑简单,用于实现这些设备的元件相对较少,因此电路相对简单且生产成本较低。</li>
</ul>
<p><strong>缺点:</strong></p>
<ul>
<li>主要缺点是转换速度慢。N位ADC,输出可能需要长达2个N的时钟周期来转换单个采样点</li>
</ul>
<ul data-tool="mdnice编辑器">
<li>转换原理都是基于对电压积分并将积分后电压与另一电压比较以控制计数,计数输出即为ADC输出。积分对象要么是基于参考电压,要么是基于参考电压和输入电压。</li>
<li>主要用于传感器应用和诸如电压表和电流表等设备,在这些设备中,精度比速度更重要。换句话说积分型ADC采样速度比较低,但精度非常高</li>
<li>积分型ADC有不同的种类,常见的有单、双斜率积分等。增加一个“斜率”,以牺牲转换时间为代价而增加精度。</li>
</ul>
<strong><font color="#004a85">单斜率积分ADC</font> </strong>
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” width="600"></center>
比较器将输入电压V<sub>IN</sub>与集成基准电压V<sub>REF</sub>的值进行比较(请注意,由于V<sub>ref</sub>已连接至运算放大器的反相输入,因此我们将V<sub>ref</sub>设为负)。同时计算时钟周期数。当积分器输出等于V<sub>in</sub>时,比较器输出逻辑“ 0”,触发计数器和积分器复位,锁存器保持数字输出。
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“”></center>
这就是转换时间,知道为啥说这种积分型ADC慢了吧。来看下最差的情况吧,假设输入电压V<sub>IN</sub>=V<sub>REF</sub>,假定<img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“”>,假定是20位ADC,那么<img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“”>!
<strong><font color="#004a85">双斜率积分ADC</font> </strong>
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” width="800"></center>
双斜率ADC与单斜率ADC的不同之处在于,现在将V<sub>C</sub>与地进行比较,并集成了两个电压V<sub>REF</sub>和V<sub>IN</sub>。刚开始时,负输入连接到积分器,使V<sub>C</sub>斜升直到计数器溢出。由于在反相输入会切换到一个负值进行积分,因此积分器输出将始终为正且大于零,因此计数器将继续运行直到溢出为止,这需要2N个时钟周期(= T1)。
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” ></center>
V<sub>C</sub>在T2时刻,将等于V<sub>C1</sub>与V<sub>C1</sub>之和,且为0,也即:
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” ></center>
则
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” ></center>
因此,<img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” >即为ADC转换的原理,双斜率比单斜率ADC更慢,由于执行了两次积分, 与积分器斜率相关的误差将被抵消,从而从原理上提高了精度。
<strong>Sigma-Delta Σ-∆ ADC</strong>
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” width="600"></center>
从输入端开始,差动放大器产生的输出为V<sub>in</sub>与1位DAC输出之间的差。1位DAC的输出可以是以下两个值之一:–V<sub>ref</sub>或+V<sub>ref</sub>。在此拓扑结构中,可将积分器视为取前一个值和当前输入值的移动平均值。
因此,假设刚开始时比较器正向段固定在高于0V的很小一值,比较器反转。其值将为高或1。然后,DAC输出将为+V<sub>ref</sub>。在下迭代中,将从V<sub>in</sub>的当前值中减去该值。由于先前的值为0V,因此积分器输出现在将为– V<sub>ref</sub>。此时,比较器输出将为0,而DAC输出将为– V<sub>ref</sub>。
在下一个采样中,由于前一个值为– V<sub>ref</sub>,积分器输出将为0,并且差动放大器实际上将减去– V<sub>ref</sub>,从而将+V<sub>ref</sub>加到V<sub>in</sub> 。比较器输出将为1。
此过程继续迭代进行,因此,对于0V输入,比较器输出将为101010…的稳定流。记住逻辑1表示+V<sub>ref</sub>,逻辑0表示– V<sub>ref</sub>,那么如对N个样本进行采样并取平均值,则很容易看出平均值为0V。比较器之后的处理块将简单地将其输出为单个值0000…,假设参考值为( – V<sub>ref</sub>~+V<sub>ref</sub>)或2 xV<sub>ref</sub>。
现在,假设V<sub>in</sub>为1V,这是一个5V ADC。+V<sub>ref</sub>为±2.5V。按照与之前相同的步骤进行迭代操作,输出将为:1011101…输出为1.07V。
概括起来:
Σ-∆ ADC 对所处理信号进行过采样(这个概念见模数采样知多少),并对待处理信号进行低通滤波。通常,在过滤器之后使用Flash ADC转换的比特数小于所需的比特数。所产生的信号连同由FLASH离散电平产生的误差,被反馈回并从输入中做差然后输入到滤波器。这个负反馈的可对噪声形成抑制作用,使它不出现在期望的信号频率。ADC之后的数字滤波器(利用抽取滤波器)可降低采样率,滤除不想要的噪声信号并提高输出分辨率(故称为sigma-delta调制,也称为delta-sigma调制)。
<strong>Flash ADC也称直接比较型</strong>
FLASH ADC的原理可能是最容易理解的。下图是一个两位ADC的示意图,由许多比较器组成,每个比较器都被提供了比上一个基准值高一个位值的基准电压。因此,对于一个8位ADC,需要256个这样的比较器。对于10位,则需要1024。
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” ></center>
FLASH ADC(直接比较型)速度很快。它直接转换输入,而不需要任何采样或繁重的后期处理。问题是,它需要很多比较器,而且很多比较器占用了芯片上的大量硅空间。因此,只有在需要其他ADC实现方法无法达到的极高速度时才使用Fash ADC。
<strong><font color="#004a85">二分法在硬件中体现</font> </strong>
实际应用中,还有一个变种比较常用,半 FLASH ADC。它使用两步的过程来减少实际转换链中所需的转换器数量:
<ul data-tool="mdnice编辑器">
<li>首先,将输入信号与恰好位于半V<sub>REF</sub>的电平集进行比较。如果它更低,那么最高有效的位MSB,被设置为0,输入被馈送到一个比较器链与参考电压设置为<img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” >,以转换得到其余的位。</li>
<li>如果输入信号高于<img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” >,则将MSB设置为1,从输入信号中减去<img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” >。比较器链再次用于获取剩余的位。所以,本质上,半步FLASH ADC,以牺牲一个额外的比较,来节省一半比较器。这种思路还可以继续推演扩展,比如4分 FLASH ADC等等。</li>
</ul>
<strong>逐次逼近寄存器SAR</strong>
逐次逼近寄存器(Successive Approximation Register):逐次逼近ADC使用比较器逐次缩小包含输入电压的范围。在每个连续的步骤中,转换器将输入电压与内部数字与模拟转换器的输出进行比较,后者可能表示所选电压范围的中点。在这个过程的每一步,近似都被存储在一个逐次逼近寄存器(SAR)中。例如,假设输入电压为6.3 V,初始范围为0到16v。对于第一步,输入6.3 V与8v (0-16V范围的中点)进行比较。比较器报告输入电压小于8v,因此SAR被更新为将范围缩小到0 - 8v。第二步,将输入电压与4v (0 - 8v的中点)进行比较,比较器报告输入电压高于4v,因此更新SAR以反映输入电压在4 - 8v范围内。第三步,输入电压与6v比较(4v与8v的一半);比较器报告输入电压大于6伏,搜索范围变为6 - 8伏。继续这些步骤,直到达到预期的解决方案为止。
其拓扑结构如下,
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” width="600"></center>
为了直观,看看前文的动图:
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” width="600"></center>
<strong>Pipelined ADC</strong>
流水线ADC(也称为子例程量化器)使用两个或多个流水线。首先,进行粗略的转换。第二步,用数模转换器(DAC)确定输入信号的差异。然后将这个差异转换为更细的值,并在最后一步中合并结果。这可以被认为是后续逼近ADC的一种改进,其中反馈参考信号由整个范围的比特(例如,4比特)的中间转换组成,而不仅仅是下一个最重要的比特。结合逐次逼近法和flash adc的优点,该类型具有速度快、分辨率高、模具尺寸小等优点。
<center><img src="http://mouser.eetrend.com/files/2020-08/%E5%8D%9A%E5%AE%A2/100051954-10…; alt=“” width="600"></center>
在这个原理图中,模拟输入VIN首先被采样并由采样保持器(S&H)保持稳定,而第一阶段的flash ADC将其量化为三位。然后将3位输出馈给3位DAC(精确到12位),然后从输入中减去模拟输出。这个“剩余量”扩大4倍并被送入下一阶段(第二阶段)。这个增加的剩余量继续通过下级流水线,每一阶段提供3位,直到它到达4位flash ADC,将解析最后的4LSB位。因为每个阶段的位是在不同的时间点确定的,所以相同样本对应的所有位在被馈送到数字错误校正逻辑之前都与移位寄存器进行了时间对齐。请注意,当一个流水完成对输入样本的处理,确定本流水采集位并将残差传递到下一个流水时,它便可以开始处理从每个流水中嵌入的采样保持器接收到的下一个样本。这种流水线操作是高吞吐量的原因,这也是流水的概念。
<strong>总结一下</strong>
熟悉各类ADC的意义,因为如前文所说,嵌入式设备免不了需要采集物理世界的模拟信号。信号各具特点,有的频率高,有的噪声多,有的需要精度高但速度可能不要很快等等。这里整理几种常见ADC(当然还有其他种类比如电荷平衡原理ADC、分时ADC、FM ADC、时间拉伸ADC、增量编码ADC、Wilkinson ADC等等)的原理及特点,了解各类ADC的基本特点,有助于进行器件选型、系统设计。
<strong><font color="#FF0000"> 相关阅读:</font></strong>
<a href="http://mouser.eetrend.com/blog/2020/100050945.html">详论单片机固件模块化架构设计(精华)</a>
<a href="http://mouser.eetrend.com/blog/2020/100049745.html">一个单片机ADC的挖坑填坑之旅</a&…;
<a href="http://mouser.eetrend.com/blog/2020/100050962.html">单片机编程:如何喂狗的灵魂拷问...</a>
<a href="http://mouser.eetrend.com/blog/2020/100051881.html">STM32编程:是时候深入理解栈了</a>
<a href="http://mouser.eetrend.com/blog/2020/100051883.html">模数采样知多少</a>
<a href="http://mouser.eetrend.com/blog/2020/100050615.html">万变不离其宗之单片机串口共性问题</a…;
本文转载自:嵌入式客栈微信公众号(作者: 逸珺)
<center><img src="http://mouser.eetrend.com/files/2020-07/博客/100049745-101639-er_wei_ma_…; alt=“” width="200"></center>
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理。
<strong><a href="http://www.mouser.cn/applications/" style="color:red;">点击这里,获取更多关于应用和技术的有关信息</a></strong>
<strong><a href="https://www.mouser.cn/blog" style="color:red;">点击这里,获取更多工程师博客的有关信息</a></strong>