项目概述:基于单片机的智能充电器
本项目旨在设计一个能够安全、高效、智能地为锂电池(如18650、LiPo等)充电的充电器,它不仅能提供恒流-恒压充电,还能通过人机交互界面实时显示充电状态,并通过多种安全保护机制确保充电过程万无一失。
核心功能与智能特性
一个“智能”充电器应具备以下功能:
-
标准充电算法 (CC-CV):
- 恒流充电: 电池电压较低时,以恒定电流快速充电,缩短充电时间。
- 恒压充电: 当电池电压达到设定值(如4.2V)时,充电器保持该电压,充电电流逐渐减小。
- 涓流充电: 当电流减小到某个阈值(如0.1C)时,认为充电完成,进入小电流的维护模式。
-
实时状态显示:
- 显示当前充电模式(恒流/恒压/完成)。
- 显示实时电压和电流。
- 显示充电进度(百分比或时间)。
-
安全保护机制:
- 过压保护: 防止电池电压超过安全上限。
- 过流保护: 防止充电电流过大损坏电池或电路。
- 反接保护: 防止电池正负极接反。
- 温度保护: 通过NTC热敏电阻监测电池温度,防止过热。
- 定时保护: 防止长时间充电导致异常。
-
用户交互:
- 按键选择充电模式(如快充、慢充)。
- LED指示灯直观显示充电状态(如红灯充电中,绿灯充满)。
- LCD/OLED屏幕显示更详细的参数。
-
扩展智能功能:
- 自动识别电池类型: 通过电压初步判断电池电量。
- 充电记录: 记录每次充电的时间、电量等信息。
- USB通信: 通过串口与电脑连接,实现上位机监控或数据记录。
硬件设计方案
硬件系统主要由以下几个模块组成:
1 核心控制器
- 推荐型号: STM32F103C8T6 或 Arduino UNO / Nano。
- STM32: 性能强大,外设丰富(PWM、ADC、定时器等),适合做复杂功能,拥有硬件PWM,能更精确地控制输出电流。
- Arduino: 开发简单,社区资源多,适合快速原型验证和学习。
2 电源模块
- 输入: 5V USB供电或9V/12V直流适配器。
- 功能: 为整个系统提供稳定的工作电压。
- MCU和传感器供电: 使用 AMS1117-3.3V LDO芯片将输入电压转换为3.3V,为单片机及外围电路供电。
- 充电电路供电: 如果输入电压不足以驱动充电电路(如使用MOS管控制),可能需要升压或直接使用输入电压。
3 充电控制模块
这是实现智能充电的关键。
-
使用专用充电管理芯片 (推荐)
- 芯片: TP4056,这是一个非常流行且成熟的线性锂离子电池充电管理芯片。
- 优点: 电路极其简单,内部集成了CC-CV算法、过温保护、自动断电等功能,可靠性高。
- 缺点: 可编程性差,充电电流由一个外部电阻决定,难以动态调整。
- 实现: TP4056负责核心的充电功能,单片机只负责监测其状态(如
CHRG和STDBY引脚)和显示,不直接参与电流控制。
-
单片机 + 功率器件 (高级方案)
- 核心思想: 单片机通过PWM信号控制一个MOS管,从而精确控制流过电池的电流。
- 电路组成:
- MOS管: 如 IRLZ44N (N沟道),作为电子开关。
- 采样电阻: 在充电回路中串联一个低阻值、高功率的精密电阻(如0.1Ω, 1W),通过测量其两端的电压
V = I * R,即可得到充电电流I。 - 运放: 由于采样电阻上的电压很小(如1A * 0.1Ω = 0.1V),单片机ADC可能无法精确测量,需要使用一个运算放大器(如LM358)对电压信号进行放大。
- 控制逻辑:
- 单片机输出PWM信号到MOS管的栅极。
- PWM的占空比决定了MOS管的导通时间,从而控制平均输出电流。
- 运放放大采样电阻的电压,送入单片机的ADC引脚。
- 单片机通过PID算法或简单的PI算法,不断读取ADC值(实际电流),与设定值(目标电流)进行比较,动态调整PWM占空比,形成闭环控制,实现精确的恒流/恒压。
4 电压与电流检测模块
- 电压检测: 使用单片机的ADC引脚直接测量电池两端电压,如果电压超过ADC参考电压(如5V),需要使用电阻分压电路进行降压。
- 电流检测: 如上所述,通过采样电阻和运放实现。
5 人机交互模块
- 显示:
- LED: 简单的指示灯,红色LED亮表示充电中,绿色LED亮表示充满。
- OLED显示屏 (I2C接口): 推荐,可以显示电压、电流、充电状态、进度条等信息,界面友好。
- 输入:
- 按键: 用于启动/停止充电、切换模式等,可以连接到单片机的外部中断引脚或普通GPIO口,配合软件消抖。
- 蜂鸣器: 用于充电完成或发生故障时发出提示音。
6 安全保护模块
- NTC热敏电阻: 串联在电池负极,用于检测电池温度,其电阻值随温度变化,通过分压电路接入ADC,单片机可以实时监测温度,超过阈值则停止充电。
- 反接保护: 在电池输入端串联一个二极管(有压降)或使用MOS管搭建理想二极管电路,防止反接损坏电路。
软件设计方案
软件是实现“智能”的大脑。
1 开发环境
- STM32: Keil MDK, STM32CubeIDE + HAL库
- Arduino: Arduino IDE
2 主程序流程
// 伪代码
void setup() {
// 初始化硬件
init_GPIO(); // 初始化按键、LED、蜂鸣器
init_ADC(); // 初始化ADC,用于电压、电流、温度采样
init_PWM(); // 初始化PWM,用于控制充电电流
init_I2C(); // 初始化I2C,用于OLED
init_UART(); // 初始化串口,用于调试
init_Timer(); // 初始化定时器,用于定时采样和PID控制
// 显示欢迎界面
OLED_ShowWelcome();
}
void loop() {
// 1. 检测用户输入
if (isKeyPressed(KEY_START)) {
startCharging();
}
// 2. 充电状态机
if (isCharging) {
// 执行充电算法
chargingAlgorithm();
// 更新显示
updateDisplay();
// 检查安全条件
checkSafetyConditions();
}
}
// 充电算法核心函数
void chargingAlgorithm() {
// 定时器中断中调用,频率较高(如1kHz)
// 1. 采样当前电压和电流
float current_voltage = readVoltage();
float current_current = readCurrent();
// 2. 根据充电阶段执行控制
if (current_voltage < CV_VOLTAGE) {
// 恒流阶段
float target_current = FAST_CHARGE_CURRENT; // 例如1A
adjustPWM_PID(target_current, current_current);
charging_state = CC_MODE;
} else {
// 恒压阶段
float target_current = (CV_VOLTAGE - getBatteryResistance() * current_current) / getSeriesResistance();
adjustPWM_PID(target_current, current_current);
charging_state = CV_MODE;
// 检查是否充满
if (current_current < TERMINATION_CURRENT) {
stopCharging();
charging_state = DONE_MODE;
}
}
}
// PID控制函数
void adjustPWM_PID(float target, float current) {
float error = target - current;
// ... PID计算 ...
// 根据计算结果更新PWM占空比
setPWM_duty_cycle(new_duty_cycle);
}
3 关键算法
-
PID控制:
- 在恒流/恒压阶段,需要精确控制电流/电压,PID是最有效的算法。
- P (比例): 快速响应误差。
- I (积分): 消除稳态误差(如因负载变化导致的电流偏差)。
- D (微分): 抑制超调,使系统更稳定。
- 在嵌入式系统中,通常使用增量式PID,计算量更小。
-
状态机:
- 将充电过程划分为几个清晰的状态:
IDLE(空闲),CC(恒流),CV(恒压),DONE(完成),ERROR(错误)。 - 程序根据当前状态和输入条件,决定是否切换到下一个状态,使逻辑清晰,易于维护。
- 将充电过程划分为几个清晰的状态:
扩展与优化
- 多协议快充: 增加对 QC (Quick Charge), PD (Power Delivery) 等快充协议的支持,这需要增加USB PD协议芯片(如 STUSB4500)或QC协议芯片,单片机通过I2C与这些芯片通信,动态调整充电电压和电流。
- 电池健康度估算: 通过多次充放电循环,记录电池的实际容量,并与标称容量对比,估算SOH。
- 物联网化: 增加 Wi-Fi (ESP8266/ESP32) 或 蓝牙 (HC-05/06) 模块,允许用户通过手机App远程监控充电状态和控制充电器。
- 太阳能充电: 将输入改为太阳能板,并增加MPPT(最大功率点跟踪)算法,以最大化利用太阳能。
项目挑战与注意事项
- 散热: 大电流充电时,MOS管和采样电阻会发热,必须考虑散热设计(如加散热片)。
- 精度: 电压和电流采样的精度直接影响充电质量,需要选择高精度、低温漂的元器件(如采样电阻、基准电压源)。
- 安全第一: 锂电池充电不当有起火爆炸风险,硬件上的保护电路和软件上的安全逻辑必须双重保障,不能掉以轻心。
- 电磁兼容: PWM开关信号可能产生干扰,注意PCB布局布线,避免对模拟采样电路造成干扰。
这个设计方案为您提供了一个从基础到高级的完整框架,您可以根据自己的需求和技能水平,选择合适的方案进行实现,祝您项目顺利!
