SMBus аккумулятор на bq40z50 — боль, страдания, подводные камни
На разработку собственного супер-пупер аккумулятора с «куртизанками и преферансом» нас сподвигли статьи на Хабре:
https://habr.com/ru/articles/350142/ — читаешь и кажется все таким простым
https://habr.com/ru/articles/386099/ — очень все подробно и интересно
https://habr.com/ru/articles/386899/ — вроде тоже ничего сложного и даже кое-какие подводные камни описаны.
Ну всё, будем делать на контроллере bq40z50 супер-пупер аккумулятор, а не это вот все, собранное на коленке, что из Китая возят.
Сначала спроектировали форм-фактор, определились с напряжением 10,8, схемой сборки — 3S3P была выбрана модель ячейки, оптимальная для нас по емкости и току, под нее и будем плясать (забегая сильно вперед, можно сразу сказать, что ключевое — это модель ячейки, основные настройки контроллеров для разных сборок, будут одинаковы, но вот ТОНКИЕ настройки, от которых зависит получится ли у вас в итоге или вы уйдете в запой или, что еще хуже, на форумы техподдержки Texas instruments, вот они все настраиваются индивидуально под каждую ячейку).
Мудрый кот, из мультфильма Том и Джерри в отношении написанного другими людьми учил наc «Don«t You believe it» и только сейчас пройдя этот ад, я понял, насколько он был мудр.
Схема будущей платы была взята из datasheet (SLUSCB3 — 56 страниц) для bq40z50r1 от 2015 года, казалось бы, ничего не предвещало беды.
Ну разве что ошибки в документации, про назначение порта FUSE было написано еще в одной из вдохновивших статей, указанных ранее, поэтому это не было сюрпризом. Тем более, что мы решили «сделать по большому», то есть с дополнительным контроллером заряда и балансировки, с отдельным термистором на силовые транзисторы ну и предохранителем — это была фатальная ошибка, но мы пока об этом не знали.
Изготовив плату, закупив и распаяв все элементы, проблемы начались практически сразу:
Предохранитель срабатывал, либо при полной разрядке, либо при полной зарядке.
Силовые транзисторы переставали разряжать после зарядки (при этом заряжать еще можно было)
Силовые транзисторы переставали заряжать после разрядки (при этом разряжать еще можно было)
После цикла заряда разряда контроллер раз в 10 секунд показывал, что идет разрядка в 24–32 ампера и уходил в перманентную ошибку, то есть превращался в кирпич
Если ничего не делать, то контроллер спокойно уходил в shutdown, если отправить такую команду и возвращался оттуда подачей напряжения, но, если это же делать после полной зарядки или полной разрядки, из shutdown контроллер уже не возвращался, даже после подачи напряжения.
Несколько дней внимательного чтения документации, а именно:
bq40z50R5-Technical_Reference — 359 страниц
slua420a — 7 страниц
slua660a — 17 страниц
slua734a — 10 страниц
slua743 — 4 страницы
slua903 — 10 страниц
sluuav7c — 19 страниц
slva725a — 7 страниц
SLUSCS4C — 55 страниц
SLUSCB3 — 56 страниц
Привело нас к мысли, что мы идиоты, потому что вся эта документация противоречит друг другу более того, отладочная плата от самих Texas instruments противоречит datasheet SLUSCB3:
Вместо предохранителя — перемычка (подозрительно), хотя вся остальная схема под него имеется (транзистор, резисторы, конденсаторы).
Вместо второго балансировщика BQ2947xyDSG из SLUSCB3 применяется BQ296103, который, мягко говоря, отличается от предложенного изначально.
Вместо силовых транзисторов Si7116DN применяются Si7114DN, казалось бы, одна цифра разницы, но отличия есть (порог срабатывания шлюза, теплоотведение и мощность лучше)
Транзистор запуска предохранителя Si1406DH заменен на Si1414DH.
Потом мы еще выяснили, что после ревизии чипа R2 документация на него тоже несколько изменилась, например, в ней вообще настоятельно рекомендуют силовые транзисторы CSD17308Q3 (не те, что в 2015 и не те, что на отладочной плате).
Термистор, который рекомендуется ставить между силовыми транзисторами (пины 23 и 24) — это вообще отдельная боль, такое ощущение, что эту часть документации писали психически нездоровые люди. Порт называется PTC, что как бы намекает на то, что это PTC термистор (при росте температуры растет сопротивление), а не NTC термистор (при росте температуры падает сопротивление). НО в документации к отладочной плате он отмечен вообще, как NTC термистор, при этом, на самой плате, туда подключили обычный резистор CRCW120610K0JNEA, видимо, чтобы не заморачиваться. Дальше еще веселее — в документации 2015 года по нему написано «The PTC thermistor is connected between the PTC pin and VSS» то есть на землю, хотя в этой же документации указано чуть выше, что на VCC то есть на BAT, ну подумаешь перепутали + и -, бывает, хорошо хоть в документации 2017 года это поправили…
Проведя еще пару бессонных ночей, заменили балансировщик на тот, что на отладочной плате и о чудо, все начало более менее работать, но впереди этого квеста нас ждал главный босс подземелья — обучение контроллера на нашу аккумуляторную сборку.
Возвращаясь к мудрости кота Тома, в статьях хабра указанных выше, этому посвящены буквально по одному абзацу, из серии:
Процесс обучения для вычисления емкости батареи:
Полностью разрядить батарею и выждать примерно 5 часов.
· Отправить команду Enable и Reset. (Data Memory/Gas Gauging/State/Update Status). В регистрах LStatus статус должен обновиться на 0×04.
· Зарядить батарею до момента, пока в регистре ChargeStatus бит статуса FC (Full charge) не измениться на »1». Затем следует выждать примерно 2 часа. LStatus должен изменится на 0×05. Конечно, заряжать батарею нужно тем методом, который рекомендован производителем батареи.
· Разрядить до уровня С/10 и выждать примерно 5 часов (LStatus должен изменится на 0×06).
· Всё. Цикл обучения завершен.
Или другой вариант про это же:
Чтобы поставить точку в настройке контроллера я прогнал 2 обучающих цикла полный заряд/разряд + релаксация (заняло в общем 30 часов).
Итак, библией в этом процессе должен стать документ SLUA903, его надо прочитать, несколько раз, желательно тщательно всё конспектируя. В нем есть краткое резюме (Conclusion) — его не читайте, так как оно противоречит написанному ранее, на графики тоже не ориентируйтесь, так как они противоречат написанному.
Главный прикол этого документа — непонятно, когда нужно включить режим обучения, перед первой разрядкой или после 5 часового отдыха после нее. Если читать Conclusion (а я вас предупреждал), то там написано, что сначала разрядите, отдохните, потом включайте. НО если читать детальное описание процесса, то всё должно быть наоборот (и на этом вы можете потратить впустую 10 часов, а если с первого раза не поймете, в чем прикол, то и 30).
Итак, если хотите правильную инструкцию по обучению, то таки она есть у меня:
1. включить обучение (Gauge_en | 21 команда), перезагрузить (reset | команда 41), включить тестовый режим для силовых транзисторов (fet_en, тег fet_en должен стать зеленым), должны включиться теги QEN RDIS и GAUGE_EN значение Status update должно быть 04.
2. полностью разрядить (любым допустимым током) пока не загорится тег FD, если этого не произошло, цикл не состоялся, все заново.
3. подождать 5 часов, во время релакса теги VOK и RDIS должны погаснуть и включиться тег REST, значит цикл завершен, если этого не произошло, цикл не состоялся, все заново.
4. полностью зарядить, рекомендуется ток C/2, должен загореться тег VOK, в конце цикла должен загорется тег FC если он загорелся, можно завершить зарядку, если этого не произошло, цикл не состоялся, все заново.
5. подождать 2–5 часов, теги VOK и RDIS погаснут, и загорится тег REST значит цикл завершен, но главное должен загорется тег CF0 и значение Status update станет 05 если этого не произошло, цикл не состоялся, все заново.
6. полностью разрядить, рекомендуется ток не ниже c/10 не выше C/5, пока не загорится тег FD, если этого не произошло, цикл не состоялся, все заново.
7. подождать 5 часов, теги VOK и RDIS погаснут, и загорится тег REST значит цикл завершен, но главное должен загорется тег CF1 и значение Status update станет 06, если этого не произошло, цикл не состоялся, все заново.
Поздравляем, самое сложное позади, но может случиться так, что после СF1 не загорелся тег FIELD_QMAX и Status update не сменился на 0E чтобы можно было сделать «золотую прошивку», не переживайте, не надо начинать все заново, отложите пока мысли о суициде, нужно сделать еще один цикл полной зарядки до тега FC, потом подождать 2 часа и полностью разрядить до тега FD, после чего FIELD_QMAX должен загореться, а UPDATE STATUS должен смениться на 0E, если это все же не помогло, то можете начинать все заново, с чем я вас и поздравляю.
На успешность выполнения тех или иных циклов обучения влияет множество различных настроек, никто вам не скажет каких именно, нигде об этом не написано, производитель чипа, знает, но почему-то не говорит, ему видимо доставляет удовольствие читать на своих форумах тысячи сообщений на одинаковые ошибки, где он, видимо, получает садистское удовольствие, читая о страданиях своих клиентов.
В нашем случае полный цикл обучения занимает (с учетом снижения тока на крайних стадиях зарядки/разрядки) 5+5+5+2+5+5+5+2+5= 39 часов… Любая мелкая ошибка на любом этапе обучения приводит к полному повтору. Метод проб, ошибок их фиксации и поиска по форумам производителя занял примерно 2 недели.
Что касается тонких настроек, то настройки по умолчанию вам не помогут. Под каждую ячейку и тип сборки будут свои настройки, могу лишь в общих чертах перечислить наиболее интересные пункты в настройках. Кстати техническая документация на 359 страниц — это что-то с чем-то. Те разделы, где и так все понятно и без подсказок в документации очень подробно описаны, все сокращения расшифрованы, даны рекомендации как лучше настроить, но те пункты, где вообще не понятно, что это в документации по сути практически скриншот из меню программатора, типа ABC может принимать значение от 0 до 32000, подсказка, ABC это ABC. Спасибо КЭП!
Итак, интересные пункты и разделы.
1. Сначала надо установить прошивку свежую прошивку — R1 — R5 это не ревизия чипа, а версия установленной на нем прошивки, можно R1 превратить в R5 установив прошивку, скачать можно на сайте производителя. Кстати после обновления прошивки до 5 версии при наведении на многие пункты настроек начали появляться подсказки, в 1 версии этого не было
2. Обновите bqstudio до последней версии, старые версии не будут работать с реестром химии выше 1099, также скачайте последнюю версию реестра химии — это повысит шанс найти там те ячейки, который вы будете использовать. Если вам повезло и вы нашли в списке свою ячейку — программируйте (не пропустить вверху галочку- вывести список ячеек не поддерживающих Turbocharge, возможно ваша там). Если не нашли в списке свою ячейку, а уже закупили вагон для массового производства, то как говорил другой мудрый кот из мультфильма Шрек «о мой друг, ты в полной жо………».
Calibration
Current — проверяем правильно ли определилось сопротивление вашего сенсора (мы припаяли на 1 мОм, кто-то выбирает на 5 мОм)
Settings
FET options — тут ставим активным sleeping и если у вас не будет транзистора для precharge ставим активным pchg_comm
LED configuration — много вариаций, зависит от, будет у вас индикация по кнопке, у вас будут LED или ЖК экран с постоянным отображением, что именно вы хотите видеть, тут у каждого индивидуально, но не пропустите этот пункт, тут, если что, всё хорошо с подсказками.
Temperature enable — выставляете активными только те датчики на которых у вас термисторы, остальные отключаете. TSint — это тот самый злосчастный PTC термистор
Temperatuer mode — тут надо сделать активным тот термистор, который отвечает за температуру силовых транзисторов, в нашем случае это тот самый PTC
Если вы не планируете на плате дополнительного контроллера температуры TMP468 то в пунктах EXT TMP отключаете всё.
DA configuration — тут активным ставим SLEEP и при помощи двух битов CC1 и CC0 выбираем сколько у нас последовательно ячеек
SOC Flag Config B — пункт, который стоил нам 60 часов провальных обучений, на форуме нашли ответ, 00СС — и тег FC при полном заряде вам гарантирован.
Lifetimes LFT_T0 — LFT_T6 — тут надо читать документацию к вашей ячейке и правильно установить ее температурные режимы (номер температурной границы не совсем по порядку, T5 и T6 добавили позже, когда им надо было разбить промежуток между T2 и T3 на еще 3.
Advanced charge algorithm
1 Temperature range — очень важный пункт, опять таки, надо читать документацию к вашей ячейке и правильно установить ее температурные режимы.
2. Pre‑charging current — читаем документацию к ячейке выставляем данные (если есть паралельные связи в сборке — умножаем на их количество) в нашем случе было 65 мВ*3
3. Voltage range — читаем документацию к ячейке, в нашем случае было 2500 2900 3650 4000
4. Дальше много пунктов, которые зависят от вашей ячейки, но их надо прописать:
Charge voltage override
Charge current override
Termination config
И все режимы temp charging (low standard high)
Gas Gauging — важны раздел с точки зрения обучения контроллера.
1. Design — нигде кроме форума производителя не сказано какие значения надо здесь ставить, максимальные или номинальные. На самом деле номинальные. cWh — обыскал весь интернет, но не нашел, но это милиВт/ч*10
2. Дальше нужно выставить пороговые значения для тегов FD FC TD TC исходя из вашей ячейки, в нашем случае это были
FD 2600 и 2700
FC 4100 и 4000
TD 2800 и 2900
TC 4100 и 4000
Пороговые значения не ставили специально, но вам никто не запрещает))
3. State — тут можно поставить близкие значения к тому, чего вы хотите добится при обучении, заодно, если у вас сборка 2S или 3S, а не на 4S, то обнулите значения для CELL4. Большинство данных здесь скорректируются после обучения.
SOH FCC MAX надо указать больше, чем у вас прописано в Design — там вы указывали номинал, тут предел.
На этом всё. Полная документация на 359 страниц как бы намекает, что это не так, но к сожалению большинство пунктов в ней практически никак не описаны. Надеюсь данная статья сэкономит несколько дней другим энтузиастам.