低功耗设备测量电池电压时要关断分压并控制 ADC 源阻抗

电池供电设备经常需要知道自身电量。最直接的办法,是用两个电阻把电池电压分到 ADC 可接受的范围,再由 MCU 周期性采样。

这个做法在常供电设备里很自然,但在低功耗设备里会暴露一个硬约束:分压电阻只要接在电池上,就会一直耗电。ADC 可以关闭,MCU 可以休眠,分压链路本身却还在消耗电池。

这类电路的设计目标要同时满足三件事:

原理图

低功耗电池电压采样原理图

这张图的核心结构是一个可关断分压器。Q1 是 P 沟道 MOS,放在电池正端和分压电阻之间;Q2 是 N 沟道 MOS,用 MCU 的 MCU_BAT_MEAS_EN 控制 Q1 的栅极。R22、R19、R20 构成分压链,MCU_ADC_BAT 从 R19 和 R20 中间取样,C11 接在 ADC 节点上做滤波和保持。

默认状态下,R24 把 Q1 的栅极上拉到 +VBAT,Q1 的 VGS 接近 0,分压链被切断;R25 把 Q2 栅极下拉,避免 MCU 引脚上电悬空时误开启测量。需要测量时,MCU 拉高 MCU_BAT_MEAS_EN,Q2 导通,把 Q1 栅极拉向地,Q1 导通,电池电压才接入分压电阻。

常接分压的问题

假设只用普通电阻分压,比如上臂 2MΩ、下臂 1MΩ,总阻值是 3MΩ。电池为 4.2V 时,分压电流大约是:

I = 4.2V / 3MΩ = 1.4uA

1.4uA 看起来很小,但低功耗设备的休眠电流可能也是微安级甚至更低。一个常接分压器会把系统休眠电流直接抬高,而且这部分电流和采样频率无关:一天只测一次,它也会 24 小时流过。

继续把电阻做大可以降低电流,但会引入另一个问题:ADC 输入源阻抗变高。很多 MCU ADC 都要求信号源阻抗不能太大,否则内部采样保持电容在采样时间内充不准,读数会偏低或受上一次通道影响。

所以低功耗电池采样不能只靠“把分压电阻做大”。它需要在不测量时断开分压链,在测量时再临时接入。

用 PMOS 关断高边

Q1 放在高边,作用是从源头切断分压电阻。用 P 沟道 MOS 做这个开关有一个好处:关断时分压链不再直接挂在电池正端,静态耗电主要剩下 MOS 漏电、R24 上拉支路相关的微小泄漏,以及后级输入泄漏。

Q1 的控制关系很直接:

这种结构适合电池电压可能高于 MCU 供电电压的场景。ADC 分压以后送入 MCU,但分压链的上端仍然是电池电压,不能把所有控制节点都默认看成 MCU 电压域。

为什么还要一个 NMOS

图里增加了 Q2,避免 MCU IO 直接连接 Q1 栅极。Q2 实际上是一个低边开漏下拉器:MCU 只控制 Q2 的栅极,Q2 再负责把 Q1 栅极拉低。

这一步主要是为了处理电压域差异。电池电压 VBAT 可能高于 MCU 的 VDD。Q1 的栅极在关闭状态会被 R24 拉到 VBAT,如果 MCU IO 直接接到这个节点,即使把 IO 配成开漏,IO 引脚仍然可能被外部拉到高于 MCU 供电的电压。

这会带来几个风险:

Q2 把这两个电压域隔开。MCU 只看见 Q2 栅极,这是一个普通的 MCU 逻辑输入;Q1 栅极则由 Q2 的漏极去下拉,可以被 R24 拉到 VBAT。只要 Q2 的 VDS 额定值覆盖电池电压,MCU IO 就不用直接承受 VBAT

分压比例和 ADC 范围

图中 R22、R19、R20 都是 1MΩ。ADC 取样点在 R19 和 R20 之间,因此下臂是 R20,上臂是 R22 + R19。

分压关系是:

V_ADC = VBAT * R20 / (R22 + R19 + R20)
      = VBAT / 3

如果单节锂电最高按 4.2V 计算,ADC 节点大约是 1.4V。这个电压通常低于 3.3V 或 1.8V MCU 的 ADC 输入范围。若使用多节电池,或者系统存在充电、热插拔、升压输出回灌等情况,就要按最高可能的 VBAT 重新计算,不能只按标称电压判断。

分压电阻总值为 3MΩ,测量时电流约为 VBAT / 3MΩ。因为 Q1 只在采样前短时间打开,这个电流只出现在测量周期内,不再变成持续休眠电流。

高阻分压会影响 ADC 采样

这个电路为了省电使用了兆欧级电阻。代价是 ADC 节点的等效源阻抗很高。

MCU_ADC_BAT 节点往外看,上臂是 R22 + R19,也就是 2MΩ;下臂是 R20,也就是 1MΩ。等效电阻为:

Rth = 2MΩ || 1MΩ ≈ 667kΩ

667kΩ 对 ADC 来说已经很高。ADC 内部通常有一个采样开关和采样保持电容。采样瞬间,这个电容要从外部信号源取电荷。如果源阻抗太高,在 MCU 配置的采样时间内电容来不及充到真实电压,ADC 读数就会偏。

C11 的作用是给 ADC 节点提供一个本地电荷库。分压链慢慢把 C11 充到目标电压,ADC 采样瞬间主要从 C11 取电荷,对 667kΩ 高阻源瞬时供电能力的依赖会降低。

为什么要等待 300 到 500ms

C11 是 100nF。它和分压器的戴维南等效电阻形成 RC 充电过程。时间常数为:

τ = Rth * C
  ≈ 667kΩ * 100nF
  ≈ 66.7ms

RC 电路不会在一个时间常数后立刻到达最终值。常用工程估算是等待 5 个时间常数,此时电压已经接近最终值:

5τ ≈ 333ms

所以固件流程应该是:

  1. 拉高 MCU_BAT_MEAS_EN,打开 Q2 和 Q1。
  2. 等待 300 到 500ms,让 C11 和分压节点稳定。
  3. 配置 ADC 较长采样时间。
  4. 丢弃第一次 ADC 结果。
  5. 连续采几次取平均。
  6. 关闭 MCU_BAT_MEAS_EN,重新断开分压链。

这里的等待时间来自分压电阻和电容决定的模拟稳定过程,和按键类软件消抖无关。C11 越大,抗 ADC 采样扰动和噪声能力越强,但等待时间越长;电阻越小,稳定越快,但测量期间电流越大。

取值边界

这个设计可以成立,但要把几个边界写进检查项:

结论

低功耗电池电压采样的核心矛盾,是分压器既要在测量时提供 ADC 可读电压,又不能在休眠时长期耗电。高边 PMOS 可以切断分压链,NMOS 用来把 MCU 控制信号和电池高压控制节点隔离,避免 MCU IO 直接暴露在高于自身供电的电压上。

分压电阻取到兆欧级以后,功耗降下来了,ADC 源阻抗也上去了。C11 可以改善 ADC 采样瞬间的电荷供给,但它和分压电阻共同决定了数百毫秒的稳定等待时间。这个电路最终要靠硬件开关和固件采样时序配合:打开分压、等待 RC 稳定、长采样、丢首样、多次平均、关闭分压。

本文由 AI 辅助生成,可能存在错误或遗漏,请以实际资料和官方文档为准。