Разработка power bank для ноутбука. От макета к готовому изделию. Часть вторая
В прошлой части статьи о разработке PowerBank для ноутбука мы остановились на изготовленном макете, измеренном КПД и пониманием того, что делать дальше. А дальше нужно было оживлять железку. Поэтому представляю вашему вниманию часть вторую: ПО макета.
Перерыв между частями получился довольно большим — все силы были брошены на проект быстрозарядного внешнего аккумулятора, который сейчас собирает поддержку на boomstarter.
Продолжим.
Для того, чтобы понять какие микросхемы нам придется программировать посмотрим на структурную схему макета
Отсюда видно, что придется писать ПО для управляющего МК (STM32F042), а также конфигурировать систему контроля Li-ion аккумуляторов + зарядное устройство (BQ40Z60). Я начал со второго, потому как считал эту часть наиболее сложной.
Для программирования контроллера BQ40Z60 нам понадобится:
— Адаптер EV2400 и EV2300(готовый или самодельный). У меня с прошлых проектов остался EV2300, поэтому я использовал его.
— Программа Battery Management Studio (bqStudio).
Подключается адаптер по шине SMBus, для подключения я оставил точки подпайки на линиях SMBD и SMBC.(Не самое практичное решение — потом понял, что надо было ставить разъем).
После танцев с бубном BQ40Z60 определилась в Battery Management Studio. Причиной тому был спящий режим в который входит контроллер при отсутствии подтяжки на шине SMBus и отсутствии обращения к нему. Просыпается он при подключении ЗУ.
Далее займемся непосредственно настройкой чипа BQ40Z60. Сказать, что у него много регистров — ничего не сказать. Настроек миллион. Поскольку конфигурирование — долгий и сложный процесс(для описания нужна отдельная статья) я опишу его вкратце.
После запуска появляется главное окно Battery Management Studio
Вкладка Data memory содержит большое количество полей в которые мы должны внести параметры батарей и режимы работы контроллера.
На вкладке Chemistry можно попробовать отыскать готовые калибровки для используемых ячеек.
Для моих YOKU LP 5558115 3500mAh готовых калибровок не оказалось (кстати калибровки постоянно обновляются). Нашел похожие YOKU LP 656193 4000mAh. Смекнув, что про имеющиеся пакеты я все равно ничего не знаю, выбрал этот профиль.
Затем во вкладке Data memory я настроил:
Calibration: калибровочные значения для вольтметров(ячейки, батареи и внешнего адаптера), сопротивление датчика тока, калибровочные значения для датчика температуры.
Settings: включение защит, терморезисторов, светодиодов, спящего режима, конфигурации батареи.
Protections: настройка порогов защит(напряжение, время, температура), настройка порогов напряжения внешнего адаптера.
Permanent Fail: настройка порогов срабатывания необратимых ошибок(таких при которых дальнейшая работа батареи невозможна).
Advanced Charge Algorithm: настройка зарядного устройства(токи, напряжения для разных диапазонов температуры, признак окончания заряда, балансировка).
Gas Gauging: настройка блока определения уровня заряда(паспортные емкость/напряжение ячеек, сопротивление проводов, статистика).
Power: настройка режимов работы контроллера.
PF Status: состояние статусных бит Permanent Fail защит.
System Data: поля для данных производителя.
SBS Configuration: настройка порогов срабатывания триггера Alarm, основные данные о батарее(серийный номер, дата производства, производитель, имя, химия).
LED Support: настройка режима свечения индикаторных светодиодов.
Black Box: черный ящик (история изменения статусных бит защит).
Lifetimes: статистика батареи.
Ra Table: таблица внутренних сопротивлений ячеек.
В процессе настройки я изменял далеко не все поля, но для старта этого хватило.
С этой частью схемы был только один аппаратный косяк связанный с выводом 21-AFEFUSE микросхемы. Произошло это вот как:
Схему я драл с отладочной платы за исключением микросхемы вторичной защиты и пережигаемого предохранителя. У BQ40Z60 за пережигание предохранителя отвечает 21 вывод AFEFUSE (так я думал). Поэтому я посмотрел 5 страницу даташита BQ40Z60 увидел в таблице
тип вывода Output и с чистой совестью оставил его болтаться в воздухе. Проблемы пришли после спайки платы: вроде все настройки перебрал (а на тот момент сомнений было очень много), но не работает — не включались зарядный и разрядный транзисторы. После 2х дней сомнений/раздумий/проб и ошибок я заметил, что бит FUSE_EN не установлен и решил «спросить у людей» и когда я запостил вопрос ко мне пришло озарение
Глядя на схему отладочной платы я предположил, что вывод AFEFUSE может быть также входом, что подтвердилось разделом 9.3.2.4 стр.24, где написано, что если вывод не используется, его нужно соединить с землей. Я это сделал пинцетом и все заработало. Через 5 минут мне ответили на e2e.com — ответ четкий и правильный, я высказал свое «фи» по поводу ошибки в таблице выводов — обещали поправить в следующих версиях документации.
Чтобы поставить точку в настройке контроллера я прогнал 2 обучающих цикла полный заряд/разряд + релаксация (заняло в общем 30 часов).
Теперь перейдем к программированию STM32F042. На этапе макета от этого процессора требовалось совсем не много:
— Управлять преобразователем напряжения, обрабатывать кнопки.
— Уходить как можно глубже в сон, чтоб не разряжать батарею.
— Считывать основные параметры АКБ из контроллера(напряжение, ток, уровень заряда, температура, текущее состояние, количество циклов, время до полного заряда/разряда) и выводить их в ПК через USART (поскольку на плате уже стоял преобразователь CP2102). Хоть процессор и содержит USB на борту, в макете я его не использовал, да и делался макет под 051 МК, но я не смог его купить.
Управление преобразователем сводилось к выставлению двух выводов(включение и режим работы), подачи ШИМ (с последующей RC фильтрацией) на вывод задания частоты преобразования микросхемы LTC3780 (в итоге установил частоту на максимум — 400кГц), и вход мониторинга сигнала PowerGood. Но даже тут я умудрился наступить на грабли. Баг был плавающий и возникал когда Power Bank долго полежит выключенным, выражался в том, что он просто не включался. Проблема заключалась в том, что я сначала включал прерывание на сигнал PowerGood от LTC3780, а затем включал саму микросхему(EN). Получалось, что прерывание срабатывало еще до старта преобразователя и выключало его. Переставил события местами и добавил задержку — проблема исчезла. В остальном этот функционал дался легко.
Было решено сделать пользовательский интерфейс с 1 кнопкой и 5 (6) светодиодами (хотя на плате макета было 2 кнопки и 10 светодиодов). Работает он следующим образом:
Устройство выключено -> кратковременное нажатие ( долговременное нажатие (>500 мс) — включение устройства (загорается 5ый светодиод).
Устройство выключено -> подключение ЗУ -> анимация уровня заряда на 4 светодиодах до окончания процесса заряда.
Устройство включено -> кратковременное нажатие — анимация уровня заряда на 4 светодиодах.
Устройство включено -> долговременное нажатие — выключение устройства.
Устройство выключено -> ток потребления меньше 50 мА более 3 мин. — выключение устройства.
Это позволило убрать из устройства 27 элементов.
Опыт реализации спящих режимов на STM32F0xx у меня уже был, поэтому на большие грабли я тут не рассчитывал. Для оптимизации потребления я первым делом заменил LDO 3,3В на mcp1703 с малым током собственного потребления (нужно было не драть с отладки, а сразу ставить его). Размер, цена, потребление, обвес — все меньше, чем у LP2951.
Спасибо пользователю Hardegor за правку по поводу LDO для Li-ion 4s нельзя использовать mcp1703 в силу низкого входного напряжения. Я использовал для химии LiFePo4 — там этой проблемы нет. Будьте внимательны.
-Когда устройство выключено, МК находится в режиме STANDBY и реагирует только на нажатие кнопки или подключение ЗУ. Потребление в таком режиме составляет 108 мкА (100 из них потребляет BQ40Z60).
-При включенном устройстве процессор большинство времени (кроме моментов индикации и опроса BQ40Z60) находится в режиме STOP с потреблением 1,5 мА (1 мА это светодиод). В моменты опроса и индикации ток потребления колеблется от 4,5 до 9 мА.
-При подключенном USB МК в режиме RUN на 48 Мгц, потребление 15 мА. В будущем сделаю питание МК в этом режиме от USB.
Самой большой потенциальной проблемой был опрос BQ40Z60. С SMBus я не работал и до последнего надеялся, что SMBus это I2C 1в1(частично это так, ведь физический уровень у них одинаков), но оказалось, что канальный уровень сильно разнится и это порождало ряд трудностей. Здесь описывать отличия SMBus от I2C я не буду, а приведу ссылку на довольно грамотную статью. На этапе макета я не стал ввязываться в борьбу с SMBus (к слову как программист я на много слабее, чем как схемотехник) и поскольку команды отправки и приёма байта в SMBus и I2C совпадали полностью, я использовал только их. В итоге из BQ40Z60 я считывал SOC, SOH, Current, CellVolt, TimeToFull, TimeToEmpty. В зависимости от значений регистров изменялся режим работы(выдавались предупреждения, любо происходило выключение).
Ну и на стороне ПК конечно была необходима программа, способная отображать считанные с АКБ данные в удобном виде. Поскольку графические интерфейсы я мог только в Borland C++ Builder и делал это очень давно, то я попросил программиста набросать для меня простенькую отладку. Для макета на скорую руку получилось следующее:
Это все работы, которые были проведены на стадии макета. Далее в планах(а поскольку я описываю уже проведенные операции, то часть работ уже сделана) передача ТЗ конструктору для разработки/изготовления корпуса PowerBank, исправление ошибок/доработка схемы, переделка платы под корпус, доработка ПО. После этого устройство будет похожим на товар и, после доведения, станет товаром в прямом смысле этого слова. В следующих частях статьи мы рассмотрим этапы и основные сложности процесса перехода от макета к готовому изделию, работу по корпусированию, рассмотрим стоимости различных решений и операций, оптимизацию, а также увидим конечный результат.
Источник
Ev2300 своими руками схема
Пошаговая инструкция по ремонту аккумуляторной батареи
1) Подключить аккумуляторную батарею к программатору через штатный разъём батареи, используя три соединения: SCL, SDA, GND. В случае если присутствует контакт Sys. Pres., то предусмотреть оперативное соединение его с земляным контактом на разъёме аккумуляторной батареи .
2) Запустить программу UBRT, перейти на основное окно (вкладка SBS).
Когда вы проделаете данную процедуру и если у Вас работоспособный программатор, то программа должна начать чтение аккумулятора. Результат – будет передвигаться жёлтенький маркер и в соответствующих ячейках программы должны читаться осмысленные показания.
В случае, когда аккумулятор не читается – следует подать встречное напряжение 12-16В на разъём аккумулятора с ограничением тока равным 20-30мА. Величину подаваемого напряжения следует выбирать исходя из напряжения аккумулятора (которое написано на корпусе).
Если на корпусе написано 10,8В или 11,1В, то подавать 12В.
Если написано 14,4В или 14,8В – подавать 16В.
3) Прочитать паспорт аккумулятора и сохранить репорт.
Рассмотрим случай, когда аккумулятор:
— читается по шине;
— напряжение на выходе аккумулятора отсутствует;
— напряжения на всех секциях в рамках допустимого (от 3.0В до 4.2В);
Возможно несколько причин, по которым на выходе аккумулятора нет напряжения :
— Sys. Pres. не замкнут — следует замкнуть на минус соответствующий контакт;
— контроллер заблокировал работу аккумулятора (список всех причин в данной статье не приводится);
Одна из основных причин блокировки – это дисбаланс элементов по напряжению. Дисбаланс наступает вследствии того, что элементы в процессе эксплуатации изменяют (теряют) свою ёмкость не одинаково, что вызвано или ненормированным качеством элементов, или неправильной эксплуатацией аккумулятора.
Блокировка может сопровождаться оплавлением предохранителя.
После того, как Вы прочитали паспорт аккумулятора, вскрыли корпус и получили доступ к плате контроллера — Вам следует проверить состояние плавкого предохранителя и при необходимости произвести процедуру его восстановления. (ссылка на фото предохранителей и инструкция по восстановлению)
После восстановления предохранителя следует подключить аккумуляторные элементы к плате контроллера и проверить, что аккумулятор читается через программатор.
Теперь можно приступить к процедуре перепрограммирования контроллера.
4) Перепрограммирование чипа контроллера.
Возможно два варианта работы:
— прямой доступ к памяти (группа H/W команд)
— инженерный доступ к памяти (группа F/W команд).
Источник
Ev2300 своими руками схема
Начну с того, что знаю. В современных ноутбуках батареи живут довольно увлекательной жизнью, о которой я и хочу поговорить.
Батареи подключены к контроллерам заряда, который меряет напряжение на всех «банках», температуру, ток заряд/разряда, ну и управляет непосредственно подачей питания через ключи для заряда/разряда, а еще имеет хитрый элемент защиты — управляемый предохранитель — т.е. в случае чего контроллер может сжечь предохранитель, если решит, что происходит что-то критичное и мало того, поставит флаги ошибок на управление ключами и Ваш аккумулятор перестанет заряжаться и разряжаться. И даже если Вы устраните неисправность, работать не станет. Такой хитрый зверь «общается» с устройством которое питает, и может «рассказать» сколько у него заряда, марку, дату создания, количество циклов заряд/разряд и многое другое, по средством протокола SMBus, разработанного TEXAS Instruments. По своей сути, это всеми любимый I2C с некоторыми отличиями (ограничениями).
На данный момент есть несколько наиболее распространённый софт для решения проблем с АКБ это UBRT, Smart Battery, Be2Work, а также программное обеспечение от TEXAS Instruments работающее через «буржуйский» адаптер EV2300 (клон которого я найти не смог, а заказывать показалось дорого). По этому был собран i2c-philips переходник для ЛПТ порта который позволил подключить батарею и считать с неё минимум информации.
Сразу оговорюсь — софт для работы с АКБ платный. Отличная программа UBRT реально может многое, только за деньги. А у меня нет ни возможности ни желания платить, тем более можно самому попробовать во всем разобраться и если повезет, последователи тоже не наступят на мои «грабли».
В моем АКБ была установлена микросхема bq20z45 чтоб организовать связь я пишу програмку для STM32 на базе STM32vldiscovery, которая в свою очередь, переслав данные по i2с, пересылает ответ, полученный от АКБ, UARTом через МАХ232 в COM порт компа, где я все принимаю и «слушаю».
Вы спросите «зачем все это?» отвечу — для того, чтоб после замены элементов любой мог настроить свою батарею. А не только лица, желающие, чтоб им заплатили за пару нажатий по клавиатуре.
Итак, вернемся, фирма TEXAS Instruments — разработчик множества контроллеров заряда рекомендует производителям менять стандартный код доступа SealKey на что-нибудь, вот и получается, что «подсаживает» конечного потребителя на обязательную замену батареи в случае чего, или как минимум обязывает платить кому-то за разблокировку. У меня много негативных эмоций по этому поводу, ведь заменить элементы и я могу без проблем. Вернемся к паролю — Там 4 байта, и всё бы ничего и можно было бы перебрать, но вот что я прочел в даташите:
«Instructs the bq20z40/bq20z45 to enable access to the SBS functions and data flash space and clear the
[SS] flag. This two-step command must be written to ManufacturerAccess in the following order: first word
of the UnSealKey first, followed by the second word of the UnSealKey. If the command fails, 4 seconds
must pass before the command can be reissued»
говорит о том, что методом подбора через 4 секунды комбинацию я буду перебирать до следующего тысячелетия.
Интересно было бы разобраться как победить такого «зверя».
Может найти единомышленников и разобраться с хитро-умным СМбас, и контроллерами заряда.
Буду ждать Ваших ответов.
Реклама | ||
| ||
loki113 | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Зарегистрирован: Пт сен 03, 2010 21:36:26 |
|