测量设备电量

对于配有 Summit SMB347 或 Maxim MAX17050(许多 Nexus 设备均有提供)等电池电量计的 Android 设备,您可以确定设备耗电量。如果没有外部测量设备,或将外部测量设备连接到设备较麻烦(如在移动使用中),可使用系统内置电量计。

测量结果可包括瞬时电流、剩余电量、测试开始和结束时的电量,以及其他测量结果(取决于设备支持的属性,见下文)。为获得最佳效果,请在长时间运行的 A/B 测试中进行设备电量测量,且该测试应使用具有相同电量计和相同电流感应电阻的同类型设备。确保每台设备的起始电量相同,以避免电量计在电池放电曲线的不同点出现不同的行为。

即使处在相同的测试环境下,也不能保证测量结果具有绝对的高精确度。然而,在各次测试运行中,特定于电量计和感应电阻的大部分误差都会保持一致,这样使得相同设备之间的比较变得有意义。我们建议采用不同的配置进行多次测试,以确定各配置间的显著差异和相对耗电量。

读取耗电量

要读取耗电量数据,请在测试代码中插入对 API 的调用。

import android.os.BatteryManager;
import android.content.Context;
BatteryManager mBatteryManager =
(BatteryManager)Context.getSystemService(Context.BATTERY_SERVICE);
Long energy =
mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);
Slog.i(TAG, "Remaining energy = " + energy + "nWh");

可用属性

Android 支持以下电池电量计属性:

BATTERY_PROPERTY_CHARGE_COUNTER   Remaining battery capacity in microampere-hours
BATTERY_PROPERTY_CURRENT_NOW      Instantaneous battery current in microamperes
BATTERY_PROPERTY_CURRENT_AVERAGE  Average battery current in microamperes
BATTERY_PROPERTY_CAPACITY         Remaining battery capacity as an integer percentage
BATTERY_PROPERTY_ENERGY_COUNTER   Remaining energy in nanowatt-hours

大多数属性都是从内核中类似于 power_supply 名称的子系统属性中读取。但是,特定设备的确切属性、属性值解析和更新频率取决于:

  • 电量计硬件,如 Summit SMB347 或 Maxim MAX17050。
  • 电量计与系统的连接,如外部电流感应电阻的值。
  • 电量计芯片的软件配置,如为内核驱动程序中的平均电流计算间隔所选的值。

有关详情,请参阅 Nexus 设备的可用属性。

Maxim 电量计

在确定电池在长时间内的荷电状态时,Maxim 电量计(MAX17050,BC15)可校正库仑计数器的偏移测量结果。对于在短时间内进行的测量(如耗电量计量测试),该电量计不会进行校正,使得当电流测量值过小时偏移成为主要误差源(尽管任何时长都无法完全消除偏移误差)。

对于典型的 10 毫欧感应电阻设计,电流偏移量应小于 1.5 毫安,这意味着任何测量结果误差均为 +/- 1.5 毫安(电路板布局也会对该误差产生影响)。例如,当测量强电流(200 毫安)时,您将会获得以下结果:

  • 2 毫安(200 毫安的 1% 增益误差,由电量计增益误差导致)
  • +2 毫安(200 毫安的 1% 增益误差,由感应电阻误差导致)
  • +1.5 毫安(电流感应偏移误差,由电量计导致)

总误差为 5.5 毫安 (2.75%)。将该误差与中等电流(50 毫安)进行比较(相同误差百分比得出的总误差为 7%),或与小电流(15 毫安)进行比较(+/-1.5 毫安误差得出的总误差为 10%)。

为获得最佳效果,我们建议测量大于 20 毫安的电流。增益测量误差是可重复的系统误差,使您能够在多种模式下测试设备,并获得纯粹的相对测量结果(1.5 毫安偏移量除外)。

对于 +/-100 微安的相对测量结果,所需测量时间取决于:

  • ADC 采样噪声。具有正常出厂配置的 MAX17050 由于噪声而产生 +/-1.5 毫安的样本变差,每 175.8 毫秒输出一个样本。对于 1 分钟的测试间隙,您将会获得大约 +/-100 微安的噪声,对于 6 分钟的测试间隙,您将会获得小于 100 微安、3-sigma 的纯粹噪声(或 33 微安、1-sigma 的噪声)。
  • 由负载变化引起的样本混叠。差异会放大误差,因此对于具有负载固有差异的样本,请考虑采用较长的测试间隙。

支持的 Nexus 设备

Nexus 5
型号 Nexus 5
电量计 Maxim MAX17048 电量计(ModelGauge™,无库仑计数器)
属性 BATTERY_PROPERTY_CAPACITY
测量结果 电量计不支持除电池荷电状态达到 %/256(占满格电池电量的百分之一的 256 分之一)解析度之外的任何测量结果。
Nexus 6
型号 Nexus 6
电量计 Maxim MAX17050 电量计(带有 Maxim ModelGauge™ 调节功能的库仑计数器)和 10 毫欧电流感应电阻。
属性 BATTERY_PROPERTY_CAPACITY
BATTERY_PROPERTY_CURRENT_NOW
BATTERY_PROPERTY_CURRENT_AVERAGE
BATTERY_PROPERTY_CHARGE_COUNTER
BATTERY_PROPERTY_ENERGY_COUNTER
测量结果 CURRENT_NOW 解析度为 156.25 微安,更新周期为 175.8 毫秒。
CURRENT_AVERAGE 解析度为 156.25 微安,更新周期可在 0.7 秒到 6.4 小时范围内配置,默认为 11.25 秒。
CHARGE_COUNTER(累计电流,不可扩展精度)解析度为 500 微安时(未经电量计针对库仑计数器偏移量进行调整的原始库仑计数器读数,加上来自 ModelGauge m3 算法的输入值,其中包括空值补偿)。
CHARGE_COUNTER_EXT(内核扩展精度)解析度为 8 纳安时。
当额定电压为 3.7 伏时,ENERGY_COUNTER 为 CHARGE_COUNTER_EXT。
Nexus 9
型号 Nexus 9
电量计 Maxim MAX17050 电量计(带有 Maxim ModelGauge™ 调节功能的库仑计数器)和 10 毫欧电流感应电阻。
属性 BATTERY_PROPERTY_CAPACITY
BATTERY_PROPERTY_CURRENT_NOW
BATTERY_PROPERTY_CURRENT_AVERAGE
BATTERY_PROPERTY_CHARGE_COUNTER
BATTERY_PROPERTY_ENERGY_COUNTER
测量结果 CURRENT_NOW 解析度为 156.25 微安,更新周期为 175.8 毫秒。
CURRENT_AVERAGE 解析度为 156.25 微安,更新周期可在 0.7 秒到 6.4 小时范围内配置,默认为 11.25 秒。
CHARGE_COUNTER(累计电流,不可扩展精度)解析度为 500 微安时。
CHARGE_COUNTER_EXT(内核扩展精度)解析度为 8 纳安时。
当额定电压为 3.7 伏时,ENERGY_COUNTER 为 CHARGE_COUNTER_EXT。
累计电流更新周期为 175.8 毫秒。
当经过 175 毫秒的量化时进行 ADC 采样,采样周期为 4 毫秒。可以调整占空比。
Nexus 10
型号 Nexus 10
电量计 Dallas Semiconductor DS2784 电量计(库仑计数器),带 10 毫欧电流感应电阻。
属性 BATTERY_PROPERTY_CAPACITY
BATTERY_PROPERTY_CURRENT_NOW
BATTERY_PROPERTY_CURRENT_AVERAGE
BATTERY_PROPERTY_CHARGE_COUNTER
BATTERY_PROPERTY_ENERGY_COUNTER
测量结果 电流测量(瞬时电流和平均电流)解析度为 156.3 微安。
CURRENT_NOW 瞬时电流更新周期为 3.5 秒。
CURRENT_AVERAGE 更新周期为 28 秒(不可配置)。
CHARGE_COUNTER(累计电流,不可扩展精度)解析度为 625 微安时。
CHARGE_COUNTER_EXT(内核扩展精度)解析度为 144 纳安时。
当额定电压为 3.7 伏时,ENERGY_COUNTER 为 CHARGE_COUNTER_EXT。
全部更新周期为 3.5 秒。