Battery学习文档.doc_第1页
Battery学习文档.doc_第2页
Battery学习文档.doc_第3页
Battery学习文档.doc_第4页
Battery学习文档.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.hKernel/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充电: 硬件上使用MTK的PMU 充电,硬件成本低,充电电流小,转换效率不高。switch充电: 硬件上使用外挂充电IC 常用的有TI BQ24296 , 增加额外的硬件成本 充电电流大, 充电效率高 。VBUS:USB线正极或者AC 充电器的正极。VCDT:充电器电压检测脚。ISENSE:检流电阻正极。此方案的检测电阻为220毫欧。BATSNS:检流电阻负极。VBAT:电池正极引脚。BAT_ON:电池NTC(热敏电阻)引脚。用于电池是否在位检测,以及电池温度检测。通过battery_meter_ctrl读取PMIC的寄存器直接可读到V-batsns、V-isense、VCharger、Vbat_temp1,一部分流向电池,一部分流向系统.2,充电的时候调节VDRV, 通过调节三极管的be端电流可以控制流过ce端的电流从而实现充电电流大小的设置。Rsense检流电阻: 对于软件来说可以测量充电电流的大小:电流计算方法:(ISENSE BATSNS)/Rsense.signed int battery_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.电量计硬件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.hkernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_battery_meter_table.h5.3 高压电池修改kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_charging.h5.4 充电时间长修改kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_charging.h1/充电电流提升到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(MTK FG电量算法相关代码)kernel/drivers/power/mediatek/linear_charging.c (线性充电相关代码)kernel/drivers/power/mediatek/switch_charging.c (外置充电IC相关代码)需要经常克制化的参数:kernel-3.18driversmiscmediatekincludemt-platmt6580i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论