
1. 项目背景低功耗IoT的最后一公里往往死在电池管理上做 IoT 产品的人都知道MCU、通信协议、云平台才是容易出彩的地方唯独电池管理这块最不起眼。我前年做一批室外低功耗传感器节点时第一批样机几乎全部死在同一类问题上整机静态电流超了规格20倍电池两周一换。后来把 Battery Management 方案重新梳理了一遍从充电、保护、放电链路再到功耗测量才终于把续航从两周不到拉到两年起步。这个经历让我意识到一个非常关键的问题所谓 Low-Power并不是让 MCU 睡个觉那么简单而是一条从电池到负载的完整链路。电池电压会从 4.2V 掉到 3.0V无线发射瞬间会拉走上百毫安充电过程中系统还得继续工作低温下电池内阻又会上涨这些因素叠加在一起任何一个环节没处理好都会直接毁掉整个 IoT 项目的续航、可靠性和安全性。所以这篇文章不是泛泛讲选一颗电源芯片的事而是以一个实际的低功耗传感器节点为例把一个尺寸很小、平均电流很低、又能扛住射频突发电流的小型电池管理方案从需求计算、器件选型、硬件设计、固件配合到调试排查完整拆开给你看。我这里的主器件选型逻辑和计算过程适用于 BLE 信标、LoRa 节点、资产追踪器、温湿度传感器、可穿戴设备这一类典型 IoT 产品。想直接抄作业的跟着第2节先算需求再按第3节搭电路想弄明白背后的为什么就从头往下看。1.1 一个低功耗传感器节点的供电需求全貌先别急着选芯片先看供电链路到底要干哪些活。我常用的一个参考节点大概是这样的主控是 Cortex-M0 级别的 MCU工作电压 1.8V 到 3.6V射频部分用 2.4GHz BLE 或者 Sub-GHz LoRa典型的发射电流在 20mA 到 120mA 之间发射时间短则几十毫秒长则一两秒外接传感器有温湿度、气压或加速度计采样时一般只有 1mA 到 10mA平时处于待机状态电池则是一节 3.7V 的锂离子聚合物电池充满 4.2V截止 3.0V。如果直接把电池接到系统上你会遇到三个很实际的问题。第一电池电压不是稳定的 3.3V它在 4.2V 到 3.0V 之间波动对模拟传感器和射频部分可能不够友好第二电池必须能充电而且要有充电控制和温度保护第三电池本身还需要防过充、过放、过流和短路保护。严格说这套东西比你想象中要厚得多充电管理、保护回路、直流变换、电量监测、负载开关每一块都很小但它们必须协同工作。说到小这里不单指 PCB 面积小。小型化意味着电池容量通常也只有一两百毫安时对静态电流极其敏感意味着散热面积有限不能长期用大电流充电意味着整体成本预算非常紧不能随手用一堆高精度器件堆料。因此小型低功耗电池管理方案的设计本质是在容量焦虑漏电流焦虑和尺寸焦虑之间做权衡。1.2 小型化与低功耗不是缩水是架构层面的取舍很多人会以为只要芯片选得够低功耗板子就能低功耗。但我在实测中发现真正决定系统基础功耗的往往是挂在电池上的每一颗器件在静态时的漏电流总和。一颗 LDO 的静态电流是 1µA一颗电量计的休眠电流是 3µA一颗保护IC的漏电是 0.1µA一颗 DC-DC 的静态电流是 5µA加上 MCU 自身的 sleep 电流 2µA看起来每颗器件都够低但加起来已经接近 15µA。一棵 200mAh 电池即便只算这 15µA 的静默消耗理论续航也只有 200mAh / 15µA换算下来大概 1.5 年如果再算上自放电、DC-DC 转换效率和无线发送可能实际连一年都不到。所以低功耗 IoT 的设计要把电池上长期挂着的器件数量控制到最少。能由 MCU GPIO 切断外设供电的就切断能集成到一颗 PMIC 里的功能就不要拆成三颗芯片能不用电量计就不用电量计因为电量计的自身损耗有时候比它帮你省下的那部分电池电量还要多。这不是数据手册上的典型静态电流数字游戏而是整个系统架构层面的事情。2. 总体设计小型电池管理方案应该拆成哪几块第1节把问题讲清楚了接下来聊聊这套方案的整体架构。我用一个比较简洁的框图思维来组织电池放进一个黑盒黑盒负责充电、保护、电压转换、能耗计量和系统供电。不管盒子里的实现方式是 PMIC 还是分立器件功能上这几块缺一不可只是集成度不同而已。2.1 一个完整的 IoT 电池管理子系统包含哪些模块充电管理模块。负责从 USB 5V、太阳能板或其他适配器取电给锂离子电池充电。它必须支持恒流/恒压曲线要有预充电、恒流充电、恒压充电和充电终止这几个阶段最好还带电池温度检测和充电安全定时器。注意IoT 设备的一大特点是边充边用就是说插着充电线的时候系统负载不能因为充电而断电这里需要 Power Path 管理的支持后面第3节细讲。保护模块。这是安全底线通常由电芯保护IC加双MOSFET完成负责过充过放保护和过流保护。另一种做法是依赖充电PMIC内置的保护阈值但为了安全我会建议至少保留一级物理保护回路。保护IC的静态功耗虽然很小但也会有一般从几十纳安到几百纳安选型时也要看。电压变换模块。把电池电压转换成 MCU 和传感器需要的 3.3V 或其他电压轨。最常见的选择是低静态电流 LDO 或支持 PFM/PWM 的同步降压转换器。这个模块的静态电流直接决定了系统睡眠状态的基础功耗是重点中的重点。电量监测模块。可选但如果你需要远程知道电池还有多少电尤其是需要通过百分比展示剩余电量那么电量计或者电压检测是必须的。低功耗场景下我会优先选择基于电压查表法的方式既能上报剩余电量又不会像库仑计一样因为自身消耗把电池吃干。系统级低功耗协调。严格说这不是硬件模块但它决定前面所有模块是否真的有用。比如外设的供电开关、MCU 的睡眠状态、射频发射时间的调度、采样周期的安排全都需要从系统层面统一设计。2.2 设计前先算清楚的三个基础数字在选任何芯片、画任何原理图之前先把三个数字算出来平均功耗、峰值功耗、目标续航。这三个数不只是给你自己看也是后面验证方案的标尺。平均功耗的计算公式很简单平均电流 (睡眠电流 × 睡眠时间 工作电流 × 工作时间 发射电流 × 发射时间) / 总时间我在实际项目里通常直接写一个小脚本估算效果不错。比如这样def estimate_life_days(capacity_mah, sleep_ua, active_ma, active_ms_per_day, tx_ma, tx_sec_per_day): # 睡眠按24小时算 sleep_mah_per_day sleep_ua / 1000 * 24 # 工作电流按等效时间算 active_mah_per_day active_ma * active_ms_per_day / 1000 / 3600 # 发射电流按秒算 tx_mah_per_day tx_ma * tx_sec_per_day / 3600 total_mah_per_day sleep_mah_per_day active_mah_per_day tx_mah_per_day return capacity_mah / total_mah_per_day # 例子200mAh电池睡眠电流3uA每天工作20次每次50ms10mA每天无线发送4次每次1s100mA days estimate_life_days(200, 3, 10, 20*50, 100, 4) print(days)算下来会得到一个偏理想的结果。真正落地时还需要考虑电池自放电、DC-DC 转换效率、低温容量衰减、保护板耗流、PMIC 的静态电流等损耗一般要在这个理想值上打六折到八折。我习惯把这个修正后的续航作为研发指标而不是拿理想值去给产品经理画饼。峰值功耗则决定了电池的放电能力和储能电容的大小。比如 LoRa 发射时 100mA 持续 1 秒如果电池容量只有 200mAh0.5C 放电也就是 100mA刚好压在边界上。这时候电池端电压会产生明显跌落系统必须能承受这个跌落或者在电源轨上放一个足够大的滤波电容撑住射频模块。这个数字还会影响你选电池保护IC的过流保护阈值设置太大就失去了保护意义设置太小又会误触发。2.3 低功耗器件选型先看静态电流再看性能选 PMIC 和 DC-DC 时我第一看的是 self-consumption 参数也就是器件在使能、但没有负载时消耗的电流。很多芯片的数据手册会单独列出 Quiescent Current 或 Standby Current这两个值一定不能看错。Quiescent Current 通常是正常工作但无负载时的电流Standby Current 是芯片被 disable 时的电流两者可能差一个数量级。对真正长期电池供电的 IoT 设备睡眠模式是主要工作状态所以睡眠时消耗的电流要全部加起来评估。我遇到过一个小项目主控睡眠只有 2µA但一颗降压芯片的 Quiescent Current 有 15µA导致整机睡眠功耗直接超标。后来换了一颗轻载下自动切 PFM、自身静态电流 360nA 的同步降压芯片睡眠功耗才压回 5µA 以内。小型化设备还特别在意封装。QFN、DFN 是常见选择部分高端 PMIC 甚至提供 WLCSP 封装尺寸可以做到 2mm x 2mm 以下但对贴片工艺要求更高。我的建议是除非产品厚度和面积实在非常受限否则优先选 QFN 或 DFN便于手工焊接、返修和测试WLCSP 一旦出了问题调试成本高到让人抓狂。3. 硬件电路设计从充电管理到保护回路一步一步搭需求算清楚芯片范围基本缩小到两三颗。这一步我通常画一个带注释的原理图草稿把充电电流、终止电流、电源路径、保护阈值、负载开关这些关键参数先标出来再开始选具体型号和配置电阻。第3节就按这个顺序写。3.1 充电管理IC的配置逻辑锂电池充电的标准流程是预充电、CC、CV、终止四个阶段。很多 PMIC 会把预充电的细节自动处理好但你需要把电流和电压参数设置对。以 200mAh 电池为例我通常选择 0.5C 即 100mA 作为恒流充电电流也就是大约 2 小时充满。如果产品需要更快的充电速度可以临时提高到 1C但要确认电池规格书允许也要做好发热控制。充电电流一般通过 ISET 引脚或 I²C 寄存器设置。用外部电阻设置时规格书会给出一个 K 系数例如 1V/R_ISET。这个值每颗芯片不同网上抄来的取值大概率不对一定要以具体数据手册为准。我踩过坑前几年照抄一个参考设计的电阻值到另一颗 PMIC 上结果充电电流只有设定的三分之一还以为是芯片坏了后来查手册才发现电阻公式完全不同。充电终止电流也非常重要。CV 阶段电流会越来越小当降到一定阈值时芯片判定充满并关断充电。这个阈值通常默认是恒流电流的 10%但对小容量电池如果你把恒流设成 500mA终止电流就是 50mA200mAh 电池充到 4.2V 后可能还有 40mA 电流灌进去充电时间变得很长还会导致电池一直处于微充状态寿命下降。正确的做法是把终止电流设置到目标电流的 1/10 到 1/20具体看芯片支持范围。比如 100mA 恒流时终止电流设在 10mA 左右比较合理。配置电池温度检测引脚也别忘了。绝大多数锂聚合物电池内部或表面会有一个 NTC建议把它接到 PMIC 的 TS 引脚。这样电池温度超过 0°C 到 45°C 范围时PMIC 可以自动降低或停止充电避免冬天在户外充电导致析锂。很多 IoT 设备在外场一放就是一两个月充电时温度环境不可控这个功能是救命的。3.2 电池保护与过压冗余不能只靠PMICPMIC 有充电电压上限但它终究是一个可编程的芯片一旦内部基准漂移、寄存器配置错误或者因外部干扰进入错误状态就可能导致电池过压。锂电池过压到 4.5V 以上轻则容量衰减重则鼓包起火。因此我在设计中一定会保留一颗电芯保护IC通常与两个 MOSFET 一起集成在一个很小的保护板上。保护IC负责监测电芯电压和回路电流一旦超过阈值立即断开充电管或放电管。这里想提醒一个容易忽略的点保护IC也有静态功耗虽然通常只有几百纳安到几微安但它在电池正负极之间一直挂着所以选型时要注意它的自身耗电。同时如果系统里有两个保护层级PMIC 的保护电压和各保护IC的过充阈值要留出合理差异。比如保护IC的过充保护设在 4.35VPMIC 的恒压充电目标设在 4.2V这样正常充电永远碰不到保护IC动作而万一 PMIC 失控保护IC还能在 4.35V 把充电回路切断这是兜底。另外我还喜欢在充电输入口串联一颗 PTC 或者玻封保险丝作为最后一个物理层面的保护。虽然多了一颗物料但在电池管理项目里这个成本别省。3.3 Power Path 与无电池模式低功耗 IoT 的一大使用场景是插着充电线继续工作尤其是室内网关和带有 USB 口的传感器节点。传统做法是充电电路和系统负载并行连在电池上插上充电器时充电电流一部分给电池一部分给系统。这样会导致一个负面效果系统负载的电流波动会干扰充电检测充电终止判断会变得不稳定。更关键的是当电池没电时系统可能因为电压太低而无法启动即使插入充电器也要等电池充到一定电压才能工作用户体验非常差。带有动态电源路径管理的 PMIC 可以解决这个问题。它的核心是插入外部电源时系统负载由外部电源直接供电多余的电流才给电池充电电池电压低时电源路径能自动优先保证系统工作。这就是我们常说的 Power Path。选型时如果方案支持我尽量选带 SYS 引脚的 PMIC因为 SYS 引脚就是系统电源轨独立于 BAT 引脚。调试无电池模式时还有个技巧。有时你手头没有电池想先跑固件但 PMIC 的电源路径没有电池会进入异常状态系统反复重启。我的做法是用一个实验室直流电源接到 BAT 和 GND 之间模拟一颗 3.7V 电池同时把电流限制在 100mA这样既能触发 PMIC 的电池检测又不会因为没有电池导致系统起不来。这不叫假电池测试而是很常见的台架调试方法但你得注意调高输出电压前先确认 PMIC 的最大输入电压别直接灌 5V 进去。3.4 电量计电压法还是库仑计要不要加电量计完全看产品需求。如果你只是要一个电量低提示或者大概百分比用电压法就够了。具体做法是在电池两极用 ADC 采电压再根据电池厂家的开路电压与容量曲线换算成百分比。因为 MCU 通常自带 ADC几乎不需要额外硬件功耗可以忽略。缺点是负载变化时电压会波动如果设备正在发射无线数据此时采到的电压会明显偏低显示的电量会假跳。解决办法是避开高负载时间在 MCU 睡眠稳定后或刚唤醒还没拉大电流时采样然后做低通滤波和回滞处理。如果产品需要比较精确的 mAh 级电量统计比如要准确预测剩余运行时间那就要用带库仑计的芯片。库仑计通过检测电流积分来计算累积容量准确度更高但代价是它本身一般有几微安的功耗还会增加 BOM 成本。对小尺寸、低成本、低功耗的 IoT 设备我不建议频繁使用库仑计除非你的主控功耗很低、电池又很小误差实在接受不了。4. 低功耗固件与供电策略芯片选完战役才刚开始很多项目把硬件设计好、焊接完就以为大功告成。但实际上小型低功耗电池管理方案的最终表现很大程度取决于固件怎么配合硬件。第4节重点讲几个系统层的供电策略这些都是我在实际项目里反复调过的点。4.1 睡眠电流到底从哪里来的做低功耗测量时我遇到最多的一个现象是官方评估板上休眠电流测出来 3µA自己画的主板上却测出 20µA。把板子上的模块一个个断开才找到问题源头。常见的漏电路径包括外部上拉电阻、传感器供电没切断、DC-DC 芯片的反馈电阻、MCU 引脚浮空漏电、保护IC本身的漏电。有时候问题很隐蔽。比如一个 I²C 上拉电阻静态电流可能只有 0.5µA但两个上拉就是 1µA如果整板上还有十几颗这样的电阻串在电池供电轨上累积起来就很吓人。因此我习惯在每个外设的供电轨上加一个负载开关。负载开关选型的核心指标是关闭时的漏电流最好低于 0.1µA导通电阻也要足够小。负载开关本身由 MCU GPIO 控制只有在外设工作时才打开睡眠前关闭这样就能把外设的静态电流彻底隔离。还建议在原理图阶段就给每个电流域预留 0Ω 电阻或磁珠方便调试时断开某一局部测量。0Ω 电阻成本低但作用非常大我所有电池供电项目都会在电源路径上放几个这样的隔离点排查漏电时可以直接焊下来测电流。4.2 轻负载效率为什么 DC-DC 不能只看满载效率很多人在选 DC-DC 时盯着 95% 的峰值效率但在 IoT 场景下系统绝大多数时间处于微安级负载真正重要的不是满载效率而是轻载效率。普通 PWM 模式的 DC-DC 在轻负载时会一直做开关动作开关损耗固定导致效率非常低好的方案会在轻载时自动进入 PFM 模式把开关频率降下来只提供负载需要的能量这样在 10µA 到 1mA 区间还能维持较高的效率。如果你的系统睡眠电流只有几微安选择一颗 LDO 可能比 DC-DC 更合适。LDO 的优势是静态电流低、噪声小、BOM 简单劣势是压差大时效率低。用锂电池供电到 3.3V典型压差是 4.0V 到 3.3V 或 3.6V 到 3.3V在电流只有几十微安时效率低一点也无所谓因为绝对功耗损失很小。但如果系统经常要跑 50mA 以上的负载LDO 的损耗就会变大这时候反而要选 DC-DC。我的经验是睡眠电流几微安、工作电流小于 10mA 的小型 IoT 设备优先考虑 LDO 或带 PFM 的 DC-DC具体看系统平均电流再做取舍。4.3 峰值负载与瞬时跌落射频发射那几毫秒射频发射是低功耗 IoT 设备最特殊的负载场景。BLE 发射电流可能达到 20mA 到 60mALoRa 发射电流甚至能到 120mA持续时间从几毫秒到一秒不等。电池内阻加上 PCB 走线阻抗会在发射瞬间形成明显的电压跌落。如果这个跌落超过了 MCU 或射频芯片的最低工作电压系统就会复位移位这是非常典型的问题。解决思路有三层。第一电池本身要选低内阻的电芯尤其是 200mAh 以下的小电池内阻对瞬时压降的影响非常明显第二PCB 走线要短、要宽电池正负极到 PMIC 的距离尽量近第三在电源轨上放置足够的储能电容。关于电容容量估算公式通常是 I_pulse × Δt / ΔV_allowed。如果 100mA 脉冲持续 1ms允许跌落 100mV那么需要的电容大约为 C 0.1A × 0.001s / 0.1V 1000µF。当然实际系统中 PMIC 的输出电容、负载开关的输入电容也会分摊一部分但这个量级可以作为参考。另一个更精细的做法是在射频模块的电源引脚附近加小容量高频去耦电容比如 0.1µF 和 1µF专门应对射频脉冲的瞬态尖峰。5. 实测与调试把方案真正测明白了才算完成硬件和固件都做完以后不要急着把电池装上就收工。小型低功耗电池管理方案的性能必须靠电流波形和电压波形说话。第5节说说我的实测方法、工具选择和踩过的问题。5.1 测量功耗的正确姿势测平均电流最忌讳直接用普通万用表串在电池端去读平均电流。万用表的电流档内阻较大会造成电压跌落而且无线发射这种脉冲电流万用表根本测不准。更离谱的是如果万用表有内阻负载电流拉高时电源电压跌落设备可能反复掉电重启测出来的数据完全失真。我在调低功耗时通常分两种测法。一是测睡眠电流把电源或电池串一个高精度微安表设备进入 sleep 后读取稳定值这个相对容易。二是测脉冲电流和整机平均电流需要用示波器加电流探头或者在电池负极串一只 0.1Ω 的采样电阻用示波器测电阻两端电压电流 电压 / 0.1Ω。这样可以看到睡眠、唤醒、发射、再睡眠的完整时序确认各阶段的电流波形是否符合设计预期。如果项目预算允许强烈建议备一台专用的功耗分析仪或电池功耗测试设备。这类设备专门针对微安到毫安级别的窄脉冲能自动算平均电流、累计电荷和峰值电流对功耗优化帮助巨大。如果没有用示波器加低阻采样电阻也能完成只是处理数据时要多花点时间。5.2 电池模拟器与真实电池的差异前期的充电管理、保护链路调试验证我用直流电源模拟电池很方便也很安全。但最后验证续航和真实放电曲线时一定得换回真实电池。原因是直流电源的内阻几乎为零而真实电池有内阻且会随温度和 SOC 变化。真实锂电池在低电量时电压掉得非常快如果你只在模拟电池下测过系统很可能会忽略低电压下系统重启的问题。我做法很简单先用电池模拟器把功能调通再用相同批次、新出厂的电池做整机续航测试。测试环境最好放在室温每周记录一次电池电压和系统上报的电量百分比。还要专门做一次从满电放到保护IC动作的完整放电测试确认保护IC的过放阈值和系统关断逻辑匹配避免设备在还有 10% 电量的时候突然关机。5.3 常见问题速查表与排查思路我把项目里遇到的典型问题整理成一张表供参考。排查顺序一般是先电源、再固件、再PCB但以下这些方向是常见元凶。现象可能原因排查方法充电很久不停充电终止电流设置过低电池老化检查 ISET/寄存器测量是否在 CV 阶段换新电池对比整机睡眠功耗比规格高外设未断电、I²C 上拉漏电、PMIC 静态电流过大用 0Ω 电阻逐段断开测量检查 GPIO 状态无线发射瞬间重启电池内阻大储能电容不足PMIC 响应慢示波器抓 Vsys 波形加大储能电容换低内阻电池设备放几天低电电池自放电大保护IC漏电过大裸电芯测自放电对比不同电池批次插上充电器系统反而异常Power Path 未正确配置VIN 输入噪声检查 SYS 引脚波形确认输入电容核对 PMIC 寄存器遇到充电不停时还有一个容易被忽略的点有些 PMIC 的充电完成标志和实际电流终止之间有时间差你需要看电流是否已经降到设定的终止电流附近而不是只看状态寄存器。真正确认终止电流的方法是串一个电流表或者用示波器观察低值采样电阻两端的电压看是否为预期的 10mA 量级。5.4 调试时容易被忽略的电池端温度低功耗 IoT 设备经常放在户外温度范围很宽。锂电池在 0°C 以下充电时负极容易析锂长期下来会埋下安全隐患。我早期的项目只有充电电压和电流保护没有温度保护结果冬天在户外插上太阳能充电板电池鼓包了两块。后来我把 PMIC 的 TS 引脚接上了电芯 NTC并设置了 0°C 到 45°C 的充电温度窗口这个问题才算根治。这里特别想强调一点NTC 的位置最好贴在电芯表面而不是放在电池连接器的另一端。如果 NTC 放得太远感应的是空气温度而不是电芯温度保护效果会大打折扣。同时不要图省事省略 NTC 分压电阻阻值需要按 PMIC 手册给出的温度阈值区间计算通常和 10kΩ NTC、10kΩ 分压电阻搭配使用。6. 经验补遗这几个习惯帮我少踩了不少坑最后分享几个我自己的习惯不是教科书流程但确实帮我省过大量返工时间。第一每个小项目都会预留至少一对四线开尔文测试点。电池供电设备的充电电流虽然不大但在 100mA 量级下如果电压采样和电流路径共用一条长导线测得的数据会非常不准。测量电池电压、充电电压、系统电压时用四线开尔文接法把采样线和电流线分开数据会干净很多。第二原理图评审时我会把所有挂在电池正极、没有开关的器件列一张清单逐个确认它们的静态电流。清单上包括 PMIC、保护IC、电量计、LDO、DCDC、NTC 分压电阻、电池电压检测分压电阻等。这个习惯帮我避免了多次整机睡眠电流超标的问题。第三固件上电后先跑一个最小系统功耗测试再写应用逻辑。意思是先让 MCU 进入深度睡眠所有外设关闭只留 RTC 和 GPIO 唤醒看看此时的整机电流是否和硬件估算一致。这一步过了再去跑传感器采样和无线发射定位功耗问题时会更高效。第四也是最重要的一条电池管理方案必须在项目一开始就参与方案评审而不是等硬件画完再补。因为电池尺寸、充电接口、充电电流、续航目标这些问题会反过来影响结构设计、外壳开孔和 MCU 选型。等什么都定下来再发现电池放不下、充电电流不够代价会非常痛苦。我现在每次碰低功耗 IoT 项目都会先把电池管理当一等公民对待。这套小型低功耗电池管理方案虽然看起来都是些不起眼的小元件和小参数但整个系统能不能在户外稳定跑一年真的就看这些细节有没有处理到位。