Battery学习文档.docx

上传人:b****7 文档编号:8912395 上传时间:2023-02-02 格式:DOCX 页数:23 大小:1.39MB
下载 相关 举报
Battery学习文档.docx_第1页
第1页 / 共23页
Battery学习文档.docx_第2页
第2页 / 共23页
Battery学习文档.docx_第3页
第3页 / 共23页
Battery学习文档.docx_第4页
第4页 / 共23页
Battery学习文档.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

Battery学习文档.docx

《Battery学习文档.docx》由会员分享,可在线阅读,更多相关《Battery学习文档.docx(23页珍藏版)》请在冰豆网上搜索。

Battery学习文档.docx

Battery学习文档

Battery学习文档

一:

电池系统架构

电池系统工作流程:

驱动不停的把电池系统相关信息写入相关文件,然后上报。

上层监听到后读取文件。

涉及到的文件较多,比如读取

/sys/class/power_supply/battery/BatterySenseVoltage可以获取电池电压

/sys/class/power_supply/battery/ChargerVoltage可以获取充电器电压

/sys/class/power_supply/battery/batt_tem可以获取电池温度等等。

要理解电池系统架构需要需要解决三个问题:

1.相关文件是如何建立的?

2.是什么触发驱动更新文件内容以及驱动是如何上报的?

3.用户空间是如何读取文件里面的信息的?

电池系统文件建立

电池系统架构基于linuxkernel,相关code在

kernel/drivers/power/*.*

MTK客制化相关的code放在了

kernel/drivers/power/mediatek/*.*

kernel-3.18/drivers/misc/mediatek/power/mt6580

支持的文件:

Include/linux/power_supply.h

Kernel/drivers/power/power_supply_sysfs.c

在kernel/drivers/power/mediatek/battery_common.c

是/sys/class/power_supply/battery文件夹下面支持的文件

文件默认只读,要支持写操作,需要实现

int(*property_is_writeable)(structpower_supply*psy,enumpower_supply_propertypsp);

文件建立:

power_supply_register(&(dev->dev),&battery_main.psy);

信息上报:

staticvoidbattery_update(structbattery_data*bat_data);

BAT_thread();

BAT_thread()的触发条件:

10s的定时器

battery_update函数里面会完成写文件和通知上层两个功能,写文件就是更新bat_data->XX.上层读取的时候就是读取这些数据,当所有的数据更新完毕调用power_supply_changed()函数上报:

power_supply_changed()→schedule_work()→power_supply_changed_work()→

kobject_uevent()

上层读取文件

当上层监听到底层的上报信息后,读取文件的时候通过一些列调用最终会调用到Power_supply_sysfs.c的power_supply_show_property()函数。

该函数最终会调用psy->get_property(psy,off,&value)完成读取功能

二:

监控原理

充电原理

充电是软硬件协同完成的。

软件主要完成监控功能。

硬件完成充电的主要工作。

软件的监即监督,就是时刻测量充电参数,比如电池电压,充电电流,电池温度等。

控即控制,用的最多的控制就是使能,禁止充电,设定充电电流大小。

MTK平台充电有分为两种linear充电switch充电两种:

linear充电:

硬件上使用MTK的PMU充电,硬件成本低,充电电流小,转换效率不高。

switch充电:

硬件上使用外挂充电IC常用的有TIBQ24296,增加额外的硬件成本充电电流大,充电效率高。

VBUS:

USB线正极或者AC充电器的正极。

VCDT:

充电器电压检测脚。

ISENSE:

检流电阻正极。

此方案的检测电阻为220毫欧。

BATSNS:

检流电阻负极。

VBAT:

电池正极引脚。

BAT_ON:

电池NTC(热敏电阻)引脚。

用于电池是否在位检测,以及电池温度检测。

通过battery_meter_ctrl读取PMIC的寄存器直接可读到V-batsns、V-isense、VCharger、Vbat_temp

1,一部分流向电池,一部分流向系统.

2,充电的时候调节VDRV,通过调节三极管的be端电流可以控制流过ce端的电流从而实现充电电流大小的设置。

Rsense检流电阻:

对于软件来说可以测量充电电流的大小:

电流计算方法:

(ISENSE–BATSNS)/Rsense.

signedintbattery_meter_get_charging_current(void);

线性充电过程

CHR_PRE预充状态小电流充电激活电池

CHR_CC恒流充电充电过程中电流恒定电压不断上升

CHR_TOP_OFF(switch充电BB没有这个状态)恒压充电,电压基本不变,电流缓慢下降

CHR_BATFULL电池充满

CHR_ERROR异常状态,关闭充电

这几种状态的转换关系如下

预充电阶段,设置充电9s,停止1s。

当电压大于3.4V时,就会进入恒流充电阶段。

恒流充电阶段,设置充电9s,停止1s。

当电压大于4.25V时,就会进入topoff充电阶段。

TOPOFF充电阶段,没有了充9s停1s的设置。

此阶段会通过两个判断条件(充电电流是否连续6次小于截止电流和恒压充电时间是否大于3小时),来判断电池电压是否充满。

二次回冲阶段,充满后二次回冲电压小于4.25V时,会启动二次回冲。

充电hold状态,MTK做了一个功能,当充电时打电话,此时电压若大于3.8V,则会暂停充电,进入hold状态。

当电压小于3.8V时,会启动充电。

从而减小发热。

三:

电量检测原理

两种电量测量方法

1.开路电压法。

电池在开路状态下电池容量与电压具有一定的关系,计算出电压查表可以得到容量

优点:

简单,可以计算初始电池电量

缺点:

需花30分钟以上等待电压回升

开机的时候利用开路电压法得到电池电量初始值

算法原理:

在cust_fuel_gauge.h中定义了四种温度下电池开路电压与电池剩余容量的对应表格,如下:

battery_profile_t0[]//-10度

battery_profile_t1[]//-0度

battery_profile_t2[]//25度

battery_profile_t3[]//50度

软件计算电池温度和开路电压。

比如计算当前温度是40读,则会根据25度和50度的表格插值生成一个40度的开路电压与电池剩余容量的表格。

然后根据开路电压查找40度表格就可以计算出当前的电池容量。

2.积分法:

电流法

优点:

适用于各种电池

缺点:

初始电量无法获取

PMU内部集成积分电路。

通过读寄存器然后计算可以得到流入流出电池的电量,然后校准后得到最终的电量。

dvalue_CAR=((dvalue_CAR*CAR_TUNE_VALUE)/100);

CAR_TUNE_VALUE是客制化的校准参数,用于电量/电流校准。

电量百分比算法如下:

((gFG_columb*100)/gFG_BATT_CAPACITY_aging);

3.电量计

硬件FuelGauge(电压法+电流法),

软件FuelGauge(电压法)

五常见问题:

5.1修改充电电流

kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_charging.h

分别对应USB充电标准充电器非标准充电器

USBchargingcurrent默认使用500mA电流档位,根据硬测和客户需求更改.

AC(AdapterCharger)充电电流默认1000mA,可灵活克制化,根据硬测和客户需求更改.

NON_STD_AC_CHARGER_CURRENT默认使用500mA电流档位

充电器分为3种分别是USB充电器,标准充电器,非标准充电器。

USB充电器,D+,D-会有15K的下拉电阻,

标准充电器,D+,D-短接,

非标准充电器,D+,D-悬空。

MTKBB芯片内部,D+有1.5K上拉电阻,D-有100K上拉和15K下拉,根据需要选择。

当充电器插入后,MTK芯片内部会打开D-线上的100K上拉电阻,检测D-的状态,D-为低电平,则为USB充电线,因为有15K下拉的缘故。

下一步检测标准和非标准充电器:

打开芯片内部D+的1.5K上拉电阻和D-的15K下拉电阻。

检测D-的电压,如果是高电平,则为标准充电器,否则,即为非标准充电器。

5.2导入电池曲线

kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_battery_meter.h

kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_battery_meter_table.h

5.3高压电池修改

kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_charging.h

5.4充电时间长修改

kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_charging.h

1/充电电流提升到1A,注意测试确认温升情况是否能够满足我们标准和客户需求

2/提高CV值,以加长CC阶段的充电时间

3/截止电流设置大些,,注意测试确认截止充电时的电池电压,确保能够充满

5.5充电温度报警值

kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_charging.h

电池温度,根据对应表将读出的电压ADC转换成温度值。

 

5.6检流电阻修改

kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_battery_meter.h

二代码路径:

以6580M平台为例,主要的内核代码如下:

kernel/drivers/power/mediatek/battery_common.c(充电代码的主架构)

kernel/drivers/power/mediatek/battery_meter.c(MTKFG电量算法相关代码)

kernel/drivers/power/mediatek/linear_charging.c(线性充电相关代码)

kernel/drivers/power/mediatek/switch_charging.c(外置充电IC相关代码)

需要经常克制化的参数:

kernel-3.18\drivers\misc\mediatek\include\mt-plat\mt6580\include\mach\mt_battery_meter.h

kernel-3.18\drivers\misc\mediatek\include\mt-plat\mt6580\include\mach\mt_battery_meter_table.h

kernel-3.18\drivers\misc\mediatek\include\mt-plat\mt6580\include\mach\mt_charging.h

与硬件相关的代码

kernel-3.18\drivers\misc\mediatek\power\mt6580

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1