引言
对于多节蓄电池的电源管理系统,单体电池电压检测是关键的一部分,根据每个单体电池在充放电过程中的电压状态来对整组蓄电池进行保护。另外,蓄电池存在容量不尽相同的问题,为了使每个电池在充电完成之后都能达到满容量,就必须通过检测蓄电池电压来控制单体电池均衡充电。通常,电池电压检测专用芯片所监测的电池通道较少,而且不具备可编程控制。本监测系统的测量装置采用MAX11068作为数据采集接口芯片,以C8051F340单片机为检测主机,MAX11068与检测主机采用I2C总线通信。本文就MAX11068芯片的电压采集与过欠压保护功能,以及与主机进行I2C总线通信部分进行了研究与设计。
1 系统总体设计
整个系统从结构上可以分为三部分:C8051单片机基本应用部分、I2C总线通信部分和MAX11068电压采集部分。主要实现电池的实时电压显示,接收报警信号,控制整组电池充放电,过流过压保护功能;采用I2C总线通信,单片机对MAX11068寄存器进行读/写配置,读取电压数据;MAX11068对电池组电压循环采集,对通信故障、检测故障以及所有单节电池过充过放报警。
2 MAX11068外围电路与功能
MAX11068是一款可编程、高集成度、高压、12通道、电池监测智能化数据采集接口芯片,用于汽车系统、混合动力车、电动汽车及其他设备的多节串联可充电电池组。可监测多达12节锂离子(Li+)、NiMH电池,两路附加的模拟输入用于测量温度;具有高精度I/O口、±0.25%的电压测量精度。小于 5 mV失调电压;还有过压和欠压数字门限监测。电池监测线开路监测,高/低温数字门限监测;高度集成的电池监测器和高速I2C总线,支持SMBus串行链路通信[1]。
监测12单元蓄电池电压的MAX11068外围电路如图1所示。由于MAX11068集成电平转换器、I2C总线兼容SMBus总线接口,支持多器件级联,最多可级联31片IC,而单片MAX11068数据采集不能构成MAX11068级联因此MAX11068的两个I2C总线接口只需要其中一个工作即可。I2C总线上行接口是在级联时与上行MAX11068连接,所以单片时SCLU和SDAU两个引脚悬空即可,这里只用到下行I2C总线接口SCLL和SDAL两个引脚。同理,两路报警信号也只需使用ALRML,而ALRMU处于悬空状态。
图1 12电池监测 MAX11068外围电路
2.1 电压采集电路
MAX11068前端由12路电压测量数据采集系统组成,带有高压开关输入单元。所有测量值为电池两端的差分数据,满量程测量范围为0~5.0 V,0.5 ~4.7 V范围内确保稳定的测量精度。MAX11068采用二次扫描架构采集电池数据并对它们进行误差修正。扫描的第一阶段为数据采集,对所有12节电池的电压进行采样;第二阶段为误差修正,对ADC输入进行斩波,消除误差。通过上述两个步骤,能够在整个温度范围和复杂环境下获得优良的精度指标[1]。
电压采集接口电路如图1中的P0~P12所示。电路中每个单元都有RC滤波电路,其中电阻值的选取很大程度上取决于均衡电路的要求,电容值的选取应为ADC测量提供低通滤波功能。电容的取值范围一般为100 nF~1 μF。在P0和P1之间的第一单元E1所测量的电压值必须至少为500 mV,以确保其他所有的单元的测量精度。
MAX11068内部包含了一个高精度、低温度系数,内部参考电压被用来设置ADC满量程范围。REF引脚为内部参考电压输出,不驱动任何外部电路,将其通过一个1 μF的电容接地,在PCB布线时,这个电容尽可能地靠近REF引脚。
2.2 直流电源电路
MAX11068以其所检测的电池为直流电源,由DCIN引脚直接输入串联电池组的总电压,经过内部线性稳压器为MAX11068提供低压电源,这样可以保证输入电压为6~72 V时,芯片仍然能正常运行。由于线性稳压器为ADC和其他低电压电路提供的电源,为了保证优良的性能,DCIN引脚必须被正确去耦。如图1所示,将DCIN引脚与地之间连接1 μF的高电压、高精度的陶瓷电容C13,其中串联的二极管D4防止负瞬变期间DCIN去耦电容放电。MAX11068可以承受最大80 V的输入电压,为了避免外部更高的电压输入,需要用一个稳压二极管VD5作为保护。
2.3 芯片使能
通过MAX11068的SHDN引脚可以控制芯片处于正常工作状态或者休眠状态。当SHDN引脚输入电压低于0.6 V时,MAX11068内部线性调节器和振荡器关闭,使器件处于休眠状态。该引脚可以直接取电池电压,通过分压电阻和稳压管使其输入保持0.6 V以上,或者通过光耦连接到主控单片机的I/O引脚,使MAX11068受单片机控制。
2.4 过欠压检测及报警功能
MAX11068具有分析12单元中最高与最低单元电压功能,在充放电过程中将其与设定的过压和欠压阈值比较。在报警使能的情况下,当最高单元电压高于过压阈值时, MAX11068产生相应的过压报警标志;当电压低于过压阈值时,自动清除过压报警标志;当最低单元电压低于欠压阈值时,MAX11068产生对应的欠压报警标志;当电压恢复到高于欠压阈值时,自动清除报警标志。当报警标志产生后,报警信号通过ALRML输出,通过光耦隔离传输到主控单片机。图2为过压、欠压阈值图,其中过欠压阈值和清除阈值都可通过相应可编程寄存器设置[1]。
图2 可编程过压、欠压阈值图
2.5 I2C总线隔离通信
由于串联蓄电池组电压较高,在与主控单片机连接时必须采取隔离,以免共地或者电池电压错误输入单片机而造成单片机损坏。本系统采用ADuM1250双向数字隔离器,实现I2C总线信号的双向隔离通信,其应用电路如图1所示。ADuM1250是ADI公司推出的一款无锁存双向总线隔离器,并且支持热插拔。这从根本上解决了传统的光电隔离方案等分立元件实现双向隔离的问题,完全兼容I2C总线协议。
3 系统软件设计
软件部分主要由电压采集和SMBus通信两部分组成。单片机对MAX11068的内部寄存器的读写都会进入SMBus中断,实现相应的功能。
3.1 电压采集
图3 电压采集流程图
C8051F340单片机通过与I2C总线兼容的SMBus总线对MAX11068内部寄存器进行读写操作,实现对MAX11068的功能配置、电压采集以及数据的读取。图3为电压采集流程图。
流程具体步骤如下:
① 读取MAX11068的I2C总线地址寄存器ADDRESS(0x01),由于只有一片MAX11068,需要改写该地址,使该片成为第一片也是最后一片;
② 读取状态标志寄存器STATUS(0x02)包括过压、欠压状态、通信故障状态等;
③ 配置ADC配置寄存器ADCCFG(0x08)包括报警使能、采集控制、过欠压报警标志等;
④ 配置单元测量使能寄存器CELLEN(0x09),使能12通道测量;
⑤ 配置故障分析和控制寄存器FMEA(0x0E),包括过欠压报警使能,引脚开路报警使能等;
⑥ 设置过压、欠压阈值,过压、欠压清除阈值(0x18,0x19,0x1A,0x1B);
⑦ 读取12通道电压值和最高、最低和总电压值(0x20~0x2B, 0x11~0x12,0x10)。
3.2 SMBus通信
SMBus数据包括一个起始条件(START),一个字节地址(位7~1为7位从机地址,位0为R/W方向位),一个或多个字节的数据和一个停止条件(STOP)。每个接收的字节都必须有确认(ACK)。如果接收器件不确认,则发送器件读到“非确认”(NACK)。
对MAX11068寄存器数据的读写采用SMBus传输,单片机工作在主方式,作为主发送器和主接收器。在主发送器方式,SMBus接口首先产生一个起始条件,然后发送含有目标地址和数据为“写”的方向位,主发送器接着发送一个或多个字节的串行数据。每发送一个字节后,从器件发出确认位。当产生一个停止条件后,串行传输结束。在主发送器方式,“数据字节传输结束”中断发生在ACK周期之后;在主接收器方式,数据方向位为“读”,然后接收来自从器件的串行数据,每收到一个字节后软件必须写ACK位,以定义要发出的确认值(写1产生ACK,写0产生NACK)。软件在接收到最后一个字节后向ACK位写0,以发送NACK。在主接收方式下“数据字节传输结束”中断发生在ACK周期之前[2]。
对MAX11068读写即为C8051F340工作在主方式,时序如图4所示,流程图如图5所示。
图4 典型的主发送器时序和主接收器时序
图5 SMBus通信中断函数流程图
结语
12通道数据采集系统实物电路板和采集电池电压如图6所示。
图6 监测系统实物图和采集结果
实验结果显示,所采集的电池电压具有很高的精确度,能完全实现多路数据的采集,特别对于蓄电池组,具有更加良好的监测及保护性能。目前,该监测方案已经应用于矿用应急电源蓄电池组电源管理系统,具有较高的可靠性和实用性。