ADC读数饱和在0.55V?SAR ADC直连高阻源的经典陷阱
2026/8/5 11:04:13 网站建设 项目流程

一句话: DAC内部监控引脚输出阻抗15kΩ,直接接16位SAR ADC采样,信号越大被拉得越狠,读数饱和在0.55V。根因是采样电容充不满——加个运放电压跟随器就解决,标定救不了。

适合谁读:遇到ADC读数不准、读数饱和、怎么标定都不对的嵌入式工程师。

现象:小信号准,大信号饱和

设备里用12位电流DAC驱动激光器,它的内部监控引脚(MUX输出)接16位SAR ADC采样电流和电压。上板实测:

信号真实值ADC读数
参考电压1.25V0.55V(被拉到一半)
电源轨5V0.56V(严重拉低)
电流100mA对应0.42V0.43V(差4%,还行)
电流300mA对应1.25V0.55V(饱和)

规律很明显:信号越大,被拉得越狠,最后全部饱和在 0.55V 附近。

反过来,直读通道(ADC 直接接的传感器信号)灌 1.29V 读回 1.29V,完全准。说明 ADC 本身没问题,问题出在"信号怎么进来的"。

原理:SAR ADC 采样瞬间要"吸水"

SAR ADC 采样的一瞬间,内部采样电容要通过信号源充电——你可以把它想象成用杯子去水龙头接水。

  • 信号源输出阻抗低(比如几欧)= 水龙头:水量大,瞬间接满
  • 信号源输出阻抗高(比如 15kΩ)= 细水管:接水时间固定,水还没接满,时间就到了

这个 15kΩ 就来自 DAC 的手册:监控引脚明确写着"intended for use with high impedance inputs only"——只适合接高阻抗输入。而 SAR ADC 采样瞬间恰恰是个低阻抗负载(要抽电荷),两者直接连,就是细水管硬接大水杯。

采样时间固定(由 ADC 时钟决定),源阻抗越高,采样电容上充到的电压越低,读数就越低。

为什么小信号反而准

电流 0 时监控电压约 0V——杯子里没水,抽电负荷也小,读数准。

100mA 时 0.42V,需要充的电荷少,勉强充到 96%。

300mA 时 1.25V,需要大量电荷,15kΩ 细水管在固定时间内充不满——读数被压在 0.55V。

不是读数被"加了偏移",而是被"压缩饱和"——这是关键区别。

为什么标定救不了

很多人遇到读数偏低第一反应是标定:测几个点,拟合一条线,把误差校准掉。

但高阻源问题不是线性偏差:0.42V 差 4%,1.25V 直接饱和在 0.55V——这是非线性压缩。你拿这条非线性曲线去标定,拟合误差会很大,而且换个温度、换个信号幅度,曲线又变了。

物理问题只能物理解决:MUX 输出和 ADC 之间加一个运放电压跟随器

直接连加运放缓冲
输入侧ADC 抽电荷,拉低信号运放输入阻抗极高,不抽电
输出侧输出阻抗毫欧级,ADC 随便抽
读数饱和 0.55V线性,误差 <0.5%

软件折中(多采样平均、加延时)也改善有限——采样电容没充满,平均多少遍都是那个低值。

排查经验

这次问题的定位靠的是"最小工程 + 逐层排除":先确认协议命令没问题(通道能切换),再确认发送代码没问题,最后禁用后台轮询链路通了——才逼出"硬件阻抗不匹配"这个根因。

三个关键判断:

  1. "读数不同"≠"读数对"——MUX 能切通道,不代表切到的值正确
  2. 协议回显正常 ≠ 硬件输出正确——万用表才是最终裁判
  3. 手册里的注释不是随便写的——"only high impedance inputs"这类句子,是给不看它的人的警告

实测对比:直接连:1.25V被拉到0.55V | 加运放缓冲:读数线性,误差<0.5%

有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。

下一篇:NaN的C语言检测——x!=x的标准写法——防御性检查数据的经典坑

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询