目 录
摘 要 I
Abstract II
第1章 绪论 1
1.1 选题目的 1
1.2 基于单片机的电源管理系统发展 1
1.3 课题解决的问题和意义 2
第2章 锂电池电源管理方法与充电控制技术 3
2.1 锂电池电源管理方法和充电器 3
2.1.1锂电池电源管理方法 3
2.1.2充电器的要求和结构 7
2.1.3单片机控制的充电器的优点 9
2.2 充电控制技术 9
2.2.1 快速充电器介绍 9
2.2.2 快速充电终止控制方法 10
第3章 基于MAX1898的锂电池充电器设计 14
3.1 单片机部分 14
3.2 电压转换及光耦隔离电路部分 17
3.3 电源产生电路部分 19
3.4 充电控制电路部分 21
3.4.1 MAX1898充电芯片 21
3.4.2充电控制电路的实现 26
3.5 程序功能 28
3.6 主要变量说明 28
3.7 程序流程图 28
第4章 基于DS2741锂电池监测电路设计 31
4.1 硬件电路设计 31
4.2 软件设计 34
总 结 38
致 谢 39
参考文献 40
附录A 42
附录B 45
1.2 基于单片机的电源管理系统发展
单片机负责控制整个系统的运行,包括充电时参考电压电流值的给定,充电完毕或者保护状态时充电机的关闭,根据充电电流、温度、剩余电量等各种参数来智能监测电池充电状态和实现对电池的一系列保护功能。
单片机控制的充电器,具备业界公认较好的-△V检测,可以检测出电池充电饱和时的电压变化信号,比较精确地结束充电工作。这些充电器芯片往往具备了充电过程的控制,加上单片机管理功能,例如温度控制、时间控制、电源关断、蜂鸣报警和液晶显示等。可以完成一个较为实用的充电控制器。同时利用监测芯片监测锂电池电源管理电流、温度、剩余电量以适时了解电池的状态并实现对电池的一系列保护功能。
随着电子技术的发展。芯片体积小型化及其价格的降低.电源智能管理系统地大规模的批量生产已经成为可能。电源智能管理系统具有操作简单、功能强大、可靠性高和通用性强等优点,也是未来电源控制发展的主要方向。因此,电源智能管理的研究与应用具有深远的现实意义。
1.3 课题解决的问题和意义
本课题研究的对象主要是锂离子锂电池电源管理原理、充电控制和状态监测。其中需要解决的问题有:
(1)能进行充电前处理,包括电池充电状态鉴定、预处理。
(2)解决充电时间长、充电效率低的问题。
(3)改善充电控制不合理,而造成过充、欠充等问题,提高电池的使用性能和使用寿命。
(4)通过加强单片机的控制,简化外围电路的复杂性,同时增加自动化管理设置,减轻充电过程的劳动强度和劳动时间,从而使充电器具有更高的可靠性、更大的灵活性,且成本低。
(5)通过监测芯片了解锂电池的基本状态,实现对电池的一系列保护功能。
本课题研究的意义在于:
(1)充分研究锂离子电池的充放电特性,寻找有效的充电及电池管理途径。
(2)使电源系统具有完善的自诊断功能和适时处理功能。
(3)实现充电器具备强大的功能扩展性,以便为该充电器的后续功能升级提供平台。
第2章 锂电池电源管理方法与充电控制技术
2.1 锂电池电源管理方法和充电器
2.1.1锂电池电源管理方法
1.恒流充电
(1)恒流充电
充电器的交流电源电压通常会波动,充电时需采用一个直流恒流电源(充电器)。当采用恒流充电时,可使电池具有较高的充电效率,可方便地根据充电时间来决定充电是否终止,也可改变电池的数目。恒流电源充电电路如图2-1所示。
图2-1 恒流电源充电电路
(2)准恒流充电
准恒流充电电路如图2-2所示。在此种电路中,通过直流电源和电池之间串联上一个电位器,以增加电路内阻来产生恒定电流。电阻值根据充电末期的电流进行调整,使电流不会超过电池的允许值。由于结构简单、成本低廉,此种充电电路被广泛应用充电器中。
图2-2 准恒流充电电路
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uint t_count,int0_count;
sbit GATE=P1^2;
sbit BEEP=P1^3;
void main()
{ /* 初始化 */
TMOD = 0x01; // 定时器T0方式1,T0为16位定时/计数器
EA = 1; // 打开所有的中断
PT0 = 1; // T0中断设为高优先级
ET0 = 1; // 打开T0中断
IT0 = 1; // 外部中断0设为边沿触发
EX0 = 1; // 打开外部中断0
GATE = 1; // 光耦正常输出电压
BEEP = 1; // 关闭蜂鸣器
int0_count = 0; // 产生外部中断0的计数器清零
while(1); // 等待外部的控制信号
}
/* 外部中断0服务子程序 */
void int0() interrupt 0 using 1
{
if (int0_count==0) //外部控制信号
{
TH0 = -5000/256; // 5ms定时
TL0 = -5000%256;
TR0 = 1; // 启动定时/计数器0计数
t_count = 0; // 产生定时器0中断的计数器清零
}
int0_count++;
}