摘要电池电压检测值偏低、跳变换了精密分压电阻依旧不是电阻精度问题而是ADC 采样窗口Sampling Time与输入阻抗不匹配导致采样电容Csh充电不足。本文解析 ADC 采样的底层物理过程。一、问题描述现象**电池电压 4.2V分压后给 ADC读数只有 4.0V换用 0.1% 精密电阻读数依旧偏低用手触摸分压电阻读数突然变准了。**很多工程师的排查方向是电阻精度不够基准电压Vref不稳软件滤波没做好二、原理分析1. 物理模型ADC 输入不是一个无穷大的阻抗而是一个开关电容网络。Vin ──► [Rsource] ──► [Sampling Switch] ──► [Csh (采样电容)]2. 核心参数Rsource源阻抗外部电路的总电阻分压电阻 走线电阻。Csh采样电容ADC 内部的保持电容通常几 pF 到几十 pF。Ts采样时间采样开关闭合的时间窗口。3. 反直觉真相“分压电阻阻值越小越好”是错的。如果分压电阻太大如 1MΩ 1MΩRsource 太大。在采样时间Ts内Csh 充不满电。ADC 采样的是“半充满的电平”​ → 读数偏低。如果分压电阻太小如 1kΩ 1kΩ功耗太大电池直接被耗干。三、工程级解决方案方案 1计算最小采样时间公式必须确保采样时间足够长。充电时间常数τ Rsource × Csh稳定条件Ts ≥ k × τ (k 通常为 7~10保证误差 1/2 LSB)实战经验如果 Rsource 10kΩCsh 10pFτ 100ns。Ts 需 1µs。如果 MCU 时钟快采样周期短必须软件配置更长的采样时间。方案 2增加采样电容硬件解法在 ADC 引脚并联一个小电容如 10nF ~ 100nF。Vin ──► [R] ──► ADC Pin ──► GND │ [Cext]作用外部电容作为电荷库辅助内部 Csh 快速充电。代价增加了滤波效果但也降低了响应速度不适合快速变化信号。方案 3正确配置 ADC 参数软件解法以 STM32 为例ADC_ChannelConfTypeDef sConfig {0}; sConfig.Channel ADC_CHANNEL_0; sConfig.Rank 1; sConfig.SamplingTime ADC_SAMPLETIME_28CYCLES; // 关键加大采样周期 HAL_ADC_ConfigChannel(hadc1, sConfig);四、选型避坑建议不要盲目追求高阻抗电池检测分压电阻通常选100kΩ ~ 500kΩ​ 级别。必须配合长采样时间​ 或外部电容。基准电压Vref如果 Vref 随 VDD 波动如直接使用 VDD 作为 Vref测量结果会是比率度量Ratiometric与 VDD 无关。如果需要绝对电压必须使用外部基准​ 或内部带隙基准。漏电流某些 MCU 在深度睡眠时IO 会有漏电流。如果分压电阻太大漏电流会拉低电压。五、总结 Checklist[ ] 是否计算了 Rsource × Csh 的时间常数[ ] ADC 采样时间是否配置得足够长[ ] 是否在 ADC 引脚并联了外部采样电容[ ] Vref 是否稳定或使用了比率度量六、写在最后关注我少走弯路我是 gqqsherry一个拒绝调包、专注底层逻辑的嵌入式工程师。ADC 采样是“模拟与数字世界的握手”握手时间太短数据就会“握空”。关注我的专栏《嵌入式底层避坑指南》下一篇我们将深入解析《复位与启动Boot底层避坑指南》系列开篇。下一篇预告《为什么 Bootloader 跳转 App 会 HardFault》原创文章转载请注明出处。