Как измерить энергопотребление устройства

Вы можете определить энергопотребление устройств 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 мОм ток смещения должен быть не более 1,5 мА. Это значит, что погрешность измерения составляет +/-1,5 мА (на это значение также может влиять разводка печатной платы). Например, при измерении большого тока (200 мА) можно ожидать следующее:

  • 2 мА (ошибка усиления 1% при 200 мА из-за ошибки усиления датчика уровня топлива)
  • +2 мА (ошибка усиления 1% от 200 мА из-за ошибки измерительного резистора)
  • +1,5 мА (ошибка смещения датчика тока от индикатора заряда)

Общая погрешность составляет 5,5 мА (2,75%). Для сравнения: при среднем токе (50 мА) те же проценты погрешности дают общую погрешность 7 %, а при малом токе (15 мА) погрешность +/-1,5 мА дает общую погрешность 10%.

Для получения более точных результатов рекомендуем измерять ток силой более 20 мА. Ошибки измерения усиления являются систематическими и повторяемыми, поэтому вы можете тестировать устройство в разных режимах и получать точные относительные измерения (за исключением смещения на 1,5 мА).

Для относительных измерений +/-100 мкА необходимое время измерения зависит от:

  • Шум, вызванный выборкой АЦП. При стандартной заводской конфигурации MAX17050 отклонение от образца к образцу составляет +/-1,5 мА из-за шума, при этом каждый образец передается с интервалом 175,8 мс. В течение минуты отклонение составит примерно +/-100 мкА, а в течение шести минут при уровне шума 3 сигма отклонение будет менее 100 мкА (или 1 сигма при уровне шума 33 мкА).
  • Псевдонимизация выборки из-за изменения нагрузки. Разброс значений увеличивает погрешность, поэтому для выборок с разбросом, обусловленным загрузкой, рекомендуется использовать более длительный период тестирования.

Поддерживаемые устройства Nexus

Nexus 5
Модель Nexus 5
Указатель уровня топлива Датчик топлива Maxim MAX17048 (ModelGauge, без счетчика кулонов)
Свойства BATTERY_PROPERTY_CAPACITY
Измерения Индикатор заряда батареи поддерживает только измерение уровня заряда с точностью до 1/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 нАч.
ENERGY_COUNTER – CHARGE_COUNTER_EXT при номинальном напряжении 3,7 В.
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 нАч.
ENERGY_COUNTER – CHARGE_COUNTER_EXT при номинальном напряжении 3,7 В.
Период обновления накопленного тока – 175,8 мс.
АЦП выполняет выборку с квантованием 175 мс и периодом выборки 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 нАч.
ENERGY_COUNTER – CHARGE_COUNTER_EXT при номинальном напряжении 3,7 В.
Период обновления для всех составляет 3,5 секунды.