4、ADC架构详解(上):Flash ADC(全并行)、SAR ADC(逐次逼近)的工作原理与优缺点

好,咱们今天聊聊ADC的架构。说实话,ADC的种类太多了,但有两类你肯定绕不开——Flash ADC和SAR ADC。一个是速度之王,一个是精度与功耗的平衡大师。我当年刚入行时,第一个项目就是选型,差点被这两兄弟搞晕。今天咱们就把它们掰开揉碎了讲清楚。

4.1 Flash ADC:全并行,快如闪电

Flash ADC,也叫全并行ADC。为什么叫“Flash”?因为它快得像闪光灯一样。你想想看,别的ADC还在一步步比较,它直接一把梭哈,一个时钟周期就出结果。

4.1.1 工作原理

Flash ADC的核心思想很简单:用一堆比较器,同时把输入信号和一系列参考电压做比较。

举个例子,一个3位的Flash ADC,需要2^3 - 1 = 7个比较器。每个比较器的正输入端接输入信号,负输入端接一个由电阻分压网络产生的参考电压。这些参考电压从低到高均匀分布。

当输入信号进来时,所有比较器同时工作。低于输入信号的比较器输出1,高于的输出0。这7个结果组合成一个“温度计码”。最后,一个编码器把温度计码转成二进制输出。

// 伪代码示意:3位Flash ADC
// 参考电压:Vref = 5V,步进 = 5V / 8 = 0.625V
// 输入电压:Vin = 3.2V

比较器1 (Vref1 = 0.625V): Vin > Vref1 → 1
比较器2 (Vref2 = 1.250V): Vin > Vref2 → 1
比较器3 (Vref3 = 1.875V): Vin > Vref3 → 1
比较器4 (Vref4 = 2.500V): Vin > Vref4 → 1
比较器5 (Vref5 = 3.125V): Vin > Vref5 → 1
比较器6 (Vref6 = 3.750V): Vin > Vref6 → 0
比较器7 (Vref7 = 4.375V): Vin > Vref7 → 0

温度计码: 1111 100
二进制输出: 101 (对应5/8 * 5V = 3.125V,量化误差约75mV)

关键点:Flash ADC的转换速度只取决于比较器的响应时间和编码器的延迟。理论上,一个时钟周期就能完成一次转换。

4.1.2 优点

  • 速度极快:这是它最大的卖点。采样率可以做到GHz级别,适合雷达、高速示波器、5G基站等场景。
  • 无采样保持要求:因为转换时间极短,输入信号在转换期间变化不大,有时可以省掉采样保持电路。
  • 输入延迟小:比较器直接并联,没有复杂的开关网络。

4.1.3 缺点

  • 资源爆炸:分辨率每增加1位,比较器数量翻倍。10位的Flash需要1023个比较器,芯片面积和功耗都受不了。
  • 功耗巨大:所有比较器一直处于工作状态,功耗随分辨率指数增长。
  • 输入电容大:所有比较器的输入端并联在一起,等效电容很大,对前级驱动能力要求高。

避坑指南:我曾经在一个高速数据采集项目中,天真地想用12位Flash ADC。结果一查资料,4095个比较器,功耗直奔几十瓦,散热根本搞不定。最后老老实实换成了多级流水线架构。所以,Flash ADC一般只用在6-8位,超过这个范围,你得掂量掂量。

4.2 SAR ADC:逐次逼近,稳扎稳打

SAR ADC,全称是逐次逼近寄存器型ADC。它不像Flash那样暴力,而是用二分法一点点逼近输入信号。我个人习惯叫它“猜数字游戏”——每次猜中间值,根据反馈调整方向,直到猜中为止。

4.2.1 工作原理

SAR ADC的核心部件包括:采样保持电路、比较器、数模转换器(DAC)和逐次逼近寄存器(SAR)。

工作流程是这样的:

  1. 采样保持电路把输入信号锁住,保证转换期间信号不变。
  2. SAR寄存器先设置最高位为1,其余位为0,得到一个试探值。
  3. DAC把这个试探值转换成模拟电压,与输入信号比较。
  4. 如果输入大于试探值,保留该位为1;否则置0。
  5. 接着设置下一位为1,重复比较过程。
  6. 直到所有位都确定下来,转换完成。
// 伪代码示意:4位SAR ADC,Vref = 5V,Vin = 3.2V
// 第一步:试探 MSB (bit3 = 1) → DAC输出 = 2.5V
// Vin(3.2V) > 2.5V → 保留bit3 = 1

// 第二步:试探 bit2 = 1 → DAC输出 = 2.5V + 1.25V = 3.75V
// Vin(3.2V) < 3.75V → 置bit2 = 0

// 第三步:试探 bit1 = 1 → DAC输出 = 2.5V + 0.625V = 3.125V
// Vin(3.2V) > 3.125V → 保留bit1 = 1

// 第四步:试探 bit0 = 1 → DAC输出 = 3.125V + 0.3125V = 3.4375V
// Vin(3.2V) < 3.4375V → 置bit0 = 0

// 最终结果:1010 (对应 3.125V,量化误差约75mV)

小技巧:SAR ADC的转换时间 = N个时钟周期(N为分辨率)。比如12位的SAR ADC,需要12个时钟周期完成一次转换。你想想看,如果时钟是10MHz,那转换速率大约是833kSPS。这个速度对于音频、工业控制、传感器采集来说,绰绰有余。

4.2.2 优点

  • 功耗低:只有一个比较器在工作,而且大部分时间处于待机状态。这是它最大的优势。
  • 面积小:不需要大量比较器,芯片面积可以做得很小。
  • 分辨率高:轻松做到12-16位,甚至更高。精度和速度之间可以灵活取舍。
  • 无流水线延迟:每次转换都是独立的,不像流水线ADC那样有延迟。

4.2.3 缺点

  • 速度受限:转换时间与分辨率成正比。想提高速度,就得提高时钟频率,但时钟太高,DAC建立时间跟不上。
  • 需要采样保持:转换过程中输入信号必须保持稳定,否则比较结果会出错。
  • DAC精度要求高:DAC的线性度和建立时间直接影响整体性能。我遇到过DAC的电容失配导致INL超标,折腾了好久才搞定。

经验之谈:SAR ADC是嵌入式系统中最常用的ADC架构。从STM32到ESP32,内部集成的ADC基本都是SAR架构。为什么?因为它功耗低、精度够用、成本便宜。你想想看,一个12位SAR ADC,采样率1MSPS,功耗才几毫瓦,Flash ADC想都不敢想。

4.3 两者对比:什么时候选谁?

参数 Flash ADC SAR ADC
转换速度 极快(1个时钟周期) 中等(N个时钟周期)
分辨率 低(通常≤8位) 高(8-18位常见)
功耗 极高(指数增长) 低(线性增长)
芯片面积 大(比较器太多) 小(结构简单)
输入电容
典型应用 高速示波器、雷达、5G 音频、工业控制、传感器

说白了,选型就是做权衡。你要速度,选Flash;你要精度和低功耗,选SAR。我见过不少工程师在选型时只看采样率,忽略了功耗和面积,结果板子做出来发热严重。嗯,这里要注意,数据手册上的参数都是在特定条件下测的,实际使用时得留有余量。

4.4 实战中的坑与建议

最后,分享几个我在项目中踩过的坑:

  • Flash ADC的输入驱动:它的输入电容很大,前级运放如果驱动能力不够,信号会失真。我曾经用普通运放去驱动一个8位Flash ADC,结果高频信号衰减严重,后来换成了高速缓冲器才解决。
  • SAR ADC的采样时钟抖动:SAR ADC对采样时钟的抖动很敏感。时钟抖动会导致采样点偏移,引入噪声。我建议用低抖动的晶振,或者用PLL做时钟净化。
  • 参考电压的稳定性:不管是Flash还是SAR,参考电压的噪声都会直接反映在输出上。我习惯在参考电压引脚旁边放一个低ESR的电容,再串一个小电阻,组成RC滤波器。

一句话总结:Flash ADC适合“快准狠”的场景,SAR ADC适合“稳准省”的场景。选型时先看速度要求,再看功耗预算,最后看成本。别贪心,没有完美的ADC,只有最适合的ADC。

好了,这一章就到这里。下一章咱们聊聊流水线ADC和Sigma-Delta ADC,这两个家伙更有意思。到时候见!