引言
蓄电池作为较长时间供电电源,广泛应用于交通、通信、控制系统等领域。为保证用电系统的稳定性,对蓄电池剩余电量的监测是一项很重要的工作,常用的检测方法有:密度法、开路电压法、放电法和内阻法。这4种方法的缺点是测量精度低,不适合在线测量,电路设计复杂或算法繁琐。本文介绍一款TI公司的电源管理芯片BQ2013H,它可以高精度、实时地在线监测蓄电池剩余电量、当前电压、电池温度等信息,而且外围电路设计简单,采用HDQ一线通信协议。
1芯片简介
1.1特征
BQ2013H可以对可充电电池的剩余电量进行精确测量,可以监测的电池包括镍镉、镍氢和铅酸蓄电池。芯片直接驱动用于容量显示的LED灯,能够应用内部温度传感器自动进行充电和放电补偿,提供简单的单总线串行通信接口。芯片引脚图见图1,各引脚功能描述如表1所列。
图1BQ2013H芯片引脚图
表1BQ2013H芯片引脚功能
1.2功能描述
BQ2013H芯片专为电池组设计,可以对电池的可用电量保持精确记录。在电池的负极与线路板的地之间串接一个检测电阻,芯片通过监测检测电阻的电压降来判断电池是处于充电还是放电状态。BQ2013H通常用于高放电率系统中高容量电池电量的监测。
电池的自放电通过内部的定时器和温度传感器来估算,对电池温度、充电率和自放电率的补偿应用于电荷计数器,该计数器在一个宽的操作条件下可以提供可用容量信息。最初的电池容量、自放电率、显示模式和电荷补偿可以用芯片的引脚PROG1~6来设置。电池从满到空的一个放电周期中, 实际的电池容量可以由芯片自动地“学习”。由5个LED灯指示可用电量。
BQ2013H支持一个简单的单线双向串口连接到外部微处理器(共地),芯片响应串口的外部命令,输出相应的电池信息。为了支持电池组的测试,输出可以由命令来控制,微处理器可以修改芯片的一些数据寄存器。
BQ2013H可以直接监测4个镍电池单元和3个铅酸电池单元,在BQ2013H芯片的REF输出引脚接一个晶体管,可以构成一个简单、廉价的电压调节器。在多个电池的单元系统中,可以给芯片的VCC引脚提供电源。内部寄存器包括可用电量、温度、容量、电池ID、电池状态寄存器。
BQ2013H监测输入或输出可充电电池电荷的数额,来判定电池容量。BQ2013H测量放电和充电电流,估计自放电电荷,监测低电压阈值的电池,做温度和充电率的补偿。在电池负极和线路板地之间串接一个小值检测电阻,通过监测该电阻的电压来进行电荷测量。可用电量的测量是通过监测随时间变化的电压,并且校正由于环境和运行条件影响导致的误差来完成的。
1.3芯片内部运行概述
图2的内部运行方框图解释了BQ2013H的运作过程。BQ2013H累计测量充电和放电电流,同时对自放电进行估计,根据充电率和温度补偿充电电流。放电电流的补偿值基于存储在寄存器LCOMP中的数值。LCOMP寄存器允许芯片以连续的小放电电流进行自动调整。BQ2013H根据LCOMP寄存器和温度的值补偿自放电率。
图2BQ2013H芯片内部运行方框图
NAC(可用容量寄存器)是最重要的寄存器,它描述了任意时间可用的电池容量。电池充电时增加NAC寄存器的值,电池放电或自放电会减少NAC寄存器的值,而增加DCR(放电计数寄存器)的值。NAC寄存器也会根据OFFSET(偏移量寄存器)的值自动校正偏移误差。
在没有给电池充电的情况下,如果电池从满到空完全放电,这个时候DCR寄存器的值用于更新LMD(最近测量的放电量寄存器)的值,因此,BQ2013H可以根据实际的放电情况改写容量测定值。
电池的初始容量等于PFC(可编程满量程计数器)的值,在LMD寄存器更新之前,充电过程中NAC增加计数但不会超过初始阈值。这种方式允许被监测的电池独立充电,并且兼容任何类型的充电器。
2系统硬件设计
如图3所示,整个系统包括蓄电池、负载电路、电量监测、单片机、LED显示等模块,系统采用12 V/2.5 Ah的蓄电池供电,负载除系统自身外还包括步进电机电路。BQ2013H监测蓄电池的电量,并驱动LED以20%的增量显示剩余电量。芯片采用HDQ协议通信,将相关寄存器的值传送给单片机STC89C52,然后单片机将采集到的数据作相应处理。
图3系统框图
本系统采用TI公司的电源管理芯片BQ2013H作为系统的核心,蓄电池12 V电压通过场效应管BSS138进行电压调节,为BQ2013H芯片提供5.2 V左右的电源电压。蓄电池电压经过电阻R6、R7分压,作为芯片的放电阈值电压。检测电阻R11采用001 Ω/3 W的电阻,采集到的电压信号经过RC滤波后输入到芯片的SR引脚,根据电池类型、容量、检测电阻阻值,要对J3~J8的跳线设置,使得符合当前电池使用的状况。图4中BAT+、BAT-分别接蓄电池的正负极。DONE为电池充电完成状态输入端,可以由单片机给出充电完成信号。HDQ通过上拉电阻接单片机的I/O口。RB为寄存器提供掉电保护电压。PACK-、GND接一起为负载或充电器的负极端。ACC为LED显示的激活端,可由单片机来控制是否需要LED显示。
图4系统硬件电路图
参照BQ2013H芯片手册,可以作以下设置:初始容量PFC值2500 mAh×0.01 Ω=25 mVh。
可编程引脚设置如表2所列,其中H为高电平,Z为高阻,L为低电平。
表2可编程引脚设置表
3软件设计
3.1HDQ通信协议
BQ2013H与单片机STC89C52之间通过HDQ串行总线通信。HDQ通信采用单总线、开漏输出接口,该接口需要接一个上拉电阻,使用一种基于命令的通信协议。主机发送一个命令字节到BQ2013H芯片,这条命令指示芯片存储接下来的8位数据到指定寄存器,或从指定寄存器输出8位数据。数据传送的作大速率为5 Kb/s,命令或数据字节的最低有效位先传送。命令字节的前7位是寄存器地址,最后1位是读/写位,一个典型的读周期数据格式如图5所示。在一个写周期,地址位或数据位之间的时段里,HDQ总线可以保持高电平。在一个读周期,当指定所读寄存器地址的最后1位传送完后,还需要等待指定的响应时间tRSPS,芯片才输出数据到总线。响应时间tRSPS是指从读写位的下降沿到芯片返回数据的第1个数据位的下降沿这个时间段,因此包括整个读/写位时间,因为最小的响应时间等于最小的位周期时间,这就意味着第1个数据位可以在命令R/W位一结束就开始传送。有时该通信协议被认为是HDQ8协议,用以区分像bq2060和bq2063器件所用的HDQ16协议。HDQ16与HDQ8协议的位时序是相同的,只是读写的是16位数据而不是8位。HDQ16协议的命令字仍然是一个7位的地址加一个读写位。
图5典型的HDQ读周期
3.2HDQ复位
如果HDQ引脚保持低电平时间超过最小间断时间190 μs,通信将会自动复位。如果单片机没有从BQ2013H取得期望的响应或单片机需要重新开始通信,单片机将会使HDQ引脚保持低电平,并且产生一个间断来复位通信,下次通信将在最小的间断恢复时间40 μs后开始。间断和间断恢复时序如图6所示。HDQ可靠通信的设计方法是在每次通信前先有一个间断,确保在每次通信前系统复位,以此来降低错误数据的读写几率。
图6HDQ间断与间断恢复时序
3.3HDQ读写时序
BQ2013H在经过一个tB间断时间和tBR间断恢复时间后,单片机开始往HDQ总线上发送命令字节与数据字节。每位的传输分3步完成:第1步开始传输位,由单片机或BQ2013H将HDQ引脚置成低电平tSTRHB时间;第2步是传输数据位,数据位在tDSUB时间内有效,数据位应该保持tDHV时间,让单片机或BQ2013H读写;第3步传输停止,通过将HDQ引脚置成高电平来实现,停止时间由tSSUB与tCYCHB共同决定,时序时间均以开始传输的负电平边缘算起。HDQ读/写时序如图7所示。
图7HDQ读/写时序
3.4HDQ读/写程序
单片机STC89C52可以控制BQ2013H芯片,向BQ2013H写控制字或从BQ2013H读取相关数据。下面是单片机(晶振11.0592 MHz)向BQ2013H写控制字的子程序:
void write_bit(char bitval){//写1位1或0,239 μs
hdq=0;
nop=1;nop=1;
hdq_delay20us();//延时20 μs
hdq_delay10us(); //延时10 μs
if(bitval==1) hdq=1;
else hdq=0;
hdq_delay45us();//延时45 μs
hdq_delay20us();//延时20 μs
hdq=1;
nop=1;nop=1; nop=1;nop=1; nop=1;
hdq_delay45us();//延时45 μs
}
void write_byte(char val){//写1字节
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++){
temp=val>>i;
temp&=0x01;
write_bit(temp);
}
}
void write_hdq_com( uchar addr,uchar hdq_data){
//往相应寄存器写函数
hdq_break_timing();//复位初始信号
write_byte(addr);//写入寄存器地址
write_byte(hdq_data);//写入寄存器数据
}
结语
本文讨论的采用BQ2013H监测蓄电池电量的方法,可以实时有效地监测蓄电池的电量,外围电路简单,程序简短。由单片机通过HDQ协议控制BQ2013H进行数据的读/写,采集到的数据经过处理,实现蓄电池电量的在线监测。