您可以确定 Android 设备的功耗,这些设备包含电池电量计,例如 Summit SMB347 或 Maxim MAX17050(在许多 Nexus 设备上可用)。当外部测量设备不可用或不方便连接到设备时(例如在移动使用中),请使用系统内置电量计。
测量可以包括瞬时电流、剩余电量、测试开始和结束时的电池容量,以及更多信息,具体取决于设备支持的属性(见下文)。为获得最佳结果,请在使用相同设备类型、相同电量计和相同电流检测电阻器的长时间运行 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 mOhm 检测电阻器设计,偏移电流应优于 1.5 mA,这意味着任何测量值均为 +/-1.5 mA(PCBoard 布局也会影响这种变化)。例如,在测量大电流 (200 mA) 时,您可以预期以下情况
- 2 mA(由于电量计增益误差,200 mA 的 1% 增益误差)
- +2 mA(由于检测电阻器误差,200 mA 的 1% 增益误差)
- +1.5 mA(来自电量计的电流检测偏移误差)
总误差为 5.5 mA (2.75%)。将其与中等电流 (50 mA) 进行比较,在后者中,相同的误差百分比会产生 7% 的总误差;或者与小电流 (15 mA) 进行比较,在后者中,+/-1.5 mA 会产生 10% 的总误差。
为获得最佳结果,我们建议测量大于 20 mA 的电流。增益测量误差是系统性的且可重复的,这使您能够在多种模式下测试设备并获得清晰的相对测量值(1.5 mA 偏移量除外)。
对于 +/-100 uA 的相对测量,所需的测量时间取决于
- ADC 采样噪声。具有正常出厂配置的 MAX17050 会因噪声产生 +/-1.5 mA 的样本到样本的偏差,每个样本在 175.8 ms 时交付。对于 1 分钟的测试窗口,您可以预期大致 +/-100 uA,对于 6 分钟的测试窗口,您可以预期小于 100 uA 的干净 3-sigma 噪声(或 33 uA 的 1-sigma 噪声)。
- 由于负载变化导致的样本混叠。变化会夸大误差,因此对于加载中固有变化的样本,请考虑使用更长的测试窗口。
支持的 Nexus 设备
Nexus 5
型号 | Nexus 5 |
---|---|
电量计 | Maxim MAX17048 电量计 (ModelGauge,无库仑计数器) |
属性 | BATTERY_PROPERTY_CAPACITY |
测量结果 | 除了电池充电状态(分辨率为电池满容量的 %/256 (1/256%))外,该电量计不支持任何其他测量。 |
Nexus 6
型号 | Nexus 6 |
---|---|
电量计 | Maxim MAX17050 电量计(带 Maxim ModelGauge 调整的库仑计数器)和一个 10 mohm 电流检测电阻器。 |
属性 | BATTERY_PROPERTY_CAPACITY BATTERY_PROPERTY_CURRENT_NOW BATTERY_PROPERTY_CURRENT_AVERAGE BATTERY_PROPERTY_CHARGE_COUNTER BATTERY_PROPERTY_ENERGY_COUNTER |
测量结果 | CURRENT_NOW 分辨率为 156.25 uA,更新周期为 175.8 ms。CURRENT_AVERAGE 分辨率为 156.25 uA,更新周期可配置为 0.7 秒 - 6.4 小时,默认值为 11.25 秒。CHARGE_COUNTER (累积电流,非扩展精度)分辨率为 500 uAh(原始库仑计数器读数,未通过电量计针对库仑计数器偏移进行调整,以及来自 ModelGauge m3 算法(包括空补偿)的输入)。CHARGE_COUNTER_EXT (内核中的扩展精度)分辨率为 8 nAh。ENERGY_COUNTER 是标称电压为 3.7 V 时的 CHARGE_COUNTER_EXT 。 |
Nexus 9
型号 | Nexus 9 |
---|---|
电量计 | Maxim MAX17050 电量计(带 Maxim ModelGauge 调整的库仑计数器)和一个 10 mohm 电流检测电阻器。 |
属性 | BATTERY_PROPERTY_CAPACITY BATTERY_PROPERTY_CURRENT_NOW BATTERY_PROPERTY_CURRENT_AVERAGE BATTERY_PROPERTY_CHARGE_COUNTER BATTERY_PROPERTY_ENERGY_COUNTER |
测量结果 | CURRENT_NOW 分辨率为 156.25 uA,更新周期为 175.8 ms。CURRENT_AVERAGE 分辨率为 156.25 uA,更新周期可配置为 0.7 秒 - 6.4 小时,默认值为 11.25 秒。CHARGE_COUNTER (累积电流,非扩展精度)分辨率为 500 uAh。CHARGE_COUNTER_EXT (内核中的扩展精度)分辨率为 8 nAh。ENERGY_COUNTER 是标称电压为 3.7 V 时的 CHARGE_COUNTER_EXT 。累积电流更新周期为 175.8 ms。 ADC 以 175nbsp;ms 量化进行采样,采样周期为 4 ms。可以调整占空比。 |
Nexus 10
型号 | Nexus 10 |
---|---|
电量计 | Dallas Semiconductor DS2784 电量计(库仑计数器),带有一个 10 mohm 电流检测电阻器。 |
属性 | BATTERY_PROPERTY_CAPACITY BATTERY_PROPERTY_CURRENT_NOW BATTERY_PROPERTY_CURRENT_AVERAGE BATTERY_PROPERTY_CHARGE_COUNTER BATTERY_PROPERTY_ENERGY_COUNTER |
测量结果 | 电流测量(瞬时和平均)分辨率为 156.3 uA。CURRENT_NOW 瞬时电流更新周期为 3.5 秒。CURRENT_AVERAGE 更新周期为 28 秒(不可配置)。CHARGE_COUNTER (累积电流,非扩展精度)分辨率为 625 uAh。CHARGE_COUNTER_EXT (内核中的扩展精度)分辨率为 144 nAh。ENERGY_COUNTER 是标称电压为 3.7 V 时的 CHARGE_COUNTER_EXT 。所有更新周期均为 3.5 秒。 |