跳转到内容

电池管理系统

电池管理系统

本节介绍 ESP32-XIAO 中集成的电池管理系统(BMS),重点讲解充电电路、电源路径管理和电池保护特性。学习完本节后,您将能够:

  • 理解 TP4054 充电 IC 的工作原理
  • 描述 USB 与电池之间的电源路径管理
  • 解释充电状态和指示灯行为
  • 排查常见的电池充电问题

开始本节前,请确保:

ESP32-XIAO 在单块板上集成了完整的电池管理系统,无需外部模块。系统由三个功能模块组成:

┌──────────────┐
USB 电源 ──────────┤ │
│ TP4054 ├───── VCC(3.3V 稳压器)
│ 充电 IC │
LiPo 电池 ─────────┤ │
└──────┬───────┘
┌──────▼───────┐
│ 电池 │
│ 电压 │──► ADC 引脚(电池电量监测)
│ 分压器 │
└──────────────┘

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 阶段 │
│ ★ (电流 │
│ ★ 恒定) │
│ ★ │
│ ★ │
└─────────────────────────────────┘
充电电流 ────────────────►
(恒定) (逐渐减小)

三个充电阶段

  1. 涓流充电:若电池电压 < 2.9V,以设定电流的 10% 进行充电
  2. 恒流(CC):以满电流(~380 mA)充电至 4.2V
  3. 恒压(CV):保持 4.2V,同时电流逐渐降至终止阈值(CC 的 ~10%)

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 状态含义
红色常亮电池充电中
熄灭电池已充满,或未连接电池
闪烁故障状态(电池过温、超时)

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;
}

XIAO 背面有一个 2 引脚 JST 连接器:

引脚 1(+):电池正极(红线)
引脚 2(-):电池负极(黑线)

警告:请确保极性正确。反接可能损坏充电 IC。

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);
}

要验证充电电流,可测量充电回路中已知电阻两端的电压,或使用 USB 功率计。正常充电的 XIAO 应从 USB 消耗约 380-500 mA 电流。

  • USB 连接时电池充电(红色 LED 亮起)
  • 充电完成后 LED 熄灭
  • 插入/断开 USB 时 ESP32 继续运行
  • 电池电压读数在预期范围内(3.7V-4.2V)
  • USB 断开时系统切换至电池供电

症状:有电池的情况下插入 USB,红色 LED 保持熄灭

可能原因

  • 电池已充满(用万用表检查电压)
  • 电池极性接反
  • 电池保护电路触发(部分电池内置保护电路)

解决方案

  1. 用万用表测量电池电压
  2. 若电压 > 4.1V,电池已满——属于正常现象
  3. 若电压为 0V,检查极性和连接
  4. 部分带保护的电池需要短暂”激活”——断开电池后短接 USB,再重新连接电池

症状:ADC 始终读取为 0

可能原因

  • ADC 引脚未正确配置
  • 电池未连接或连接松动
  • 分压器电阻损坏

解决方案

  1. 确认 ADC 引脚编号与您的开发板型号匹配
  2. 检查 JST 连接器是否完全插好
  3. 直接在电池连接器焊盘处测量电压
  • 使用带保护的 LiPo 电池,内置过放电保护
  • 在固件中监测电池电压,防止深度放电(< 3.0V)
  • 在 MQTT 消息中包含低电量警告
  • 在室温下充电(建议 0°C 至 45°C)
  • 不要超过最大输入电压(6.5V)
  • 不要充电损坏或鼓包的电池
  • 不要让电池长时间连接在断电/断连的 XIAO 上——电池可能通过保护电路放电
  1. XIAO 使用 TP4054——一款紧凑可靠的锂离子充电器,采用 CC/CV 充电曲线
  2. 内置电源路径管理允许同时充电和运行
  3. 默认充电电流约 380 mA,足以满足大多数 LiPo 电池需求
  4. ADC 分压器使固件能够监测电池电量
  5. 无需外部组件——XIAO 是一个完整的 BMS 解决方案