聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> Battery - 学习文档

Battery - 学习文档

时间:2018-07-02 12:37:32    下载该word文档

Battery 学习文档

一:电池系统架构

电池系统工作流程:

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

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

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

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

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

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

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

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

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

电池系统文件建立

电池系统架构基于linux kernel,相关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)(struct power_supply *psy, enum power_supply_property psp);

文件建立:

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

信息上报:

static void battery_update(struct battery_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充电: 硬件上使用MTKPMU 充电,硬件成本低,充电电流小,转换效率不高。

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

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

VCDT:充电器电压检测脚。

ISENSE:检流电阻正极。此方案的检测电阻为220毫欧。

BATSNS:检流电阻负极。

VBAT:电池正极引脚。

BAT_ON:电池NTC(热敏电阻)引脚。用于电池是否在位检测,以及电池温度检测。

通过battery_meter_ctrl读取PMIC的寄存器直接可读到V-batsnsV-isenseVChargerVbat_temp

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

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

Rsense检流电阻: 对于软件来说可以测量充电电流的大小:电流计算方法:(ISENSE – BATSNS/Rsense.

signed int battery_meter_get_charging_current(void);

线性充电过程

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

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

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

CHR_BATFULL 电池充满

CHR_ERROR 异常状态,关闭充电

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

预充电阶段, 设置充电9s,停止1s。当电压大于3.4V时,就会进入恒流充电阶段。

恒流充电阶段,设置充电9s,停止1s。当电压大于4.25V时,就会进入topoff充电阶段。

TOPOFF充电阶段,没有了充9s1s的设置。此阶段会通过两个判断条件(充电电流是否连续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.电量计

硬件Fuel Gauge(电压法+电流法)

软件Fuel Gauge(电压法)

常见问题:

5.1 修改充电电流

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

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

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

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

NON_STD_AC_CHARGER_CURRENT 默认使用500mA 电流档位

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

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

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

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

MTK BB芯片内部,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.cMTK FG电量算法相关代码)

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

免费下载 Word文档免费下载: Battery - 学习文档

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服