Medir a energia do dispositivo

É possível determinar o consumo de energia de dispositivos Android que incluem um indicador de carga da bateria, como o Summit SMB347 ou o Maxim MAX17050 (disponível em muitos dispositivos Nexus). Use o medidor no sistema quando o equipamento de medição externo não estiver disponível ou for inconveniente se conectar a um dispositivo (como no uso de dispositivos móveis).

As medições podem incluir corrente instantânea, carga restante, capacidade da bateria no início e no final do teste e muito mais, dependendo das propriedades compatíveis do dispositivo (confira abaixo). Para melhores resultados, faça medições de energia do dispositivo durante testes A/B de longa duração que usam o mesmo tipo de dispositivo com o mesmo indicador de combustível e o mesmo resistor de detecção de corrente. Confira se a carga inicial da bateria é a mesma para cada dispositivo para evitar comportamentos diferentes do indicador de combustível em pontos diferentes da curva de descarga da bateria.

Mesmo com ambientes de teste idênticos, não há garantia de que as medições sejam de alta precisão absoluta. No entanto, a maioria das imprecisões específicas do indicador de combustível e do resistor de detecção são consistentes entre as execuções de teste, o que torna as comparações entre dispositivos idênticos úteis. Recomendamos a execução de vários testes em diferentes configurações para identificar diferenças significativas e o consumo de energia relativo entre as configurações.

Ler o consumo de energia

Para ler dados de consumo de energia, insira chamadas para a API no código de teste.

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");

Propriedades disponíveis

O Android oferece suporte às seguintes propriedades do indicador de carga da bateria:

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

A maioria das propriedades é lida de atributos do subsistema power_supply do kernel com nomes semelhantes. No entanto, as propriedades exatas, a resolução dos valores de propriedade e a frequência de atualização disponíveis para um dispositivo específico dependem de:

  • Hardware de indicador de combustível, como um Summit SMB347 ou Maxim MAX17050.
  • Conexão do indicador de combustível ao sistema, como o valor dos resistores de detecção de corrente externa.
  • Configuração do software do chip do indicador de combustível, como valores escolhidos para intervalos de cálculo de corrente médios no driver do kernel.

Para saber mais, consulte as propriedades disponíveis para dispositivos Nexus.

Indicador de combustível do Maxim

Ao determinar o estado de carga da bateria por um longo período, o indicador de combustível Maxim (MAX17050, BC15) corrige as medições de compensação de coulomb-counter. Para medições feitas em um curto período de tempo (como testes de medição de consumo de energia), o indicador de combustível não faz correções, tornando o deslocamento a principal fonte de erro quando as medições atuais são muito pequenas (embora nenhuma quantidade de tempo possa eliminar completamente o erro de deslocamento).

Para um design típico de resistor de detecção de 10 mOhm, a corrente de deslocamento precisa ser melhor que 1,5 mA, o que significa que qualquer medição é +/-1,5 mA. O layout do PCBoard também pode afetar essa variação. Por exemplo, ao medir uma corrente grande (200 mA), você pode esperar o seguinte:

  • 2 mA (erro de ganho de 1% de 200 mA devido ao erro de ganho do indicador de combustível)
  • +2 mA (erro de ganho de 1% de 200 mA devido a erro de resistor de detecção)
  • +1,5 mA (erro de deslocamento do sensor de corrente do indicador de combustível)

O erro total é de 5,5 mA (2,75%). Compare isso com uma corrente média (50 mA), em que as mesmas porcentagens de erro resultam em um erro total de 7%, ou com uma corrente pequena (15 mA), em que +/-1,5 mA resulta em um erro total de 10%.

Para melhores resultados, recomendamos medir mais de 20 mA. Os erros de ganho de medição são sistemáticos e repetíveis, permitindo testar um dispositivo em vários modos e receber medições relativas limpas (com exceções para o deslocamento de 1,5 mA).

Para medições relativas de +/-100 uA, o tempo de medição necessário depende de:

  • Ruído de amostragem do ADC. O MAX17050 com a configuração normal de fábrica produz +/-1,5 mA de variação de amostra para amostra devido ao ruído, com cada amostra entregue em 175,8 ms. É possível esperar +/-100 uA para uma janela de teste de 1 minuto e um ruído limpo de 3 sigma menor que 100 uA (ou ruído de 1 sigma em 33 uA) para uma janela de teste de 6 minutos.
  • Alias de amostra devido à variação de carga. A variação exagera os erros. Portanto, para amostras com variação inerente ao carregamento, use uma janela de teste mais longa.

Dispositivos Nexus com suporte

Nexus 5
Modelo Nexus 5
Indicador de combustível Indicador de combustível Maxim MAX17048 (ModelGauge, sem contador de Coulomb)
Propriedades BATTERY_PROPERTY_CAPACITY
Medições O indicador de combustível não oferece suporte a nenhuma medição além do estado de carga da bateria com uma resolução de %/256 (1/256 de um por cento da capacidade total da bateria).
Nexus 6
Modelo Nexus 6
Indicador de combustível Medidor de combustível Maxim MAX17050 (um contador de Coulomb com ajustes do ModelGauge da Maxim) e um resistor de detecção de corrente de 10 mohm.
Propriedades BATTERY_PROPERTY_CAPACITY
BATTERY_PROPERTY_CURRENT_NOW
BATTERY_PROPERTY_CURRENT_AVERAGE
BATTERY_PROPERTY_CHARGE_COUNTER
BATTERY_PROPERTY_ENERGY_COUNTER
Medições Resolução CURRENT_NOW de 156,25 uA, período de atualização de 175,8 ms.
Resolução CURRENT_AVERAGE de 156,25 uA, período de atualização configurável 0,7 s a 6,4 h, padrão 11,25 segundos.
A resolução CHARGE_COUNTER (corrente acumulada, precisão não estendida) é 500 uAh (leitura bruta do contador de coulomb, não ajustada pelo indicador de combustível para compensação do contador de coulomb, mais entradas do algoritmo ModelGauge m3, incluindo compensação vazia).
CHARGE_COUNTER_EXT (resolução de 8 nAh de precisão estendida no kernel).
ENERGY_COUNTER é CHARGE_COUNTER_EXT na tensão nominal de 3,7 V.
Nexus 9
Modelo Nexus 9
Indicador de combustível Medidor de combustível Maxim MAX17050 (um contador de Coulomb com ajustes do ModelGauge da Maxim) e um resistor de detecção de corrente de 10 mohm.
Propriedades BATTERY_PROPERTY_CAPACITY
BATTERY_PROPERTY_CURRENT_NOW
BATTERY_PROPERTY_CURRENT_AVERAGE
BATTERY_PROPERTY_CHARGE_COUNTER
BATTERY_PROPERTY_ENERGY_COUNTER
Medições Resolução de CURRENT_NOW 156,25 uA, período de atualização de 175,8 ms.
Resolução de CURRENT_AVERAGE 156,25 uA, período de atualização configurável 0,7 s a 6,4 h, padrão 11,25 s.
A resolução de CHARGE_COUNTER (corrente acumulada, precisão não estendida) é 500 uAh.
CHARGE_COUNTER_EXT (resolução de 8 nAh de precisão estendida no kernel).
ENERGY_COUNTER é CHARGE_COUNTER_EXT na tensão nominal de 3,7 V.
Período de atualização de corrente acumulada de 175,8 ms.
ADC amostrado com quantização de 175 ms com um período de amostragem de 4 ms. Pode ajustar o ciclo de trabalho.
Nexus 10
Modelo Nexus 10
Indicador de combustível Um indicador de combustível DS2784 da Dallas Semiconductor (um contador de coulombs), com um resistor de detecção de corrente de 10 mohm.
Propriedades BATTERY_PROPERTY_CAPACITY
BATTERY_PROPERTY_CURRENT_NOW
BATTERY_PROPERTY_CURRENT_AVERAGE
BATTERY_PROPERTY_CHARGE_COUNTER
BATTERY_PROPERTY_ENERGY_COUNTER
Medições A resolução da medição atual (instantânea e média) é de 156,3 uA.
CURRENT_NOW O período de atualização instantânea atual é de 3,5 segundos.O período de atualização do
CURRENT_AVERAGE é de 28 segundos (não configurável).A resolução de
CHARGE_COUNTER (corrente acumulada, precisão não estendida) é 625 uAh.A resolução de
CHARGE_COUNTER_EXT (precisão estendida no kernel) é de 144 nAh.
ENERGY_COUNTER é CHARGE_COUNTER_EXT na tensão nominal de 3,7 V.
O período de atualização para todos é de 3,5 segundos.