Хабрахабр

Использование аккумулятора от iPhone при разработке носимой электроники

Приветствую, читатель.
Довольно часто у меня возникает задача разработки портативных устройств с питанием от одной ячейки Li-ion аккумулятора. И, если заказчика обычно это не беспокоит, то у меня, как у опытного инженера, при виде такого ТЗ по спине пробегает дрожь. Это связано с тем, что оценка уровня заряда аккумулятора, а также оставшегося времени работы — это очень непростая задача, хотя на первый взгляд может показаться иначе.

Есть несколько вариантов действия в таком случае, о них поговорим ниже.
- Самое простое — не делать ничего для определения уровня заряда АКБ. Схема заряда на простом линейном ЗУ (например, на TP4054) и преобразователь напряжения для питания устройства. Выключится без предупреждения и в самый неподходящий момент.

Результат примерно аналогичный предыдущему пункту, но требующий больше усилий. - Измерять напряжение на АКБ. Транзистор VT7 нужен для исключения паразитной запитки МК через вывод EN.
VBAT – напряжение батареи
VBAT_mes – напряжение, приходящее на АЦП
EN – сигнал управления делителем (0-выкл, 1-вкл)
Теперь мы знаем напряжение АКБ, мы – большие молодцы. Типовая схема для измерения:

По сути, это делитель напряжения на резисторах R19 и R21, подключаемый через ключ VT6. Дело в том, что типовая разрядная кривая Li-ion АКБ, мягко говоря, не линейна и она зависит от тока потребления и температуры самой АКБ:

Глядя на эти графики, можете сказать какова остаточная емкость АКБ при напряжении 3,5В? НО это почти ничего не дает!!! Это позволит хоть немного оправдать трудозатраты, но ни о какой точности и речи быть не может. Думаю, что нет…
Этот метод можно немного улучшить, воспользовавшись встроенным в МК термодатчиком для приблизительной оценки температуры АКБ, а также либо поставить датчик для измерения тока, либо (если ток потребления примерно постоянен) построить разрядную кривую для типового тока потребления. Такой метод дает накапливающуюся ошибку, поскольку калибровка может быть только в двух точках (полный заряд или полный разряд), а они не всегда достигаются. Для индикации заряда на 3х светодиодах – да, пойдет.
В случае постоянного тока потребления можно считать время работы от АКБ и оценивать потребленный заряд и время нахождения на зарядке для оценки накопленного заряда. К тому же по мере износа АКБ максимальное время работы должно корректироваться, но в целом метод имеет право на жизнь.

Для ее реализации нам необходимы датчики тока, температуры и напряжения АКБ. - Делать собственную систему контроля заряда АКБ (BMS). Считаем, что МК в устройстве уже есть и остается «всего лишь» написать для него ПО, на которое у меня в свое время ушло чуть меньше года.

Например, схема для bq27220:

Есть несколько нюансов при выборе такой концепции:
- Взять готовую микросхему Gas Gauge (например, от TI или Maxim Integrated), сконфигурировать ее, откалибровать и работать.

  1. В случае, если батарея съемная, необходимо либо ставить схему определении заряда на саму батарею (иначе она будет обнуляться при отключении), либо использовать специальные версии Gas Gauge, которые допускают отключение АКБ. В первом случае, батарея вашего устройства становится уникальной и ее замена возможна только с вашим участием, что не всегда удобно. Во втором случае, существует проблема размещения термодатчика на АКБ.
  2. Высокая стоимость решения. Основные компоненты: микросхема Gas Gauge, микросхема защиты, транзисторы, терморезистор, резистор датчика тока.

Абсолютно простая микросхема без датчиков температуры и тока, с соответствующей низкой точностью, но при этом дешевая, простая в использовании и программировании. - Использовать более простые варианты готовых решений типа CW2015:

Это Китайский аналог микросхемы MAX17048. Микросхема была найдена на просторах сети в процессе написания материала, опыта с ней нет, но есть желание попробовать, поскольку вариант действительно интересный. Имеет возможность работы на стороне устройства, что позволяет не модифицировать саму батарею. Возможно, в следующем материале я расскажу об этой микросхеме подробнее.

На мой взгляд этот метод самый простой, но дает наилучший результат. - И, наконец, последний известный мне метод, которому я хочу посвятить сегодняшнюю статью. При этом батарея уже собрана и откалибрована. Заключается он в том, что мы берем батарею от iPhone со встроенным Gas Gauge и защитой, подключаемся по HDQ или I2C, опрашиваем и работаем. Прошу обратить особое внимание на неизвестный контроллер с маркировкой A1141. Ниже таблица, с известными мне, вариантами АКБ:

Таблица частично взята с сайтов ripitapart.com и www.macplus.ru. Автор блога, из которого я брал таблицу, не был уверен, что ему досталась оригинальная батарея от iPhone SE. Эта микросхема производства компании PowerFlash и это вся информация, которую удалось найти. Но пока посмотрим на аккумуляторы:

Как видно АКБ на любой вкус и цвет, с яблоком и без. Ниже мы будем вынуждены более подробно рассмотреть эту микросхему. Из недостатков стоит отметить, что пропорции длина/ширина примерно 3:1, а это не всегда удобно, а также уникальный разъем для подключения. Также их можно соединять параллельно для увеличения емкости, с раздельным опросом. Были закуплены несколько экземпляров в разных местах для проверки:

Правая была куплена в Китае, остальные в Москве. В силу популярности телефонов Apple эти аккумуляторы можно спокойно купить во многих местах и в большом количестве (как оказалось это не совсем верно).
При разработке беспроводного автономного RFID считывателя мы пошли именно этим путем.

Была выбрана батарея от iPhone 6, которая подходила нам и по емкости, и по габаритам. При их проверке будут получены достаточно интересные результаты. Стоимость $6-11. Проверка проводилась с помощью самого RFID считывателя, программатора EV2300 от TI и программы Battery Management Studio.
Схема питания RFID считывателя представлена на рисунке:

Линейное ЗУ на базе STC4054 (TP4054), ток заряда 500 мА, включатель питания с автоподхватом на базе геркона SF1, конденсатора C19, диода VD4 и резистора R15, а также импульсный преобразователь на базе NCP1529.
Первым я подключил экземпляр из Китая за $6:

Батарея отвечает, НО не отображался ток ни при заряде, ни при разряде, напряжение не соответствовало реально измеренному и степень заряда не менялась. Особое внимание обратите на коробочку с надписью «Ориг», позже мы к ней вернемся. Появилось предположение, что этот экземпляр — подделка, поэтому снял с него защитный скотч, чтобы посмотреть на плату:

Вот это поворот… Я не стал даже перерисовывать схему – тут и так понятно, что стоит эмулятор bq27545 и цепь защиты от переразряда/перезаряда. На команды АКБ не отвечал. В остальном ведет себя так же. Сразу появилась мысль сэкономить себе время и раскрыть все аккумуляторы.

Сосед слева от Китайского коллеги за $8 похож с разницей в маркировке на микросхемах. К сожалению, у меня не было под рукой iPhone 6 для проверки этих батареи в целевом устройстве, уж очень интересно было посмотреть как телефон повел бы себя при работе от этих АКБ.

А это центральный аккумулятор, стоимостью $8. Эти 2 экземпляра сразу в мусорку. В Battery Management Studio эта батарея притворяется bq27545 более искусно. В нем даже датчик тока есть и какая-то 8ми выводная микросхема со скромной маркировкой 6G3. Но если бы все это было реальным, то подделка бы не была подделкой. Отображается уровень заряда, корректное напряжение, ток батареи. На картинке показан ток потребления RFID считывателя, который измерен батареей при постоянном считывании карты.

В реальности он составляет ~55 мА для такого режима работы и, поскольку поле считывателя включено всегда, то нулем не может быть. В реальности температура была задана константой, ток измерялся очень плохо. Естественно, все остальные параметры высчитываются некорректно (уровень заряда, время работы до полного разряда и тд). При заряде (когда ток постоянен на большом промежутке времени) датчик тока работает нормально. В целом, это неудачная попытка китайцев написать обманку bq27545 на МК (во всяко случае я думаю, что это так). Флаг FC (Full charge) устанавливается при напряжении 4,4В.

На команды батарея не отвечает, флаги QEN и RUP_DIS не выставляются. Именно он оказался максимально приближен к тому, что мы искали (и как теперь не верить рекламе?):

Стоимость его составила $9. Тоже в мусор.
Помните, я просил обратить особое внимание на экземпляр в коробочке с надписью «Ориг»? С этим экземпляром я стал работать более плотно. В центре прекрасно видно микросхему с маркировкой SN27545 — это как раз то, что мы искали. Я никак не мог получить установленный флаг FC (Full charge), что означало окончание процесса заряда. В процессе проведения пробного цикла заряд-разряд возникли проблемы. Одной из возможных причин оказался USB кабель с большим падением напряжения (до микросхемы ЗУ доходило 4,5В), его мы заменили на более качественный с меньшим падением напряжения. Ток заряда при напряжении АКБ близком к 4,2В становился крайне малым (около 20мА) и процесс заряда грозил не закончится никогда. Проблема оказалась банальна, но ее поиск занял 2 дня. Показатели улучшились, АКБ зарядился до 4,2В, ток упал до 0, но SOC (State of charge – уровень заряда) доходил лишь до 85, соответственно флаг FC не устанавливался.

Несколько суток я гонял циклы с расчетом, что батарея обучится, но это не помогало. ЗУ стандартное на 4,2В и я совсем не обратил внимания, что батарея на 4,35В и происходит неполный заряд. В какой-то момент я обратил внимание, что батарея на 4,35В и это стало ответом на все вопросы. Оказалось, что такие микросхемы существуют, но в нашей великой стране спокойно их не купить (видимо непопулярны от слова совсем). Поскольку платы уже были изготовлены, то единственным вариантом нормально выйти из ситуации стал поиск замены STC4054 с напряжением 4,35В. Для этого сделаем «подпорку» в 0,15В для микросхемы ЗУ с помощью диода:

Надо признать, что колхоз заработал, флаг FC установился, все работает, но конечное напряжение АКБ составляет 4,4В (падение на диоде больше требуемых 0,15В).

Важно отметить, что можно заряжать и до 4,2В с соответствующей потерей ~15% емкости, но при этом существенно продлить жизнь АКБ. Поэтому был заказан вариант MCP73832T-3 с ожиданием в пару недель.
Ну а пока заказанное едет, мы сделаем колхозный патч для проверки концепта. Самый дорогой ($11), в самой крутой упаковке и потребовавший больше всего времени на себя. С экземпляром «Ориг» мы закончили – его можно смело закладывать в разработку.
Остался последний экземпляр. При принудительном подключении как к bq27545 в Battery Management Studio мы видим следующую картину:

Полный мусор. Смотрим что внутри:

Вот она неизвестная микросхема A1141 на которую нет никакой документации кроме страницы производителя. Понятно, что если A1141 имеет другие адреса параметров или отличный от bq27545 формат хранения данных, то без документации с этой АКБ нам ничего не светит. При попытке заряда током ~500 мА показывает 125 мА, при разряде током ~25 мА показывает 214 мА. Я взял таблицу команд микросхемы bq27545:

И считал регистры напряжения (0x08 и 0x09) через меню Advanced Comm:

Получаем 0x10<<8 | 0x38 = 4152 или 4,152В, что соответствует измеренному мультиметром напряжению 4,15В. Поэтому ее отложили в сторону, но уже под конец написания материала я решил подключить ее еще раз. Замечаем, что 57мВ — это ровно 0x38, то есть значение 0x08 регистра. Так если данные правильные почему же в программе отображается 57мВ??? Считано 0x2c = 0x60, 0x2d = 0 (в случае с параметром SOC старший регистр всегда нулевой). При напряжении на АКБ 4,152В вполне правильным выглядит уровень заряда в 96%, его можно получить считав регистры 0x2c и 0x2d. Для проверки этой теории АКБ была подключена непосредственно к RFID считывателю и опрос батареи велся через МК. Появилось предположение, что программа или EV2300 не может считать (или АКБ не отвечает) либо старший байт в запросе, либо байт с нечетным адресом. Микросхема bq27545 для связи с управляющим контроллером использует однопроводной протокол HDQ, который на STM32 достаточно удобно реализуется на базе однопроводного UART благодаря поддержке режима Half Duplex.
Т.к. Интерфейс HDQ был реализован согласно документу от TI. UART(1))
bat.charge() # заряд
bat.read_u16(0x14) # произвольный регистр
На поверку оказалось, что A1141 не отвечает на запрос чтения байт с нечетными адресами.

На осциллограмме видно, что запрос есть, а ответа нет. наш RFID считыватель работает на MicroPython, мы обернули работу с HDQ в класс и получили работу с контроллером заряда в следующем виде:
from hdq import HDQ
bat = HDQ(pyb. Были считаны основные параметры батареи:

Полная победа! Когда добавили перезагрузку логики обмена данными (Break) перед каждым запросом – через раз, но микросхема стала отвечать корректно.

Затем сравнили скорость обмена EV2300 и RFID считывателя и оказалось, что EV2300 использует скорость ниже на 10-15%, чем устанавливает TI:

После уменьшения скорости HDQ и выполнения Break при каждом запросе АКБ нормально заработала! Осталось рассказать о нюансах работы с батареей со стороны ПО (использование спящих режимов, ток пробуждения и тд), но это удвоит объем записи и, пожалуй, я напишу это в другой раз. По факту A1141 оказалась качественным клоном bq27545 с небольшими недостатками.

Честно говоря, изначально планировалось писать материал в стиле пришел, увидел, победил, но в процессе вылезло много нюансов (особенно хороша борьба с A1141) и материал получился очень интересным и обширным. Выводы.
Как видно, есть много вариантов действия при разработке устройств с питанием от Li-ion батареи. Поэтому выбор поставщика в данном случае очень актуален. Из 5 экземпляров батарей, только 2 по факту можно нормально использовать. Всем спасибо за внимание! Если вы видели АКБ от других устройств, которые содержат в себе BMS, то напишите модели в комментариях.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть