还记得我的好大哥吗?给我采集器和供高位万用表的大哥!最近他在设计DMM,重点研究里面的:
积分ADC
使用逻辑分析仪来研究ADC的原理:
应该是Pro版本
后来老哥把逻辑分析仪的数据包给我了,我咔咔一顿分析。
这是一个采集周期
展示几张
另外一个结果
采样时间
双线回落时间
加入锁存点,就采样
当然了,具体的分析结果就不说了,属于商业机密了~
不过后来发现了一个现成的ADC:
哈?
就像一个巧克力
黄金针脚
这是数据手册
由 Thaler 公司设计的 高精度 22 位积分型模数转换器(Integrating ADC),主要用于对精度要求极高的领域,例如地震仪、医疗、科学测量设备等。
项目 | 数值 |
|---|---|
架构类型 | 双斜率积分型 ADC(Integrating ADC) |
分辨率 | 22 位 |
输入范围 | ±10.485760 V |
输入等效噪声 | 1 µV rms(超低噪声) |
低频噪声 (0.1-10Hz) | 1.52 µVpp(通过公式估算) |
最大非线性误差 | 2 ~ 3 ppm |
满量程漂移(温漂) | 1 ppm/°C |
偏置漂移(温漂) | 0.2 ~ 1 ppm/°C |
自动校零(Auto-zero) | 支持硬件引脚触发,默认上电自启动 |
转换时间 | 320 ms |
工作电源 | ±15V 和 +5V,总功耗约 0.4 W |
数字接口格式 | 并口,三字节输出(MSB → Middle → LSB) |
数据格式 | BOB(Bipolar Offset Binary)格式 |
输出精度(LSB) | 1 LSB = 5 mV(即 2⁻²² × 20.97151V ≈ 5μV) |
封装 | 40 引脚陶瓷 DIP(高可靠型) |
转换时间也少这个,太小了,就不截图了
MT-027.ADI
ADC100C 是基于双斜率积分法(dual-slope integration)工作,其核心流程如下:
这是它内部的框图,觉得ADI更直观
Vhi / Vlow + Auto Zero Switch输入端(Vhi, Vlow)提供差分信号。
Auto Zero Switch 控制是否对输入端进行自动归零(offset 校准):
归零阶段连接参考地,测量系统本底噪声和漂移;正常阶段连接 Vhi/Vlow,执行积分。
Differential Voltage Controlled Current Source将输入差分电压(Vhi - Vlow)转换成 电流;此电流被积分器积分,电容电压按输入电压正负线性上升/下降。
Schmitt Trigger运放 + 电容组成积分器,将输入电流积分成电压;Schmitt 触发器用于检测积分完成或零点回归,输出为“计数终止信号”或“开始反向积分”的标志。
Bidirectional Reference Current Source + Current Directional Switch提供正负可切换的恒定参考电流(±Iref),在反积分阶段,该电流与原积分电流方向相反,使积分器电压回归零。
Timing Control and Counter + Clock控制积分时间窗(T1)和反积分时间窗(T2),记录反积分所需时钟周期数,该值与输入电压 Vin 成正比。
Microprocessor控制转换流程(Auto Zero、Convert、Status Line),计算 T2 并转换成数字输出。
Output Buffer将微处理器处理结果输出,支持三态控制(Output Enable)。
阶段 | 动作 | 说明 |
|---|---|---|
Auto Zero | 断开输入,连接参考地 | 校正 offset、电容泄漏、电流失配 |
Input Integrate | 输入电流积分时间 T1 | 电压斜率 ∝ Vin |
Reference Integrate | 反向参考电流积分,计时 T2 | 电压回到 0,T2 ∝ Vin |
输出结果 = T2 × (Iref × Clock) → 由微处理器读出并数字化
双积分型 ADC 在输入电压为 1V 时的典型波形响应
抗干扰强 能有效抑制工频、周期性噪声
高分辨率 积分时间拉长可获得 24-bit 以上精度
低漂移 自动归零消除系统误差
差分输入 高共模抑制(CMRR)能力强
这么多
引脚 | 功能 |
|---|---|
Pin 4 | -15V |
Pin 5 | +15V |
Pin 6 | +5V |
Pin 7 | GND |
Pin 21 | Output Enable(低电平输出) |
Pin 22 | Convert(下降沿触发转换) |
Pin 29 | Auto-zero/Reset(低电平触发) |
Pin 34/35 | 外接积分电容(0.68 µF) |
Pin 39/40 | Analog High / Low 输入端 |
Pin 13-20 | 数据输出 D0~D7 |
Pin 23/24 | 状态线 S0/S1 |
项目 | 值 | 说明 |
|---|---|---|
输入范围 | ±10.485760V | 大动态范围 |
分辨率 | 22-bit | 理论 5µV 精度 |
输入噪声 | 1 µV rms | 极低噪声等级 |
积分时间 | 320 ms | 慢速高精度 ADC |
线性误差 | <3 ppm | 适合精密仪器 |
偏移漂移 | <0.2 ppm/°C | 自动校零辅助 |
应用场景 | 精密仪表、地震、医疗等 | 对低频噪声极其敏感 |
反正除了慢和贵:在高频宽带采样 , 不适合(速度慢)。
模拟,可能有人感兴趣,代码给出来了
ADC100C 双斜积分 ADC 的典型信号路径与工作过程模拟,逐段解释:
深蓝线:积分电容两端电压(转换量)
虚线竖线:三个关键时间点:
正向积分结束(绿色)
归零结束,反向积分开始(橙色)
反向积分结束(红色)
优点 | 描述 |
|---|---|
超低噪声 | 因为积分过程可滤除高频干扰 |
高线性度 | 双斜积分结构具备优良的线性特性 |
抗工频干扰 | 若积分时间为 20ms 或 100ms,可抵消 50/60Hz 干扰 |
模拟 ADC 的量化误差和噪声传播过程:
量化误差传播
上图展示了 ADC100C(24-bit 双斜积分型 ADC)在理想与带噪条件下的量化误差传播,用于评估其LSB 精度和低频噪声影响:
呈阶梯状“锯齿波”分布,误差严格限制在 ±0.5 LSB 范围内,这是理论最大精度限制,由 量化本质 决定。
低频噪声为 ,与 ADC 低频噪声规格一致;随机扰动导致输出码出现轻微抖动,误差在 ±1.5 LSB 范围内略有增大,但整体仍保持高精度。
代表理想误差界限,便于观察噪声是否引起跳码、跨 LSB
LSB 电压(24-bit,±10.48576V):
模拟噪声(2 uV)已经接近 1.6 LSB,容易导致 ±1 LSB 的输出抖动
量化精度限制 :不可避免,±0.5 LSB 是理论上限
低频噪声 易在 ±1~2 LSB 范围内扰动码字,也就是一俩个LSB
积分型 ADC 特性 滤除高频干扰,低频噪声主导误差扩展,若目标 <1 μV 精度,应重点压低参考电压噪声 & 比较器抖动。
性感三连
抖动模拟输入信号采样时间的不确定性(0.5 μV 标准差)
导致码字在 ±1 LSB 附近抖动,输出误差不再固定在 ±0.5 LSB
抖动越强,对超低电平 (<5μV) 的测量越敏感,建议采用平均或时间冗余
模拟一个低频正弦波 (±1 μV),代表电荷注入、热漂、干扰耦合等缓慢变化
对积分型 ADC 的影响表现为误差周期性波动,但可通过 积分时间覆盖多个周期 进行抵消
系统设计时推荐使用 电荷平衡回路 + 对称采样
假设噪声标准差随积分时间 增大而减少,近似为:
对比 50ms、100ms、200ms:
积分时间越长,误差曲线越平滑,系统噪声压制能力增强,但代价是 采样速率下降、响应变慢。
import matplotlib.pyplot as plt
import numpy as np
# 时间轴(ms)
t_total = 400 # ms,总时长
t = np.linspace(0, t_total, 1000)
# 阶段划分
tp = 40 # 正向积分时间
tz = 20 # 自动归零时间
tm = 240 # 反向积分时间
t1 = tp
t2 = t1 + tz
t3 = t2 + tm
t4 = t_total
# 构造积分波形(简化模型)
vin = 5e-6 # 输入电压为 5uV
vref = 10.48576 # ±参考电压
C = 1.0 # 单位积分电容
slope_in = vin / C
slope_ref = -vref / C
v = np.zeros_like(t)
v0 = 0
for i, ti in enumerate(t):
if ti < t1:
v[i] = v0 + slope_in * ti
elif ti < t2:
v[i] = v0 + slope_in * t1 # 保持归零阶段前的最大值
elif ti < t3:
v[i] = v0 + slope_in * t1 + slope_ref * (ti - t2)
else:
v[i] = 0 # 完成归零后进入等待阶段
# 绘图
plt.figure(figsize=(10, 4))
plt.plot(t, v * 1e6, label="积分电容电压 Vint", color='navy') # 转为 uV 显示
plt.axvline(t1, color='green', linestyle='--', label='正向积分结束')
plt.axvline(t2, color='orange', linestyle='--', label='归零阶段结束')
plt.axvline(t3, color='red', linestyle='--', label='反向积分结束')
plt.title("ADC100C 双斜积分ADC:典型信号路径(模拟积分过程)")
plt.xlabel("时间(ms)")
plt.ylabel("积分电容电压(uV)")
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend(loc='upper right')
plt.tight_layout()
plt.show()