LV001-ADC原理与精度基础
一、 ADC 在做什么:两次离散化
传感器给的是连续信号:温度、压力、电流,时间上连续、幅值上也连续。MCU 只能处理数字量,ADC(Analog-to-Digital Converter,模数转换器)就是两者之间的翻译官,它做两次离散化。
1. 采样与量化
- 采样:时间上离散。每隔固定时间取一个点,连续波形变成一串时间点
- 量化:幅值上离散。把每个点的电压归到最接近的一级台阶上,连续幅值变成整数码
(1)采样决定"多久看一次",用采样率描述。
(2)量化决定"看得多细",用分辨率描述:N 位 ADC 把量程切成 2^N 级,输出码的取值范围是 0 ~ 2^N - 1。
两次离散化都丢信息。丢多少、丢在哪、怎么算,就是本篇要讲清楚的东西。
2. 三个先记住的名词
- LSB(Least Significant Bit):最低位变化 1 对应的电压变化,也就是台阶高度,1 LSB = V_REF / 2^N
- 量程(Full Scale Range):ADC 能转换的输入电压范围,单极性 ADC 通常是 0 ~ V_REF
- V_REF(参考电压):量程这把尺子。尺子本身不准,量出来的一切都不准
二、 逐次逼近型 ADC 的工作原理
1. 为什么是逐次逼近
MCU 片内 ADC 几乎清一色是 SAR 型(Successive Approximation Register,逐次逼近寄存器型)。原因是一笔折中账:闪存型一位一个比较器,快但面积随位数指数上涨;Σ-Δ 型精度高但靠过采样换时间,慢;SAR 型只用一个比较器加一个内部 DAC,N 位做 N 次比较,速度、精度、面积三者都不拔尖但都不差,正好落在 MCU 的需求区间。
2. 结构:一台猜数字的机器
SAR ADC 的内部就是一场猜数字游戏:心里想一个数(输入电压),猜的人从最高位开始逐位问"这一位置 1 会不会超"。
- 多路选择器把多个外部通道接到同一条转换通路,所以"几个通道"不等于"几个 ADC"
- 采样保持电路在转换开始前把输入电压冻在保持电容上,转换期间输入再变也不影响本次结果
- 比较器每个时钟比一次:保持电压与内部 DAC 当前的猜测电压谁大
- SAR 逻辑按 ADCCLK 节拍从最高位起逐位试 1:比较器说没超,这一位留下;说超了,这一位清 0
- N 位比完,数据寄存器里就是转换结果,等 CPU 或 DMA 来取
3. 时序:先采样,后转换
一次完整转换分两段:
- 采样阶段:保持开关闭合,保持电容跟踪输入电压,持续 t_samp,长度可编程
- 转换阶段:开关断开,SAR 用 N 个时钟逐位逼近;12 位 SAR 共需 12.5 个 ADCCLK,即 12 次比较加 0.5 个周期收尾
于是单次转换时间 t_total = t_samp + t_conv,最高采样率就是它的倒数。这个公式是后面一切采样率计算的根。
【注意】采样时间不是越短越好:保持电容要通过信号源内阻充电,t_samp 内充不到误差小于 1/2 LSB,转换结果从起点就错了。
三、 量程与码值换算
1. 量程由参考电压决定
单极性 ADC 的量程是 0 ~ V_REF。V_REF 可以是电源本身(如 3.3 V),也可以是外部基准芯片给的更稳的电压(如 2.5 V、4.096 V)。选外部基准的理由只有一个:电源会随负载和温度漂,基准不会,或者漂得小得多。
2. 两个方向的换算
- 码转电压:V = code × V_REF / 2^N
- 电压转码:code = V × 2^N / V_REF,结果取整
以 12 位、V_REF = 3.3 V 为例:1 LSB = 3.3 / 4096 ≈ 0.806 mV。读回码 2048 对应 2048 × 0.806 mV ≈ 1.65 V,恰为半量程。
3. 满量程码是 2^N - 1 而不是 2^N
最后一个码代表的是一段区间而不是一个点:码 4095 覆盖 [V_REF - 1 LSB, V_REF)。输入哪怕真的等于 V_REF,输出也只是 4095。所以"读满量程"永远读不到 4096,这不是 bug。
四、 精度:分辨率不等于精度
1. 误差从哪来
把误差按来源分三类,性质完全不同:
| 类别 | 典型项 | 能不能消除 |
|---|---|---|
| 原理性 | 量化误差 ±1/2 LSB | 不能,只能加位数摊薄 |
| 器件性 | 偏移误差、增益误差、INL、DNL | 部分可校准 |
| 使用性 | 参考漂移、电源噪声、采样不足、布局串扰 | 靠设计规避 |
- 偏移误差:输入为 0 时输出不是 0,整条传递曲线平移,全量程错同一个常数,最好校准
- 增益误差:曲线斜率不对,输入越大错得越多,可用两点校准消掉
- INL / DNL(积分 / 微分非线性):台阶相对理想直线的整体弯曲、单级台阶宽度不均,校准不掉,是器件的硬指标
2. 量化误差:躲不掉的那一份
台阶高 1 LSB,落在同一台阶内的所有输入都变成同一个码,所以误差在 ±1/2 LSB 内呈锯齿分布。它是原理性的:与器件好坏无关,与输入信号无关,只与位数有关。位数每加 1,LSB 减半,这份误差跟着减半。
3. 把总误差算出来
工程上把各项误差按最坏情况相加(保守)或按均方根合成(乐观),datasheet 常直接给一个总未调整误差 TAE。手算一遍 12 位、3.3 V 的典型片子:
| 误差项 | 典型值 |
|---|---|
| 量化误差 | ±0.5 LSB |
| 偏移误差 | ±2 LSB |
| 增益误差 | ±2 LSB |
| INL | ±1.5 LSB |
| 最坏合计 | ±6 LSB |
±6 LSB × 0.806 mV ≈ ±4.8 mV。也就是说这片 12 位 ADC 的真实精度大约是"12 位分辨率、10 位精度"。分辨率告诉你台阶有多细,精度告诉你台阶位置站得准不准,两者不是一回事。
4. 衡量真实精度的指标:ENOB
(1)有效位数 ENOB(Effective Number of Bits)把含噪声、含失真的实测表现折回位数:ENOB = (SINAD - 1.76) / 6.02。
(2)12 位 ADC 的 ENOB 常见 10 ~ 11 位。选型时看 ENOB 比看"12 位"诚实。
五、 采样率与信号源:三个旋钮
1. 采样定理
(1)奈奎斯特采样定理:要从采样序列无失真地恢复原信号,采样率必须大于信号最高频率的 2 倍。
(2)工程上不留这么紧:测缓变信号(温度、电池电压)取 5 ~ 10 倍余量;同时用硬件低通把高于半采样率的成分滤掉,否则高频成分会混叠进低频,事后无法区分。
2. 信号源内阻决定采样时间
保持电容通过信号源内阻充电,是一个 RC 过程。源内阻越大,充到 1/2 LSB 误差内所需时间越长,t_samp 就得配越长。分压电阻取兆欧级省功耗、却把采样时间拖到微秒级,是常见的设计冲突。
3. 选型时拧的三个旋钮
- 分辨率:决定 LSB 与量化误差下限,也决定码值换算的比例
- 采样率:由 t_samp + t_conv 决定,受信号带宽与源内阻约束
- 参考源:决定量程与长期漂移,是精度的天花板
三个旋钮互相牵制:要更快就得缩 t_samp,缩 t_samp 就要求源内阻更小;要更准就要更稳的参考和更多位数,更多位数又要求更长的采样时间把电容充到更小的误差内。理解这条牵制链,比记住任何一张寄存器表都耐用。
本文档由 markdowncli 技能辅助生成