MTKFuelGauge算法分析.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MTKFuelGauge算法分析课件

SW FG 算法分析 目录 Battery架构简析 MTK 电量算法简析 72/82平台SW FG算法分析 误差和消除误差 Battery架构简析 MTK平台Battery软件架构基本如下图所示。 具体过程: 硬件ADC读取Battery的各路信息:包括温度,电压等。 MTK开发的电量算法分析得到的数据。 Kernel层将电量信息通过写文件节点的方式更新,并通过UEVENT通知上层。 上层Service开启UEVENT LISTENER,监听到UEVENT后,读取battery相关文件节点,获取电量信息。 Service更新数据后,通过Broadcast通知所有开启了相关listener的activities。 根据不同的电量读取和计算的策略,第一步的读取和第二步的算法部分会有比较大的差异,而后面的数据更新和事件通知部分一致性较高。 本篇重点分析72/82平台SW FG算法实现,对比SW_FG 和HW_FG在硬件及软件上的部分差异,分析电量误差形成的一些原因和MTK已经采取的消除误差的措施。对于Battery数据更新和充电流程则粗略分析。 充电状态机,battery充电的逻辑,就依赖于这张图,如果是用的external charger ic,则应当参考该IC的充电逻辑。 linear charging下 cc转 cv,是通过ADC读取电压后,软件切换。而使用charger ic 则很可能是硬件直接切换。 这部分的相关代码路径在: alps/mediatek/kernel/drivers/power/linear_charging.c alps/mediatek/kernel/drivers/power/switching_charging.c kernel层battery驱动工作的流程,Bat_thread是工作的重点,通过单独的线程依赖10s定时器,更新battery相关信息。电量算法分析后得到的数据也不会直接update,Information Processing还会针对一些特殊情况对显示电量做调整,比如0%tracking100%tracking。 除了10s一次的定时器更新,插拔充电器会触发中断,中断处理时同样会更新battery数据。 所有和 电池 充电相关的数据都存储在power_supply类型的结构体中,这是linux标准的电源子系统体系。 MTK电量算法简析 为了得到较为精确的电量数据,需要改善测量方式和计算方法,并针对已知误差采取优化手段。一下介绍MTK平台下采用的一些电量算法。 AUX ADC算法: 事实上,所有算法都要依赖ADC读取电量信息,这边的AUX ADC算法指只依赖ADC读值,然后查表读取电量的算法。 这种算法只重构了ZCV table,误差会很大。 库仑积分法: 通过开路电压查表得到初始电量D0,后续电量通过电流积分累积,通用性强,依赖初始电量的精确度。 混合型算法: SW FG算法和HW FG算法。事实上MTK平台项目通常采用的是混合型算法。 SW FG的参考电路: HW FG的参考电路: 相同点: NTC电阻用于测量温度,ADC测量各路信号。 不同点: HW FG有单独的ADC和20毫欧的电阻作电流的侦测。 HW FG 和SW FG最大差异就是电流的获取方式。 混合算法的流程,HW FG通过FG ADC读取FG电阻两端电压获得电流, 而SW FG则结合库伦算法通过SW方式算得。这部分会详细介绍。 72/82平台SW FG算法分析 主要分析上图黄色部分 大部分项目都采用混合算法,下面从算法初始化开始介绍下SW FG的算法实现。 battery_meter.c 这个C文件 主要负责电池电量算法的实现 向上主要承接battery_common.c 向下调用battery_meter_hal.c中的接口,以读取电池的各路信号。 =battery_meter_initial 首先看下调用这个func的timing。 显然 在开机初始化阶段,就会进入该函数,且只会运行一次。 针对AUXADC SW_FG HW_FG三种不同的电池算法方案,分别初始化,因为82平台采用的SW_FG, 所以接下去先主要分析SW_FG的流程。 SW_FG的准备工作 分为两步: table_init oam_init 先看table_init 首先要获取当前的温度信息 = force_get_tbat ADC读值 这边就是MTK为了结合实际温度 获取较为精确的电池信息 而采取的线性平均值法。原理是利用预先测得的分布在-10 0 25 50 摄氏度下的ZCV表,结合真实温度,动态重构一张当前温度下的ZCV表格。 TEMPERATURE对应预留的空ZCV表格,如下 构造新表的函数如下 采用线性平均法

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档