基于M6575平台电池系统分析

上传人:工**** 文档编号:586330725 上传时间:2024-09-04 格式:PPT 页数:37 大小:4.72MB
返回 下载 相关 举报
基于M6575平台电池系统分析_第1页
第1页 / 共37页
基于M6575平台电池系统分析_第2页
第2页 / 共37页
基于M6575平台电池系统分析_第3页
第3页 / 共37页
基于M6575平台电池系统分析_第4页
第4页 / 共37页
基于M6575平台电池系统分析_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《基于M6575平台电池系统分析》由会员分享,可在线阅读,更多相关《基于M6575平台电池系统分析(37页珍藏版)》请在金锄头文库上搜索。

1、基于基于MT6575MT6575平台电池系统分析平台电池系统分析柴路SW2 2012-05.22Agenda一:电池系统架构二:监控原理三:电量检测原理电池系统架构电池系统架构一:电池系统工作流程: DRV不停的把电池系统相关信息写入相关文件,然后上报。上层监听到后读取文件。涉及到的文件较多,比如读取/sys/class/power_supply/battery/BatterySenseVoltage可以获取电池电压/sys/class/power_supply/battery/ChargerVoltage可以获取充电器电压/sys/class/power_supply/battery/bat

2、t_tem可以获取电池温度 等等。二:要理解电池系统架构需要需要解决三个问题:1, 相关文件是如何建立的?2,是什么触发驱动更新文件内容以及驱动是如何上报的?3,用户空间是如何读取文件里面的信息的?电池系统文件建立电池系统文件建立一:电池系统架构基于linux kernel,相关code在alps/kernel/drivers/power/*.*MTK为了客制化,把与自己平台相关的code放在了alps/mediatek/platform/mt6575/kernel/drivers/power/*.*二:以添加/sys/class/power_supply/battery/ChargerTes

3、t文件为例子1,在Power_supply.h文件添加POWER_SUPPLY_PROP_ChargerTest. 2,在Power_supply_sysfs.c文件添加。上面两步表示总共可以支持的文件。3,修改mt6575_battery.c文件,mt6575_battery_props 表示/sys/class/power_supply/battery/文件夹下所支持的文件4,系统默认文件是只读的,如果文件可读可写。需要添加如下地方下面分析文件建立过程下面分析文件建立过程。static int mt6575_battery_probe(struct platform_device *dev

4、) ret = power_supply_register(&(dev-dev), &mt6575_ac_main.psy); ret = power_supply_register(&(dev-dev), &mt6575_usb_main.psy); ret = power_supply_register(&(dev-dev), &mt6575_battery_main.psy); 在开机的时候当执行到mt6575_battery_probe()函数的时候,会注册ac,usb,battery。以注册mt6575_battery_main.psy为例,当执行完毕注册函数的时候, 文件/sys/

5、devices/platform/mt6575-battery/power_supply/battery/*.*建立完成并且sys/class/power_supply/battery/*.* 建立对应的连接。主要工作是在函数power_supply_register()完成的。其中建立文件的过程如下power_supply_register() device_add() device_add_attrs() device_add_groups() sysfs_create_group() internal_create_group() create_files()Line66: “grp”

6、对应Power_supply_sysfs.c中的static struct attribute_group power_supply_attr_group = .attrs = _power_supply_attrs,.is_visible = power_supply_attr_is_visible,;grp-attrs 就是 _power_supply_attrs。里面记录了所支持的所有文件名信息。Line 75:执行Power_supply_sysfs.c中的power_supply_attr_is_visible()函数,该函数会判断需要建立的具体文件是否符合要求,如果符合要求则建立,

7、否则不建立Line 79:建立文件Line238: psy-properties对应如下,即判断需要建立的属性文件是否符合要求,以及读写属性设置。信息上报告信息上报告一:在BAT_thread()函数中通过如下函数上报信息的mt6575_ac_update(&mt6575_ac_main);mt6575_usb_update(&mt6575_usb_main); mt6575_battery_update(&mt6575_battery_main);二:BAT_thread()的触发条件 1,10s的定时器 2, 插拔充电器三:mt6575_battery_update()函数里面会完成写文件

8、和通知上层两个功能,写文件就是更新bat_data-XX. 上层读取的时候就是读取这些数据,当所有的数据更新完毕调用power_supply_changed()函数上报。power_supply_changed() schedule_work() power_supply_changed_work() kobject_uevent() 上层读取文件上层读取文件当上层监听到底层的上报信息后,会读取文件容com_android_server_BatteryService.cpp是JNI层。解析出需要读取的文件。读取文件的时候通过一些列调用最终会调用到Power_supply_sysfs.c的 po

9、wer_supply_show_property()函数。该函数最终会调用psy-get_property(psy, off, &value)完成读取功能以读取/sys/class/power_supply/battery/文件为例子。 一:充电原理 充电是软硬件协同完成的。软硬件的关系好比主奴关系。软件在充电中担当主人的角色,主要完成监控功能。硬件好比奴隶,主要是干活的,完成充电的主要工作。二:软件的监即监督,就是时刻测量充电参数,比如电池电压,充电电流,电池温度等。 控即控制,用的最多的控制就是使能,禁止充电,设定充电电流大小。监控原理监控原理硬件充电原理硬件充电原理1,上图红色线代表充电

10、的时候电流流动的方向,一部分流向电池,一部分流向系统,虚线电流流向是三极管的基极控制电流,这个电流非常小,分析的时候可以忽略。2,DXT790AP5是三极管: 通过三极管可以开启,关闭充电功能,开 启充电的时候调节三极管的基级电流可以控制流过三极管CE端的电流从而实现充电电流大小的设置。 Rsense采样电阻: 对于软件来说可以测量充电电流的大小:电流计算方法:(ISENSE BATSNS)/Rsense. 对于PMU来说通过Rsense可以实现电流控制。比如要实现1A的充电电流,Rsense为0.2欧。PMU实现该电流的方法就是设法一直保证Rsense两端的电压是0.2V。 如果把电压比作水

11、压,电流比作水流。则三极管的作用就是调节阀(水龙头),调剂三极管的基极电流好比转动水龙头的把手。则Rsense就好比流量检测仪。充电硬件有自己的一套预充,恒流,恒压流程,软件也有自己的一套预充,恒流,恒压流程。靠两者协同合作完成整个充电工作。硬件预充过程如下:BAT_ON在充电中的作用1,检测电池是否存在。电压必须小于1.062V,否则认为电池不存在不能充电,硬件行为,软件无法关闭此功能2,高温检测,电池电压必须大于0.2V,否则认为电池温度过高不能充电,硬件行为,软件可以关闭此功能3,软件检测电池温度。充电器插入拔出检测PMU会检测VCDT PIN的电压,如果电压低于一定数值(4.3V)或者

12、高于一定数值(charger ovp 软件可设定电压)则认为充电器没有插入,否则认为充电器插入。当PMU检测到有充电器插入或者拔出动作的时候,则会触发中断,然后触发BAT_thread线程。充电器识别 可以识别出四种类型:前两者属于USB calbe,后两个属于充电器 可参考函数hw_charger_type_detection(void)充电器类型判断。UVLO(Under-voltage lockout)VTHH 3.2V,不可修改,如果电池电压低于VTHH则不开机VTHL 2.9V,此电压软件可修改,当开机后,电池电压低于VTHL则强行断电关机ADC测量相关测量相关ADC: 与充电相关的

13、ADC集成在PMU内, 主要测量温度,电池电压,电流,充电器。 ADC精度 10bit。已经校准好。 ADC电压范围 0 1.2V电池电压算法:比如测得ADC为x,电池电压为y则:Y = (1.2*x/1024) * N N表示分压系数,N = 4。Vcharger:比如测得ADC为x,Vcharger为y则:Y = (1.2*x/1024) * N 其中 N代表分压系数N = (39 + 330)/39充电电流计算: 不充电的时候计算 gADC_I_SENSE_offset = BATSENS ISENSE目地消除底噪误差。 充电的时候连续测量20次BATSENS和ISENSE的电压,然后把

14、测量的电压减去两个最大数值和最小数值其余的做平均。最后计算充电电流(ISENSE - BATSENS + gADC_I_SENSE_offset)/Rsense为了得到获取稳定的电池参数,电池电压和充电电流还做“滑动滤波”。即和前60次采样的数据做平均(前10分钟) 温度测量温度测量电量计算电量计算两种电量测量方法1,开路电压法。电池在开路状态下电池容量与电压具有一定的关系,计算出电压查表可以得到容量优点:简单,可以计算初始电池电量缺点:需花30分钟以上等待电压回升积分法:电流计算公式 I = Q/t优点:适用于各种电池缺点:初始电量无法获取电流测试硬件原理电流测试硬件原理开路电压法开路电压法

15、开机的时候利用开路电压法得到电池电量初始值算法原理:在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度表格就可以计算出当前的电池容量。开路电压计算方法: AB端的电压是开路电压 如果电池处于放电状态

16、则Vab = Vbat + I * (R + 20mOhm) 同理,在电池充电的时候电池开路电压是 Vab = Vbat - I * (R + 20mOhm) Vbat是软件测量的电池电压 I是流过电池的电流 R 是电池内阻 20mOhm是采样电阻BA电池内组的计算方法:提供四个表格如下。根据当前温度计算出当前温度的电池内租电压关系表格,然后根据电压查找表格找出电池内组。r_profile_t0 / -10度电池内租与电压对应关系r_profile_t1 / 0度电池内租与电压对应关系r_profile_t2 / 25度电池内租与电压对应关系r_profile_t3 / 50度电池内租与电压对

17、应关系积分法积分法积分法 PMU内部集成积分电路。通过读寄存器然后计算可以得到流入流出电池的电量,然后校准后得到最终的电量。 dvalue_CAR = (dvalue_CAR*CAR_TUNE_VALUE)/100);CAR_TUNE_VALUE是客制化的校准参数,用于电量/电流校准。电量百分比算法如下: (gFG_columb*100)/gFG_BATT_CAPACITY_aging);gFG_BATT_CAPACITY_aging为25度时候的电池电量Q_MAX_POS_25。 该值在充满电后会适当调整。电量上报的时候还要进行电量算法,参考 mt6575_battery_update()函数 Q & A Thank You

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号