2、数据转换器基础:ADC与DAC工作原理、分辨率与采样率、量化误差与信噪比
好,咱们进入正题。传感器接口里,数据转换器是绕不开的核心。说白了,传感器输出的多半是模拟信号——电压、电流、电阻变化这些。但微处理器只认0和1。怎么把这两个世界连起来?靠的就是ADC和DAC。
我个人习惯把ADC叫做「翻译官」,把DAC叫做「传令兵」。一个把模拟世界的连续量翻译成数字世界的离散码,另一个把数字指令还原成模拟信号去驱动执行器。今天咱们就把这两个家伙的底裤扒干净。
2.1 ADC工作原理:从模拟到数字的桥梁
ADC,全称模数转换器。它的任务很简单:在某个时刻,把输入的模拟电压值,映射成一个数字代码。
常见的ADC架构有好几种,我挑最常用的两种讲讲。
2.1.1 逐次逼近型ADC(SAR ADC)
这种ADC在工业界用得最多。为什么?因为它平衡了速度和精度,而且功耗低。
工作原理有点像「猜数字」游戏:
- 先猜中间值,比较一下输入电压是高了还是低了。
- 高了就往低半区猜,低了就往高半区猜。
- 每猜一次,就确定一个二进制位。
举个例子,一个8位的SAR ADC,需要8个时钟周期就能完成一次转换。我在项目中用过一款12位的SAR ADC,采样率能跑到1MSPS(每秒百万次采样),用在温度传感器阵列上刚刚好。
2.1.2 Σ-Δ型ADC
这种ADC走的是「以时间换精度」的路子。它用很高的采样率(过采样)对输入信号反复采样,然后通过数字滤波把噪声滤掉,提取出高精度的结果。
Σ-Δ ADC的精度可以做到非常高,16位、24位甚至32位都不稀奇。但代价是速度慢。我见过一个24位的Σ-Δ ADC,转换一次要几十毫秒。
什么时候用? 测体重秤、地震仪、精密天平这些对速度没要求、但对精度要求变态的场景。
2.2 DAC工作原理:数字世界的传令兵
DAC是ADC的逆过程。给它一串数字代码,它输出一个对应的模拟电压(或电流)。
最常见的DAC架构是R-2R梯形网络。它用一堆电阻搭成梯子形状,每个数字位控制一个开关,把对应的电流引到输出端。优点是速度快、精度不错,而且不需要复杂的解码逻辑。
我记得有一次做波形发生器,需要输出20MHz的正弦波。选DAC的时候,不光要看分辨率,还要看建立时间。那个项目最后选了个12位、建立时间10ns的电流输出型DAC,配合高速运放做I-V转换,效果还行。
2.3 分辨率:你能分辨多小的变化?
分辨率,说白了就是ADC或DAC能分辨的最小信号变化量。
公式很简单:
分辨率 = 满量程电压 / 2^N
其中N是位数。
举个例子:一个10位的ADC,参考电压是5V,那么它的分辨率就是:
5V / 1024 ≈ 4.88mV
也就是说,输入电压每变化4.88mV,输出数字码就跳一个字。
你想想看,如果传感器输出的是微伏级别的信号,用10位ADC去采,那基本就是在「盲人摸象」。这时候就得用更高分辨率的ADC,比如16位甚至24位。
| 位数 | 2^N | 5V参考下的分辨率 | 典型应用 |
|---|---|---|---|
| 8位 | 256 | 19.53 mV | 简单开关量检测 |
| 10位 | 1024 | 4.88 mV | 普通传感器接口 |
| 12位 | 4096 | 1.22 mV | 工业控制、音频 |
| 16位 | 65536 | 76.29 μV | 精密测量、医疗 |
| 24位 | 16777216 | 0.298 μV | 地震仪、天平 |
2.4 采样率:多久测一次?
采样率,就是ADC每秒能完成多少次转换。单位是SPS(Samples Per Second)或Hz。
这里有个铁律——奈奎斯特采样定理:采样率必须大于信号最高频率的两倍,否则会发生混叠。
举个例子:你要采集一个1kHz的正弦波,采样率至少得2kHz以上。实际工程中,我一般留3~5倍的余量。比如采1kHz的信号,我会用5kHz甚至10kHz的采样率。
为什么会这样?因为实际信号不是完美的正弦波,它含有高次谐波。如果采样率刚好卡在2倍,那些谐波就会折叠回基带,造成失真。
2.5 量化误差:数字世界的「舍入误差」
量化误差,是ADC天生就有的毛病。因为模拟信号是连续的,而数字代码是离散的。你不可能用有限个数字码去精确表示无限个模拟值。
量化误差的大小,就是±1/2 LSB(最低有效位)。
举个例子:一个10位ADC,分辨率是4.88mV。如果输入电压是2.502V,它对应的理想数字码应该是:
2.502V / 4.88mV ≈ 512.7
但ADC只能输出整数码,要么512,要么513。这就产生了0.7个LSB的误差,约3.4mV。
这个误差是随机的,无法消除。但可以通过提高分辨率来减小它的影响。
2.6 信噪比:信号有多「干净」?
信噪比(SNR),就是信号功率与噪声功率的比值,单位是dB。
对于理想ADC,它的理论最大信噪比由分辨率决定:
SNR_max = 6.02 × N + 1.76 dB
其中N是位数。
算一下:
- 8位ADC:SNR ≈ 49.9 dB
- 12位ADC:SNR ≈ 74.0 dB
- 16位ADC:SNR ≈ 98.1 dB
但实际ADC的SNR会比理论值低,因为还有热噪声、电源噪声、时钟抖动等非理想因素。
我选ADC的时候,会特别关注一个指标叫ENOB(有效位数)。它把实际SNR折算回等效的位数。比如一个标称16位的ADC,实测SNR只有85dB,那它的ENOB就是:
(85 - 1.76) / 6.02 ≈ 13.8位
嗯,实际只有13.8位的性能。所以别光看标称位数,要看ENOB。
好了,数据转换器的基础就讲到这里。下一章咱们聊聊传感器接口中常见的信号调理电路——运放、滤波器这些。到时候我会分享一些我在项目中踩过的坑,保证实用。