首页 > 范文大全 > 正文

一种新型电源管理模块的设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇一种新型电源管理模块的设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:本文提出一种新型电源管理模块设计,分别从硬件和软件方面介绍了其设计和调试方法,该设计是基于BQ24165和BQ27510的功能特点,并根据锂电的充电需求,结合其强大的电源管理功能,对基于BQ24165和BQ27510的电源管理模块进行设计。此设计充电部分是硬件充电,无需软件支持,这在目前还是很少应用的,实践证明此设计的稳定性更好,效率大大提升,此设计具有一定的实用性和先进性。

关键词:电源管理 硬件充电 BQ24165

中图分类号:TM912 文献标识码:A 文章编号:1007-9416(2012)10-0170-03

1、简介

随着科技的发展,手持设备被越来越广泛的应用。手持设备的可携带性,方便用户的使用,使众多电子产品向手持上面发展,必然带来锂电池的充电和电量计量的问题。手机,平板,便携式媒体播放器,Netbook和便携式互联网设备必然有一个电池的充电电路以及可以显示当前电量的计量电路。当前大多的电源管理模块是需要复杂的软件调试,并且稳定性和效率不高,本文基于两种高性能的BQ24165和BQ27510设计了电池充电和电量计量模块,充电部分是硬件充电,无需软件调试,应用起来更加方便简单,稳定性和效率更好,所以对基于BQ24165和BQ27510进行研究和设计。

2、芯片简介

本设计中充电电路芯片选用了TI的高性能的BQ24165,BQ24165是高度集成的单节锂电池充电和系统电源供用的芯片。主要用于空间受限的便携式应用,高容量电池管理设备。电源的供用允许双输入操作,USB端口或者电源输入(即AC适配器或无线充电输入)。此芯片还具有对充电的实时监控的功能,当系统负载需要输入上限电流的时候,充电器芯片会实时的降低充电电流,并允许进行适当的充电终止的定时器操作。支持系统需求调节电池充电电压,但是系统电压不会低于3.5V。这个最小系统电压支持,使得系统可以在电池电压低和空缺电池的时候正常工作。其2.5A的输出电流能力可以满足大容量的电池快速充电。该电池充电分为三个阶段:调节,恒定电流和恒定电压。此芯片是硬件充电,可以通过压降判断USB线还是适配器。

本设计中用的电量计是TI出品的高性能BQ27510,其是单个锂电池燃料计量的一个微处理器,该设备需要很少的系统微控制器的固件开发,通常于计量一个可嵌入式电池或者可拆卸电池。此芯片采用开路电压和库仑计量的方式,在电池未使用的时候可以使用开路电压的方式去估算可充电锂离子和锂离子聚合物电池的可用电量。当基于OCV时可以通过查表的方式确定可用的电量,由于电池电量会有不同,因此必须把电池电量进行精确计量。当电池进行高速放电时,无法使用OCV计量,这时就需要用库仑计量方法计量电池剩余电量。此芯片还支持测量电流,电压和温度的数据的功能。

3、典型应用硬件电路设计

4、BQ24165硬件电路设计

BQ24165在输入电源的选择上,可以选择IN端口也可以选择USB端口,这两个端口是相互独立的,只可以用到其中的一个电源输入端口,本设计中选择的输入端口是IN端口,主要从两个方面考虑,一是IN端口的过流能力强,二是从布局上面IN的PIN脚更加集中好布线。对于一个充电芯片,我们最关心的是其输出电流的能力,输出电流的能力越强,就说明此芯片的功能越强大,BQ24165最大的输出能力是2.5A,这个充电能力对比普通的700mA充电改进了很多,这也是这个芯片功能强大之处。具体电流的选择可以通过ISET管脚编辑,在本设计中选取了1.55A的最大输出电流,相应的电阻是240Ω。这个充电电流的大小是要根据锂电池容量和电芯等综合因素考虑的,过大对电池寿命有影响,会使电池过快的固化,过慢的话不方便使用,综合考虑选择最佳的电流是很重要。电流上限的设置可以通过ILIM的电阻设置,但是这个大小只可以在1A到2.5A改变。由于适配器和USB充电的差异,传统上面我们通常用软件的方法判断是适配器还是USB口,此芯片是纯硬件充电,是用压降的办法判断连接是适配器还是USB口,这是个很特别很好的改进,更加方便了调试。这个压降范围的选择是本设计中的难点,压降范围过小会使芯片把适配器认为是USB接口,使充电电流太小,若压降范围过大会使USB默认为适配器,充电电流会很大,因为USB通常输出电流不能超过500mA,所以若充电超过500mA会导致电脑死机。在最初调试时,选用了适配器和数据线分离的充电设备,由于适配器和数据线连接处的电阻过大,传输线上面的压降很大,到芯片的电压大概是4.2V到4.4V,根据这个数据应用公式

计算出R2选取200Ω即可(R1选330Ω),配置好后用适配器充电电流可以达到1.5A左右,但是由于压降过大又带来了新的问题,由于USB口和数据线的连接处的电阻也很大,所以芯片把USB口误判断是适配器,这时用USB口充电由于电流大于500mA,会导致电脑死机。根据连接处的电阻过大的问题,可以用一体式适配器解决,由于一体式充电器适配器和数据线不是分开的,所以一体式适配器的电阻很小,从而传输中的压降会相对小,到芯片的电压大概在4.6V到4.7V,计算出R57选取90Ω即可,在这种情况下芯片会把压降在4.6V以上判断是适配器用大电流充电,最大充电电流达到1.5A,USB口压降到4.3V左右,在4.6V以下芯片可以判断为USB口,这时的充电电流大概在400mA,到此这个压降的问题得到很好的解决。

5、BQ27510硬件电路设计

BQ24165的始能端在设计中选取了BQ27510的输出端口,只有在BQ27510正常工作下,BQ24165才能工作。这样设计的目的是为了把充电芯片和电量计正好的联系在一起,在充电进行前电量计会先工作起来,当电量计工作起来后,此管脚的是低电平,低电平时充电芯片工作,充电芯片的输出端口BAT_G和电量计的检测端口BAT连接在一起,这样在充电的同时可以实时监控电池的电量,此时电量计应用库仑的计量方法计量电池的电压,具体原理是电量计可以通过电流感测SRN和SRP两端的电阻进行库仑计量测,并且把数据通过I2C传出,完成电量的计量,而在不充电的时候,电量计也是通过管脚实时的测量电压的值,再通过查表的方法显示剩余电量。为了能更准确的测量电量还需要将电池进行计量,计量就是根据实际的电池的电量调整软件,这样可以更精确的显示剩余电量,电量计对电池是否存在是通过BI管脚判断的,其判断的原理是根据电池有内阻,并且内阻大概在一定的范围内,这样通过BI管脚检测到是否有内阻存在判断电池是否存在。

关于指示灯的设计,指示灯可以用两个双MOS管设计,红灯显示充电,绿灯显示充满。

6、软件设计

Linux的电源子系统主要包括两部分:核心层和驱动层,其主要功能是从电源驱动获取信息(包括电量,类型等),然后报告给应用层。

简单地说,当电源状态(如电量、电源类型)发生改变时,驱动层通过power_supply_changed函数通知核心层,核心层调用驱动提供的get_property函数获取驱动所支持的属性值,然后通过uevent机制把信息传给用户空间程序。至于如何使用这些信息,是用户程序的任务。从驱动层来看,主要工作就是两项:(1)当合适的时机调用power_supply_changed。合适的时机有两类,对于电池类电源,一般需要周期性报告电量;对于可插拔电源,如适配器、USB需要由中断触发。(2)实现get_property函数。 这通常需要访问硬件寄存器,获取相应的属性值,并转化为核心层要求的度量单位。

驱动实现主要步骤包括:

(1)定义一个struct power_supply 结构体,并给其中的一些关键成员赋值。

struct power_supply {

const char *name;

enum power_supply_type type;

enum power_supply_property *properties;

size_t num_properties;

char **supplied_to;

size_t num_supplicants;

int(*get_property)(struct power_supply *psy,

enum power_supply_property psp,

union power_supply_propval *val);

int(*set_property)(struct power_supply *psy,

enum power_supply_property psp,

const union power_supply_propval *val);

int(*property_is_writeable)(struct power_supply *psy,

enum power_supply_property psp);

void(*external_power_changed)(struct power_supply *psy);

void (*set_charged)(struct power_supply *psy);

/* For APM emulation, think legacy userspace. */

int use_for_apm;

/* private */

struct device *dev;

struct work_struct changed_work;

};

其中斜体项是驱动必须实现的。最主要有type、

power_supply_property *properties 和get_property()。

Proerties 指针指向该power supply可以支持的属性,例如BQ27510支持如下属性。

static enum power_supply_property bq27x00_battery_props[] = {

POWER_SUPPLY_PROP_STATUS,//电源状态charging,discharging

POWER_SUPPLY_PROP_PRESENT, //电源是否存在

POWER_SUPPLY_PROP_VOLTAGE_NOW, //瞬时电压,μV

POWER_SUPPLY_PROP_CURRENT_NOW,//瞬时电流,μA

POWER_SUPPLY_PROP_CAPACITY,//剩余电量%

POWER_SUPPLY_PROP_CAPACITY_LEVEL,//电量等级

POWER_SUPPLY_PROP_TEMP,//温度

POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,//以当前的放电速度估算,剩余可用时间

POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,//以历史平均的放电速度估算,剩余可用时间

POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,//以当前的充电速度,电池充满剩余时间

POWER_SUPPLY_PROP_TECHNOLOGY,//电池类型,

POWER_SUPPLY_PROP_CHARGE_FULL,//电池充满时的电量(单位μAh)

POWER_SUPPLY_PROP_CHARGE_NOW,//当前电量(单位?Ah)

POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,// 设计的充满电量(单位μAh)

POWER_SUPPLY_PROP_CYCLE_COUNT,//所经历的放电循环数

POWER_SUPPLY_PROP_ENERGY_NOW,//当前电量(单位μWh)

};

Get_property()函数提供获取某个属性的值的方法,这一般需要通过电源管理芯片的接口驱动(例如i2c驱动)从芯片读取。具体发什么命令,来获取这些属性,可以参数数据手册,这里不予详述。

(2)调用int power_supply_register(struct device *parent, struct power_supply *psy)注册这个power supply。

这个函数一般放在某个父设备的probe函数进行,对于挂载在i2c总线的设备,就在该设备的i2c驱动的probe函数调用,对于一些没有明确挂载总线的设备,如USB插拔中断的产生设备可能是完全硬件行为,可以把父设备定义为platform设备,在它的驱动probe中注册power supply。

(3)对于battery,为了能周期性给用户上报电量,一般需要定义一个delayed work,如在bq27x00.c中:INIT_DELAYED_WORK(&di->work,bq27x00_battery_poll) 定义delayed work; 在work bq27x00_battery_poll中从硬件更新电量到内存缓冲区,然后调用power_supply_changed()触发core层更新属性,最后用schedule_delayed_work再次延迟调度这个work对于USB,Mains类的charger电源,通常只需上报POWER_SUPPLY_PROP_ONLI

NE属性,故在中断处理函数/线程调用power_supply_changed()即可。

7、结语

本设计是一种新型的电源管理模块,介绍了硬件电路设计和软件的调试,给出了典型电路的设计方案,此模块更易调试,更稳定,成本更低,在现实测试发现此设计具有充电快速,电量显示准确,发热量低等特点,相信在以后的终端设备上面会有广泛的应用。

参考文献

[1]贾英江,傅孝忠,王耀济 等.锂电池充电方法分析[J].科技资讯,2009(2);123.

[2]梁伟,王建华,卢刚.基于BQ24032的锂电池充电管理电路设计[D].兵工自动化,2010(6);29.

[3]张学海.具有高适应性的锂离子电池充电器IC的研究与设计[D].成都:电子科技大学微电子与固体电子学院,2007.

[4]凌振宝,曹双兰,常乐 等.具有检测电池容量功能的充电器设计[J].吉林大学学报:科技出版社,2010,28(1);100-105.

[5]高岩,潭玲生.锂离子电池组充电概述[J].电子元器件资讯,2008,(11);56-58.