基于SMBus的智能电池系统
扫描二维码
随时随地手机看文章
作者Email: ramrod@sina.com.cn
摘要: 本文概要地介绍了智能电池系统,并介绍了一种典型芯片——Max1660的电量计数及电池保护等功能,给出了一个应用实例。
关键词:智能电池 电量计数 SMBus Max1660
现代社会对产品寿命需求和对产品的性能和功能的要求迅速提高。最新的掌上电脑要求把最多的功能压到最少的空间中去,这就驱使电池的设计者不得不考虑在产品设计方面做显著的变化。这包括;使用低压器件,关掉未在使用的子系统,对应用程序进行管理,发展智能电池和电池管理系统等。
新的智能电池的设计需要各种不同甚至相反的领域的知识,在某些应用中甚至是全新领域的知识。这些领域包括关于电池运行的电池化学知识;关于系统各零件相互作用的系统工程知识和使用者怎样操作一个特殊设备的设计知识。因此,一个规范或者说一个标准将必不可少,它可以简化设计,提高系统的可移植性。
智能电池规范
电池的智能化是最近才发展起来的,这就使得智能电池的实现方案多种多样。因而,一些标准开始出现。这些标准一般是由便携电脑制造商推动的。但在一些单电池系统中,例如在蜂窝式移动电话系统中,成本问题限制了电池系统一些操作,使智能电池标准的发展复杂化了。
一线接口 电池包与系统的通讯是一个很重要的需要考虑的因素。这个接口要有尽可能少的信号线以减少电池包的连线数。因而,许多单电池系统采用一线接口(1-wire),例如,蜂窝移动电话。在1-wire接口中,0或1取决于信号线上0的有效周期。这种类型的接口提供了一个异步连接。当前有三种不同的一线接口(1-Wire),它们之间只有轻微的差别。由于其内在特点,一线接口的传输速率很慢。在低成本系统中,这样的速率是可接受的,因为只有极少的信息需要传递给主机。但在多电池系统中,就有更多的信息需要传递给主机,这是就要求有更快的接口速度了。
SMBus接口 1996年,Intel(联合其它公司)推出了一个由PC-I2C变异而来的系统管理总线(SMBus)。它与I2C总线一样有两根通讯线,但是加入了低电平选择并且对器件对总线的控制实践做了严格规定。作为系统管理总线(SMBus)发展的一部分,Intel与其合作伙伴创建了智能电池标准。这个规范在SMBus接口顶层增加了一个协议,定义了一系列的命令以用于电池包、电池充电器、电池选择器和主机之间的通讯。而这些命令和协议并非必需的,可以选用。
基于MAX1660的智能电池应用实例:
MAX1660 是美信公司生产的一种能够精确测量流入充电和流出放电系统电池组的电量计数芯片,它能将电池电量存入内部两个独立的32 位充电和放电计数器。它通过强大的数字比较功能,判断当充电或放电计数器达到主机设定值时,中断主CPU,来完成主机设定得功能。该器件也可以在电流方向发生变化时通知主机,并具备保护电池组短路及过流的功能。MAX1660 提供一个兼容于SMBUSTM系统管理总线的二线串行接口来访问充电放电量计数器和内部寄存器,同时也能够给主机提供一条可用作中断信号的系统管理总线报警线SMBALERT。
1. MAX1660 的引脚及功能
MAX1660 的引脚排列如图1 主要引脚功能如下:
u INT,中断信号漏极开路输出,低电平有效,INT接上拉电阻100k至VL引脚。
u REF,2.00V 精密电压基准输出,REF对AGND 接10nF旁路电容。
u SHDN,关断控制输入,低电平有效。
u CS,电流检测电阻输入。
u ODI,放电过流检测输入。
u OCI,充电过流检测输入。
u VL,3.3V 5mA线性电压输出VL对GND接0.33mF旁路电容。
u BATT,电源输入。
u ODO,高压漏极开路MOSFET栅极驱动输出,ODO控制电池放电信道的开/关。
u OCO,高压漏极开路MOSFET栅极驱动输出,OCO控制电池充电信道的开/关。
u RST,上电复位输出,低电平有效RST接上拉电阻100k至VL引脚。
u SDA,串行数据输入/输出,在SDA和VL 之间接10k电阻。
u SCL,串行时钟输入,在SCL和VL之间接10k电阻。
2.MAX1660的控制、状态与读写时序
MAX1660有一个16位的状态字和一个16位的控制字,主机可通过读状态字来判断电池状态,写控制字来控制电池系统。其状态字的定义如表1,控制字定义为如表2
表1
位名称 |
位 |
上电复位状态 |
说明 |
—— |
8--15 |
1 |
未使用通常返回1。 |
ODSTATUS |
7 |
0 |
过流中断状态位,当放电过流时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。 |
OCSTATUS |
6 |
0 |
过流中断状态位,当充电过流时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。 |
COMPSTATUS |
5 |
0 |
COMPINT中断状态位,当COMPINT中断发生时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。 |
COUNTSTATUS |
4 |
— |
SETCOUNT状态指示位,当控制字SETCOUNT置位时此位置位。当SETCOUNT位清零时,此位清零。 |
SHDNSTATUS |
3 |
0 |
软关断状态指示位,当器件处于软关断模式时返回1,否则返回0 |
CHARGESTATUS |
2 |
0 |
充电状态指示位,充电状态检测时此位置位,放电状态检测时此位清零。 |
DIRCHANGE |
1 |
0 |
当电流方向发生变化时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。祥见参考文献1的电流变化检测部分。 |
—— |
0 |
0 |
未使用通常返回1。 |
表2
位名称 |
位 |
上电复位状态 |
说明 |
—— |
11--15 |
1 |
未使用。 |
DIRINTENABLE |
10 |
0 |
电流方向变化允许位。此位置位允许方向变化中断发生,清零则禁止此功。祥见Direction-Change Detection Function section。 |
SOFTSHDN |
9 |
1 |
软关断允许位,此位置位允许软关断,清零恢复正常操作。祥见参考文献1的Shutdown Modes section。 |
CLRCOUNTER |
8 |
1 |
清计数器,写1将放电计数器和充电计数器全都清零。 |
CLRINT |
7 |
0 |
清中断,写1使ODSTATUS, OCSTATUS, COMPSTATUS, 和DIRCHANGE.清零 |
SETCOUNT |
6 |
0 |
计数器选择位,用来选择将哪个计数器的值传输到COUNT寄存器,置1选择充电计数器,清零则选者放电计数器。祥见文献1的Charge and Discharge Counters section。 |
OFFSETMEAS |
5 |
0 |
偏移量测量允许位,置位时使CS端与内部电路断开,短接到AGEND。清零时CS端重新接到内部电路,恢复正常操作。参看文献1的internal Offset Measurementsection。 |
COMPENABLE |
4 |
— |
比较中断允许位。置1允许数字比较中断功能,清零则禁止此功能。参见文献Digital Compare Function section. |
ODHI |
3 |
0 |
ODO两位输出状态控制位的第一位,参见文献1的Overcurrent Detection section。 |
ODLO |
2 |
0 |
ODO两位输出状态控制位的第二位。为保证恰当的过流保护状态ODLO应该总是保持为零。参见文献1的Overcurrent Detection section。 |
OCHI |
1 |
0 |
OCO两位输出状态控制位的第一位,参见参考文献1的Overcurrent Detection section. |
OCLO |
0 |
0 |
OCO两位输出状态控制位的第一位。为保证恰当的过流保护状态OLO应该总是保持为零。参见文献1的Overcurrent Detectionsection. |
其读写时序见参考文献1,传输时以字节为单位。每次传输时首字节为SLVEADDRESS——即从器件地址。对于不同种类的SMBus器件,该地址是固定的,在出厂时就已经固化到器件中。但也有一些器件可以通过地址端的不同接法选择该地址。MAX1660的SLAVEADDRESS是1000111,最后一位空出,用来选择读或写。其中0为读出,1为写入。第二个字节为命令字,从第三个字节开始是要读出或写入的数据。
命令字可分为两种:一为读命令,包括读计数寄存器和读状态字;一为写命令,包括写比较寄存器和写控制字。计数寄存器需要分两次读出,命令字为:0x82(低16位)、0x83(高16位);比较寄存器也要分两次写入,其命令字分别为:0x00(低16位),0x01(高16位);读状态字和写控制字的命令字分别为:0x84和0x04。需要注意的是:在读计数器时,当前供电状态决定了计数器中的数值是充电还是放电计数值。而且,更为重要的一点:在读计数器时两个命令必须连续执行且必须先读低位后读高位,如果中间夹有其他命令或顺序颠倒,在执行这个命令时Max1660就会当作读高16位的命令已执行而将计数器清零。
3. MAX1660的最大充电和放电电流
MAX1660本身不能控制电池充电电流,只能控制最大充电电流值和最放电电流值。它可以通过以下方法设定设定:
设定最大充电电流值:如图所示,
式中 ICHG,MAX即是最大充电电流值 VREF=2.0V。R5选择1MΩ左右的电阻。
1) 设定最大放电电流值:如图所示,
式中IDISCHG,MAX 为最大放电电流值,R3选择1MΩ左右的电阻。
4.应用MAX1660设计电量指示监控充电电路
本电路是作为一个便携式嵌入系统的附属电源模块设计的,由于系统成本限制,采用用了镍氢电池。Mam1660即可监控锂电池又可监控镍基电池,而其他类电池监控芯片大所为锂电池监控芯片,因此本系统采用Max1660来搭建系统。系统软件采用查询机制,其程序框图如图5。
系统力求精简,用51单片机控制。单片机通过SDA、SCA、INT三根线与MAX1660通讯线用于对发出中断信号,SCA、SDA分别为的时钟线和数据线。利用max1660的数字比较功能,程序设定一个电量值,每当电量计数器达到设定值时即对单片机发出中断,从而把单片机解放出来。计数值与电量的关系与敏感元件微电阻有关,微电阻越小则可测电流越小,但电流分辨率也越小,反之则可测电流值受限,而电流分辨率增大。
系统主要包括两部分:首先是通讯部分,主要是SMBus总线的驱动程序。这里参考了文献2中的I2C总线驱动程序,按照系统需求作了局部改动。程序包括启动、停止、发送应答、发送非应答、应答位检查、发送和接收等共9个函数。最后组成两个函数:SMBusReadWord和SMBusWriteWord。通过这两个函数即可实现SMBus总线的全部读写操作,实现对任何SMBus总线器件的控制。这两个函数的参数依次为:器件地址,命令字,读/写内容。
其次为主程序部分。如图5所示,当中断条件满足时,由max1660向单片机发出中断请求,单片机则读取max1660的状态字判断为何种中断,各状态字的定义如表1,部分中断功能可通过控制字关闭。然后对各种中断作相应处理。其中当前的供电方式可通过CHARGESTATUS读出。该位为1时为充电状态,为0时为放电状态。
文献1提供了一个简单的系统硬件原理图,只需在这个原理图上作简单的拓展即可使用。限于篇幅,无法将本系统的原理图详细列出,这里只作简单介绍:Max1660本身带有3.3V电源输出,但由于这里使用了51单片机必须采用5V电源,因此这一电源没有使用,而是在pack+和pack-之间接入7805来得到5伏的电源,而在用于整个系统时,其电源也应从这两端输出。
电量的显示最好通过LCD,调试阶段用LED较好,比较直观,同时易于排除问题。本系统在调试阶段用P1口输出电量状态指示,LED亮时表示充电已到该位,各灯逐次点亮,充满时全亮,放电时正相反。
结束语
本文介绍的基于SMBus的智能电池检测系统既可用于锂电池,也可用于镍基电池,对电池的要求较低,系统作为便携式仪器的电源解决方案在实际应用中已得到验证。系统运行可靠,功能强大显示直观,能够与其他功能协调工作。随着各种便携式电子产品的广泛应用,电池的智能化已成为一种必不可少的功能。因此本文所介绍的智能电池系统具有较强的实用性。
作者Email: ramrod@sina.com.cn
摘要: 本文概要地介绍了智能电池系统,并介绍了一种典型芯片——Max1660的电量计数及电池保护等功能,给出了一个应用实例。
关键词:智能电池 电量计数 SMBus Max1660
现代社会对产品寿命需求和对产品的性能和功能的要求迅速提高。最新的掌上电脑要求把最多的功能压到最少的空间中去,这就驱使电池的设计者不得不考虑在产品设计方面做显著的变化。这包括;使用低压器件,关掉未在使用的子系统,对应用程序进行管理,发展智能电池和电池管理系统等。
新的智能电池的设计需要各种不同甚至相反的领域的知识,在某些应用中甚至是全新领域的知识。这些领域包括关于电池运行的电池化学知识;关于系统各零件相互作用的系统工程知识和使用者怎样操作一个特殊设备的设计知识。因此,一个规范或者说一个标准将必不可少,它可以简化设计,提高系统的可移植性。
智能电池规范
电池的智能化是最近才发展起来的,这就使得智能电池的实现方案多种多样。因而,一些标准开始出现。这些标准一般是由便携电脑制造商推动的。但在一些单电池系统中,例如在蜂窝式移动电话系统中,成本问题限制了电池系统一些操作,使智能电池标准的发展复杂化了。
一线接口 电池包与系统的通讯是一个很重要的需要考虑的因素。这个接口要有尽可能少的信号线以减少电池包的连线数。因而,许多单电池系统采用一线接口(1-wire),例如,蜂窝移动电话。在1-wire接口中,0或1取决于信号线上0的有效周期。这种类型的接口提供了一个异步连接。当前有三种不同的一线接口(1-Wire),它们之间只有轻微的差别。由于其内在特点,一线接口的传输速率很慢。在低成本系统中,这样的速率是可接受的,因为只有极少的信息需要传递给主机。但在多电池系统中,就有更多的信息需要传递给主机,这是就要求有更快的接口速度了。
SMBus接口 1996年,Intel(联合其它公司)推出了一个由PC-I2C变异而来的系统管理总线(SMBus)。它与I2C总线一样有两根通讯线,但是加入了低电平选择并且对器件对总线的控制实践做了严格规定。作为系统管理总线(SMBus)发展的一部分,Intel与其合作伙伴创建了智能电池标准。这个规范在SMBus接口顶层增加了一个协议,定义了一系列的命令以用于电池包、电池充电器、电池选择器和主机之间的通讯。而这些命令和协议并非必需的,可以选用。
基于MAX1660的智能电池应用实例:
MAX1660 是美信公司生产的一种能够精确测量流入充电和流出放电系统电池组的电量计数芯片,它能将电池电量存入内部两个独立的32 位充电和放电计数器。它通过强大的数字比较功能,判断当充电或放电计数器达到主机设定值时,中断主CPU,来完成主机设定得功能。该器件也可以在电流方向发生变化时通知主机,并具备保护电池组短路及过流的功能。MAX1660 提供一个兼容于SMBUSTM系统管理总线的二线串行接口来访问充电放电量计数器和内部寄存器,同时也能够给主机提供一条可用作中断信号的系统管理总线报警线SMBALERT。
1. MAX1660 的引脚及功能
MAX1660 的引脚排列如图1 主要引脚功能如下:
u INT,中断信号漏极开路输出,低电平有效,INT接上拉电阻100k至VL引脚。
u REF,2.00V 精密电压基准输出,REF对AGND 接10nF旁路电容。
u SHDN,关断控制输入,低电平有效。
u CS,电流检测电阻输入。
u ODI,放电过流检测输入。
u OCI,充电过流检测输入。
u VL,3.3V 5mA线性电压输出VL对GND接0.33mF旁路电容。
u BATT,电源输入。
u ODO,高压漏极开路MOSFET栅极驱动输出,ODO控制电池放电信道的开/关。
u OCO,高压漏极开路MOSFET栅极驱动输出,OCO控制电池充电信道的开/关。
u RST,上电复位输出,低电平有效RST接上拉电阻100k至VL引脚。
u SDA,串行数据输入/输出,在SDA和VL 之间接10k电阻。
u SCL,串行时钟输入,在SCL和VL之间接10k电阻。
2.MAX1660的控制、状态与读写时序
MAX1660有一个16位的状态字和一个16位的控制字,主机可通过读状态字来判断电池状态,写控制字来控制电池系统。其状态字的定义如表1,控制字定义为如表2
表1
位名称 |
位 |
上电复位状态 |
说明 |
—— |
8--15 |
1 |
未使用通常返回1。 |
ODSTATUS |
7 |
0 |
过流中断状态位,当放电过流时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。 |
OCSTATUS |
6 |
0 |
过流中断状态位,当充电过流时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。 |
COMPSTATUS |
5 |
0 |
COMPINT中断状态位,当COMPINT中断发生时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。 |
COUNTSTATUS |
4 |
— |
SETCOUNT状态指示位,当控制字SETCOUNT置位时此位置位。当SETCOUNT位清零时,此位清零。 |
SHDNSTATUS |
3 |
0 |
软关断状态指示位,当器件处于软关断模式时返回1,否则返回0 |
CHARGESTATUS |
2 |
0 |
充电状态指示位,充电状态检测时此位置位,放电状态检测时此位清零。 |
DIRCHANGE |
1 |
0 |
当电流方向发生变化时,此位置位。当软关断、上电复位或控制字CLRINT位置位时,此位清零。祥见参考文献1的电流变化检测部分。 |
—— |
0 |
0 |
未使用通常返回1。 |
表2
位名称 |
位 |
上电复位状态 |
说明 |
—— |
11--15 |
1 |
未使用。 |
DIRINTENABLE |
10 |
0 |
电流方向变化允许位。此位置位允许方向变化中断发生,清零则禁止此功。祥见Direction-Change Detection Function section。 |
SOFTSHDN |
9 |
1 |
软关断允许位,此位置位允许软关断,清零恢复正常操作。祥见参考文献1的Shutdown Modes section。 |
CLRCOUNTER |
8 |
1 |
清计数器,写1将放电计数器和充电计数器全都清零。 |
CLRINT |
7 |
0 |
清中断,写1使ODSTATUS, OCSTATUS, COMPSTATUS, 和DIRCHANGE.清零 |
SETCOUNT |
6 |
0 |
计数器选择位,用来选择将哪个计数器的值传输到COUNT寄存器,置1选择充电计数器,清零则选者放电计数器。祥见文献1的Charge and Discharge Counters section。 |
OFFSETMEAS |
5 |
0 |
偏移量测量允许位,置位时使CS端与内部电路断开,短接到AGEND。清零时CS端重新接到内部电路,恢复正常操作。参看文献1的internal Offset Measurementsection。 |
COMPENABLE |
4 |
— |
比较中断允许位。置1允许数字比较中断功能,清零则禁止此功能。参见文献Digital Compare Function section. |
ODHI |
3 |
0 |
ODO两位输出状态控制位的第一位,参见文献1的Overcurrent Detection section。 |
ODLO |
2 |
0 |
ODO两位输出状态控制位的第二位。为保证恰当的过流保护状态ODLO应该总是保持为零。参见文献1的Overcurrent Detection section。 |
OCHI |
1 |
0 |
OCO两位输出状态控制位的第一位,参见参考文献1的Overcurrent Detection section. |
OCLO |
0 |
0 |
OCO两位输出状态控制位的第一位。为保证恰当的过流保护状态OLO应该总是保持为零。参见文献1的Overcurrent Detectionsection. |
其读写时序见参考文献1,传输时以字节为单位。每次传输时首字节为SLVEADDRESS——即从器件地址。对于不同种类的SMBus器件,该地址是固定的,在出厂时就已经固化到器件中。但也有一些器件可以通过地址端的不同接法选择该地址。MAX1660的SLAVEADDRESS是1000111,最后一位空出,用来选择读或写。其中0为读出,1为写入。第二个字节为命令字,从第三个字节开始是要读出或写入的数据。
命令字可分为两种:一为读命令,包括读计数寄存器和读状态字;一为写命令,包括写比较寄存器和写控制字。计数寄存器需要分两次读出,命令字为:0x82(低16位)、0x83(高16位);比较寄存器也要分两次写入,其命令字分别为:0x00(低16位),0x01(高16位);读状态字和写控制字的命令字分别为:0x84和0x04。需要注意的是:在读计数器时,当前供电状态决定了计数器中的数值是充电还是放电计数值。而且,更为重要的一点:在读计数器时两个命令必须连续执行且必须先读低位后读高位,如果中间夹有其他命令或顺序颠倒,在执行这个命令时Max1660就会当作读高16位的命令已执行而将计数器清零。
3. MAX1660的最大充电和放电电流
MAX1660本身不能控制电池充电电流,只能控制最大充电电流值和最放电电流值。它可以通过以下方法设定设定:
设定最大充电电流值:如图所示,
式中 ICHG,MAX即是最大充电电流值 VREF=2.0V。R5选择1MΩ左右的电阻。
1) 设定最大放电电流值:如图所示,
式中IDISCHG,MAX 为最大放电电流值,R3选择1MΩ左右的电阻。
4.应用MAX1660设计电量指示监控充电电路
本电路是作为一个便携式嵌入系统的附属电源模块设计的,由于系统成本限制,采用用了镍氢电池。Mam1660即可监控锂电池又可监控镍基电池,而其他类电池监控芯片大所为锂电池监控芯片,因此本系统采用Max1660来搭建系统。系统软件采用查询机制,其程序框图如图5。
系统力求精简,用51单片机控制。单片机通过SDA、SCA、INT三根线与MAX1660通讯线用于对发出中断信号,SCA、SDA分别为的时钟线和数据线。利用max1660的数字比较功能,程序设定一个电量值,每当电量计数器达到设定值时即对单片机发出中断,从而把单片机解放出来。计数值与电量的关系与敏感元件微电阻有关,微电阻越小则可测电流越小,但电流分辨率也越小,反之则可测电流值受限,而电流分辨率增大。
系统主要包括两部分:首先是通讯部分,主要是SMBus总线的驱动程序。这里参考了文献2中的I2C总线驱动程序,按照系统需求作了局部改动。程序包括启动、停止、发送应答、发送非应答、应答位检查、发送和接收等共9个函数。最后组成两个函数:SMBusReadWord和SMBusWriteWord。通过这两个函数即可实现SMBus总线的全部读写操作,实现对任何SMBus总线器件的控制。这两个函数的参数依次为:器件地址,命令字,读/写内容。
其次为主程序部分。如图5所示,当中断条件满足时,由max1660向单片机发出中断请求,单片机则读取max1660的状态字判断为何种中断,各状态字的定义如表1,部分中断功能可通过控制字关闭。然后对各种中断作相应处理。其中当前的供电方式可通过CHARGESTATUS读出。该位为1时为充电状态,为0时为放电状态。
文献1提供了一个简单的系统硬件原理图,只需在这个原理图上作简单的拓展即可使用。限于篇幅,无法将本系统的原理图详细列出,这里只作简单介绍:Max1660本身带有3.3V电源输出,但由于这里使用了51单片机必须采用5V电源,因此这一电源没有使用,而是在pack+和pack-之间接入7805来得到5伏的电源,而在用于整个系统时,其电源也应从这两端输出。
电量的显示最好通过LCD,调试阶段用LED较好,比较直观,同时易于排除问题。本系统在调试阶段用P1口输出电量状态指示,LED亮时表示充电已到该位,各灯逐次点亮,充满时全亮,放电时正相反。
结束语
本文介绍的基于SMBus的智能电池检测系统既可用于锂电池,也可用于镍基电池,对电池的要求较低,系统作为便携式仪器的电源解决方案在实际应用中已得到验证。系统运行可靠,功能强大显示直观,能够与其他功能协调工作。随着各种便携式电子产品的广泛应用,电池的智能化已成为一种必不可少的功能。因此本文所介绍的智能电池系统具有较强的实用性。