- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)