1
手机充电器设计报告
题目:手机充电器设计
指导老师:翟永前
专业班级:电子信心工程专业12级
组别:第六组
组长:曹广振
团队成员:王沛、索彬、赵小芳、曹广振
院系名称:通信信号学院
智能充电器的设计
【摘要】
随着手机在世界范围内的普及,手机电池充电器的使用越来越广泛。充电器种类繁多,但从严格意义上讲,只有单片机参与处理和控制的充电器才能称为智能充电器。 该设计利用51单片机的处理控制能力实现充电器的智能化,在单片机的控制下,具有预充、充电保护、自动断电和充电完成报警提示功能。该设计包括了六个功能模块:
· 单片机模块:实现充电器的智能控制,如自动断电,充电完成报警提示。 · 充电过程控制模块:采用专用的电池充电芯片实现对充电过程的控制。 · 光耦模块:控制通电和断电,在电池充满电后及时关断充电电源。
· 充电电压提供模块: 将一般家用交流电压经过变压器、电压转换芯片等转换为5V 直流电压。
· 电压测试模块:利用AD 转换把充电电池两端的电压通过数码管显示出来。 · C51程序:单片机控制电池充电芯片实现充电过程的自动化,并根据充电状态给出有关的指示。
【关键字】
单片机、电压转换、MAX1898、智能、充电器
2
3
【目录】
一、设计综述 „„„„„„„„„„„„„„„„„„„„„„„„„ 4
二、基本方案 „„„„„„„„„„„„„„„„„„„„„„„„„ 4
三、软硬件设计 „„„„„„„„„„„„„„„„„„„„„„„„5
四、软硬件仿真 „„„„„„„„„„„„„„„„„„„„„„„„ 13
五、测试 „„„„„„„„„„„„„„„„„„„„„„„„„„„ 13
六、设计体会 „„„„„„„„„„„„„„„„„„„„„„„„„14
一、设计综述
手机电池的使用寿命和单次使用时间预充电过程密切相关,锂电池是手机最为常用的一种电池,它具有较高的能量重量比、能量体积比,具有记忆效应,可重复充电多次,使用寿命较长,价格也越来越低。锂电池对于充电器的要求也比较苛刻,需要保护电路,为了有效利用电池容量,须将锂电池充点值最大电压,但是过压充电会导致电池损坏,这就要求较高的充电精度。
而大部分充电器多采用大电流的快速充电法, 在电池充满后如果不及时停止会使电池发烫, 过度的充电会严重损害电池的寿命 。一些低成本的充电器采用电压比较法,为了防止过充,一般充电到90%就停止大电流快充,而采用小电流涓流补充充电,这样就使充电时间增长了。
一部好的充电器不但能在短时间内将电量充足,而且还可以对锂电池起到一定的维护作用,修复由于记忆造成的记忆效应,即电池容量下降现象。设计比较科学的充电器往往采用专用充电芯片配合单片机控制的方法。专用的充电芯片可以检测出电池充电饱和时发出的电压变化信号,比较精确的结束充电工作,通过单片机对这些芯片的控制,可以实现充电过程的智能化,以缩短充电时间,同时能够维护电池,延长电池使用寿命。
另外,比起一般充电器,智能充电器还增加了充电电压的显示,让我们能直观的看到电池的由预充、快充、满充充电阶段,从而加强对电池的维护。
二、基本方案
(一)方案分析
该设计采用逐个功能模块分析再组合的方法来实现方案。 1、单片机模块
智能的实现利用单片机控制, 经过分析,单片机芯片可以选择Atmel 公司的AT89C52,来控制充满电时蜂鸣器报警声,以及通过中断控制光耦器件通电和断电。 2、充电过程控制模块
4
5
根据手机锂电池的需求特性,选择采用Maxim 公司的MAX1898作为电池充电芯片。充电芯片Max1898的内部电路包括输入电流调节器、电压检测器、充电电流检测器、定时器、温度检测器和主控器,输入电流调节器用于限制总输入电流,包括系统负载电流与充电电流,但检测到输入电路大于设定的门限电流时,通过降低充电电流从而控制输入电流,Max1898外接限流型充电电源和PNP 功率三级管,可对单节锂电进行有效的快充,它通过外接电容设定充电时间,通过外接电阻设置最大充电电流。
定时电容C 和充电时间Tchg 的关系式满足:C=34.33×Tchg 最大充电电流Imax 和限流电阻Rset 的关系式满足:Imax =1400/Rset 3、光耦模块
为了在充满电后能及时关断充电电源,则需要引入一个光耦模块芯片6N137。 6N137光耦合器是一款用于单通道的高速光耦合器,其内部有一个850 nm波长AlGaAs LED和一个集成检测器组成,其检测器由一个光敏二极管、高增益线性运放及一个肖特基钳位的集电极开路的三极管组成。具有温度、电流和电压补偿功能,高的输入输出隔离,LSTTL/TTL兼容,高速(典型为10MBd) ,5mA 的极小输入电流。6N137光耦合器的真值表如下:
4、充电电压提供模块:
由于一般家用电压为+220V交流电压,需要设置一个电压转换电路将+220V交流电压转换成+5V直流电。首先用变压器将220V 交流电压转换成7V 交流电,经过桥式整流变成直流电,再利用电压转换芯片LM7805将7V 直流电压转换为5V 直流电压。 5、电压测试模块 该部分采用AD 转换来实现充电电压的现实。采用中断触发,基本原理是将一段时间内的输入模拟电压 Ui 和参考电压UR 通过两次积分,变换成与输入电压平均值成正比的时间间隔, 再变换成正比于输入模拟信号的数字量。 把模拟信号转换成数字信号,转换原理为:
(二)方案实现功能
方案实现的功能,即充电过程: · 预充
在安装好电池之后,接通输入直流电源,当充电其检测到电池时将定时器复位,从而进入预充过程,在此期间充电器以快充电流的10%给电池充电,使电压、温度恢复到正常状体,预充电时间由外接电容C9确定,如果在预充时间内电池电压达到2.5V ,且电池温度正常,则进入快充过程;如果超过预充时间后,电池电压低于2.5V ,则认为电池不可充电,充电器显示电池故障,由单片机发出故障指令,LED 指示灯闪烁, · 快充
快充就是以恒定电流对电池充电,恒流充电时,电池的电压缓慢上升,一旦电池电压达到所设定的终止电压时,恒流充电终止,充电电流快速递减,充电进入满充过程, · 满充
在满充过程中,充电电流逐渐递减,直到充电速率降到设置值以下,或满充超时时,转入顶端截止充电,顶端截止充电时,充电器以极小的充电电流为电池补充能量,由于充电器在
检测电池电压是否达到终止电压时有充电电流通过电池电阻,尽管在满充和顶端截至充电过程中充电电流逐渐下降,减小了电池内阻和其它串联电阻对电池端电压的影响,但串联在充电回路中的电阻形成的压降仍然对电池终止电压的检测有影响,一般情况下,满充和顶端截止充电可以延长电池5%~10%的使用时间, · 断电
当电池充满后,Max1898芯片的2脚/Chg 发送的脉冲电平会由低变高,这将会被单片机检测到,引起单片机的中断,在中断中,如果判断出充电完毕,则单片机将通过P2.O 口控制光耦切断L7805向Max1898供电,从而保证芯片和电池的安全,同时也减小功耗。 · 报警
当电池充满后,MAX1898芯片的2引脚/CHG发送
三、软硬件设计
(一)硬件部分
1、单片机控制设计,电路如下:
电路说明如下:
(1) P3.1脚控制发出报警声提示;
(2) P3.0脚输出控制光耦器件,在需要的时候可以及时关断充电电源。 外部中断0由充电芯片MAX1898的充电状态输出信号经过反向后触发
2、充电部分:该部分为设计的主核心部分,利用MAX1898配合外部PNP 组成完整的单节锂电池充电器。电路图具体说明:
(1)MAX1898的电压输入脚IN 输入电压范围为4.5 V~ 12V,锂电池的充电方式要求是恒
6
7
流、恒压方式,所以电源输入需要采用恒流恒压源。
(2)PNP 场效应管为电压放大型器件, 输入阻抗高, 耐压高,通过外接的PNP 场效应管提供锂电池的充电接口。
(3)引脚CT 通过外接的电容CCT 来设置快充时的最大充电时间tCHG 。 100 = 34.33×tmax
(4)引脚ISET 通过外接电阻RSET 来设置最大充电电流Ifast 。关系式如下: Ifast =1400/2.8×103 电路图如下:
3、光耦控制部分,实现电路如下:
电路说明:即当GATE 输入为低电平时,OUTPUT 输出为高电平;当GATE 输入为高电平时,OUTPUT 输出为低,即断电。 4、充电电压转换,实现电路模块如下:
5、总电路(总电路实际上是由第5部分的充电电压和下图构成)
(二)软件部分 1、程序流程图
8
9
2、程序代码及说明
//防止BattCharger.h 被重复引用的h 文件 #ifndef _BATTCHARGER_H #define _BATTCHARGER_H #include sbit GATE = P3^0; sbit BP = P3^1;
uint t_count,int0_count; #endif
***************************************************************** 主程序
*****************************************************************/ #include "reg52.h" #include "ABSACC.h" #include "intrins.h"
#include "BattCharger.h" #define uchar unsigned char #define uint unsigned int
#define PORTA4 XBYTE [0x7F8F]
uchar tab[]={0xc0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0}; uchar tab2[]={0xC7,0xCB,0xD3,0xF3}; uchar SEGPT2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e}; unsigned int Num; unsigned int getdata; uchar keydata;
uchar selectkey; unsigned int date; sbit CLOCK=P3^5; uint tt=0;
/* 延时子程序 */ void delay(Num) {
unsigned int ii;
for(ii=0;ii
/***************************************************************** 定时器0和中断0控制充电过程
*****************************************************************/ /* 定时器0中断服务子程序 */ void timer0() interrupt 1 using 1 {
TR0 = 0; // 停止计数
TH0 = -5000/256; // 重设计数初值
10
11
TL0 = -5000%256;
t_count++;
if (t_count>600) // 第一次外部中断0产生后3s
{
if (int0_count==1)// 还没有出现第二次外部中断0,则认为充电完毕
{
GA TE = 0; // 关闭充电电源
BP = 0; // 打开蜂鸣器报警
}
else // 否则即是充电出错
{
GATE = 1;
BP = 1;
}
ET0 = 0; // 关闭T0中断
EX0 = 0; // 关闭外部中断0
int0_count = 0;
t_count = 0;
}
else
TR0 = 1; // 启动T0计数
}
/* 外部中断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++;
}
/***************************************************************** 定时器1和中断1控制AD 转换
*****************************************************************/ /* 定时器1中断服务子程序 */
void time1(void) interrupt 3
{
CLOCK=~CLOCK;
}
/* 外部中断1服务子程序 */
void int1(void)interrupt 2
{
getdata=0;
date=0;
getdata=PORTA4;
date=getdata*100/51;
tab[0]=SEGPT2[date/100]-0x80;
tab[1]=SEGPT2[date%100/10];
tab[2]=SEGPT2[date%10];
tab[3]=SEGPT2[0]; TR0=0;
}
/*显示子程序 */
void DISP(void)
{
unsigned int i;
for(i=0;i
{
P2 = 0;
P1 =tab[i];
P2 =tab2[i];
delay(255);
}
}
/* 初始化 */
void init()
{
EA = 1; // 打开CPU 中断
PT0 = 1; // T0中断设为高优先级
TMOD = 0x01; // 模式1,T0为16位定时/计数器
ET0 = 1; // 打开T0中断
BP = 1; // 关闭蜂鸣器
int0_count = 0; // 产生外部中断0的计数器
IT0 = 1; // 外部中断0设为边沿触发
EX0 = 1; // 打开外部中断0
GATE = 1; // 光耦正常输出电压清零
}
void main(void)
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
init();
while(1)
{
DISP();
12
13
PORTA4=0x00;
IT1 =1;
EX1=1;
}
}
四、软硬件仿真
该设计中,由于在Protues 和Multisim 里都找不到元件MAX1898和6N137,不过好在单片机对充电过程的控制不复杂,可以在protel 里画图,然后直接在在电路板上焊接测试。因此该设计可以仿真的部分只有用于充电器两端的电压显示部分(即AD 转换部分)。仿真调试步骤如下:
(一)在Keil 程序里边新建项目,名称为“充电器显示”,并选择单片机型号为AT89C52.BUS 。
(二)执新建文件,输入源程序保存为充电器显示.C ,并保存,然后将源程序添加到项目中。
(三)执行菜单命令“在弹出的对话框中选择“Output”选项卡,选中“Great e HEX File”。 (四)编译源程序,得到HEX”文件。
(五)在proteus 仿真平台上建立仿真原理图,并将程序上载到虚拟芯片上调试及运行。结果如下:
五、测试
(一)测试方法
1、线路连接
按仿真图在万用板上大概排下版,然后开始焊接,并连好每条线,检查无误后,进行下一步。
2、硬件是否工作测试
由于充电器电路实现比较特殊,芯片是否正常工作不好确定,且该设计有一部分不能仿真,只能根据资料仔细研究分析各芯片的引脚功能及特征,综合考虑、检测。一般的测试方法是:
(1)先用万用表欧姆档逐步测量线路,确保线路都连接正确。
(2)然后,编写一段测试程序进行调试,即看各端口的工作状态是否和预设的一致来检测
芯片是否工作,这个主要是测单片机是否正常工作,从而诊断出电路板是哪一部分出了问题然后再进行调试。
(3)根据充电芯片特性,预设芯片某个输入脚的状态,检测芯片输出是否和预想的一样,来检测芯片是否能正常工作。
(二)测试条件和测试环境
该设计测试条件要求不高,只需具备一些常见测试工具:电源、万用表、锂电池,便可以进行焊接测试。
(三)测试结果
充电芯片可以正常充电,实现预充、快充、满充,数码管显示实时充电电压。
六、设计体会
这次设计所以总的来说,不算顺利,基本上到最后我们才调试出来,因此我有很多感触。一开始的时候,从图书馆借了些资料,参照资料进行原理图的设计,而我们选择的题目用到的几个芯片都是我们以前没接触过的,于是就得到网上找相关芯片的资料,来了解芯片特性,从而实现芯片的控制功能,画出原理图,但由于我们所选的MAX1898和6N137芯片和不常见,电路有一部分不能进行仿真,这也决定了我们的调试会是一个艰巨的过程。
完成原理图的设计,然后是焊板,这是一个需要耐心加细心的过程,哪怕一个小小的错误也会使结果出不来,所以必须要一条线一条线的检查,确认无误才能在万能板上接。还有在焊接的时候也要特别小心,稍不注意就会被电烙铁烫到,或出错了把芯片给烫坏了或者不该连接的线路被焊锡连起来了。同时这也需要同组人的配合,三个人交换检查线路,出错的可能性就小一些,通过合作也使我懂得了认真严谨的工作态度和团队精神的重要性。
上边就说了我们的调试将会是一个艰难的过程,事实的确如此,我们前边的部分其实很早就完成了,后边的调试花去了大部分时间,一开始怎么调试从MAX1898的充电电压输出端BA TT 都为低电平,电路也检查不出问题,分析各连线也合理,老师检查完成情况的时候,让我们再买块充电芯片来试试,于是我们重新从网上买了芯片再测试就好了,结果发现是原来的芯片坏了,我们一开始也怀疑是芯片坏了,但因为我们的芯片必须得网购,怕麻烦我们就没买;还有一个错误导致充满电以后不能断电,我们一开始设计的光耦模块原理图是照资料上的直接画的,因为简单,我们也没怀疑它会有问题,可是最后怎么调试都不出来才去查资料,发现资料上有些默认的连接它省略了,而我们实物图中必须要连起来。通过这些错误我认识到做设计是一个必须要很有耐心的过程,对于任何的细节都应该仔细研究分析。 经过发现错误然后改正错误,通过大家的努力,我们组基本上完成了实验目标。从一开始的迷茫,到现在对综合电路的设计有了一定方向,知道了该怎么去着手分析电路、设计电路,还有怎么去查找资料,和进行电路的调试,这是一个学习和进步的过程。
通过这次课程设计,也使我受益颇多。既巩固了课堂上学到的理论知识,又掌握了单片机的应用设计的基本思想和方法,学会了科学地分析实际问题。通过查资料、分析资料及请教老师和同学等多种途径,独立解决问题,我觉得这是一个进步的过程。
14
1
手机充电器设计报告
题目:手机充电器设计
指导老师:翟永前
专业班级:电子信心工程专业12级
组别:第六组
组长:曹广振
团队成员:王沛、索彬、赵小芳、曹广振
院系名称:通信信号学院
智能充电器的设计
【摘要】
随着手机在世界范围内的普及,手机电池充电器的使用越来越广泛。充电器种类繁多,但从严格意义上讲,只有单片机参与处理和控制的充电器才能称为智能充电器。 该设计利用51单片机的处理控制能力实现充电器的智能化,在单片机的控制下,具有预充、充电保护、自动断电和充电完成报警提示功能。该设计包括了六个功能模块:
· 单片机模块:实现充电器的智能控制,如自动断电,充电完成报警提示。 · 充电过程控制模块:采用专用的电池充电芯片实现对充电过程的控制。 · 光耦模块:控制通电和断电,在电池充满电后及时关断充电电源。
· 充电电压提供模块: 将一般家用交流电压经过变压器、电压转换芯片等转换为5V 直流电压。
· 电压测试模块:利用AD 转换把充电电池两端的电压通过数码管显示出来。 · C51程序:单片机控制电池充电芯片实现充电过程的自动化,并根据充电状态给出有关的指示。
【关键字】
单片机、电压转换、MAX1898、智能、充电器
2
3
【目录】
一、设计综述 „„„„„„„„„„„„„„„„„„„„„„„„„ 4
二、基本方案 „„„„„„„„„„„„„„„„„„„„„„„„„ 4
三、软硬件设计 „„„„„„„„„„„„„„„„„„„„„„„„5
四、软硬件仿真 „„„„„„„„„„„„„„„„„„„„„„„„ 13
五、测试 „„„„„„„„„„„„„„„„„„„„„„„„„„„ 13
六、设计体会 „„„„„„„„„„„„„„„„„„„„„„„„„14
一、设计综述
手机电池的使用寿命和单次使用时间预充电过程密切相关,锂电池是手机最为常用的一种电池,它具有较高的能量重量比、能量体积比,具有记忆效应,可重复充电多次,使用寿命较长,价格也越来越低。锂电池对于充电器的要求也比较苛刻,需要保护电路,为了有效利用电池容量,须将锂电池充点值最大电压,但是过压充电会导致电池损坏,这就要求较高的充电精度。
而大部分充电器多采用大电流的快速充电法, 在电池充满后如果不及时停止会使电池发烫, 过度的充电会严重损害电池的寿命 。一些低成本的充电器采用电压比较法,为了防止过充,一般充电到90%就停止大电流快充,而采用小电流涓流补充充电,这样就使充电时间增长了。
一部好的充电器不但能在短时间内将电量充足,而且还可以对锂电池起到一定的维护作用,修复由于记忆造成的记忆效应,即电池容量下降现象。设计比较科学的充电器往往采用专用充电芯片配合单片机控制的方法。专用的充电芯片可以检测出电池充电饱和时发出的电压变化信号,比较精确的结束充电工作,通过单片机对这些芯片的控制,可以实现充电过程的智能化,以缩短充电时间,同时能够维护电池,延长电池使用寿命。
另外,比起一般充电器,智能充电器还增加了充电电压的显示,让我们能直观的看到电池的由预充、快充、满充充电阶段,从而加强对电池的维护。
二、基本方案
(一)方案分析
该设计采用逐个功能模块分析再组合的方法来实现方案。 1、单片机模块
智能的实现利用单片机控制, 经过分析,单片机芯片可以选择Atmel 公司的AT89C52,来控制充满电时蜂鸣器报警声,以及通过中断控制光耦器件通电和断电。 2、充电过程控制模块
4
5
根据手机锂电池的需求特性,选择采用Maxim 公司的MAX1898作为电池充电芯片。充电芯片Max1898的内部电路包括输入电流调节器、电压检测器、充电电流检测器、定时器、温度检测器和主控器,输入电流调节器用于限制总输入电流,包括系统负载电流与充电电流,但检测到输入电路大于设定的门限电流时,通过降低充电电流从而控制输入电流,Max1898外接限流型充电电源和PNP 功率三级管,可对单节锂电进行有效的快充,它通过外接电容设定充电时间,通过外接电阻设置最大充电电流。
定时电容C 和充电时间Tchg 的关系式满足:C=34.33×Tchg 最大充电电流Imax 和限流电阻Rset 的关系式满足:Imax =1400/Rset 3、光耦模块
为了在充满电后能及时关断充电电源,则需要引入一个光耦模块芯片6N137。 6N137光耦合器是一款用于单通道的高速光耦合器,其内部有一个850 nm波长AlGaAs LED和一个集成检测器组成,其检测器由一个光敏二极管、高增益线性运放及一个肖特基钳位的集电极开路的三极管组成。具有温度、电流和电压补偿功能,高的输入输出隔离,LSTTL/TTL兼容,高速(典型为10MBd) ,5mA 的极小输入电流。6N137光耦合器的真值表如下:
4、充电电压提供模块:
由于一般家用电压为+220V交流电压,需要设置一个电压转换电路将+220V交流电压转换成+5V直流电。首先用变压器将220V 交流电压转换成7V 交流电,经过桥式整流变成直流电,再利用电压转换芯片LM7805将7V 直流电压转换为5V 直流电压。 5、电压测试模块 该部分采用AD 转换来实现充电电压的现实。采用中断触发,基本原理是将一段时间内的输入模拟电压 Ui 和参考电压UR 通过两次积分,变换成与输入电压平均值成正比的时间间隔, 再变换成正比于输入模拟信号的数字量。 把模拟信号转换成数字信号,转换原理为:
(二)方案实现功能
方案实现的功能,即充电过程: · 预充
在安装好电池之后,接通输入直流电源,当充电其检测到电池时将定时器复位,从而进入预充过程,在此期间充电器以快充电流的10%给电池充电,使电压、温度恢复到正常状体,预充电时间由外接电容C9确定,如果在预充时间内电池电压达到2.5V ,且电池温度正常,则进入快充过程;如果超过预充时间后,电池电压低于2.5V ,则认为电池不可充电,充电器显示电池故障,由单片机发出故障指令,LED 指示灯闪烁, · 快充
快充就是以恒定电流对电池充电,恒流充电时,电池的电压缓慢上升,一旦电池电压达到所设定的终止电压时,恒流充电终止,充电电流快速递减,充电进入满充过程, · 满充
在满充过程中,充电电流逐渐递减,直到充电速率降到设置值以下,或满充超时时,转入顶端截止充电,顶端截止充电时,充电器以极小的充电电流为电池补充能量,由于充电器在
检测电池电压是否达到终止电压时有充电电流通过电池电阻,尽管在满充和顶端截至充电过程中充电电流逐渐下降,减小了电池内阻和其它串联电阻对电池端电压的影响,但串联在充电回路中的电阻形成的压降仍然对电池终止电压的检测有影响,一般情况下,满充和顶端截止充电可以延长电池5%~10%的使用时间, · 断电
当电池充满后,Max1898芯片的2脚/Chg 发送的脉冲电平会由低变高,这将会被单片机检测到,引起单片机的中断,在中断中,如果判断出充电完毕,则单片机将通过P2.O 口控制光耦切断L7805向Max1898供电,从而保证芯片和电池的安全,同时也减小功耗。 · 报警
当电池充满后,MAX1898芯片的2引脚/CHG发送
三、软硬件设计
(一)硬件部分
1、单片机控制设计,电路如下:
电路说明如下:
(1) P3.1脚控制发出报警声提示;
(2) P3.0脚输出控制光耦器件,在需要的时候可以及时关断充电电源。 外部中断0由充电芯片MAX1898的充电状态输出信号经过反向后触发
2、充电部分:该部分为设计的主核心部分,利用MAX1898配合外部PNP 组成完整的单节锂电池充电器。电路图具体说明:
(1)MAX1898的电压输入脚IN 输入电压范围为4.5 V~ 12V,锂电池的充电方式要求是恒
6
7
流、恒压方式,所以电源输入需要采用恒流恒压源。
(2)PNP 场效应管为电压放大型器件, 输入阻抗高, 耐压高,通过外接的PNP 场效应管提供锂电池的充电接口。
(3)引脚CT 通过外接的电容CCT 来设置快充时的最大充电时间tCHG 。 100 = 34.33×tmax
(4)引脚ISET 通过外接电阻RSET 来设置最大充电电流Ifast 。关系式如下: Ifast =1400/2.8×103 电路图如下:
3、光耦控制部分,实现电路如下:
电路说明:即当GATE 输入为低电平时,OUTPUT 输出为高电平;当GATE 输入为高电平时,OUTPUT 输出为低,即断电。 4、充电电压转换,实现电路模块如下:
5、总电路(总电路实际上是由第5部分的充电电压和下图构成)
(二)软件部分 1、程序流程图
8
9
2、程序代码及说明
//防止BattCharger.h 被重复引用的h 文件 #ifndef _BATTCHARGER_H #define _BATTCHARGER_H #include sbit GATE = P3^0; sbit BP = P3^1;
uint t_count,int0_count; #endif
***************************************************************** 主程序
*****************************************************************/ #include "reg52.h" #include "ABSACC.h" #include "intrins.h"
#include "BattCharger.h" #define uchar unsigned char #define uint unsigned int
#define PORTA4 XBYTE [0x7F8F]
uchar tab[]={0xc0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0}; uchar tab2[]={0xC7,0xCB,0xD3,0xF3}; uchar SEGPT2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e}; unsigned int Num; unsigned int getdata; uchar keydata;
uchar selectkey; unsigned int date; sbit CLOCK=P3^5; uint tt=0;
/* 延时子程序 */ void delay(Num) {
unsigned int ii;
for(ii=0;ii
/***************************************************************** 定时器0和中断0控制充电过程
*****************************************************************/ /* 定时器0中断服务子程序 */ void timer0() interrupt 1 using 1 {
TR0 = 0; // 停止计数
TH0 = -5000/256; // 重设计数初值
10
11
TL0 = -5000%256;
t_count++;
if (t_count>600) // 第一次外部中断0产生后3s
{
if (int0_count==1)// 还没有出现第二次外部中断0,则认为充电完毕
{
GA TE = 0; // 关闭充电电源
BP = 0; // 打开蜂鸣器报警
}
else // 否则即是充电出错
{
GATE = 1;
BP = 1;
}
ET0 = 0; // 关闭T0中断
EX0 = 0; // 关闭外部中断0
int0_count = 0;
t_count = 0;
}
else
TR0 = 1; // 启动T0计数
}
/* 外部中断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++;
}
/***************************************************************** 定时器1和中断1控制AD 转换
*****************************************************************/ /* 定时器1中断服务子程序 */
void time1(void) interrupt 3
{
CLOCK=~CLOCK;
}
/* 外部中断1服务子程序 */
void int1(void)interrupt 2
{
getdata=0;
date=0;
getdata=PORTA4;
date=getdata*100/51;
tab[0]=SEGPT2[date/100]-0x80;
tab[1]=SEGPT2[date%100/10];
tab[2]=SEGPT2[date%10];
tab[3]=SEGPT2[0]; TR0=0;
}
/*显示子程序 */
void DISP(void)
{
unsigned int i;
for(i=0;i
{
P2 = 0;
P1 =tab[i];
P2 =tab2[i];
delay(255);
}
}
/* 初始化 */
void init()
{
EA = 1; // 打开CPU 中断
PT0 = 1; // T0中断设为高优先级
TMOD = 0x01; // 模式1,T0为16位定时/计数器
ET0 = 1; // 打开T0中断
BP = 1; // 关闭蜂鸣器
int0_count = 0; // 产生外部中断0的计数器
IT0 = 1; // 外部中断0设为边沿触发
EX0 = 1; // 打开外部中断0
GATE = 1; // 光耦正常输出电压清零
}
void main(void)
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
init();
while(1)
{
DISP();
12
13
PORTA4=0x00;
IT1 =1;
EX1=1;
}
}
四、软硬件仿真
该设计中,由于在Protues 和Multisim 里都找不到元件MAX1898和6N137,不过好在单片机对充电过程的控制不复杂,可以在protel 里画图,然后直接在在电路板上焊接测试。因此该设计可以仿真的部分只有用于充电器两端的电压显示部分(即AD 转换部分)。仿真调试步骤如下:
(一)在Keil 程序里边新建项目,名称为“充电器显示”,并选择单片机型号为AT89C52.BUS 。
(二)执新建文件,输入源程序保存为充电器显示.C ,并保存,然后将源程序添加到项目中。
(三)执行菜单命令“在弹出的对话框中选择“Output”选项卡,选中“Great e HEX File”。 (四)编译源程序,得到HEX”文件。
(五)在proteus 仿真平台上建立仿真原理图,并将程序上载到虚拟芯片上调试及运行。结果如下:
五、测试
(一)测试方法
1、线路连接
按仿真图在万用板上大概排下版,然后开始焊接,并连好每条线,检查无误后,进行下一步。
2、硬件是否工作测试
由于充电器电路实现比较特殊,芯片是否正常工作不好确定,且该设计有一部分不能仿真,只能根据资料仔细研究分析各芯片的引脚功能及特征,综合考虑、检测。一般的测试方法是:
(1)先用万用表欧姆档逐步测量线路,确保线路都连接正确。
(2)然后,编写一段测试程序进行调试,即看各端口的工作状态是否和预设的一致来检测
芯片是否工作,这个主要是测单片机是否正常工作,从而诊断出电路板是哪一部分出了问题然后再进行调试。
(3)根据充电芯片特性,预设芯片某个输入脚的状态,检测芯片输出是否和预想的一样,来检测芯片是否能正常工作。
(二)测试条件和测试环境
该设计测试条件要求不高,只需具备一些常见测试工具:电源、万用表、锂电池,便可以进行焊接测试。
(三)测试结果
充电芯片可以正常充电,实现预充、快充、满充,数码管显示实时充电电压。
六、设计体会
这次设计所以总的来说,不算顺利,基本上到最后我们才调试出来,因此我有很多感触。一开始的时候,从图书馆借了些资料,参照资料进行原理图的设计,而我们选择的题目用到的几个芯片都是我们以前没接触过的,于是就得到网上找相关芯片的资料,来了解芯片特性,从而实现芯片的控制功能,画出原理图,但由于我们所选的MAX1898和6N137芯片和不常见,电路有一部分不能进行仿真,这也决定了我们的调试会是一个艰巨的过程。
完成原理图的设计,然后是焊板,这是一个需要耐心加细心的过程,哪怕一个小小的错误也会使结果出不来,所以必须要一条线一条线的检查,确认无误才能在万能板上接。还有在焊接的时候也要特别小心,稍不注意就会被电烙铁烫到,或出错了把芯片给烫坏了或者不该连接的线路被焊锡连起来了。同时这也需要同组人的配合,三个人交换检查线路,出错的可能性就小一些,通过合作也使我懂得了认真严谨的工作态度和团队精神的重要性。
上边就说了我们的调试将会是一个艰难的过程,事实的确如此,我们前边的部分其实很早就完成了,后边的调试花去了大部分时间,一开始怎么调试从MAX1898的充电电压输出端BA TT 都为低电平,电路也检查不出问题,分析各连线也合理,老师检查完成情况的时候,让我们再买块充电芯片来试试,于是我们重新从网上买了芯片再测试就好了,结果发现是原来的芯片坏了,我们一开始也怀疑是芯片坏了,但因为我们的芯片必须得网购,怕麻烦我们就没买;还有一个错误导致充满电以后不能断电,我们一开始设计的光耦模块原理图是照资料上的直接画的,因为简单,我们也没怀疑它会有问题,可是最后怎么调试都不出来才去查资料,发现资料上有些默认的连接它省略了,而我们实物图中必须要连起来。通过这些错误我认识到做设计是一个必须要很有耐心的过程,对于任何的细节都应该仔细研究分析。 经过发现错误然后改正错误,通过大家的努力,我们组基本上完成了实验目标。从一开始的迷茫,到现在对综合电路的设计有了一定方向,知道了该怎么去着手分析电路、设计电路,还有怎么去查找资料,和进行电路的调试,这是一个学习和进步的过程。
通过这次课程设计,也使我受益颇多。既巩固了课堂上学到的理论知识,又掌握了单片机的应用设计的基本思想和方法,学会了科学地分析实际问题。通过查资料、分析资料及请教老师和同学等多种途径,独立解决问题,我觉得这是一个进步的过程。
14