
胡博天天偷偷摸摸的学习,今天终于是问了一个有趣的东西,我觉得可以写一个文章来解读一下,大概就是 REF 给 DAC 要不要加一个缓冲 OP。
另外这些只是理论计算,及其理想,在现实中更加复杂,可能也考虑不周。
不管最终设计怎么样,反正少就是多:


文章就是我的语音量化,理性的计算到底加不加;建议可以仿真一下。


一颗 REF5025 直接给两颗 DAC8830 的 VREF 引脚供参考电压,在电流能力上完全可行;低速、静态设定或中等精度场景,优先建议先不加运放缓冲。
对于两颗 DAC8830,真正需要研究的不是“REF5025 电流够不够”,而是更加深入的讨论:DAC 的参考电流随数字码变化;REF5025 的负载调整率会把这个电流变化转换成 VREF 变化;两颗 DAC 共用参考时会形成跨通道串扰;REF5025 对输出电容 ESR 很敏感;加运放后,白噪声通常不是主要问题,稳定性、失调、斩波纹波和电容负载反而更关键。
DAC8830 的 VREF 是内部 DAC 电阻网络的供电端。

数据手册给出的参数为:
参数 | DAC8830 |
|---|---|
VREF 输入阻抗 | 典型 9 kΩ,且随码变化 |
最低阻抗对应码 | 约 8555h |
VREF 输入电容 | 75~120 pF,随码变化 |
VREF 小信号带宽 | 1.3 MHz |
VREF | 2.5 V |

也就是说:
两颗 DAC8830 只使用了 REF5025 大约 8% 的推荐输出能力,静态电流完全不是问题(非常草率)
实际典型特性图中,单颗 DAC 在 2.5 V VREF 下的参考电流大约在 50~200 µA 范围随数字码变化,中间码附近电流最大。



于是上述变化等效为:
条件 | VREF 变化 | 等效 DAC LSB |
|---|---|---|
典型负载调整率 | 27.8 µV | 0.73 LSB |
最大负载调整率 | 69.4 µV | 1.82 LSB |
这不是说 DAC 一定产生 1.82 LSB 错误,因为实际不是从完全空载变化到两颗同时最大负载,但它说明:
REF5025 的静态输出电阻已经足以让两颗 DAC 的码相关参考电流产生可见的亚 LSB 到约 1 LSB 级影响。
设 DAC1 保持在某个固定码,DAC2 从端点码变化到中间码。


若 DAC1 在接近满量程,DAC1 输出也会变化相近数值:
REF5025 条件 | DAC2 改码引起 DAC1 最大变化 |
|---|---|
典型 | 6.5 µV,约 0.17 LSB |
最大 | 16.3 µV,约 0.43 LSB |
因此:对要求 ±1~2 LSB 的系统,一颗 REF5025 直接带两颗 DAC 通常足够;对要求通道间串扰低于 0.1 LSB 的系统,直接共用参考不够保险;当然了该误差不仅是固定增益误差,还随另一通道数字码变化,因此不容易通过一次两点校准完全消除。

DAC8830 的参考输入带宽约为 1.3 MHz,参考输入电容约为 75~120 pF,说明数字码更新时,内部参考网络会产生比较快速的电流变化。
REF5025 的负载瞬态曲线中:±1 mA 负载阶跃;±10 mA 负载阶跃;1 µF 和 10 µF 输出电容;其 VOUT 波形使用了 2~5 mV/div 的纵轴和约 20~100 µs/div 的横轴。




因此:
工作模式 | 直接 接 REF5025 |
|---|---|
偶尔设置一个 DC 电压 | 很合适 |
几十至几百次/秒更新 | 通常合适 |
几 kS/s 波形输出 | 需要实测 VREF 瞬态 |
要求 DAC 的 1 µs、0.5 LSB 建立性能 | 建议加参考缓冲 |
两颗 DAC 同时快速、大跨度更新 | 建议加缓冲或每通道独立缓冲 |

另外REF5025 数据手册明确指出,低 ESR 陶瓷电容可能使内部输出放大器在约 9 kHz 附近产生增益峰化;10 µF 低 ESR 陶瓷负载的宽带噪声可达到约 16.5 µV RMS。
数据手册的测试结果还显示:
REF5025 电容配置 | 22 kHz 噪声 | 80 kHz 噪声 | >500 kHz |
|---|---|---|---|
10 µF 陶瓷 | 34.4 µV RMS | 37.7 µV RMS | 44.5 µV RMS |
10 µF + TRIM/NR 1 µF | 14.1 µV RMS | 14.9 µV RMS | 16.4 µV RMS |
20 µF + TRIM/NR 1 µF | 14.4 µV RMS | 14.7 µV RMS | 15.1 µV RMS |
TRIM/NR 加 1 µF 后,宽带噪声下降约 2.5 倍。
所以不加运放时,最重要的反而是:TRIM/NR 必须放 1 µF;REF5025 输出电容不能随便堆低 ESR MLCC;总输出电容控制在 1~50 µF;ESR 应接近数据手册建议的约 1~1.5 Ω。

这里的阻尼电阻应当:
与主输出电容串联后接地,而不是串在 REF5025 到 DAC 的直流 VREF 线路中。
因为把电阻直接串在 VREF 线路中会产生严重的码相关压降。例如 1 Ω 与 200 µA:

所以不能用“REF5025—10 Ω—DAC VREF”的简单隔离方法。
DAC8830 手册应用图在 VREF 附近画出了 0.1 µF 与 10 µF 去耦; 但两颗 DAC 共用 REF5025 时,不建议机械地在每颗 DAC 上各放一颗无阻尼的 10 µF 低 ESR 陶瓷,否则两颗电容并联后可能恶化 REF5025 稳定性。

更合理的是:REF5025 附近一个经过 ESR 阻尼的 10~22 µF 主电容;每颗 DAC 的 VREF 引脚附近放 100 nF;REF5025 到两颗 DAC 采用等阻抗星形分配;两颗 DAC 的 AGND 在参考返回点汇合。

候选器件参数:
运放 | 1 kHz 电压噪声 | 0.1~10 Hz 噪声 | 最大失调 |
|---|---|---|---|
OPA189 | 5.2 nV/√Hz | 0.10 µVPP | 3 µV |
ADA4522-1 | 5.8 nV/√Hz | 0.117 µVPP | 5 µV |
OPA388 | 7.0 nV/√Hz | 0.14 µVPP | 5 µV |
OPA189 同时具有约 0.005 µV/℃ 的典型失调漂移;ADA4522-1 的最大失调漂移为约 22 nV/℃;OPA388 是 5 V 供电下较容易使用的真正轨到轨零漂移器件。(这样就显得我不偏心了~)
计算结果:
运放 | 20 kHz | 80 kHz | 500 kHz |
|---|---|---|---|
OPA189 | 0.74 µV RMS | 1.47 µV RMS | 3.68 µV RMS |
ADA4522-1 | 0.82 µV RMS | 1.64 µV RMS | 4.10 µV RMS |
OPA388 | 0.99 µV RMS | 1.98 µV RMS | 4.95 µV RMS |
换算到 2.5 V、16 位 DAC:
运放 | 20 kHz | 80 kHz | 500 kHz |
|---|---|---|---|
OPA189 | 0.019 LSB RMS | 0.039 LSB RMS | 0.096 LSB RMS |
ADA4522-1 | 0.022 LSB RMS | 0.043 LSB RMS | 0.108 LSB RMS |
OPA388 | 0.026 LSB RMS | 0.052 LSB RMS | 0.130 LSB RMS |
所以从纯白噪声看:
加一个合适的零漂移运放,新增噪声其实很小,远小于 REF5025 在输出电容选择不当时产生的 15~40 µV RMS 宽带噪声。


最危险的做法是:REF5025 → 零漂移运放电压跟随器 → 两颗 10 µF 陶瓷电容
普通精密运放直接驱动 10~20 µF 低 ESR 电容时,很容易出现:振铃;几百 kHz 振荡;噪声峰化;建立时间变长。
容性负载会增加反馈环路相移并降低相位裕量,这是精密缓冲器常见的稳定性问题 ;TI 针对 OPA388 参考缓冲的应用讨论也指出,直接驱动约 20 µF 负载并不合适,通常需要隔离或专门补偿。

针对“一颗 REF5025 给两颗 DAC8830”:首选REF5025 直接驱动两颗 DAC8830 的 VREF;REF5025 的 TRIM/NR 加 1 µF;REF5025 输出端使用一个 10~22 µF 主电容;主电容支路设置约 1 Ω ESR 或串联阻尼;每颗 DAC 的 VREF 引脚放 100 nF;VREF 和 AGND 使用星形连接;不要在每颗 DAC 旁边各堆一颗无阻尼的 10 µF 低 ESR 陶瓷;实测 DAC2 全码扫描时 DAC1 固定满量程输出的变化。
噪声增益:你小汁还我运放稳定性!
满足任一条件时,再增加参考缓冲:两通道串扰必须低于 0.1 LSB;两颗 DAC 同时高速更新;必须接近数据手册的 1 µs、0.5 LSB 建立时间;实测 VREF 改码毛刺超过约 10~20 µV;DAC1 固定输出时,DAC2 改码导致 DAC1 变化超过允许值。
因此,电流能力方面不加 OP 完全可以;精度方面能否不加,取决于对跨通道串扰和高速建立时间的要求;对于普通精密 DC 输出,设计正确的“REF5025 直驱”通常比一个没有做好容性负载补偿的运放缓冲器更可靠。
结果:
DAC 1 LSB = 38.147 µV
单颗 DAC 最大参考电流 = 277.8 µA
两颗 DAC 最大参考电流 = 555.6 µA
典型负载调整误差: 27.78 µV, 0.728 LSB
最大负载调整误差: 69.44 µV, 1.820 LSB
运放白噪声积分:
OPA189
BW= 20.0 kHz: 0.735 µV RMS, 0.019 LSB RMS
BW= 80.0 kHz: 1.471 µV RMS, 0.039 LSB RMS
BW= 500.0 kHz: 3.677 µV RMS, 0.096 LSB RMS
ADA4522-1
BW= 20.0 kHz: 0.820 µV RMS, 0.022 LSB RMS
BW= 80.0 kHz: 1.640 µV RMS, 0.043 LSB RMS
BW= 500.0 kHz: 4.101 µV RMS, 0.108 LSB RMS
OPA388
BW= 20.0 kHz: 0.990 µV RMS, 0.026 LSB RMS
BW= 80.0 kHz: 1.980 µV RMS, 0.052 LSB RMS
BW= 500.0 kHz: 4.950 µV RMS, 0.130 LSB RMS
单颗 DAC 参考电流变化 130 µA 时:
典型: VREF 变化 6.50 µV, 满量程通道变化 0.170 LSB
最大: VREF 变化 16.25 µV, 满量程通道变化 0.426 LSB

我是这个版本
import math
VREF = 2.5
N_BITS = 16
N_DAC = 2
# DAC8830 VREF 最小等效输入阻抗
R_REF_DAC = 9_000.0
# REF5025 负载调整率
LOAD_REG_TYP = 20.0 # ppm/mA
LOAD_REG_MAX = 50.0 # ppm/mA
LSB = VREF / (2 ** N_BITS)
i_one = VREF / R_REF_DAC
i_total = N_DAC * i_one
def load_reg_error(load_reg_ppm_per_mA, current_a):
current_mA = current_a * 1e3
dv = VREF * load_reg_ppm_per_mA * 1e-6 * current_mA
return dv
print(f"DAC 1 LSB = {LSB * 1e6:.3f} µV")
print(f"单颗 DAC 最大参考电流 = {i_one * 1e6:.1f} µA")
print(f"两颗 DAC 最大参考电流 = {i_total * 1e6:.1f} µA")
for name, load_reg in [
("典型", LOAD_REG_TYP),
("最大", LOAD_REG_MAX),
]:
dv = load_reg_error(load_reg, i_total)
print(
f"{name}负载调整误差: "
f"{dv * 1e6:.2f} µV, "
f"{dv / LSB:.3f} LSB"
)
# 运放白噪声计算
opamps = {
"OPA189": 5.2, # nV/sqrt(Hz)
"ADA4522-1": 5.8,
"OPA388": 7.0,
}
bandwidths = [20e3, 80e3, 500e3]
print("\n运放白噪声积分:")
for opamp, en_nv in opamps.items():
print(f"\n{opamp}")
for bw in bandwidths:
noise_vrms = en_nv * 1e-9 * math.sqrt(bw)
print(
f" BW={bw / 1e3:7.1f} kHz: "
f"{noise_vrms * 1e6:6.3f} µV RMS, "
f"{noise_vrms / LSB:6.3f} LSB RMS"
)
# 计算另一颗 DAC 改码产生的跨通道误差
delta_i_one = 130e-6 # 从典型特性图估读
print("\n单颗 DAC 参考电流变化 130 µA 时:")
for name, load_reg in [
("典型", LOAD_REG_TYP),
("最大", LOAD_REG_MAX),
]:
dv = load_reg_error(load_reg, delta_i_one)
print(
f"{name}: VREF 变化 {dv * 1e6:.2f} µV, "
f"满量程通道变化 {dv / LSB:.3f} LSB"
)