电池管理系统
电池管理系统
本节介绍 ESP32-XIAO 中集成的电池管理系统(BMS),重点讲解充电电路、电源路径管理和电池保护特性。学习完本节后,您将能够:
- 理解 TP4054 充电 IC 的工作原理
- 描述 USB 与电池之间的电源路径管理
- 解释充电状态和指示灯行为
- 排查常见的电池充电问题
开始本节前,请确保:
- 熟悉 LiPo 电池特性(标称电压、充电电压)
- 已完成 04-01. ESP32-XIAO硬件概述
- 基本了解电流和电压测量
电池管理系统概述
Section titled “电池管理系统概述”ESP32-XIAO 在单块板上集成了完整的电池管理系统,无需外部模块。系统由三个功能模块组成:
┌──────────────┐USB 电源 ──────────┤ │ │ TP4054 ├───── VCC(3.3V 稳压器) │ 充电 IC │LiPo 电池 ─────────┤ │ └──────┬───────┘ │ ┌──────▼───────┐ │ 电池 │ │ 电压 │──► ADC 引脚(电池电量监测) │ 分压器 │ └──────────────┘TP4054 充电 IC
Section titled “TP4054 充电 IC”TP4054 是一款独立的线性锂离子电池充电器,专为空间受限的应用而设计。
主要规格:
| 参数 | 值 |
|---|---|
| 充电方式 | 线性(恒流 / 恒压) |
| 充电电流 | 可编程,最高 500 mA(XIAO 默认约 380 mA) |
| 充电电压 | 4.2V ± 1%(标准 LiPo 终止电压) |
| 输入电压 | 4.5V - 6.5V(兼容 USB 5V) |
| 待机电流 | 充电完成后 < 2 µA |
| 保护功能 | 热调节、反向电流阻断 |
| 封装 | SOT-23-5(超小型表面贴装) |
充电曲线:
TP4054 遵循标准的锂离子 CC/CV 充电曲线:
┌─────────────────────────────────┐ 4.2V │ ★ │ CV 阶段(电压恒定, │ ★ │ 电流逐渐减小) │ ★ │ │ ★ │ 电压 │ ★ │ │ ★ │ │ ★ CC 阶段 │ │ ★ (电流 │ │ ★ 恒定) │ │ ★ │ │ ★ │ └─────────────────────────────────┘ 充电电流 ────────────────► (恒定) (逐渐减小)三个充电阶段:
- 涓流充电:若电池电压 < 2.9V,以设定电流的 10% 进行充电
- 恒流(CC):以满电流(~380 mA)充电至 4.2V
- 恒压(CV):保持 4.2V,同时电流逐渐降至终止阈值(CC 的 ~10%)
电源路径管理
Section titled “电源路径管理”ESP32-XIAO 实现了一个简单但有效的电源路径方案:
| 条件 | 电源来源 | 电池状态 |
|---|---|---|
| USB 已连接,有电池 | USB(5V)→ 3.3V 稳压器 | 电池充电中 |
| USB 已连接,无电池 | USB(5V)→ 3.3V 稳压器 | 不适用 |
| USB 未连接,有电池 | 电池 → 3.3V 稳压器 | 放电中 |
| USB 已连接,电池已满 | USB(5V)→ 3.3V 稳压器 | 充电终止 |
重要行为:当 USB 连接时,开发板从 USB 电源运行,电池独立充电。这意味着:
- ESP32 程序在充电时继续正常运行
- 插入或移除 USB 电源时不会复位或中断
- 系统在电源来源之间无缝切换
XIAO 提供一个充电状态 LED(红色):
| LED 状态 | 含义 |
|---|---|
| 红色常亮 | 电池充电中 |
| 熄灭 | 电池已充满,或未连接电池 |
| 闪烁 | 故障状态(电池过温、超时) |
电池电压监测
Section titled “电池电压监测”XIAO 包含一个连接到 ADC 引脚的电阻分压器,允许 ESP32 读取当前电池电压:
电池正极 ──┬── 100kΩ ──┬── ADC 引脚(GPIO) │ │ │ 100kΩ │ │电池负极 ──┴───────────┴── GND分压器将电池电压减半,使其处于 ESP32 的 3.3V ADC 范围内。代码中的转换公式:
float readBatteryVoltage() { int adcValue = analogRead(BATTERY_PIN); float voltage = (adcValue / 4095.0) * 3.3 * 2; // ×2 补偿分压器 return voltage;}步骤 1:连接电池
Section titled “步骤 1:连接电池”XIAO 背面有一个 2 引脚 JST 连接器:
引脚 1(+):电池正极(红线)引脚 2(-):电池负极(黑线)警告:请确保极性正确。反接可能损坏充电 IC。
步骤 2:验证充电
Section titled “步骤 2:验证充电”void setup() { Serial.begin(115200); pinMode(BATTERY_PIN, INPUT);}
void loop() { float batteryVoltage = readBatteryVoltage(); Serial.print("电池电压:"); Serial.print(batteryVoltage); Serial.println(" V");
if (batteryVoltage > 4.0) { Serial.println("电池已充满"); } else if (batteryVoltage > 3.5) { Serial.println("电池充电中或处于正常范围"); } else { Serial.println("电池电压低,请考虑充电"); }
delay(5000);}步骤 3:检查充电电流
Section titled “步骤 3:检查充电电流”要验证充电电流,可测量充电回路中已知电阻两端的电压,或使用 USB 功率计。正常充电的 XIAO 应从 USB 消耗约 380-500 mA 电流。
- USB 连接时电池充电(红色 LED 亮起)
- 充电完成后 LED 熄灭
- 插入/断开 USB 时 ESP32 继续运行
- 电池电压读数在预期范围内(3.7V-4.2V)
- USB 断开时系统切换至电池供电
问题 1:电池不充电
Section titled “问题 1:电池不充电”症状:有电池的情况下插入 USB,红色 LED 保持熄灭
可能原因:
- 电池已充满(用万用表检查电压)
- 电池极性接反
- 电池保护电路触发(部分电池内置保护电路)
解决方案:
- 用万用表测量电池电压
- 若电压 > 4.1V,电池已满——属于正常现象
- 若电压为 0V,检查极性和连接
- 部分带保护的电池需要短暂”激活”——断开电池后短接 USB,再重新连接电池
问题 2:电池电压读数为 0V
Section titled “问题 2:电池电压读数为 0V”症状:ADC 始终读取为 0
可能原因:
- ADC 引脚未正确配置
- 电池未连接或连接松动
- 分压器电阻损坏
解决方案:
- 确认 ADC 引脚编号与您的开发板型号匹配
- 检查 JST 连接器是否完全插好
- 直接在电池连接器焊盘处测量电压
- ✅ 使用带保护的 LiPo 电池,内置过放电保护
- ✅ 在固件中监测电池电压,防止深度放电(< 3.0V)
- ✅ 在 MQTT 消息中包含低电量警告
- ✅ 在室温下充电(建议 0°C 至 45°C)
- ❌ 不要超过最大输入电压(6.5V)
- ❌ 不要充电损坏或鼓包的电池
- ❌ 不要让电池长时间连接在断电/断连的 XIAO 上——电池可能通过保护电路放电
- XIAO 使用 TP4054——一款紧凑可靠的锂离子充电器,采用 CC/CV 充电曲线
- 内置电源路径管理允许同时充电和运行
- 默认充电电流约 380 mA,足以满足大多数 LiPo 电池需求
- ADC 分压器使固件能够监测电池电量
- 无需外部组件——XIAO 是一个完整的 BMS 解决方案