1. ADC基础原理:从模拟到数字的桥梁

ADC,模数转换器,说白了就是把连续的电压信号变成一串离散的数字。你想想看,单片机只能认0和1,但现实世界里的温度、声音、压力全是连续变化的模拟量。没有ADC,嵌入式系统就是个睁眼瞎。

我刚开始做嵌入式那会儿,总觉得ADC不就是读个电压嘛,能有多复杂?直到有一次调试一个工业传感器采集板,数据死活跳来跳去,查了三天才发现是采样率和信号频率没匹配好。嗯,从那以后我再也不敢小看ADC的基础原理了。

1.1 逐次逼近型ADC(SAR ADC)

逐次逼近型ADC,简称SAR ADC,是嵌入式系统里最常见的ADC类型。为什么?因为它性价比高,速度适中,功耗低。

它的工作原理,你可以想象成用天平称东西。你有一堆砝码:128g、64g、32g、16g、8g、4g、2g、1g。你要称一个东西,先放最大的128g,太重了就拿掉;再放64g,还重;放32g,轻了,留着;再放16g……这样逐次比较,直到把所有砝码试完。

SAR ADC就是这么干的。它内部有一个比较器、一个数模转换器(DAC)和一个逐次逼近寄存器(SAR)。每次比较一位,从最高位(MSB)开始,决定这一位是1还是0。

核心流程:

  1. 采样保持电路锁住当前输入电压
  2. SAR寄存器先假设最高位为1,DAC输出对应电压
  3. 比较器判断:输入电压 > DAC输出?保留该位为1,否则置0
  4. 移到下一位,重复步骤2-3
  5. 所有位确定后,输出转换结果

举个例子,一个8位SAR ADC,参考电压3.3V,输入电压2.0V。它会这样工作:

步骤 当前位 DAC输出 比较结果 该位值
1 Bit7 (128/256 × 3.3V = 1.65V) 1.65V 2.0V > 1.65V 1
2 Bit6 (192/256 × 3.3V = 2.475V) 2.475V 2.0V < 2.475V 0
3 Bit5 (160/256 × 3.3V = 2.0625V) 2.0625V 2.0V < 2.0625V 0
4 Bit4 (144/256 × 3.3V = 1.85625V) 1.85625V 2.0V > 1.85625V 1
... ... ... ... ...

最终结果就是逐位逼近出来的二进制数。N位SAR ADC只需要N个时钟周期就能完成一次转换,效率很高。

个人经验:我在调试STM32的ADC时,发现SAR ADC对输入阻抗很敏感。如果信号源内阻太大,采样电容充不满,转换结果会偏小。我习惯在ADC输入引脚加一个0.1μF的电容,效果立竿见影。

1.2 Σ-Δ型ADC

Σ-Δ型ADC,名字听着吓人,其实原理没那么玄乎。它跟SAR ADC的思路完全不一样——SAR是直接比较,Σ-Δ是过采样加噪声整形。

它的核心思想是:用很低的精度(1位)但极高的速度去采样,然后通过数字滤波把精度提上来。你想想看,用1位的比较器,输出只有0和1,但采样率是目标采样率的几十上百倍。这些0和1的密度就反映了输入电压的大小。

Σ-Δ ADC内部有两个关键部分:

  • 调制器(Modulator): 以极高频率对输入信号进行1位量化,同时把量化噪声推到高频段
  • 数字滤波器(Digital Filter): 把高频噪声滤掉,同时把1位数据流转换成高分辨率的数字输出

为什么叫Σ-Δ?Σ是积分(求和),Δ是差分。调制器里有一个积分器对误差进行累加,然后对累加结果做1位量化。说白了就是:误差越积越大,输出就翻转一下,把误差拉回来。

Σ-Δ ADC vs SAR ADC 关键区别:

特性 SAR ADC Σ-Δ ADC
分辨率 8~16位 16~24位,甚至更高
采样率 可达数MSPS 一般较低,几十kSPS以内
功耗 中等 相对较高(数字滤波耗电)
抗噪能力 一般 强,噪声整形后信噪比高
典型应用 电机控制、数据采集 音频、精密测量、传感器

我记得有一次做高精度温度采集,要求分辨率达到0.01°C。用SAR ADC根本搞不定,16位ADC在3.3V参考下,1LSB对应50μV,温度传感器输出才10mV/°C,根本分辨不出来。后来换了Σ-Δ ADC,24位分辨率,1LSB不到0.2μV,问题迎刃而解。

1.3 分辨率与采样率的关系

分辨率,就是ADC能分辨的最小电压变化。N位ADC,分辨率 = Vref / 2^N。比如12位ADC,参考电压3.3V,分辨率 = 3.3 / 4096 ≈ 0.8mV。

采样率,就是ADC每秒能转换多少次,单位是SPS(Samples Per Second)。

这两个参数是互相制约的。为什么?

  • SAR ADC: 分辨率越高,位数越多,需要的时钟周期越多,采样率自然就降下来了。16位SAR ADC比12位慢不少。
  • Σ-Δ ADC: 分辨率越高,需要的过采样率(OSR)越高,数字滤波器的抽取倍数越大,输出采样率就越低。24位Σ-Δ ADC的输出速率通常只有几十到几百SPS。

避坑指南:我曾经在一个项目中选了24位Σ-Δ ADC,觉得精度越高越好。结果发现采样率只有10SPS,根本跟不上信号变化。后来才意识到,高分辨率和高采样率不可兼得,选型时一定要先搞清楚信号的带宽。

这里有个经验公式:对于Σ-Δ ADC,每提高一倍过采样率(OSR),信噪比提高3dB,相当于增加0.5位分辨率。但代价是输出采样率降低一半。

1.4 量化误差与信噪比

量化误差,是ADC天生就有的误差。因为模拟信号是连续的,但数字输出是离散的。比如一个12位ADC,输入2.0V,实际对应的数字量可能是2.000V到2.001V之间的某个值,但你只能取整。这个舍入误差就是量化误差。

量化误差的范围是 ±0.5 LSB。理论上,量化误差的均方根值是 LSB / √12。

信噪比(SNR),就是信号功率和噪声功率的比值。对于理想ADC,信噪比只由量化噪声决定:

SNR (dB) = 6.02 × N + 1.76

这个公式很实用。12位ADC的理论SNR = 6.02 × 12 + 1.76 = 74.0 dB。16位ADC的理论SNR = 6.02 × 16 + 1.76 = 98.1 dB。

实际ADC的SNR会比理论值低,原因包括:

  • 热噪声:电阻和晶体管产生的随机噪声
  • 时钟抖动:采样时钟的不稳定性
  • 非线性:ADC的传递曲线不是完美的直线
  • 电源噪声:供电纹波会耦合到ADC内部

我习惯在选型时,实际SNR至少要比理论值低3~6dB。比如需要80dB的SNR,理论算下来需要13位,但我通常会选16位的ADC,留出余量。

个人习惯:我在看ADC数据手册时,会特别关注ENOB(有效位数)。ENOB = (SNR - 1.76) / 6.02。比如一个16位ADC标称SNR为85dB,ENOB = (85 - 1.76) / 6.02 ≈ 13.8位。这说明实际有效精度只有13.8位,不是16位。很多厂商会拿理论值忽悠人,ENOB才是真实水平。

1.5 ADC核心知识体系

下面这张图把本章的核心知识点串起来了,方便你理解ADC选型和调试时的关键脉络:

ADC核心知识体系 ADC 两大主流架构 逐次逼近型 (SAR) Σ-Δ 型 逐位比较 N个时钟周期完成N位转换 过采样 + 噪声整形 1位量化 + 数字滤波 三大核心参数:分辨率 · 采样率 · 信噪比 (SNR) 分辨率 = Vref / 2^N   |   SNR = 6.02N + 1.76 dB   |   采样率受分辨率和架构制约 SAR ADC 适用场景 中速采集、电机控制、工业 Σ-Δ ADC 适用场景 音频、精密测量、传感器 调试关注点 ENOB、输入阻抗、参考电压 选型时先看信号带宽,再定分辨率,最后算SNR是否满足需求

这张图把SAR和Σ-Δ的对比、关键参数、选型建议都串起来了。你调试ADC时,脑子里要有这张图,遇到问题就知道从哪个方向排查。

最后提醒一句:ADC的参考电压(Vref)直接影响转换精度。我见过太多人用单片机的内部Vref,结果电源纹波大,ADC读数跟着跳。如果要求高精度,一定要用外部精密参考源,比如TL431或者REF30xx系列。别省这个钱,省了后面调试更痛苦。