Android电池库仑计计算、容量校准、电池曲线详解

Android电池库仑计计算、容量校准、电池曲线详解


Android手机/设备充电原理,包括充电过程、仑库计、温控策略、电池容量计算、电池曲线等。

充电预备知识

充电阶段

充电过程大致可以分为三个阶段:

  1. 预充电阶段(涓流充电),充电器以较低的电流给电池充电,目的是激活电池内部的化学反应,并防止因电流过大而损害电池。
  2. 恒流充电阶段,充电器提供一个相对较高的固定电流给电池充电,使得电池电压逐渐上升。
  3. 恒压充电阶段,充电器维持输出电压不变,而电流则根据电池的需求自动减少。

充电器类型

  1. SDP(Standard Downstream Port)
    SDP 是标准的下游端口,是 USB 设备的一种默认状态, SDP 提供的电流相对较小,挂起时2.5mA,连接时为100mA,连接并配置为较高功率时为500mA。可进行数据传输。
  2. DCP(Dedicated Charging Port)
    定义:DCP 是专用充电端口,专门为充电设备设计,它不再遵循 USB 标准的数据传输协议,而仅专注于充电功能。
    电流供应:DCP 可以提供相对较大的充电电流,通常在 1.5 A 左右,甚至更高,具体取决于充电器的规格。它可以为智能手机、平板电脑等设备提供快速充电所需的大电流。
  3. CDP(Charging Downstream Port)
    定义:CDP 是充电下游端口,它是一种结合了数据传输和充电功能的端口,既可以传输数据,又可以提供比 SDP 更高的充电电流。
    电流供应:CDP 通常能够提供约 1.5 A 的充电电流,同时支持 USB 数据传输。
  4. 非标充电器

安卓需要检测充电器类型,并对不同的类型做出处理,比如根据类型进行充电电流的限制。

库仑计

库仑计是一种用于测量电荷量的仪器。它的工作原理基于库仑定律,能够精确地计量通过电路的电量。电荷量的单位是库仑(C),1 库仑等于 1 安培・秒,即当 1 安培的电流在 1 秒内通过某一截面时,通过的电荷量就是 1 库仑。

安卓设备充电详解

关机阶段

  1. 不充电时,电压大于某值比如3500mv时才进入kernel,否则直接关机。
  2. 充电时,电压大于某值比如3300mv时才允许进入kernel,否则进入预充电阶段。
    这个是在uboot阶段处理的,示例代码如下
bsp/bootloader/u-boot15/include/configs/xxxx.h
#define LOW_BAT_VOL            3400 /*phone battery voltage low than this value will not boot up*/
#define LOW_BAT_VOL_CHG        3300    //3.3V charger connect

预充电

  1. 这是充电过程的第一阶段,通常发生在电池电压非常低的情况下,比如低于3.0伏特。
  2. 在此阶段,充电器以较小的电流充电,目的是避免对电池造成过度压力,同时确保电池内部化学物质能够安全激活。
  3. 电流值通常很小,比正常充电电流小得多,以避免因电流过大造成电池损伤。
  4. 一旦电池电压升至安全范围(如3.0伏特以上),充电过程将转入下一阶段。

以某款设备为例:
预充电阶段充电电流范围为450ma~1000ma
预充电过程:
6. 首先根据充电器的类型设定充电电流。
7. 每200ms轮询一次,若电池仍处于低电量状态,则继续预充电。
8. 若电池电压连续30分钟代于2000mv就判定电池坏了,停止充电。

温控策略

Jeita温控

Jeita(Japan Electronics and Information Technology Industries Association)温控策略是一种被广泛应用于锂离子电池管理系统中的温度控制策略,旨在根据电池的不同温度范围调整电池的充电和放电参数,以确保电池的安全性、性能和寿命。

  1. 低电时
    充电:在非常低的温度下,锂离子在电池内部的迁移速度会变慢,若此时进行高倍率充电,可能会导致锂析出,对电池造成永久性损坏。因此,Jeita 策略会限制或禁止充电,或者采用非常低的充电电流(通常为 0.05C 至 0.1C),以确保锂均匀地嵌入负极材料,避免锂枝晶的形成。
    放电:低温下电池的放电性能会下降,电池的可用容量会降低,内阻增大。在这个温度范围,一般会限制电池的最大放电电流,以防止电池电压下降过快,影响设备的正常使用。
  2. 常温时
    充电:在此温度范围内,电池可以正常充电,充电电流可根据电池的容量和充电器的能力进行调整,一般可以采用 1C 或更高的充电倍率,以实现快速充电。
    放电:电池可以正常放电
  3. 高温时
    充电:电池的副反应加剧,会加速电池老化,同时存在热失控的风险。Jeita 策略会降低充电电流,以减少电池的发热,或者暂停充电,等待电池温度降低到安全范围后再继续充电。
    放电:高温下电池的自放电率会增加,且继续大电流放电会进一步升高电池温度,可能引发安全问题。因此,会限制放电电流,防止电池温度进一步升高。
    以某平台为例,其jeita温控策略如下图(配置见附录)

充电倍率1C,2C,3C

“C” 代表电池的额定容量(Capacity) ,1C 则表示以 “能让电池 1 小时充满电” 的电流强度进行充电,是衡量充电快慢的基础标准。

  1. 核心概念拆解:“C” 与 “1C”
    “C”(Capacity 倍率):以电池的额定容量为基准,量化充放电电流的 “倍率单位”。
    例如:一块额定容量为「1000mAh」的电池,1C 对应的电流就是「1000mA(即 1A)」;若电池容量为「5000mAh」,1C 对应的电流就是「5000mA(即 5A)」。
    “1C 充电”:充电电流 = 电池额定容量(数值上相等,单位需匹配:mAh 对应 mA,Ah 对应 A),此时理论充电时间约为 1 小时(实际因充电后期的 “恒压阶段”,会略长于 1 小时,通常 1.2-1.5 小时)。
  2. 不同 C 数的充电速率对比
    C 数越高,充电电流越大,理论充电时间越短(实际受电池保护、散热、充电协议限制)。通过具体案例(以 5000mAh 电池为例)更易理解:
  3. 关键注意事项
    C 数≠实际充电速度的唯一标准
    实际充电时间还受充电协议(如 PD、QC、SCP)、电池温度(高温会降速保护)、剩余电量(低电量阶段快,高电量阶段慢) 影响。例如:同样 1C,支持快充协议的充电器会比普通充电器更接近理论 1 小时充满。
    高 C 充电对电池的影响
    长期使用过高 C 数(如超过 6C)充电,会加速电池内部化学反应,可能导致电池寿命缩短、容量衰减加快,部分劣质电池还可能因散热不及时引发安全风险。
    “C” 同时适用于放电
    除了充电,“C” 也用于描述放电速率。例如 “5C 放电”,表示电池以 5 倍额定容量的电流放电,理论放电时间为 12 分钟(60 分钟 ÷5),常见于无人机、电动汽车等需要大电流放电的设备。

NTC

以下是关于电池 NTC(Negative Temperature Coefficient)的详细解释:
基本概念
定义:NTC 是负温度系数热敏电阻的缩写,它是一种电阻值随温度升高而降低的热敏电阻。在电池系统中,NTC 被广泛应用于监测电池的温度。
温控策略会使用到NTC.

电池容量

定义

电池容量是指电池能够存储电荷量的多少,通常用毫安时(mAh)或安时(Ah)来表示。它表示在一定的放电条件下,电池能够持续输出一定电流的时间。例如,一个 3000mAh 的电池,如果以 3000mA 的电流放电,可以持续放电 1 小时;如果以 1500mA 的电流放电,则可以持续放电 2 小时。

计算

  1. 电量计算是由库仑计配合OCV表(电压与电量的关系表)来计算的。
  2. 不同温度时电池容量可能会变化,当检测到温度很低时,电池容量会降低,比如某个设备在-10度时容量按常温容量的60%算。
  3. 电量计算会在特定条件进行校准。

容量自学习

电池容量自学习是一种电池管理技术,旨在通过对电池的实际使用情况进行监测和分析,动态地估计和更新电池的实际容量。

比如当设备电量低于一个值时,进行充电就进入容量自学习开始状态,充到一定量接近充满时完成一次自学习,更新容量并记录在文件系统中。

电量

当设备启动后,显示的电量要与关机时电量是连续的,若未插拔过电池,则关机时的电量会保存在RTC寄存器中,启动时可以从里面获取。
如果插拔过电池,则要用开机开路电压来计算当前电量。

电量更新:

  1. 充电过程使用库仑计更新电量。
  2. 充电时,99%维持一段时间(比如25分钟)后电量跳到100%。
  3. 充电时,电压大于某个值且充电电流小于某个值更新电量为100%。
  4. 放电时,低电量(比如电压小于3.6v)时会进行第一次容量校准,UI电量会与当前OCV电压进行校准匹配, 电压小于某值比如3.4v时可能进行第二次校准。
  5. 放电时,某些设备可以对某个范围电量掉电速度进行控制,比如设置80%到90%之前为其它区间的掉电速度的50%。
  6. 放电时,电量较满时(比如95%到100%)若存在误差会使得电量显示下降很慢,会进行校准,比如实际每下降0.8%时显示降1%。

以上校准条件是在dts中配置的,见附录。

安时积分法

库仑计采用电流积分计算容量变化。

这种方法存在累计误差,需要定期校准,并且也会受到电池自放电和老化等因素的干扰。

开路电压法(OCV)

更换电池时无法使用库仑计计算,在系统启动前250ms系统功耗较小,电源管理芯片获取的电压值(POCV)接近于电池开路电压,再用这个电压值从预置的OCV Table表(见附录)得到电池容量,作为开机百分比。这种方法的准确性受电池的老化、温度等因素影响,而且电池需要有足够的静置时间来达到稳定的开路电压。

  1. 开路电压
    开路电压‌通常是指电池在开路状态下的端电压,也称为开路电压(Open Circuit Voltage, OCV)。开路电压是指在电池没有电流通过的情况下,电池正负极之间的电位差。具体来说,开路电压等于电池在断路时(即没有电流通过两极时)正极电极电势与负极电极电势之差‌。
  2. 开机开路电压
    开机开路电压POCV
    系统上电开机前的电流非常小(<1mA) ,此时电池端电压可以认为是开路电压可以认为就是开机开路电压(POCV) 。

附录

电池曲线配置表dts

以展锐某机型为例
kernel/kernel4.14/arch/arm64/boot/dts/sprd/xxx.dts

  1. 电池节点

  2. charger-manager结点

charger-manager {
    cm-poll-mode = <2>;
    cm-poll-interval = <15000>;
    cm-battery-stat = <2>;

    cm-fullbatt-vchkdrop-ms = <30000>;
    cm-fullbatt-vchkdrop-volt = <60000>;
    cm-fullbatt-voltage = <4350000 4380000>; //满电电压阀值
    cm-fullbatt-current = <100000 100000>; //满电电流阀值
    cm-fullbatt-capacity = <100>; //满电时百分比

    /* in deci centigrade 根据板温判断停充
    若当前温度大于temp_max 或者小于temp_min 则停充
     */
    cm-battery-cold = <200>;//calc: (value-1000)/10   电池温度CM_EVENT_BATT_COLD阈值temp_min
    cm-battery-cold-in-minus; //负温标志
    cm-battery-hot = <600>; //电池温度CM_EVENT_BATT_OVERHEAT阈值temp_max
    cm-battery-temp-diff = <100>;

    /* Allow charging for 6hr */
    //充电最长时间
    cm-charging-max = <18000000>;
    /* recovery charging after stop charging 45min */
    //放电最长时间
    cm-discharging-max = <2700000>;

    /* the interval to feed charger watchdog */
    cm-wdt-interval = <60>;

    /* drop voltage in microVolts to allow shutdown */
    cm-shutdown-voltage = <3200000 3250000>; // 低电关机电压

    /* when 99% of the time is exceeded, it will be forced to 100%
    充到99%后经过多长时间强制设置为100%,单位是秒 */
    cm-tickle-time-out = <1000>; // 16.66分钟

    /* how much time to allow capacity change */
    cm-one-cap-time = <30>;

    /* when the safe charging voltage is exceeded, stop charging
    充电器过压保护阀值 */
    cm-charge-voltage-max = <6500000>;
    /* drop voltage in microVolts to restart charging 
    复充电压条件,单位uV */
    cm-charge-voltage-drop = <700000>; //0.7V 满电后电压掉了0.7V后开始复充
    /* Jeita 温控策略
    BC1.2 支持3 种不同类型的充电器和非标充电器的检测,因此 JEITA Table 对应也有4 个
    <1150 1180 400000 4400000>为例,
    1150 1180:代表温度值,此值减 1000 后再除以10 就代表摄氏温度值。如1150 代表15 度。
(1150-1000)/10=15 度
   400000:最大限流值400mA
   4400000:截止充电电压值4.4V
    */
    cm-dcp-jeita-temp-table =  <1000 1030 0 4380000>,
                         <1150 1180 400000 4400000>,
                         <1450 1420 1000000 4400000>,
                         <1600 1570 400000 4380000>;
    ...
                         
    // 电量再分配表,<99 100 1>代表99到100区间电量是正常情况下的1倍,如果大于1代表这个区间电量比正常情况耐用
    cm-cap-remap-table = <1 2 0>, <2 3 0>, <98 99 0>, <99 100 1>;
}
  1. pmic fgu

日志

如图为healthd日志

  1. battery l:当前UI 显示的电池电量
  2. v:电池端电压
  3. h:当前health 状态
  4. st:当前充电状态
  5. c:当前充电流uA
  6. fc:电池容量uAh
  7. chg:充电器类型,AC 或者 USB

相关文章

串联18650锂电池充不满电问题
Android大话省电管理之Doze
MacOS安装Docker battery-historian分析安卓耗电情况
作者:帅得不敢出门

转载请说明出处内容投诉
CSS教程网 » Android电池库仑计计算、容量校准、电池曲线详解

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买