找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4871

积分

0

好友

633

主题
发表于 1 小时前 | 查看: 6| 回复: 0

很多硬件工程师第一次做 ADC 选型,最容易掉进一个误区:ADC 是 16 bit,所以测量精度就是 16 bit。实际上,这两个概念差得很远。

16 bit 只是告诉你 ADC 理论上可以把满量程分成 2^16 = 65536 份,但真正拿到板子上测电压,结果可能远没有想象中那么准。尤其是做电池电压采样、电流检测、温度采集这类电路时,ADC 精度不能只盯着一个参数,而要把量化误差、偏移误差、增益误差、INL、DNL、参考电压、输入源阻抗、噪声和温漂全部放进来考虑。这也是很多规格书上看起来很亮眼、实测却差一截的根源所在。

LM358运放构成的ADC前端信号调理电路

那这些东西如何考虑呢?下面逐个拆解。

开整

先搞清楚 1 LSB 到底是多少?

假设一个 12 bit ADC,参考电压 VREF = 3.3V,那么理想情况下:

$$LSB = \frac{V_{REF}}{2^{12}} = \frac{3.3V}{4096} \approx 0.806mV$$

也就是说,ADC 理论上的最小量化步进只有 0.806mV。如果换成 16 bit,1 LSB ≈ 50.4μV。看到这里是不是觉得 16 bit 非常厉害?先别急。

ADC非线性误差阶梯图,展示理想与实际传输曲线及DNL缺失码

50µV 只是理论分辨率,不代表你真的能测准 50µV。因为 ADC 内部还有各种误差,外部还有参考源噪声、电源噪声、PCB 串扰。接下来我们聊聊 ADC 精度最容易搞混的几个参数。

1. Offset Error——偏移误差

假设 ADC 输入 0V,理论上应该输出 0,但实际输出可能是几个 LSB。比如 Offset = +3 LSB,对于 12 bit、3.3V 参考:

3 × 0.806 = 2.42mV

这意味着即使输入端完全是 0V,ADC 仍然可能显示约 2.42mV。这个误差最大的特点是它基本表现为整体平移,所以偏移误差其实比较好处理,可以通过软件校准消掉。

正偏移误差表示方法,实际传输曲线整体左移0.5LSB

2. Gain Error——增益误差

增益误差更像是 ADC 的比例尺不准了。假设满量程理论应该对应 3.3V,但实际满量程对应 3.29V,那么整个转换曲线就不再是理想斜率。例如 ADC 实际存在 Gain Error = 0.1%,测量 3.0V 时,仅增益误差就可能带来:

3.0 × 0.1% = 3mV

所以对于高精度测量,Offset 和 Gain 通常需要分开处理。

正增益误差表示方法,实际传输曲线与理想曲线存在斜率偏差

3. 真正让 ADC 非线性的,是 INL 和 DNL

这两个参数很多人看规格书时容易跳过去,但做精密 ADC 设计时非常重要。DNL 是微分非线性误差,它关注的是每一个 ADC 码之间的实际步长是不是一样。理想情况下每一步应该是 1 LSB,如果某一级实际只有 0.7 LSB 或者 1.3 LSB,这就是 DNL 误差,严重时甚至可能出现丢码。

微分线性误差表示方法,展示实际步宽与1LSB的偏差

INL 是积分非线性误差,它关注的是实际转换曲线和理想直线到底偏了多少。例如规格书写 INL = ±2 LSB,对于前面的 12 bit ADC:

2 × 0.806 = 1.61mV

这意味着即使你把 Offset 和 Gain 都校准好了,ADC 内部的非线性仍可能贡献约 ±1.61mV 的误差。这里就能看出来:校准 ADC 并不等于 ADC 变成理想 ADC。校准主要解决系统性的偏移和增益问题,而 INL/DNL 属于转换器自身线性度的问题。

积分线性误差表示方法,展示实际曲线与理想直线的偏差范围

4. 参考电压才是隐形天花板

ADC 测量本质上是在做:

$$Code \approx \frac{V_{IN}}{V_{REF}} \times 2^N$$

所以 ADC 不只是测输入电压,它其实是在测「输入电压与参考电压的比值」。

假设 VIN = 1.65VVREF = 3.3V,理论输出:

Code = 1.65 / 3.3 × 4096 = 2048

但如果参考电压实际变成了 3.3V + 10mV = 3.31V,那么:

Code = 1.65 / 3.31 × 4096 ≈ 2042

已经差了大约 6 个码。所以很多时候 ADC 本身没问题,真正拖后腿的是 VREF。这也是为什么做高精度 ADC 时,参考源的噪声、初始精度、温漂、负载调整率都不能忽略。

5. RC 滤波为什么有时候把精度搞得更差?

这是实际硬件设计中非常容易踩坑的一点。很多人看到 ADC 前面需要滤波,直接串一个 10kΩ 电阻,再并一个 100nF 电容。从低频滤波角度看没问题:

$$f_c = \frac{1}{2\pi RC}$$

代入 R = 10kΩC = 100nF,得到 fc ≈ 159Hz,看起来很合理。

但 ADC 内部通常存在采样保持电容。ADC 采样瞬间,需要从外部信号源抽取电荷,如果前面的源阻抗太大,采样电容来不及充电,ADC 采到的电压就可能偏低。所以 ADC 数据手册经常会规定一个最大推荐源阻抗,或者要求外部增加缓冲运放。

RC网络电路示意图,含源阻抗与采样保持电容模型

RC 不是越大越好,这是 ADC 前端设计非常重要的一条经验。

实战:算一个 12 bit ADC 系统的总误差

假设现在做一个 0~3.3V 的 12 bit ADC 系统。参数假设如下:

  • 量化误差:±0.5 LSB
  • Offset:±2 LSB
  • Gain:±3 LSB
  • INL:±2 LSB
  • 参考电压误差换算:±2 LSB
  • 输入噪声:±2 LSB

最简单的工程估算,把这些误差按照最坏情况相加:

Error_total = 0.5 + 2 + 3 + 2 + 2 + 2 = 11.5 LSB

对应电压是:

11.5 × 0.806 ≈ 9.27mV

所以这个系统虽然是 12 bit ADC,理论 LSB 只有 0.806mV,但实际最坏情况下,系统误差可能已经接近 ±9mV

这就是为什么 ADC 选型不能只看多少 bit,真正应该看的是整个测量链路的 Total Error。

温度漂移:25℃ 的数据远远不够

假设 ADC 的 Offset Drift 为 10μV/℃,系统工作温度范围是 −40℃ ∼ 125℃,温差 ΔT = 165℃,那么仅偏移漂移就可能达到:

10μV/℃ × 165℃ = 1.65mV

如果你的产品采集的是微弱信号,这个影响已经非常大了。所以做精度预算时,不能只拿 25℃ 下的数据来算,真正应该算的是整个工作温度范围内的误差。

误差预算三步拆解法

在实际项目里,我通常把 ADC 误差拆成三个部分来看。

第一部分:ADC 自身误差

  1. Offset Error
  2. Gain Error
  3. INL
  4. DNL
  5. Quantization Error

第二部分:参考和电源影响

  1. VREF 初始精度
  2. VREF 噪声
  3. VREF 温漂
  4. AVDD 噪声

第三部分:外部模拟电路影响

  1. 分压电阻精度
  2. 运放 Offset
  3. 运放噪声
  4. RC 滤波
  5. 源阻抗
  6. PCB 漏电
  7. EMI 串扰
  8. 地弹噪声

尤其是电阻分压,假设:

$$V_{ADC} = V_{IN} \times \frac{R_2}{R_1 + R_2}$$

如果 R1R2 都是 1% 电阻,你以为分压比例就在 1% 以内?实际上两个电阻的误差会共同影响比例。所以如果 ADC 本身已经做到 ±1 LSB,但前面的分压网络贡献了 ±10mV,那么这颗 ADC 选 16 bit 基本没有意义。

软件平均能不能救精度?

可以降低随机噪声,但不能把 ADC 自身的 INL、Gain Error 凭空消掉。如果噪声是随机的,采集 N 次做平均,理论上噪声标准差可以近似降低:

$$\sigma_{avg} = \frac{\sigma}{\sqrt{N}}$$

比如原始噪声 σ = 4mV,平均 16 次:

$$\sigma_{avg} = \frac{4}{\sqrt{16}} = 1mV$$

确实有效。但如果误差来自一个固定的 +5mV Offset,你平均 1000 次,结果仍然是 +5mV。所以要记住:平均主要对随机噪声有效,对系统性误差没有魔法。

真正靠谱的 ADC 精度计算方法

做项目时,不建议看到规格书上一堆参数就直接相加,更实用的方法是先建立一张误差预算表:

误差来源:ADC Offset、ADC Gain、INL、量化误差、VREF、输入电阻、运放 Offset、噪声。然后根据误差的性质分别计算。

如果采用最坏情况设计,可以直接做绝对值累加。如果这些误差彼此独立且近似随机,可以进一步采用 RSS 方法:

$$E_{RSS} = \sqrt{E_1^2 + E_2^2 + \cdots + E_n^2}$$

这两种算法得到的结果可能差很多。产品做可靠性设计时,我更倾向先用 Worst Case 把最坏的结果算出来,再根据实际测试数据做优化。

所以 ADC 真正难的,从来不是 12 bit 还是 16 bit,而是你能不能把 16 bit 里面到底有多少 bit 是真正有用的,算清楚。如果一个 16 bit ADC 的 1 LSB = 50μV,但整个系统噪声和误差已经达到 ±5mV,那么有效分辨能力才是你要关注的。这种情况下,ADC 标 16 bit 更多只是一个规格参数,真正决定测量结果的,是整个模拟前端和误差预算。

所以以后拿到 ADC 规格书,建议不要先看 Resolution 16 bit 这一行。先去找:Offset、Gain Error、INL、DNL、Reference、Noise、Temperature Drift、Input Source Resistance。把这些参数带入你的实际电路算一遍,你才知道这颗 ADC 到底够不够用。

ADC 设计选型涉及的知识点很碎,从转换器原理到前端调理电路,从参考源设计到误差分析,每一项都需要扎实的模拟功底。如果你也在做精密测量相关项目,建议系统性地梳理一遍技术文档中的 ADC 设计指南和避坑手册,把规格书参数和实际电路结合起来看。很多硬件工程师走过的弯路,本质上都是同一批参数的坑——只不过换个项目重新踩一遍而已。在云栈社区的硬件板块里,关于 ADC 采样精度、参考源选型、前端阻抗匹配的讨论串不少,翻一翻别人的实测数据和排错过程,往往比单看一篇教程更有收获。




上一篇:64块的博世45W车充拆解:德国牌壳里藏着国产SW3517S芯片
下一篇:Lithe 轻量级 Java IDE 体验评测:内存占用约 300MB,Spring Boot 项目一键运行
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-9-12 02:35 , Processed in 0.333798 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表