1. 项目概述
蓄电池作为常见的储能设备,其充电过程的安全保护至关重要。我在实际项目中经常遇到因过充导致电池损坏的情况,于是设计了这个基于STC89C52单片机的智能充电保护系统。这个系统能实时监测蓄电池的电压、电流和温度,在出现异常时自动切断充电回路,有效延长电池寿命。
系统采用模块化设计,核心部件包括:
- STC89C52单片机(主控)
- LCD1602液晶屏(数据显示)
- ACS712电流传感器(电流检测)
- PCF8591 ADC模块(电压检测)
- DS18B20温度传感器(温度检测)
- 继电器模块(电路通断控制)
2. 硬件设计详解
2.1 主控电路设计
STC89C52是经典的51内核单片机,我选择它主要考虑三点:
- 丰富的IO口资源(32个GPIO)
- 内置4KB Flash存储器
- 成熟的开发环境支持
实际布线时需要注意:
- 晶振电路:11.0592MHz晶振配合30pF电容
- 复位电路:10kΩ上拉电阻+10μF电容
- 电源滤波:每个VCC引脚都要加0.1μF去耦电容
经验:PCB布局时单片机要尽量靠近传感器模块,减少信号干扰
2.2 传感器选型与电路
2.2.1 电流检测方案
对比多种方案后选用ACS712-05B,主要因为:
- 量程±5A(满足0.7A阈值需求)
- 185mV/A灵敏度
- 隔离式检测更安全
典型应用电路:
code复制ACS712 VCC → 5V
OUT → P1.0(ADC输入)
GND → 接地
电流计算公式:
I = (Vout - 2.5V)/0.185
2.2.2 电压检测设计
使用PCF8591的考虑:
- 4通道8位ADC
- I2C接口节省IO资源
- 内置基准电压
分压电路计算:
假设检测0-20V电压,分压比取1/4:
R1 = 30kΩ, R2 = 10kΩ
实际电压 = ADC值 × (5V/255) × 4
2.2.3 温度检测实现
DS18B20的优势:
- ±0.5℃精度
- 单总线接口
- 防水封装可选
接线要点:
code复制VDD → 3.3V
DQ → P2.0(加上拉4.7kΩ)
GND → 接地
3. 软件设计实现
3.1 主程序流程图
plaintext复制开始
↓
初始化各外设
↓
进入主循环:
读取温度值 → 比较阈值
读取电压值 → 比较阈值
读取电流值 → 比较阈值
↓
任一超限? → 断开继电器
否 → 闭合继电器
↓
更新LCD显示
↓
延时500ms
3.2 关键代码解析
3.2.1 ADC采样处理
c复制#define OVER_VOLTAGE 14.0 // 过压阈值
#define OVER_CURRENT 0.7 // 过流阈值
float read_voltage() {
uint8_t adc_val = PCF8591_Read(0); // 通道0
return adc_val * (20.0/255); // 20V量程
}
float read_current() {
uint8_t adc_val = PCF8591_Read(1); // 通道1
return (adc_val - 128) * 0.019; // ACS712换算
}
3.2.2 温度读取实现
c复制float read_temperature() {
DS18B20_Convert();
return DS18B20_Read();
}
void check_temperature() {
float temp = read_temperature();
if(temp > 40.0) { // 过温阈值
RELAY_OFF();
}
}
4. 系统调试与优化
4.1 Proteus仿真要点
-
元件库选择:
- 单片机:STC89C52RC
- LCD:LM016L
- 传感器使用等效模型
-
测试用例设计:
- 电压超限测试:设置输入15V
- 电流超限测试:设置0.8A负载
- 温度模拟:修改DS18B20参数
4.2 实际调试问题记录
-
问题:ACS712输出波动大
解决:增加10μF滤波电容+软件均值滤波 -
问题:继电器误动作
解决:加入500ms延时判断,避免瞬时干扰 -
问题:LCD显示乱码
解决:检查初始化时序,重写驱动代码
5. 性能测试数据
测试条件:12V铅酸蓄电池,环境温度25℃
| 测试项目 | 设定阈值 | 实测动作值 | 响应时间 |
|---|---|---|---|
| 过压保护 | 14V | 14.1V | <200ms |
| 过流保护 | 0.7A | 0.72A | <150ms |
| 过温保护 | 40℃ | 40.2℃ | <1s |
| 显示刷新周期 | - | - | 500ms |
6. 应用扩展建议
-
增加功能:
- 充电曲线记录
- 蓝牙数据传输
- 多级保护阈值
-
优化方向:
- 改用STM32提升处理能力
- 增加OLED显示
- 开发手机APP监控
这个项目从设计到调试用了两周时间,最大的收获是认识到硬件滤波和软件算法配合的重要性。建议初学者在焊接电路时特别注意传感器信号的走线,我的第一版PCB就因为布局不当导致ADC采样不准,后来重新布线才解决问题。