核心挑战:电压不匹配
这是锂电池供电首先要解决的问题。

(图片来源网络,侵删)
- 锂电池电压范围:单节锂离子/锂聚合物电池的标称电压是 7V,充满电时电压约为 2V,放电截止电压通常为 0V,电池的工作电压范围是 0V ~ 4.2V。
- STM32工作电压:大多数STM32微控制器的工作电压是 3V,虽然有些型号可以在2.0V或更低电压下运行,但3.3V是标准且性能最有保障的电压。
锂电池的电压(最高4.2V)高于STM32的工作电压(3.3V),并且电压是动态变化的。必须使用一个降压电路,将电池电压稳定在3.3V。
解决方案:电压转换
你需要一个 DC-DC 降压转换器,也常被称为 Buck Converter。
LDO (低压差线性稳压器)
- 原理:类似于一个“可变电阻”,通过消耗自身功率(以热量形式)来降低输入电压,输出一个稳定的低压。
- 优点:
- 电路简单,外围元件少(通常只需输入/输出电容)。
- 输出电压非常“干净”,纹波小。
- 缺点:
- 效率低,效率公式约等于
Vout / Vin,当电池满电(4.2V)时,效率只有3V / 4.2V ≈ 78.5%,当电池电压降低时,效率更低。 - 发热严重,尤其是在大电流或输入输出压差大的情况下,不适合电池供电场景,会浪费宝贵的电量。
- 效率低,效率公式约等于
- 适用场景:仅适用于电流非常小(如 < 50mA)且对成本和PCB空间极度敏感的应用。
DC-DC 降压转换器 (强烈推荐)
- 原理:通过电感、电容、开关管(MOSFET)和控制器进行高频开关,实现能量的“传递”,而不是“消耗”。
- 优点:
- 效率高,通常可达90%以上,尤其是在宽电压范围内,这能极大地延长电池续航时间。
- 发热小,因为自身功耗低。
- 缺点:
- 电路相对复杂,需要电感、电容等元件。
- 输出电压纹波比LDO稍大(需要良好布局来抑制)。
- 推荐芯片:
- TI TPS612xx系列 (如 TPS61232, TPS61220):效率高,静态电流小,非常适合电池供电。
- ADI (Linear Technology) LTC3633-2, LTC3633-3:同样是高性能、低静态电流的Buck转换器。
- MCP16301:Microchip的,性能也不错。
- 国产型号:如矽力杰的AP2127、圣邦微的SGM2025等,性价比高。
设计建议:对于任何需要电池供电且有一定电流需求的STM32项目,强烈推荐使用DC-DC降压转换器。
电池电量监测
用户需要知道电池还剩多少电量,以便及时充电或更换,这通常通过一个 电量计芯片 来实现。

(图片来源网络,侵删)
使用ADC + 电压分压 (简单但不精确)
- 原理:通过一个电阻分压电路,将电池电压(3.0V-4.2V)降低到STM32的ADC输入范围(如0-3.3V),然后通过ADC读取电压值,再根据电压-电量曲线估算电量。
- 优点:
成本极低,只需两个电阻。
- 缺点:
- 极不精确,锂电池的电压平台很平,即从3.7V到4.0V,电量变化很大,但电压变化很小,导致电量估算非常不准,可能从80%电量到20%电量,电压只变化了0.3V。
- 无法反映电池的真实健康状况(如老化)。
- 适用场景:对电量精度要求极低的“有电/没电”指示灯。
专用电量计芯片 (精确且可靠)
- 原理:电量计芯片通过 库仑计 的原理,精确测量流入和流出电池的电流,并对时间进行积分,从而精确计算出剩余电量(mAh),它还会监测电池电压、温度,并内置复杂的算法来修正电池老化、温度等因素的影响。
- 优点:
- 精度高,可以提供非常准确的电量百分比(%)和剩余容量(mAh)。
- 可以提供电池健康度、满充容量等信息。
- 推荐芯片:
- TI BQ系列:业界标杆,如 BQ27441-G1 (I2C接口,功能强大)、BQ34Z100-G1。
- Maxim Integrated (现为ADI) DS27xx系列:如 DS2762 (1-Wire接口)、DS2780/DS2781/DS2782 (I2C接口)。
- 国产型号:如芯海科技的 SC8301 等。
- 设计建议:如果产品需要向用户显示准确的电量,必须使用专用电量计芯片。
充电管理
锂电池不能直接用恒压源或恒流源充电,需要专门的充电管理电路。
方案:充电管理芯片
- 功能:
- 涓流充电:当电池电压过低时,先用小电流充电,防止损坏电池。
- 恒流充电:进入正常充电阶段,以恒定大电流快速充电。
- 恒压充电:当电池电压接近4.2V时,转为恒压模式,充电电流逐渐减小。
- 充电截止:当充电电流减小到某个阈值(如总电流的5%-10%)时,自动切断充电。
- 安全保护:提供过温、过压、短路保护。
- 推荐芯片:
- TI BQ2407x系列:非常流行,集成度高,外围简单,支持USB输入。
- MCP73831/73832:Microchip的经典线性充电管理芯片,适合小电流充电。
- TP4056:一个极其简单、廉价的线性充电芯片,常用于充电宝等消费类产品,但功能和安全特性不如前者。
- 设计建议:为了安全和充电效率,必须使用专用的充电管理芯片,特别是如果产品要通过USB充电,选择带USB-IF合规性的芯片(如BQ2407x)会更容易通过认证。
低功耗设计 (关键)
电池供电的设备,续航是王道,STM32本身有多种低功耗模式,善用它们是延长续航的关键。
STM32低功耗模式
-
睡眠模式:
- CPU停止,外设(如所有GPIO、USART、I2C、SPI)继续运行。
- 唤醒源:外部中断、唤醒事件。
- 功耗:在几十微安级别。
-
停止模式:
- CPU和大部分外设(包括所有时钟)停止。
- 保留寄存器和SRAM内容。
- 唤醒源:外部中断、唤醒事件、RTC事件/闹钟。
- 功耗:在几微安级别。
-
待机模式:
- 整个芯片(除了备份域和RTC)被关闭。
- SRAM内容全部丢失。
- 唤醒源:WKUP引脚、RTC事件/闹钟、IWDG复位。
- 功耗:在1微安以下,是最低功耗模式。
如何实现低功耗?
-
选择合适的模式:
- 设备大部分时间在等待外部事件(如按键、传感器数据):使用睡眠模式。
- 设备需要长时间休眠,但需要定期唤醒(如每隔1秒读取一次传感器):使用停止模式。
- 设备需要进入“关机”状态,由外部事件唤醒(如按下开机键):使用待机模式。
-
配置外设:
- 关闭所有不用的外设时钟(在RCC中配置)。
- 将不用的GPIO引脚配置为模拟模式,可以有效降低漏电流。
- 如果使用UART,可以配置为单线模式。
-
中断驱动:
- 尽量不要使用
while(1)空转或延时函数,让CPU大部分时间处于睡眠状态,通过中断来响应事件。
- 尽量不要使用
-
优化电源设计:
- 当STM32处于低功耗模式时,如果外设(如传感器、无线模块)仍然在工作,会拉高整体功耗,可以为这些外设设计一个由STM32 GPIO控制的使能引脚,在不需要时彻底切断其电源。
安全保护
锂电池能量密度高,但也比较“娇贵”,不当使用可能导致起火、爆炸。
- 过充保护:由充电管理芯片保证。
- 过放保护:由电量计芯片或BMS(电池管理系统)保证,防止电池电压低于3.0V。
- 过流/短路保护:由充电管理芯片或BMS保证。
- 温度保护:在关键应用中,可以增加NTC热敏电阻,监测电池温度,过高或过低时停止充放电。
总结与推荐方案
对于一个典型的、需要显示电量的便携式STM32项目,推荐方案如下:
系统框图:
锂电池 (3.7V)
|
+---- [充电管理芯片] <--- USB电源
|
+---- [电量计芯片] <--- I2C/SMBus ---> STM32
|
+---- [DC-DC Buck 转换器] ---> 3.3V ---> STM32及其他外设
组件清单:
- 锂电池:选择符合你容量和尺寸要求的18650、软包锂电或聚合物电池。
- 充电管理芯片:如 TI BQ24075 (支持USB-DP/DM检测,自动适配USB电源)。
- 电量计芯片:如 TI BQ27441-G1 (I2C接口,精度高)。
- DC-DC Buck芯片:如 TI TPS61232 (效率高,静态电流低)。
- 保护电路:在电池正负极上,可以增加一个 DW01A + 8205A 组成的电池保护板,提供基础的过充、过放、过流保护,这是非常推荐的安全措施。
软件设计要点:
- 初始化配置时,关闭所有未用外设的时钟。
- 将主循环设计为“执行任务 -> 进入低功耗模式 -> 被中断唤醒 -> 执行任务...”的模式。
- 在不需要时,通过GPIO控制其他模块的电源。
- 通过I2C读取电量计芯片的数据,并在屏幕或LED上显示给用户。
通过以上方案,你就可以构建一个安全、高效、且功能完善的STM32锂电池供电系统了。
