对于配有 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 秒。 |