电源管理的核心问题
智能硬件产品中,电源设计直接影响续航、发热、成本和可靠性。三个核心问题:电压转换、电池充放电、系统功耗优化。
LDO 与 DC-DC 转换器
LDO (低压差线性稳压器)
LDO 通过调整管线性降压,输入输出压差小。
优点:电路简单(只需输入输出电容)、输出纹波极低、响应快、噪声小。 缺点:效率低(效率 = Vout/Vin),仅适合降压场景,大电流下发热严重。
# LDO 功耗计算
def ldo_power(vin, vout, iout):
p_diss = (vin - vout) * iout # 耗散功率 W
efficiency = vout / vin * 100
return p_diss, efficiency
# 5V -> 3.3V @ 200mA
p, eff = ldo_power(5.0, 3.3, 0.2)
print(f"LDO 耗散: {p*1000:.0f}mW, 效率: {eff:.0f}%")
# 输出: 耗散 340mW, 效率 66%
适用场景:模拟电路供电(ADC 参考电压、音频)、待机供电、小电流 (<200mA) 场景。
常用型号:AMS1117-3.3(廉价通用)、XC6206(超低静态功耗 1μA)。
DC-DC 转换器
DC-DC 通过电感储能和开关切换实现电压转换。
优点:效率高(80-96%)、可升降压或反压。 缺点:电路复杂、有开关噪声、输出纹波较大。
| 类型 | 效率 | 纹波 | 成本 | 适用场景 |
|---|---|---|---|---|
| 降压(Buck) | 90-96% | 中 | 中 | 电池降压到 3.3V/1.8V |
| 升压(Boost) | 85-93% | 中 | 中 | 单节锂电升到 5V |
| 升降压(Buck-Boost) | 80-90% | 高 | 高 | 电池电压跨域 Vout |
// ESP32 低功耗深度睡眠
void enter_deep_sleep(void) {
// 设置唤醒源:定时器 RTC 唤醒
esp_sleep_enable_timer_wakeup(60 * 1000000); // 60秒
esp_deep_sleep_start();
// 此后的代码不会执行
}
void setup(void) {
Serial.begin(115200);
Serial.println("设备唤醒");
// 读取传感器,上传数据
read_sensors_and_upload();
// 任务完成后立即入睡
Serial.println("准备睡眠...");
enter_deep_sleep();
}
| 参数 | LDO | DC-DC |
|---|---|---|
| 效率 | (Vout/Vin)×100% | 80%-96% |
| 纹波 | <1mV | 10-50mV |
| 静态电流 | 1μA-100μA | 10μA-1mA |
| 电路复杂度 | 极低(2电容) | 中(电感+电容+反馈) |
| EMI | 无 | 有开关噪声 |
选型准则:电池供电产品的主电源用 DC-DC,模拟敏感电路用 LDO 做后级稳压。
电池充电管理
锂电池充电曲线
锂电池充电分三个阶段:预充(电池电压 <3V,小电流)、恒流(3V-4.2V,大电流)、恒压(4.2V 恒压,电流递减到 1/10 终止)。
def estimate_charge_time(capacity_mah, charge_current_ma, voltage_v=3.7):
"""估算锂电池充电时间(近似)"""
# 恒流阶段充入约 70% 容量
cc_time = (capacity_mah * 0.7) / charge_current_ma
# 恒压阶段约 40% 的恒流时间
cv_time = cc_time * 0.4
total_hours = (cc_time + cv_time) / 60
return total_hours
print(f"2000mAh 电池 @ 1A 充电: {estimate_charge_time(2000, 1000):.1f}小时")
常用充电 IC
| 型号 | 最大电流 | 特点 |
|---|---|---|
| TP4056 | 1A | 最便宜,线性充电,发热大 |
| IP5306 | 2.4A | 集成升压+充电,常用在移动电源 |
| MCP73831 | 500mA | 封装小,适合可穿戴 |
| BQ25895 | 3A | TI 制品,支持快充,I2C 控制 |
电池保护注意事项
- 必须加保护板(BMS)防止过充/过放/短路
- 充电电流不超过电池 1C 速率
- 工作温度范围:充电 0-45°C,放电 -20-60°C
- 锂聚合物电池长期存储电压 3.7-3.85V
低功耗设计策略
系统级低功耗
传感器(100μA) ──┬── MCU(睡眠 5μA) ── WiFi(关) → 总功耗 ~10μA
│ Android
└── 定时唤醒(10s周期) ──→ 传感器读取(30ms) + WiFi发送(200ms)
平均电流: ~0.3mA
2000mAh / 0.3mA ≈ 277天
硬件低功耗要点
- 选择低静态电流的 LDO(如 XC6206 静态 1μA)
- 降压电阻分压电路 — 测量电池电压时用大电阻(1MΩ+)
- 断开不用的外设电源 — 用 MOSFET 或负载开关控制
- 选择低功耗传感器 — 如 BME280 比 DHT22 功耗更低
软件低功耗要点
// 外设电源控制 (ESP32 + MOSFET)
#define SENSOR_POWER_PIN GPIO_NUM_4
void read_sensor_low_power(void) {
// 打开传感器电源
gpio_set_level(SENSOR_POWER_PIN, 1);
vTaskDelay(pdMS_TO_TICKS(10)); // 等待稳定
// 读取数据
float temp = bme280_read_temperature();
// 立即关闭传感器电源
gpio_set_level(SENSOR_POWER_PIN, 0);
// 处理数据时传感器已断电
process_and_sleep(temp);
}
功耗估算方法
用示波器串联一个 10Ω 采样电阻,测量电压波形即可得到实时电流曲线。也可以用专门的功耗分析仪(如 Nordic PPK2)。
电源树设计实例
以 ESP32 温湿度传感器为例:
锂电池(3.7V)
├── TP4056 (充电) ── USB 5V
├── ME6217 (LDO 3.3V) ── ESP32 (深度睡眠 5μA)
│ └── 工作时 ~80mA
└── SHT30 传感器 ── MOSFET(IO控制)
待机功耗: 5μA (ESP32) + 1μA (LDO) = 6μA
工作功耗: 80mA (ESP32) + 0.2mA (SHT30) ≈ 80mA
周期: 每10分钟唤醒一次,工作2秒
日均功耗: ≈ 0.27mAh → 2000mAh 电池可用 ~7400天(理论)
小结
电源管理是决定智能硬件产品竞争力的核心技术。DC-DC 做主电源转换、LDO 做敏感电路稳压、选用低静态电流的器件、使用深度睡眠和电源开关控制,这些策略结合使用可以将产品续航从几天提升到几个月甚至一年。