智能充电器设计文档格式.docx
《智能充电器设计文档格式.docx》由会员分享,可在线阅读,更多相关《智能充电器设计文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
ThereferencedesignisdevelopedforthechargeofLi-ionandNiMH/NiCdbatterypackbasedonAT89C2051single-chipcomputer.Theworkprincipleanddesigncharacteristicsandthreechargemodeareintroduced,thenthehardwarestructureandtheimplementofsoftwareareanalyzedindetail.WiththehighperformanceofmicrocontrollerandhighresolutionA/Dconvertcircuit,thedesigncanguaranteehighaccuracy.
Keywords:
Single-chipcomputerA/DconvertIntelligentbatterychargerHardwarestructure
引言可充电电池具有较高的性能价格比、放电电流大、寿命长等特点,广泛应用于各种通信设备、仪器仪表、电气测量装置中。
但是不同类型的电池如镍镉电池(Nicd)、镍氢电池(NiMH)和锂离子电池具有不同的充电特性和过程。
不同的电池应采用不同的充电控制技术。
常用的控制技术有:
电压负增量控制、时间控制、温度控制、最高电压控制技术等。
其中电压负增量控制是目前公认的较先进的控制方法之一。
充电时,当测量到电池电压负增量时就可以确定该电池己经充满,从而将充电转变为涓流充电。
时间控制预定充电时间,当充电时间达到后,使充电器停止充电或转为涓流充电,这种方法较安全。
温度控制法是当电池达到充满状态时,电池温度上升较快,测量电池温度或温度的变化,从而确定是否对电池停止充电。
最高电压控制则是根据充电电池的最高允许电压来判断充电状态,这种方法灵活性较好。
本文介绍一种智能充电器,能对镍镉电池(Nicd)、镍氢电池(NiMH)和锂离子电池进行充电,并对充电电池具有自动检测能力。
1镍氢/镍镉电池的充电特性
1.1预充电区
根据这一区间镍氢/镍镉电池的特性,要给充电的电池维持一个小电流(大约为正常充电电流的1/10这时充电电压快速提升至标准电压的60%左右。
在这一段时间持续很短,当单节电池电压达到0.6~1V,温度高于-5oC,充电就可进入下一阶段。
1.2快速充电区
这一阶段电流要达到正常充电值800mA左右,电压从预充电压慢速上升至标准电压。
这一阶段电池温度会有缓慢上升但要保持(dθ/dt)<
1.0℃/min,电池温度θmax<
50℃。
1.3超快速充电区
当电池的d(dv/dt)=0,则进入超快速充电区。
此时V维持在8.5V,而电流则降至3/50的标准电流,此时电池温度上升加快(dθ/dt)>1.0℃/min。
1.4维持充电区
当(dv/dt)<
0或θmax=50℃,电池充电饱和,充电电流快速降至约1/50标准电流的维持充电电流,而电压也降至标准电池电压。
这一状态将维持直到电流被取下。
从以上分析可知,对镍氢/镍镉电池的控制量主要有电压增量、最大温度、最长充电时间、最大充电电压。
而我们对电流充电各阶段转换的判据主要有–ΔV、θmax、dθ/dt,由于dθ/dt这个变化量一般对环境变化敏感,因而对镍氢/镍镉电池我们对其控制的参量主要为–ΔV、θmax。
在具体实现过程中–ΔV还有赖于电压采样分辨率和电流的稳定程度。
2锂离子电池的充电特性
2.1激活状态区
锂离子电池在充电时,首先一小段激活时间。
此期间所需电流很小仅为正常充电池的1%左右,而且维持时间很短,当V>4.0V时,进入预充电状态区。
2.2预充电状态区
锂离子电池的初始状态为4.0V<
V<
5.0V,且电池温度高于–5℃,锂离子电池进入预充状态此期间所需电流为85mA左右。
2.3快充电状态
当经过一段时间的预充电,锂离子电池就进入了快充区。
这一阶段充电电流为850mA左右,电压要逐步上升并达到锂离子电池的标准电压8.35左右。
2.4限压衡压充电区
充电电压稳定在8.35V,电流逐步减小至仅维持一个很小的电流,此期间电池温度还有小幅增加。
2.5维持充电区
当t>180min,或θmax>50℃,或Vmax>8.5V时,进入维持充电区。
这一期间电压仍维持在8.5V,电流几乎为0,一直维持到电池被取走。
在此有一点需要说明,正常锂离子电池组静态电压(切断电流后)为7.2V(两节电池),而在充电时我们判断其稳态开路电压等于8.2V左右时为达到饱和水平。
这是由于锂离子电池内阻较高,因而其在线电压要高于静态电压。
从以上分析可以看出,对于锂离子电池其控制参量可以为最大电压Vmax,最大温度θmax,最大时间Tmax,,电池充电的个阶段的转化控制住要用电池开路电压的精确测量V作为控制参量。
3充电器设计思想
设计通用型智能充电器时.需要充分考虑3种电池的充电特性,针对每一种电池的特性给出不同的充电模式以及相应的算法.
3.13种电池的充电模式
3.1.1镍氢/镍镉电池充电模式
镍镉电池的容量比镍氢电池或锂离子电池低,具有低阻抗特性,对于需要短时间大电流的应用场合很具吸引力。
但镍镉电池如果未经充分放电又进行充电,或者长时间处于小电流放电状态,就会产生枝状晶体,引起“记忆效应”,从而导致电池内阻变大,容量变小,缩短了电池寿命。
如果在充电前进行完全放电,使每节电池的电压降到1.0V左右,就能消除引起“记忆效应”的枝状晶体,恢复电池的性能。
镍氢电池具有较高的容量,但其自放电率也较高,约为镍镉电池的二倍。
在初始阶段其放电率尤高(每天放掉1%)。
所以镍氢电池不宜用于需要长时间保持电池容量的场合。
就充电方式而言,两种电池非常相似,都是以恒流的方式进行充电,可采用快速、标准或者涓流的方式进行充电。
它们都能以超过2C(C为电池容量,单位为安培)的速率进行充电(但一般采用C/2速率)。
由于存在内部损耗,充电效率一般小于100%,所以,在采用C/2的速率充电时,通常需要两个多小时才能把电池充满。
充电过程中的损耗随着充电速率和电池的不同而不同。
这2种镍类电池具有相似的充电特性曲线,因而可以用一样的充电算法。
这2种电池的主要充电控制参数为-ΔV和温度θ。
对镍氢/镍镉电池由预充电到标准充电转换的判据为:
①单节电池电压水平0.6~1V;
②电池温度-5~0oC.电池饱和充电的判据为:
①电池电压跌落或接近零增长–ΔV=6~15mV/节;
②电池最高温度θmax>50℃;
③电池温度上升率dθ/dt≥1.0℃/min。
由于温度的变化容易受环境影响,因而实际用于判别充电各阶段的变量主要为–ΔV、θmax,其中对–ΔV的检测需要有足够的A/D分辨率和较高的电流稳定度.-△V的测量与A/D分辨率、充电电流的稳定性与电池内阻之间有以下关系:
当电池内阻等于50Ω(接近饱和充电)时,充电电流=1200mA,电流漂移等于5%,单节电池的最高充电电压为1.58V,则此时电流漂移可能引起的电池电压变化为3mV。
3.1.2锂离子电池充电模式
过去几年中,电池技术领域最突出的创新就是锂离子电池。
相对于镍基电池而言,锂离子电池具有更高的容量。
从容量/体积比来衡量,锂离子电池比镍氢电池高出10%~30%,从容量/质量比来看,锂离子电池比镍氢电池高出近两倍。
但锂离子电池对于过充电和欠充电很敏感。
要达到最大容量就必须充电到最高电压,而过高的电压和过大的充电或放电电流又会造成电池的永久性损坏。
如果多次放电至过低的电压则会造成容量损失,所以,充电和放电时都须限制其电压和电流,以保护电池不受损坏。
锂离子电池的充电方式不同于镍基材料的化学电池充电时需用一个电压—电流源来进行充电。
为了获得最大的充电量而又不损坏电池,须使电压保持在1%的精度内。
在锂离子电池充电采样时,测量到的电压是电池的在线电压,一般在线电压要高于静态电压(与内阻有关).在充电器设计中,对锂离子电池充电各阶段转换判断的测量参数只有在线电压,电压采样偏差小于0.05V.
3.1.3自适应充电模式
智能充电器设置了一种自适应充电模式,在这种模式下,对未知型号的电池或放入某种电池后而未按相应的键,则充电器自动转入自适应充电模式.此时充电器将提供一种公共算法对电池进行预充电,并对其进行型号识别判断,然后转入相应的充电模式,显示相应的型号.具体做法为:
检测充电电池电压的变化率,并判断是否检测到有–ΔV。
如果检测到电池电压V特别高,且无–ΔV,则转入锂离子电池充电模式,否则进入镍类电池充电模式.
4充电器硬件设计
由单片机和充电器芯片组成的通用充电器原理图如图1所示.
图1通用充电器原理图
图中AT89C2051、ADC0832与MAX846A一起构成充电器的核心。
单片机的两个PWM输出(P1.3,P1.4),经输出滤波分别与MAX846A的VSET以及ISET相连,以控制充电电压及电流,其中P1.3控制浮动电压,,P1.4控制充电电流。
从ISET端引出电流量,BATT端电池分压器读出电压量,引入微控制器,连续测量充电电压及电流。
由于从ISET以及VSET读出的量均为模拟量,而AT89C2051内部没有A/D转换,所以需要外部增加A/D转换器ADC0832。
AT89C2051串行口工作于移位方式,P3.0为数据输出线,P3.l为时钟线。
它有128个8位的RAM,2KB的程序存储空间,完全满足充电器的使用要求。
在充电器中主要用来控制MAX846A对电池的充电与否、实时检测充电器的状态及时显示,4个共阳极LED和4片串行输入、并行输出的74HC164构成显示电路。
MAX846A是Maxim公司的一款低成本、多功能的电池充电器专用控制芯片,可用同一电路为不同类型的化学电池(锂离子、镍氢、镍镉电池)充电.MAX846A最简单的应用就是作为一个独立的限压电流源为锂离子电池充电,因它内部包括一个精度为0.5%的基准源,可以保证锂离子电池电压达到苛刻的精度要求.独立的电压、电流调节回路用于控制外部PNP晶体管(或p沟道MOSFET),简化了充电器的设计.另外,MAX846A内含精度为1%的20mA、3.3V线性稳压源,可为微控制器(MCU)供电并为它的A/D转换提供基准电压.复位电路在系统掉电时为微控制器提供复位信号.因此,它可以灵活简单地与微控制器相连,共同构成通用的电池充电器.MAX846A的ON引脚控制充电功能的开启,CELL2决定充电电池的节数,VL是线形稳压电源,PWROK为微控制器提供复位信号,ISET是电流设置输入、充电电流输出端,VSET是浮空电压基准调节输入端,BATT是充电电池输入端
ADC0832为8位串行逐次逼近式A/D转换芯片,实时检测充电电流、电压的大小。
MAX846A是一种高性能充电芯片,它适用于镍镉电池(Nicd)、镍氢电池(NiMH)和锂离子电池等。
电路中用单片机的PWM输出特性对充电电池电流进行控制,这样设计的优点是:
用数字量对电流控制可达到很高的精确程度,可以适合不同种类不同容量的电池对充电电流的不同要求.其中脉宽调制有2个参数特别重要:
一是工作频率,在一定范围内,脉宽调制的工作频率越高,所需电感越小。
二是单步调整的分辨率,如果脉宽调制欲输出稳定度较高的充电电流,则需要较高的分辨率。
例如在镍氢/镍镉电池充电的各个阶段,尤其是电池饱和充电判别点附近,对充电电压的-△V进行采样时,要求电池的充电电流要有较高的稳定性或电流等效值恒定,这时就有赖于脉宽调制输出稳定的电流值.而对于锂离子电池在其限压充电期间,其充电电流应可动态调整,以维持电池电压的最大(但要小于最大充电电压)而获得较高的充电效率.
PWM软件法控制充电电流是在不改变PWM方波周期的前提下,通过软件的方法调整单片机的PWM控制寄存器来调整PWM的占空比,从而控制充电电流。
本方法所要求的单片机必须具有ADC端口和PWM端口这两个必须条件,另外ADC的位数尽量高,单片机的工作速度尽量快。
在调整充电电流前,单片机先快速读取充电电流的大小,然后把设定的充电电流与实际读取到的充电电流进行比较,若实际电流偏小则向增加充电电流的方向调整PWM的占空比;
若实际电流偏大则向减小充电电流的方向调整PWM的占空比。
在软件PWM的调整过程中要注意ADC的读数偏差和电源工作电压等引入的纹波干扰,合理采用算术平均法等数字滤波技术。
软件PWM法具有以下优缺点。
优点:
简化了PWM的硬件电路,降低了硬件的成本。
利用软件PWM不用外部的硬件PWM和电压比较器,只需要功率MOSFET、续流磁芯、储能电容等元器件,大大简化了外围电路。
1.可控制涓流大小。
在PWM控制充电的过程中,单片机可实时检测ADC端口上充电电流的大小,并根据充电电流大小与设定的涓流进行比较,以决定PWM占空比的调整方向。
2.电池唤醒充电。
单片机利用ADC端口与PWM的寄存器可以任意设定充电电流的大小,所以,对于电池电压比较低的电池,在上电后,可以采取小电流充一段时间的方式进行充电唤醒,并且在小电流的情况下可以近似认为恒流,对电池的冲击破坏也较小。
缺点:
3.电流控制精度低。
充电电流的大小的感知是通过电流采样电阻来实现的,采样电阻上的压降传到单片机的ADC输入端口,单片机读取本端口的电压就可以知道充电电流的大小。
若设定采样电阻为Rsample(单位为Ω),采样电阻的压降为Vsample(单位为mV),10位ADC的参考电压为5.0V。
则ADC的1LSB对应的电压值为5000mV/1024≈5mV。
一个5mV的数值转换成电流值就是50mA,所以软件PWM电流控制精度最大为50mA。
若想增加软件PWM的电流控制精度,可以设法降低ADC的参考电压或采用10位以上ADC的单片机。
1.PWM采用软启动的方式。
在进行大电流快速充电的过程中,充电从停止到重新启动的过程中,由于磁芯上的反电动势的存在,所以在重新充电时必须降低PWM的有效占空比,以克服由于软件调整PWM的速度比较慢而带来的无法控制充电电流的问题。
2.充电效率不是很高。
在快速充电时,因为采用了充电软启动,再加上单片机的PWM调整速度比较慢,所以实际上停止充电或小电流慢速上升充电的时间是比较大的。
此外,设计中选择滤波电容的主要依据是系统对电源纹波的要求。
滤波电容的等效串联电阻(ESR)是造成输出纹波的主要因素,而且也会影响到转换效率,因此应尽量选用低ESR的电容。
陶瓷电容和钽电解电容具有较低的ESR,也可选用低ESR的铝电解电容,但应尽量避免标准铝电解电容。
容量一般在10μF~100μF,对于较重的负载设计选取大一点的电容。
5系统软件设计
系统软件流程采用中断工作方式,软件功能的主要控制步骤均包括在定时中断程序中,包括监控电压、测量电流及累加电流时间积等部分。
系统的主要程序流程如图2所示。
图2系统主要程序流程图
在开始充电时,对系统进行初始化,其中包括图1中AT89C2051单片机各个端口初始化、堆栈指针初始化、寄存器初始化,程序如下:
ORG0000H
LJMPSTART
ORG0003H
LJMPEXTERN_INT;
外中断入口
ORG000BH
LJMPTIMER0_INT;
定时器中断入口
;
-----------------------
程序开始,初始化各个寄存器以及标志位
START:
MOVSP,#050H;
设置堆栈
MOVR0,#030H;
设置AD存储单元初始地址
MOVIE,#0FFH;
打开所有中断
MOVDPTR,#78FFH;
采集通道首地址,只使用一路AD就可以
MOVR0,#40H
MOV@R0,#00H;
清除方案选择位
清除方案选择触发位
MOVR1,#042H
清除定时器计数器
LCALLTIMER1_INIT
ADC采样中断设定程序如下:
EXTERN_INT:
PUSHACC;
累加器压栈
PUSHPSW;
程序状态字压栈
MOVPSW,#010H;
切换寄存器区域
AD转换器首地址
MOVXA,@DPTR;
读入AD的值
MOVR1,#030H;
存储AD转换器的数据的地址
MOV@R1,A;
将AD的值读入该地址
POPPSW;
程序状态字出栈
POPACC;
累加器出栈
RETI
END
为了使测定结果更精确,采样频率要尽量高。
系统初始化后开定时器中断服务程序,由于程序中利用了定时中断,使得定时控制很方便。
对电压采样的时间定时器中断程序如下:
TIMER0_INT:
累加器入栈
程序状态字入栈
MOVPSW,#18H;
CLRTF0;
清除定时器中断TF0
CLRTR0;
禁止定时器0
MOVTL0,#00H
MOVTH0,#01FH;
定时器0中断发生时间为6
清除溢出中断位
INC@R1;
增加计数器的值,到8为止,这样达到500毫秒
CJNE@R1,#08H,TIMER0_READY
MOV@R1,#00H;
清除计数器的值
MOVR1,#041H;
设置标志位,每500毫秒重新选择方案
MOV@R1,#01H
TIMER0_READY:
SETBTR0;
使能定时器0
端电压检测硬件上使用单片机的片上高精度A/D模块,软件控制采用中断方式,这样可节省单片机在A/D转换期间的等待时间。
端电压检测的数据,通过充电算法计算电池的电压负增长-△V是否满足快速充电终止条件,及时实修改单片机的输出参数,控制充电电流的大小。
用PWM调制得所需电流大小程序如下:
LOOP:
MOVR0,#30H;
30H是AD转换的地址,将数据和几个值进行比较,确定方案
MOVA,@R0
SUBBA,#30H;
当电压很小的时候,采用第一种方案,向引脚PWM发送占空比为10%的信号
JCPROCESS_01
SUBBA,#90H
JCPROCESS_02;
当电压较小的时候,采用第二种方案,向引脚PWM发送占空比为20%的信号
JZPROCESS_03;
当电压正好的时候,采用第三种方案,向引脚PWM发送占空比为50%的信号
MOVA,#04H;
当电压超出的时候,采用第四种方案,向引脚PWM发送占空比为0%的信号
LJMPPROCESS_04
CLEAR_FLAG:
MOVR0,#40H;
MOV@R0,#00H
MOVR0,#41H;
清除触发位
LJMPLOOP
PROCESS_01:
MOVR1,#040H
MOV@R1,#01H;
选择方案1
PROCESS_01_NEXT:
SETBP2.0;
将和PWM连接的管脚置高
MOVR1,#0F0H
MOVR0,#00H
PROCESS_01_01:
DJNZR1,PROCESS_01_01
DJNZR0,PROCESS_01_01;
空跑16*256*2个周期
CLRP2.0;
将和PWM连接的管脚置低
MOVR1,#070H
PROCESS_01_02:
DJNZR1,PROCESS_01_02
DJNZR0,PROCESS_01_02;
空跑16*256*2*9个周期
当方案改变标志位到来的时候,清除标志并且重新进行判断
CJNE@R1,#00H,CLEAR_FLAG
SJMPPROCESS_01_NEXT
PROCESS_02:
MOV@R1,#02H;
选择方案2
PROCESS_02_NEXT:
MOVR1,#0E0H
PROCESS_02_01:
DJNZR1,PROCESS_02_01
DJNZR0,PROCESS_02_01;
MOVR1,#080H
PROCESS_02_02:
DJNZR1,PROCESS_02_02
DJNZR0,PROCESS_02_02;
空跑16*256*2*8个周期
SJMPPROCESS_02_NEXT
PROCESS_03:
MOV@R1,#03H;
选择方案3
PROCESS_03_NEXT:
MOVR1,#0B0H
PROCESS_03_01:
DJNZR1,PROCESS_03_01
DJNZR0,PROCESS_03_01;
空跑16*256*2*2个周期
PROCESS_03_02:
DJNZR1,PROCESS_03_02
DJNZR0,PROCESS_03_02;
空跑16*256*2*7个周期
SJMPPROCESS_03_NEXT
PROCESS_04:
CLRP2.0
MOV@R1,#04H;
选择方案4
MOVR1,#041H