赞
踩
1.电池参数(电池规格书会提供 )
vbat 电池闭路电压
ocv 电池开路电压
常见的手机电池截止充电电压 4.20 V 4.35V 4.40 4.5V(比如4.2v的电池,软件上设置的充电电压一般为4.2v,充电时候量电池电压,一般就是实际的电池电压,充电ic的输出电压跟随电池电压动态变化,直到电池电压达到4.2v)
电池容量 电池储蓄电荷的能力 电流对时间的积分 如某块电池的容量是4200/4280(min/typ)mAH
放电时间 假设是4000maA的电池 以1000mA的电流恒流放电,完全放完理论需要4000/1000=4h
最大充电电流 电池支持的的最大充电电流 假设是0.5C5A,电池容量为4200maA,最大充电电流就是4200*0.5=2100mA
截止充电电流 充电电流小于某个值,电池截止充电 假设是0.02C5A,电池容量为4200maA,截止电流就是4200*0.02=84mA
所以充电电流达不到预设的电流时,注意下电池的最大充电电流,还有电池的电压(电压越高,电池能吸收的电流就越低)。
2.电池电量计算方式
A.根据电压与容量关系(zcv曲线),通过开路电压计算出电池容量
B.电池快速放电时,由于锂离子的特性(需要放置一段时间),测量出ocv不能准确的反应出实际的ocv,导致算出的电池容量不准。所以另一种方案是库仑计计算电量。开机时,通过zcv曲线或rtc记录的电量作为初始电量,通过接在电池负极的库仑计计算流入/流出的电量,算出实际的电量。库仑计可以简单的理解为可以对电流进行积分的一个模块。如下图,通过对电阻的电流进行时间积分,算出电量。
3.充电ic常见参数
OREG/充电电压 不同电压的电池需要设置相应的充电电压,否则电池会充不满
Charge Current Limit/充电电流限制,根据贴的电阻(一般两种可选)不同,设置不同的充电电流
Termiation Current Limit/截止充电电流 随着电压的上升,充电电流会下降 ,低于某个值可以认为充满了点
ISAFE 安全充电电流(某些ic不一定有)
ISAFE 安全充电电压(某些ic不一定有,如果有需要设置,否则设置OREG无效)
充电ic的dpm(动态电源管理)
为了满足USB规范中的最大电流限制并避免过度加载适配器,该器件具有动态功能电源管理(DPM),持续监控输入电流和输入电压。
当输入源过载时,电流超过输入电流限制(REG00 [2:0])或电压低于输入电压限值(REG00 [6:3])。 然后,器件将充电电流降至输入电流
低于输入电流限制,输入电压高于输入电压限值。
当充电电流减小到零,但输入源仍然过载时,系统电压开始下降。 一旦系统电压低于电池电压,设备将自动进入补充BATFET开启且电池开始放电的模式,以便系统得到支持输入源和电池。
4.线性充电
有些pmic集成有线性充电电路,如展讯的sc2721G,系统框图如下
通过调整R2的阻值,动态调整充电电流
充电电流变化图
5.开关充电
常见的芯片
bq24296规格书BQ24296 Datasheet(PDF) - Texas Instruments
fan54015,规格书FAN54015 Datasheet(PDF) - Fairchild Semiconductor
通过ILIM引脚的下拉电阻限制最大充电电流或R sense来选择充电档位,通过i2c来控制实际的充电电流,通过CE/DISABLE脚来控制充电。
6.线性充电与开关充电对比
线性充电在功能机或者小电池容量的设备上比较常见,开关充电在智能机上易见。
参考我应该使用线性充电器还是开关充电器? - 电源管理 - 技术文章 - E2E™ 设计支持
7.手机充电ic调试
手机充电ic(一般只有7个寄存器)调试比较简单,主要包括设置充电电压和充电电流。不同ic的充电电流等级有差异,需要进行适配。对于充电电流不达标的情况,确认相应的寄存器已配置成功,有安全寄存器的,要确认配置的电流值不高于安全寄存器里的值。调试过一款安全寄存器无法通过软件复位的充电ic,由于手机重启或者关机,充电ic都是供着电的,只有通过拔电池才能重新配置该寄存器。还不达标的,确认下当时电池的电量是否过高,充电器的输出能力,充电线的影响,充电时的温度(是否温度过高进行了限流)等情况。,
比如调试一款充电ic时,发现充电电流只有1.5A,设置的电流为2A,将充电ic所有寄存器值都打印出来,没发现异常。发现电池的引线有点长,将引线弄短一点,电流能达到1.7A。这时量到vbus的电压只有4.6V,应该是充电线阻和手机上的fpc引起的。但充电线已经比较好的了,没什么优化空间。这时,可以软件上设置非标准充电跟标准充电一样的电流,然后将手机的VBUS和GDN焊线出来,然后用稳压电源给手机充电,查看稳压电源里的电流值(充电电流),看能否达到标准值。如果充电电流正常,然后减低电压值到量到的电压值,再看下充电电流。对比下,就能确定是不是vbus电压太低引起充电电流过小。
如果5v(vbus)是通过fpc连接到手机上的,注意fpc上的线有没有特意加粗,如果没加粗,会导致充电电流小。
对于调试复杂的充电问题(如有两个充电ic) ,因为充电时,是无法连接adb的,但可以在串口里输入或者使用无线adb。先看下充电ic的驱动,然后实现reg接口,然后实时查看或者寄存器的值。
- static ssize_t bq2560x_reg_show(struct device *dev,struct device_attribute *attr, char *buf)
- {
- u8 reg_val;
- int ret;
- int i;
- int len=0;
- struct i2c_client *client = container_of(dev, struct i2c_client, dev);
- struct bq2560x_charger_info *info= i2c_get_clientdata(client);
- for(i=0;i<0xc;i++){
- ret = bq2560x_read(info, i, ®_val);
- len+=sprintf(buf+len, "reg %x=0x%x\n", i ,reg_val);
- }
-
- return len;
- }
-
- static ssize_t bq2560x_reg_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
- {
- u8 reg,data;
- char *buffer[6];
- char *options;
- int i=0;
- int ret;
- struct i2c_client *client = container_of(dev, struct i2c_client, dev);
- struct bq2560x_charger_info *info= i2c_get_clientdata(client);
- pr_info("buf=%s count=%d role=%d\n",buf,count,info->role);
- options = kstrdup(buf, GFP_KERNEL);
- if (!options)
- return -ENOMEM;
- while((buffer[i++] = strsep(&options, " ")) != NULL);
- if(i!=3){
- pr_info("i=%d %s %s %s\n",i,buffer[0],buffer[1],buffer[2]);
- return -EAGAIN;
- }
- reg=simple_strtol(buffer[0],0,0);
- data=simple_strtol(buffer[1],0,0);
- pr_info("data=0x%x reg=0x%x",data,reg);
- ret = bq2560x_update_bits(info, reg , 0xff , data);
- return count;
- }
-
- static DEVICE_ATTR(bq2569x_reg, S_IRUGO | S_IWUSR, bq2560x_reg_show , bq2560x_reg_store);
-
- static struct attribute *bq2560x_attrs[] = {
- &dev_attr_bq2569x_reg.attr,
- NULL,
- };
-
- static const struct attribute_group bq2560x_attribute_group = {
- .name = "bq2560x",
- .attrs = bq2560x_attrs,
- };
-
- i2c_set_clientdata(client, info);
- ret = sysfs_create_group(&dev->kobj, &bq2560x_attribute_group);
- if (ret){
- dev_err(dev, "failed to register bq2560x sysfs\n");
- return ret;
- }
个人推荐使用无线adb的方式无线adb调试_Android开发-CSDN博客
当然有个更好的方式,定时打印充电ic寄存器的值,如
- void dump_bq2560x_reg(void){
- int i;
- int tmp;
- unsigned char reg_val[20];
- if(master_charger_info!=NULL){
- for(i=0;i<0xc;i++){
- bq2560x_read(master_charger_info, i, ®_val[i]);
- if(i==8){
- tmp=(reg_val[8]&0x18);
- if(tmp==0x11){
- pr_info("master charger full\n");
- }
- }
- }
- print_hex_dump(KERN_DEBUG,"reg_m:",DUMP_PREFIX_NONE,16, 1,reg_val,0xc,0);
- }
- }
- EXPORT_SYMBOL(dump_bq2560x_reg);
8.手机充电电流流向图
12.电池无法充满电
电池无法充满电,检查下满电条件,一般很容易发现问题。
遇到一款充电ic(sgm41511)不支持4.2v充电的情况,接近4.2v的充电电压有4.176v和4.208v,dts设置4.2v,程序上计算出的电压为4.176v,这个一般不容易发现,需要打印充电ic的寄存器才能发现问题。
13.充电ic并联
为了散热或者提供充电电流,会有充电ic并联的情况,注意sys只需要接一路,两个充电ic的sys不要短路在一起,否则会出现两个充电ic相互影响的情况。(A和B两个网络只需一路连接到系统)
14.手机电池形态
单电芯:可用于67w的快充项目
电芯串联: 80w以上的快充项目
电芯并联:折叠屏结构问题,用在折叠屏比较多
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。