分享

iPhone 6s 意外关机罪魁祸首竟是它!想知道它是怎么玩的吗!

 静思_书香阁 2016-12-09

具体来说,电量计的作用是能够精确显示电池的剩余电量状态,对于用户的续航预期管理很重要。很遗憾很多国产机并没有加独立电量计,而是简单的通过电池的电性能曲线来粗略判断。所以很多手机一旦显示到了10%,甚至20%电量的时候随时会关机,而正常情况苹果可以到了1%再关机。不过一旦电量计本身出现问题,自然全部乱套:电池明明还有电,电量计已经“矫诏”通知主控关机休息。

那么,电量计是如何监测设备电量的呢?它的工作原理是什么?市场上主要用哪些典型的电量计芯片呢?下面随小编一起详细了解一下吧。

电量计如何监测设备电量?


在现在设备中,大致有三种类型监测方法的电量计:

 1 

电压测试法

是最早应用的方法,即通过监视电池开路电压来获得剩余容量。这是因为电池端电压和剩余容量之间有一个确定的关系,测量电池端电压即可估算其剩余容量。这种方法的局限是:


1) 对于不同厂商生产的电池,其开路电压与容量之间的关系各不相同。


2) 只有通过测量电池空载时的开路电压才能获得相对准确的结果,但是大多数应用都需要在运行中了解电池的剩余容量,此时负载电流在内阻上产生的压降将会影响开路电压测量精度。而电池内阻的离散性很大,且随着电池老化这种离散性将变得更大,因此要补偿该压降带来的误差将十分困难。


从下图中我们也可以看到,电池的电量和电压不是线性关系的,所以这种测试方法并不精准,电量测量精度仅仅超过20%。尤其是电池电量低于50%时,手机的电量计算将会变得非常不准确。所以这种方法对电池的保护是非常有限的。


综上所述,通过开路电压来实时估算电池剩余容量的方法在实际应用中无法达到足够的精度,只能提供一个大致的参考值。由于目前的科技各个方面的提升,要求也在提高,导致这个方法逐渐被手机市场淘汰,虽然还是有一些手机带有这样的计算方法,但是已经不是主流。



锂电池放电曲线


 2 

电池建模法

这个方法是根据电池的放电曲线来建立一个数据表,数据表中会标明不同电压下的电量值,这一方法可以有效的提高测量的精度。但要获得一个精准的数据表并不简单,因为电压和电量的关系还涉及到了电池的温度、自放电、老化等的因素。只有结合了众多的因素来进行修正才能够得出较满意的电量测量。


 3 

库仑计

目前手机用的计算方式最多的就是库仑计,库仑计英文名是coulomb counter,是根据法拉第定律设计出用来测量电路中所通过电量的装置称为“库仑计”或者“电量计”。简单的来说,在电池的保护线路上串联一个电量计量芯片,其中串联的是一个集成的取样电阻,通过电阻测试单位时间内回路流经的电流大小,如果电流是随时间变化,且流过不同的电流后产生不同的压差,通过把这个变化的电流进行积分,也就是在这段时间,距离等对电流进行累计,最终得到用户使用时正确的电量,精度可以达到1%,另外通过配合电池电压和温度,就可以极大的减少电池老化等因素对测量结果的影响。其中iPhone中就是采用这一方法。


获得电池当前的容量才能得到最终准确的电量剩余数值,计算库仑计通过两种类型的设计来获得电池的当前容量。一种是A/D模数转换,通常是12位精度,将电压值转换为12位精度的16进制数字后乘以取样的间隔时间,第二种则是集成模式,利用RC积分电路来获得电压对时间的积分值,便会得到电池的容量,最终通过电池当前电量除以电池的额定容量数值计算出百分比,得到电池电量剩余多少并交给手机上的软件通过软件显示给用户看。


而锂电池随着使用时间的增加电池的额定容量会有损耗,例如一块2000mAh容量的电池在循环使用100次后,电池自身的容量或许会衰减到1800mAh的容量,而库仑计如果一直保持着最初的额定容量那么就会导致电量计算不准确,所以库仑计里面还有一个容量对使用次数调整的算法,会根据电池循环次数调整电池实际的额定容量。

从上面的三种方法中我们可以看到库伦计的精度是最高的,他可以在不损伤电池的情况下降低电池的放电截止电压,使电池的容量得到最大限度的利用,特别是对于低电压系统和使用多次的电池。另外还可以以更高精确地发出电池电量不足的警告信息,以避免用户在使用的过程中丢失数据。


电池电量计工作原理


简化的电池电量计框图


电池电量计对流入/流出电池的总电流持续进行积分,并将积分得到的净电荷数作为剩余容量。


简化的电池电量计如上图所示。其中,Rsns为mΩ级检流电阻,RL为负载电阻。电池通过开关、Rsns对RL放电时的电流IO在Rsns两端产生的压降为VS(t)=IO(t)×Rsns。电量计持续检测Rsns两端的压差VS,并将其通过ADC转换为N位的数字量Current(简称CR),之后以时基确定的速率进行累加,M位累加结果Accumulated_Current(简称ACR)的单位为Vh(伏时)。对量化后的VS进行累加相当于对其进行积分,结果为


电池电量


因此,将ACR值除以检流电阻RSNS的阻值即得到以Ah(安时)为单位的电池容量。ADC转换结果和累加后的结果都带有符号位,按照图1中的连接方式,充电时CR为正,ACR递增;放电时CR为负,ACR递减。外部微控制器可以读取CR和ACR值,经过换算得到真实的充放电电流和电量值。


实际的电量计还包括一些控制和接口逻辑,通常还能检测电池电压和温度等参数。一些智能电量计可以自动完成电池自放电的修正,还可保存电池特性曲线,允许用户定制电池电量计算法。


电池电量计的计算

通常,在电量计数据资料中CR的单位为mV,ACR的单位为mVh。


根据前文的说明,CR值为取样电阻两端的电压值,典型的12bit CR如表2所示。


其中,S为符号位,20为LSB。如果CR的满偏值为F,则其LSB的计算公式如下:


若CR的读数为M,取样电阻为值RSNS,则实际的电流值为:


电流方向由S位确定。若满偏值F为±64mV,则LSB为±15.625μV;RSNS为10mΩ时最大电流为±6.4A。若M为768,则实际电流为


ACR为取样电阻两端电压的累积值,典型的16bit ACR如表3所示。


其中,S为符号位,20为LSB。如果ACR的满偏值为F,则LSB的计算公式如下:


净电荷量由S位确定。若满偏值F为±204.84mVh,则LSB为±6.25μVh;RSNS为10mΩ时最大电量为±20.48Ah。若M为7680,则实际电量为:


市场电量计芯片应用状况分析

由于国内手持及便携设备大体可以分成两个部份, 一是智能手机, 二式平板计算机/MID。针对这两个市场的应用, 目前这两个区块的主要参考设计还是由AP厂家来提供。例如智能手机的Qualcomm, Broadcom, MTK, nVIdia, Samsung, Hisilicon(海思)等, 以及平板计算机/MID的全志, 炬力, 瑞芯微, 中星微等。


由于国内大部的手持及便携式设备厂家在开发新的产品时, 都必须仰赖AP厂提供技术支持, 所以对原厂的参考设计, 除了布线之外, 对元器件的使用大多不做更动。所以只要原厂的参考设计用了某一厂家的电量计, 或是如Qualcomm, Broadcom, MTK等用了自己PMIC内的库仑计, 再通过AP的计算来实现电量计功能。目前在市场上由于苹果手机及平板的原始设计用的是TI的方案, 所以在市场上, TI可以说是在电量计耕耘最久, 市场占有率最大的厂商。其次是由于Samsung大量采用Maxim的电量计方案, 所以Maxim可以说是保有电量计市场二哥的位置。 


其余的无论是把库仑计放在PMIC内, 亦或是如Cellwise的加上自学习功能的电量计, 都是最近这两年进到市场的方案。之所以会有这个趋势, 最重要的原因是消费者开始要求设备的电量指示的精度。这个要求反应在所有手持及便携式设备的操作系统(iOS, Android, Windows Phone), 还有各类的APP上。由这个趋势也可以清楚的看出, 电量计在手持及便携式设备上所扮演的角色也越来越重要了。


下面以美信MAX17040芯片为代表,做详细说明。


1.MAX17040的工作原理

电量计MAX17040,他通过芯片去测量电池电量,芯片本身集成的电路比较复杂,同时可以通过软件上的一些算法去实现一些处理,是测量出的电量更加准确。还有一个好处,就是他之接输出数字量,通过IIC直接读取,我们在电路设计、程序处理上更加的统一化。


如下图所示,MAX17040和电池盒主控的关系,一个AD脚接到电池VBAT ,检测到的电量信息,通过IIC传到主控。


下面是电路图,电路接口比较简单,VBAT ,接到max17040的CELL,IIC接到主控的IIC2接口,这个我们在程序中要配置。看这个器件比较简单吧。


看下max17040的内部结构,其实这也是一个AD转换的过程,单独一颗芯片去实现,这样看起来比较专业些。CELL接口,其实就是一个ADC转换的引脚,我们可以看到芯片内部有自己的时钟(time base),IIC控制器之类的,通过CELL采集到的模拟量,转换成数字量,传输给主控。


通过上面的介绍Max17040的硬件、原理我们基本上都了解了,比较简单,下面我们就重点去分析下驱动程序。


2.MAX17040 总体流程

电量计的工作流程比较简单,max17040通过CELL ADC转换引脚,把电池的相关信息,实时读取,存入max17040相应的寄存器,驱动申请一个定时器,记时结束,通过IIC去读取电池状态信息,和老的电池信息对比,如果用变化上报,然后重新计时;这样循环操作,流程如下所示:


3.MAX17040这个电量计驱动,我们主要用到以下知识

【1】IIC的注册

IIC这个总线,在工作中用的比较多,TP、CAMERA、电量计、充电IC、音频芯片、电源管理芯片、基本所有的传感器,所以这大家要仔细看下,后面有时间的话单独列一片介绍下IIC,从单片机时代都用的比较多,看来条总线的生命力很强,像C语言一样,很难被同类的东西替代到,至少现在应该是这样的。


看下他结构体的初始化与驱动的申请,这个比较统一,这里就不再解释了。


IIC驱动的注册:


在arch/arm/mach-exynos/mach-smdk4x12.c中,IC平台驱动的注册:


下图就是我们IIC驱动注册生成的文件;

/sys/bus/i2c/drivers/max17040 


【2】linux 中定时器的使用

定时器,就是定一个时间, 比如:申请一个10秒定时器,linux系统开始计时,到10秒,请示器清零重新计时并发出信号告知系统计时完成,系统接到这个信号,做相应的处理;


【3】任务初始化宏


任务结构体的初始化完成后,接下来要将任务安排进工作队列。 可采用多种方法来完成这一操作。 首先,利用 queue_work 简单地将任务安排进工作队列(这将任务绑定到当前的 CPU)。 或者,可以通过 queue_work_on 来指定处理程序在哪个 CPU 上运行。 两个附加的函数为延迟任务提供相同的功能(其结构体装入结构体 work_struct 之中,并有一个 计时器用于任务延迟 )。


【4】linux定时器调度队列


【5】max17040测到电量后如何上传到系统(这个电池系统中有简要的分析);


4中的定时器记时完成,就可以调度队列,chip->work执行:max17040_work函数,把改读取的信息上传,我们看下max17040_work函数的实现:


保存老的电池信息,如电量、AC、USB是否插入

 

读取电池新的状态信息


如果电池信息有变化,就上报系统


power_supply_changed这个函数比较重要, 我们后面分析;

如果用PM2301充电IC,USB充电功能不用

这个是由于我们的系统耗电比较大,用USB充电时,电流过小,所以出现越充越少的现象,所以这个功能给去掉了。

如果有DC插入,则跟新充电状态



【6】AC、USB充电状态怎么更新到应用

如上面所说,通过power_supply_changed上报;


【7】电池曲线的测量与加入


电池曲线,就是电池的冲放电信息,就是用专业的设备,对电池连续充放电几天,测出一个比较平均的值。然后转换成针对电量IC(如我们用的max17040)的数字量,填入一个数组中,如下图所示:


下面数据时针对电池曲线的数字量,和相关参数。如上图所示,为160小时的电池信息,包括:不同颜色分别代表不同的曲线:


如temperature ,reference SOC ,fuel gauge SOC,Vcell,Empty Voltage


数据表格如下:


加入驱动中的值:

/driver/power/max17040_common.c中


结语

电量计在手持及便携式设备, 尤其是智能手机及平板计算机/MID应用的重要性随着AP厂家把库仑计加入PMIC, 提供电量计的功能, 已经被突显出来了。可是这只是起步, 由于电量计是在手持及便携式设备内最了解电池的芯片, 因此如何透过这个特点, 延长电池的使用寿命, 会是下一个可以延续的应用。

特 别 推 荐


MOSFET最基础的东西,看完就懂


5分钟读懂示波器的工作原理


你中枪了吗 PCB中常见错误大全


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多