钜大LARGE | 点击量:1263次 | 2020年03月18日
电池管理及监控设计介绍
1.前言
随着信息技术的飞速发展,移动终端设备如手机、pDA、掌上电脑等产品正越来越多地得到广泛使用。加上目前移动终端设备的处理器性能不断提高、无线应用程序不断新增、图形功能越来越先进。功能上的新增,导致了移动终端产品的功耗越来越大;因此,对电池的提出了更高的性能要求,尤其体现在电池的管理方面,其中包括电池的充电管理和电池的监控,这是嵌入式产品开发中必须考虑的问题。
2.电池管理芯片介绍
2.1.电池充电管理芯片bq24032A
电池管理芯片bq24032A支持USB充电和AC充电方式。通过bq24032A对电池进行充电。此芯片供应整个系统的电源输出。其中电池管理芯片bq24032A的VBAT接于电池监控芯片bq26220的VBAT引脚。pSEL为电源选择端口,可以用于选择由那种输入电源作为主输入电源(USB或AC)。假如主输入电源不可用,系统将自动采用第二种输入电源进行输入,电池输入作为最后的选择,当USB或AC电源不存在时才选择使用电池作为供电源。pSEL被设置为低时,USB被选择为主输入。下图1为电池管理芯片bq24032A及其外围电路图:
3.电池驱动模型和驱动初始化过程
WindowCE中包含的样本设备驱动程序分为两种类型:单片驱动程序(Monolithicdevicedriver)和分层驱动程序(LayeredDevicedriver)。采用分层开发模式可以降低开发难度,缩短开发周期,在电池驱动开发中使用分层驱动开发模式。
分层驱动程序由两个独立的层组成:上层是模型设备驱动程序(MDD),下层是依赖平台的驱动程序(pDD)。设备驱动程序服务器供应的接口(DDSI)是在pDD中实现的函数集,并由MDD调用。由于微软供应了所有与MDD模块相关的源代码,所以对这部分不用做任何改动,只需将自己的pDD模块与MDD模块链结成一个公用库即可。MDD通过IoCTLS调用pDD中的特定函数来访问硬件的具体特性。
WindowsCE电池驱动要求的MDD函数包括:
Init、Deinit、Open、Close、Read、Write、Seek、powerDown、powerUp、IOControl。
WindowsCE电池驱动要求的pDD函数包括:
BatterypDDInitialize、BatterypDDDeinitialize、BatterypDDGetStatus、BatterypDDGetLevels、
BatterypDDSupportsChangeNotification、BatterypDDpowerHandler、BatterypDDResume。
电池驱动初始化过程
在系统上电自检成功后,上层调用电池驱动入口函数,进行电池驱动初始化工作:
(1)判断是否已经进行中断事件初始化,假如没有初始化,则进行下面的操作,假如已经进行了一次初始化,则关闭事件句柄。
(2)初始化电池全局变量。
(3)假如中断事件成功,则调用ResumeThreadproc创建电池线程。在线程的主调函数中,设置电池线程的优先级,然后在循环中等待中断事件。
(4)调用pDD层的初始化函数BatterypDDInitialize;在pDD层中,为GpIO寄存器和电源管理寄存器开辟两段虚拟内存。
(5)初始化AC97的寄存器。
(6)初始化存放电池电量值的环形缓冲区。
(7)调用BatteryApIGetSystempowerStatusEx2函数更新电池电量结构体pSYSTEMpOWERSTATUS_EX2中的数据。
4.BatteryApIGetSystempowerStatusEx函数
BatteryApIGetSystempowerStatusEx函数重要获取系统电源状态值。在执行过程中是通过调用BatteryApIGetSystempowerStatusEx2函数来完成的。而BatteryApIGetSystempowerStatusEx2函数调用BatterypDDGetStatus函数以获取电池状态信息,BatterypDDGetStatus函数通过调用GetMainBatteryVoltage获取主电池电压值,通过调用GetpowerDevStatus获取电池设备状态,并获取剩余电量的比例值。下图3为BatteryApIGetSystempowerStatusEx函数调用关系图:
5.CalcMainBatteryVoltage获取电池电压值
6.电池电量计算方法
原来电池电量百分比显示的其实是电压百分比。可是硬件方面测试发现,电池电量和电池电压并非成简单的线性关系,因此要分区间进行百分比的转换校正。常温下,我们设备获得的电池电压和电量曲线大致如下(图5):
在驱动程序中创建了一个为16个字长度的环形缓冲区,采样点数新增为16个,这样可以新增对采样结果的可靠性。电池电压采样值even_samp为16个采样值的和去掉一个最大值和一个最小值后再取平均值。
在我们的移动终端设备中,电池的最大电压为559(4.10V),最小电压为455(3.30V),以图5中的两条虚线作为区间的分界线,可分为4.10V~3.80V,3.80V~3.60V,3.60V~3.30V这三个区间,对电池电压值进行分区间的处理,三个区间上的曲线斜率近似为:
4.1V~3.80V:Kl=(100-70)/(4.10-3.80)
3.80V~3.60V:K2=(70-20)/(3.80—3.60)
3.60V~3.30V:K3=20/(3.60-3.30)
4.10V~3.30V:K=100/(4.10-3.30)
在进行电池电量百分比的转换时,当我们获得在559~455区间内的采样值后,首先获得原来的百分比值voltage_percent=(even_samp-455)*l00/(559-455)。然后针对不同的区间进行相应的调整,得到的电量百分比分别为:
4.10V~3.80V:voltage_ercent+=(4.10-even_samp*7.5/1024)×(K-K1)
3.80V~3.60V:voltage_percent+=(3.80-even_samp*7.5/1024)×(K-K2)
3.60V~3.30V:voltage_percent-=(even_samp-3.30V*7.5/1024)×(K-K3)
通过对以上三个区间的分别处理,这样就获得了相对正确的电池电量。
7.小结
本文介绍了在WindowsCE系统中,基于电池充电管理芯片bq24032A和电池监控芯片bq26220芯片的电池驱动的实现。重要介绍了电池电压的获取和电池电量的计算方法。对电池管理供应了很好的借鉴。
上一篇:电动汽车蓄电池维修知识问答
下一篇:简易电池自动恒流充电电路的设计