【ADC 测试技术】:1. 直方图法测量 ADC 的 DNL 与 INL
静态测试基础——直方图法测量 ADC 的 DNL 与 INL
系列:《从原理到实测:ADC 测试技术深度解析》第一篇
难度:入门 / 基础
关键词:ADC 测试、直方图、DNL、INL、斜坡信号
一、为什么我们需要直方图测试?
在对 ADC(模数转换器)进行静态性能测试时,最直观的方法是逐个测量每个码字的转换边界(Code Boundary):给 ADC 施加一个精确可调的直流电压,通过伺服回路(Servo Loop)逐步逼近每一个量化跳变点,记录对应的电压值,再计算出 DNL 和 INL。
这种方法原理清晰,但有一个致命缺点——速度极慢。
对于一个 N 位 ADC,共有2N−12^N - 12N−1个转换边界需要逐一测量。每次测量都需要伺服回路收敛到稳定状态,加上高精度电压表的读数时间,整体测试耗时随分辨率指数级增长。对于 16 位以上的高精度 ADC 而言,这种方法在生产测试中几乎不可接受。
直方图测试(Histogram Testing)正是为了解决这一问题而生的。它的核心思想是:
不去主动"找"每一个转换边界,而是施加一个已知概率分布的输入信号,通过统计 ADC 输出码字的出现频次,反推出每个量化区间的实际宽度,进而计算 DNL 和 INL。
二、伺服回路(Servo Loop)简介
在介绍直方图法之前,有必要了解它所取代的传统方法——码边界伺服(Code Boundary Servo)。
伺服回路的工作原理如下:
- 向 ADC 施加一个初始电压,读取输出码字 A
- 将 A 与目标码字 B 输入数字比较器
- 比较器输出驱动两路电流源i1i_1i1、i2i_2i2,对积分电容C1C_1C1充放电
- 积分器输出经R2R_2R2、C2C_2C2低通滤波后作为 ADC 输入
- 回路不断调整,直到 ADC 输出恰好在 A 与 B 之间反复跳变
- 此时用高精度电压表读取 ADC 输入端电压,即为该转换边界的精确值
这一方法精度高,但每测一个边界都需要等待回路收敛,对2N2^N2N个码字逐一操作,耗时极长。直方图法通过一次连续扫描完成所有码字的统计,从根本上解决了效率问题。
三、斜坡直方图测试原理
3.1 测试设置
斜坡直方图测试的硬件搭建非常简单:
斜坡信号发生器 ──→ ADC ──→ PC(采集并统计输出码字) ↑ V_REF, f_S测试时,向 ADC 施加一个速度远慢于采样时钟的线性斜坡信号,电压范围覆盖 ADC 的整个输入量程(0 到VREFV_{REF}VREF)。在斜坡扫描过程中,ADC 持续以采样率fSf_SfS进行采样,PC 端记录每个输出码字出现的次数,形成直方图。
3.2 基本原理
由于斜坡是线性的,理想情况下,ADC 的每个量化区间宽度相同,斜坡在每个区间内停留的时间也相同,因此每个码字被采样的次数(Code Count)也应该相同。
若某个码字的实际量化区间比理想宽,斜坡在该区间停留的时间就更长,采样次数就更多;反之则更少。
这就是直方图法的核心逻辑:码字出现频次的偏差,直接反映了对应量化区间宽度的偏差,也就是 DNL。
3.3 测试参数计算示例
以一个具体例子说明参数选择:
| 参数 | 数值 |
|---|---|
| ADC 采样率fSf_SfS | 100 kHz |
| 采样周期TST_STS | 10 μs |
| 1 LSB 对应电压 | 10 mV |
| 期望测量分辨率 | 0.01 LSB |
| 每个码字所需样本数nnn | 100 个 |
每个码字需要 100 个样本,每个样本间隔 10 μs,因此斜坡在每个 LSB 区间内停留时间为:
tper code=100×10 μs=1 mst_{per\ code} = 100 \times 10\ \mu s = 1\ mstpercode=100×10μs=1ms
斜坡斜率为:
Slope=10 mV1 ms=10 mV/ms\text{Slope} = \frac{10\ mV}{1\ ms} = 10\ mV/msSlope=1ms10mV=10mV/ms
四、DNL 提取的完整五步流程
下面以一个3 位理想 ADC和含非理想特性的 3 位 ADC为例,演示 DNL 提取的全过程。
Step 1:采集原始直方图
施加斜坡信号后,统计每个输出码字(0~7)出现的次数,得到原始直方图。
对于理想的 3 位 ADC,假设总采集样本覆盖了全量程(包含首尾过量程码),去掉首尾两个过量程码(code 0 和 full-scale code),有效码字为 1~6,共 6 个。
为什么要去掉首尾码?
过量程码(overrange bins)的计数包含了斜坡进入/退出量程的时间,不代表真实的量化区间宽度,必须排除。
Step 2:计算平均计数
nˉ=有效总样本数有效码字数=6006=100 次/码\bar{n} = \frac{\text{有效总样本数}}{\text{有效码字数}} = \frac{600}{6} = 100 \text{ 次/码}nˉ=有效码字数有效总样本数=6600=100次/码
Step 3:归一化
将每个码字的实际计数除以平均计数:
Normalized Count[k]=Count[k]nˉ\text{Normalized Count}[k] = \frac{\text{Count}[k]}{\bar{n}}Normalized Count[k]=nˉCount[k]
- 理想码字:归一化值 = 1
- 偏宽码字:归一化值 > 1
- 偏窄码字:归一化值 < 1
Step 4:减去 1,得到 DNL
DNL[k]=Normalized Count[k]−1\text{DNL}[k] = \text{Normalized Count}[k] - 1DNL[k]=Normalized Count[k]−1
结果的单位是 LSB。正值表示该码字的量化区间比理想宽,负值表示比理想窄。
Step 5:由 DNL 重建 INL
每个码字的实际宽度为:
W[k]=DNL[k]+1 LSBW[k] = \text{DNL}[k] + 1\ \text{LSB}W[k]=DNL[k]+1LSB
将各码字的宽度累加,可以重建出 ADC 的完整转换特性曲线,再与理想直线(端点连线)作差,即得到INL:
INL[k]=∑i=1kDNL[i]\text{INL}[k] = \sum_{i=1}^{k} \text{DNL}[i]INL[k]=i=1∑kDNL[i]
五、一个含非理想特性的 3 位 ADC 实例
假设某 3 位 ADC 在某个码字处存在 +0.4 LSB 的 DNL 误差,另一码字存在 -0.4 LSB 的 DNL 误差。
经过上述五步处理后:
- DNL 图:呈现 ±0.4 LSB 的偏差,与实际引入的误差吻合
- INL 图:由于 DNL 的累积效应,INL 峰值出现 +0.4 LSB 的偏差
这验证了直方图法能够准确还原 ADC 的静态非线性特性。
六、斜坡测试的速度瓶颈
直方图法虽然比逐点测量快得多,但对于高分辨率 ADC,测试时间仍然不可忽视。
以 16 位 ADC 为例:
Ttest=216 码×100 次/码100,000 次/秒=6,553,600100,000≈65.6 秒T_{test} = \frac{2^{16}\ \text{码} \times 100\ \text{次/码}}{100{,}000\ \text{次/秒}} = \frac{6{,}553{,}600}{100{,}000} \approx 65.6\ \text{秒}Ttest=100,000次/秒216码×100次/码=100,0006,553,600≈65.6秒
接近1 分 6 秒,这对量产测试来说仍然是个负担。
此外,斜坡信号还有另一个根本性问题:商用斜坡信号发生器的线性度通常只能达到 8~10 位。也就是说,用斜坡信号测试 10 位以上的 ADC 时,信号本身的非线性误差会污染测试结果,导致测量值失真。
这就引出了下一篇要讨论的内容——正弦波直方图测试。
七、小结
| 要点 | 内容 |
|---|---|
| 直方图法核心思想 | 统计输出码字频次,频次偏差 = 量化区间宽度偏差 = DNL |
| 斜坡测试优点 | 原理简单,DNL 直接读出 |
| DNL 提取步骤 | 去首尾 → 求均值 → 归一化 → 减1 → 得 DNL |
| INL 计算 | DNL 的累积求和 |
| 斜坡测试局限 | 线性度仅 8~10 位,高精度 ADC 需要更纯净的测试信号 |
下一篇:《正弦波直方图测试——突破斜坡精度瓶颈》
我们将介绍如何用正弦波替代斜坡信号,解决高精度 ADC 的静态测试难题,并深入讲解正弦波 PDF 校正算法与 MATLAB 实现。
