Skip to content

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 会不会超"。

SAR ADC 结构框图

  • 多路选择器把多个外部通道接到同一条转换通路,所以"几个通道"不等于"几个 ADC"
  • 采样保持电路在转换开始前把输入电压冻在保持电容上,转换期间输入再变也不影响本次结果
  • 比较器每个时钟比一次:保持电压与内部 DAC 当前的猜测电压谁大
  • SAR 逻辑按 ADCCLK 节拍从最高位起逐位试 1:比较器说没超,这一位留下;说超了,这一位清 0
  • N 位比完,数据寄存器里就是转换结果,等 CPU 或 DMA 来取

3. 时序:先采样,后转换 ​

ADC 采样与转换时序

一次完整转换分两段:

  • 采样阶段:保持开关闭合,保持电容跟踪输入电压,持续 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 技能辅助生成