DAC和ADC原理入门指南
“本文介绍了数模转换器(DAC)和模数转换器(ADC)的工作原理 - 从电阻梯形网络到 Delta-Sigma (Σ-Δ)调制技术。”

原文转载自 lcamtuf's thing: https://lcamtuf.substack.com/p/dacs-and-adcs-or-there-and-back-again
在之前的一篇文章中,我曾说过微控制器正在“吞噬”整个世界。现在,即使对于闪烁发光二极管等最基本的任务,微控制器也比使用分立元件构建的振荡电路--或使用曾经无处不在的 555 定时器芯片--更便宜、更简单。
但是,在这个软件定义越来越多的世界里,0 和 1 并不总是万能的。图像传感器将光强记录为一系列模拟值;播放音乐的扬声器必须将其振膜移动到 “全入” 和 “全出” 以外的位置。最终,几乎所有的数字电路都需要专门的数模转换器和模数转换器来连接物理世界。这些转换器通常被嵌入到微控制器的芯片中,但它们仍然值得学习。
简单的数模转换器(DAC)
将数字信号转换为模拟信号通常可归结为获取一定位长的二进制数,然后将随后的整数值映射为一定范围的量化输出电压。例如,对于 4 位 DAC,有 16 种可能的输出电压,因此它的模型行为可以是:
0000(0) = 0 V 0001(1) = 1/15 Vdd 0010(2) = 2/15 Vdd 0011(3) = 3/15 Vdd ... 1111(15) = Vdd
实现这种转换的最简单、实用的方法是基于电阻的二进制加权 DAC:
显而易见,如果二进制输入为 0000,模拟输出为 0 V;反之,如果输入为 1111,输出必须为 Vdd。对于介于两者之间的输入,我们应该得到一个电阻加权平均值,每个 bit 的影响都是其更重要的前一个 bit 的一半。这直观上与二进制数的工作原理一致。
我们还可以更严格地分析这种行为。让我们看看输入值为 0001 时会发生什么。在这种情况下,最上面的三个电阻(1、2 和 3 号位)并联接地,因此我们可以将它们视为单个电阻:

最下方的电阻用于将最低有效位 (LSB) 连接到 Vdd。实际上,该电路可视为一对串联电阻,在 Vdd 和地之间形成一个分压器。该分压器的输出为
与此类似,如果输入为 1110(十进制 14),则 Vout ≈ 14/15 Vdd。这与我们希望看到的结果相符。
这种 DAC 架构的最大问题是,所需的电阻值很快就会变得不切实际。为了避免空闲电流过高,连接最高有效位 (MSB) 的电阻值不能太小;1 kΩ 是一个合理的起点。但是,对于基本的 16 位 DAC 而言,LSB 电阻为 1 kΩ * 215 ≈ 32 MΩ;对于 24 位分辨率,我们需要数十千兆欧。要在集成电路的芯片上制造如此大的精确电阻是很困难的,如果它们需要具有相同的温度系数,那就更是难上加难了。
R-2R DAC 架构是解决这一问题的巧妙方法:

典型的 R-2R DAC 结构
这个电路没有前者那么直观,但工作原理类似。要解读这一设计,让我们从最低有效位(LSB)开始:bit 0 位置放置的两个 2k 电阻。它们为上一级提供的电流相等。可以看作是一个 1kΩ的电阻连接到一个新的合成输入电压。这个电压根据位 bit 0 的值变化,要么是0伏特,要么是电源电压 Vdd 的一半,即输入值的50%。
如果我们进行这样的替换,就会得到下图左侧所示的电路。此外,由于现在的电路在 bit 0 输入端串联了两个 1 kΩ 电阻,因此相当于右侧的 2 kΩ 单电阻变体:

让我们来看看这个新原理图上的 bit 1。该节点现在有一个 2 kΩ 电阻连接到相应的二进制输入端,另外还有一个 2 kΩ 电阻器从上一级馈电。无论上面发生了什么,我们都可以用一个连接到另一个合成输入信号的 1 kΩ 电阻来替代这两个电阻:

这个过程可以继续;很明显,在最后一次迭代后,我们的输出电压必然是 bit 3的 50%、bit 2 的 25%、bit 1 的 12.5%、bit 0 的 6.25%。
过采样 DAC
虽然上述设计简单实用,但在更高分辨率下,尤其是超过 10-12 位时,线性度也会面临挑战。这是因为在16位的DAC中,最低有效位(LSB)的影响应该是最高有效位(MSB)的0.003%。如果MSB电阻偏离预期值0.1%,足以严重破坏整个方案。
为了解决这个问题,开发了所谓的过采样平均DAC。这些设备输出较低分辨率但交替变化的信号,频率很高。然后,输出端的低通滤波器平均这些值,以产生更大范围的变化较慢的中间电压。
举例说明,对一位(one-bit)DAC的输出进行四次连续采样并进行平均,相当于在原始输出的基础上增加了三个额外中间电压,即等效增加了两位分辨率。
average(0,0,0,0) =0 average(0,0,0,1) =0.25 average(0,1,0,1) =0.5 average(0,1,1,1) =0.75 average(1,1,1,1) =1当然,这也是有代价的;首先,一些高频噪声不可避免地会通过滤波器。但总体来说,这种DAC的方法是非常稳健的。事实上,实际上,许多用于消费级 音频的DAC采用单比特脉冲序列,以数百千赫兹的速率运行,声称可以达到高达24位的输出分辨率。在实际应用中,由于噪声底限(noise floor)的存在,这些声称的高分辨率数字并没有太大意义。噪声底限是指系统中固有的最低噪声水平,它限制了系统能够达到的动态范围。另一方面,1-bit DAC的线性度非常好,因为精确的时序控制比制造超精密电阻要容易得多。
经典模数转换器 (ADC)
与数模转换相比,将模拟电压转换为二进制数字是一项相对复杂的工作。例如,要获得准确且即时的读数,唯一实际的方法就是为每一个所需的量化电平使用一个电压比较器(开环运算放大器):

Flash ADC 构架
这种 “快速”ADC(flash ADC)有时会用于对速度要求极高的专业应用中,但电路的大小会随着位数的增加而呈指数增长,同时也会增加芯片的功耗、输入电容等。由于这些原因,它们不适合分辨率高于 4-8 位的应用。
更常见的架构是使用单个比较器与参考电压相结合,而参考电压会以某种可预测的方式随时间发生变化;一个简单的例子是通过电阻对电容充电。从充电过程开始到比较器触发所经过的时间可以用来推断未知的输入电压。
实际上,由于电容的充电曲线是非线性的,参考信号通常由积分器电路提供:

一个运放积分器
积分器是一个基本的运算放大器电路,其特点是用一个电容代替了通常的反馈电阻。如果反相输入端(Vin-)上的电压高于非反相输入端(Vin+)上的电压,输出端就会立即会变为负值,从而允许电容通过 R 充电。恒流充电意味着在饱和之前,电容器两端的电压呈线性上升,输出电压不断下降以匹配。换句话说,如果提供以 Vref 为中心的方波,积分器将输出近乎完美的三角波,这对 ADC 来说是一个极好的线性参考!
从充电过程开始到触发比较器之间的时间不仅取决于被测输入电压,还取决于三角波的斜率;而斜率又取决于 R 和 C。25% 的占空比意味着,无论 R 和 C 的值如何,比较电压都位于 Vdd 的 75%。
基于斜率的 ADC 非常精确,噪声也很低,但速度往往很慢。提高其性能的一种方法是使用一些数字技巧,即所谓的连续逼近寄存器(SAR)。从本质上讲,ADC 使用内部 DAC 生成参考电压,然后实现相当于二分搜索算法的功能。它首先将未知输入电压与 Vdd/2 进行比较。如果比较器显示输入电压较高,则 ADC 可以排除整个下半范围,并在剩余电压的中点(3/4 Vdd)执行下一次测试。通过连续减半搜索空间,只需几步就能达到精确值。这样做的代价是,由于 DAC 线性误差和一些数字开关噪声,会损失一些精度。
高级的(“pipelined”)ADC可能会在单个封装中结合其中的几种技术.例如,它可能会使用 “部分”快速ADC架构来即时解析几个比特,然后执行一系列步骤来缩放采样输入电压并解析更多比特。
Delta-sigma ADC(ΔΣ模数转换器)
到目前为止,一切顺利。但 ADC 中最有趣的技巧是高频插值,即通常所说的 Delta-sigma 调制。这种方法非常有意思。
在其最基本的 Delta-signma ADC 中,1 位 Δ-Σ ADC 通过比较器阶段快速输出一系列的逻辑 “0” 或 “1”。然后,无论 ADC 的初始输出是什么,都会被用作不寻常的反馈回路的一部分,计算输出信号与输入信号之间的差值。在大多数情况下,模拟输入与两个可能的数字输出电压都不匹配,因此 Δ-Σ ADC 前端的差分放大器会输出一个较大的瞬间正或负误差值:

简化的 1-bit delta-sigma ADC 构架
这些瞬时误差随后被送入积分器,将误差随时间的变化进行求和。如果所有的正误差和负误差相互抵消,积分器会稳定在中点输出电压;如果它们没有抵消,积分器会从中点向远离的方向变化。
如果积分器测量的平均误差变为正值(即 ADC 输出了太多的0),就会促使输出级的比较器开始产生 “1”。反之,如果净误差为负(“1”太多),则输出级开始产生 “0”。
虽然这种精确测量信号的方法看似相当疯狂,但比较器产生的 1 位数据流经过数字处理后,可以计算出高频脉冲的占空比,从而推断出线性度极佳的模拟输入值,因为在测量时无需产生任何模拟参考。当然,要达到合理的精度,用于操作 ADC 的时钟必须比所需的模拟采样率快得多。
"delta-sigma" 这个术语也用来指代一类过采样插值DAC,它们采用类似的脉冲调制,如前文所述。不过,它们并不像 ADC 那样巧妙:大部分脉冲调制发生在数字领域,没有模拟反馈回路。
