Найти тему
NEOVOLT

Откуда берётся процент заряда батареи в современных смартфонах?

Оглавление

Узнайте, как смартфон «понимает», что в батарее уже 100% или осталось 50%, либо 0% заряда. Рассказывает инженер на примере алгоритмов в Android.

Указатель уровня заряда смартфона

Операционная система на смартфонах определяет заряд батареи с помощью специальной электросхемы. В документации её называют «Fuel Gauge», переводится как «Уровень Топлива». Да, кому-то из разработчиков было привычнее так назвать по индикатору в автомобилях.

Как работает указатель уровня заряда батареи в смартфонах?

В разных моделях телефонов для этого использовались алгоритмы и чипы с отличающимися подходами [подробнее говорили здесь]. Но в современных мобильных гаджетах методика их работы во многом одинаковая.

Телефон заряжается до 101%! Как такое возможно?

Размещение и подключение чипа указателя уровня заряда батареи

Операционная система использует чип указателя уровня заряда батареи для оценки уровня заряда батареи. Микросхема почти всегда расположена на внутренней печатной плате смартфона. Очень редко на плате контроллера аккумулятора, так как это удорожает его.

Принцип работы контроллера аккумулятора в телефоне и гаджетах

Хотя иногда контроллер находится в цепи вместе с другими компонентами вроде антенны NFC и катушки для беспроводной зарядки. Вся эта схема подключена к ячейке через гибкие проводники и связана с микросхемой на системной плате через гибкий шлейф или распаянные провода.

Чем проще контроллер на самом аккумуляторе, тем он дешевле. Это важно, так как аккумулятор — это сменный расходник.
Чем проще контроллер на самом аккумуляторе, тем он дешевле. Это важно, так как аккумулятор — это сменный расходник.

Измерение напряжения и тока аккумуляторной батареи

Чип указателя уровня заряда отвечает за измерение напряжения и тока аккумуляторной батареи. Напряжение используется для определения состояния заряда батареи (SOC), а ток используется для расчета состояния работоспособности батареи (SOH).

Однако, например, в большинстве смартфонов Samsung применяется микросхема Maxim MAX17*** (производят Mouser Electronics, Analog Devices и другие), которая не имеет никаких входов для измерения тока — там есть только датчик напряжения батареи.

Микросхема управления логикой заряда и разряда, определения уровня заряда.
Микросхема управления логикой заряда и разряда, определения уровня заряда.

Обычно так:

  • 4,2-4,35 В — 100%,
  • 3-3,2 В — 0% и выключение,
  • 2,6-2,8 В — разрыв цепи для защиты от переразряда.
Какое напряжение Li-ion-аккумулятора лучше: 3,6В, 3,7В, 3,75В,...

Применение моделирования батареи Li-ion

Согласно описанию производителя, чип Maxim MAX использует «сложную схему моделирования батареи Li-ion «ModelGauge™» (ссылки на описание не работают в России, загуглите через VPN). Он непрерывно отслеживает относительное состояния заряда (SOC) батареи в «широком диапазоне профилей заряда/разряда» (имеются ввиду разные протоколы зарядки, в том числе быстрые).

Математическая модель аккумуляторной батареи в электронике:...

Получение процента заряда батареи с помощью программного алгоритма в Android

Далее в операционной системе программный алгоритм определяет, как выводить процент. В Android-устройствах, если это не дорабатывалось отдельными надстройками вроде MIUI от Xiaomi, код можно привести в упрощённом виде для понимания принципа работы:

  1. val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let
  2. { ifilter ->
    context.registerReceiver(null, ifilter)
    }
  3. val level: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) ?: -1
  4. val scale: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_SCALE, -1) ?: -1
  5. val batteryPct: Float = level * 100 / scale.toFloat()

Что этот код значит?

Код написан на языке программирования Kotlin и используется для получения текущего уровня заряда батареи в Android. Класс BatteryManager — контроль уровня заряда аккумулятора и состояния зарядки.

  1. Первая строка кода создает фильтр «намерений» (intent), который отслеживает изменения состояния батареи.
  2. Вторая строка кода регистрирует «приёмник» (receiver), который «прослушивает» намерение состояния батареи.
  3. Третья строка кода извлекает текущий уровень заряда батареи из «намерения» состояния батареи и сохраняет его в переменной с именем «уровень» (level).
  4. Четвертая строка кода извлекает максимальный уровень заряда батареи из «намерения состояния батареи» и сохраняет его в переменной с именем «масштаб» (scale).
  5. Пятая строка кода вычисляет текущий процент заряда батареи путём деления текущего уровня заряда батареи на максимальный уровень заряда батареи и умножения на 100.

Система способна извлекать даже текущий статус зарядки: заряжается сейчас через USB или зарядное устройство переменного тока. Простыми словами, система определяет состояние батареи, извлекая ключевые данные через алгоритм в микросхеме.

И если здесь что-то пошло не так, то намерение будет прописано с ошибкой — для таких ситуаций и нужна калибровка индикации.

Калибровка аккумулятора смартфона: неужели правда так нужна?

***

Процентное значение заряда батареи не всегда точное. Это число зависит от многих факторов.

Например, постаревшая батарея или изношенная даёт искажённые значения, которые алгоритм обрабатывает как действительные. В результате в операционной системе процент увеличивается или падает скачками.

👍 Используйте процентную шкалу как ориентир, а не как точное измерение.

Уровень заряда аккумулятора в процентах не так уж и точен

Кстати говоря, по этой причине многие производители сейчас по умолчанию отключают цифровое значение процента заряда, оставляя только иконку. И многим пользователям приходится включать процент в настройках Android [пример такой инструкции].

Само определение уровня заряда достаточно примитивное и простое, но требует алгоритмов, чтобы корректировать нестабильные электрохимические процессы литий-кобальтовых систем.
Само определение уровня заряда достаточно примитивное и простое, но требует алгоритмов, чтобы корректировать нестабильные электрохимические процессы литий-кобальтовых систем.

Где найти дополнительную информацию о контроле уровня заряда батареи в Android?

Для разработчиков Android компания Google предоставляет информацию о том, как контролировать уровень заряда батареи и состояние зарядки мобильного устройства. Там же приведены куски кода на Kotlin для более детального понимания.

🔻 Документация Android по индикации и мониторингу батареи:
https://developer.android.com/training/monitoring-device-state/battery-monitoring

👇 Здесь мы рассказали всю правду об аккумуляторах

Почему с аккумуляторами для гаджетов так много обмана?
Лихорадка Li-ion: как России извлечь выгоду, пока Запад «играется»...
Обещают новый аккумулятор — ни одного не появилось. Почему?
Вредна ли быстрая зарядка для аккумулятора телефона?