На разработку собственного супер-пупер аккумулятора с "куртизанками и преферансом" нас сподвигли статьи на Хабре:

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:

  1. Вместо предохранителя – перемычка (подозрительно), хотя вся остальная схема под него имеется (транзистор, резисторы, конденсаторы).

  2. Вместо второго балансировщика BQ2947xyDSG из SLUSCB3 применяется BQ296103, который, мягко говоря, отличается от предложенного изначально.

  3. Вместо силовых транзисторов Si7116DN применяются Si7114DN, казалось бы, одна цифра разницы, но отличия есть (порог срабатывания шлюза, теплоотведение и мощность лучше)

  4. Транзистор запуска предохранителя Si1406DH заменен на Si1414DH.

  5. Потом мы еще выяснили, что после ревизии чипа R2 документация на него тоже несколько изменилась, например, в ней вообще настоятельно рекомендуют силовые транзисторы CSD17308Q3 (не те, что в 2015 и не те, что на отладочной плате).

  6. Термистор, который рекомендуется ставить между силовыми транзисторами (пины 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 статус должен обновиться на 0x04.

·         Зарядить батарею до момента, пока в регистре ChargeStatus бит статуса FC (Full charge) не измениться на «1». Затем следует выждать примерно 2 часа. LStatus должен изменится на 0x05. Конечно, заряжать батарею нужно тем методом, который рекомендован производителем батареи.

·         Разрядить до уровня С/10 и выждать примерно 5 часов (LStatus должен изменится на 0x06).

·         Всё. Цикл обучения завершен.

Или другой вариант про это же:

Чтобы поставить точку в настройке контроллера я прогнал 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

  1. FET options – тут ставим активным sleeping и если у вас не будет транзистора для precharge ставим активным pchg_comm

  2. LED configuration – много вариаций, зависит от, будет у вас индикация по кнопке, у вас будут LED или ЖК экран с постоянным отображением, что именно вы хотите видеть, тут у каждого индивидуально, но не пропустите этот пункт, тут, если что, всё хорошо с подсказками.

  3. Temperature enable – выставляете активными только те датчики на которых у вас термисторы, остальные отключаете. TSint – это тот самый злосчастный PTC термистор

  4. Temperatuer mode – тут надо сделать активным тот термистор, который отвечает за температуру силовых транзисторов, в нашем случае это тот самый PTC

  5. Если вы не планируете на плате дополнительного контроллера температуры TMP468 то в пунктах EXT TMP отключаете всё.

  6. DA configuration – тут активным ставим SLEEP и при помощи двух битов CC1 и CC0 выбираем сколько у нас последовательно ячеек

  7. SOC Flag Config B – пункт, который стоил нам 60 часов провальных обучений, на форуме нашли ответ, 00СС – и тег FC при полном заряде вам гарантирован.

  8. 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 страниц как бы намекает, что это не так, но к сожалению большинство пунктов в ней практически никак не описаны. Надеюсь данная статья сэкономит несколько дней другим энтузиастам.

Комментарии (5)


  1. Kudesnick33
    23.08.2024 16:09

    Даже представить страшно, какая огромная работа проделана, прежде чем эта статья замаячила на горизонте! Моё почтение!


  1. dmitryrf
    23.08.2024 16:09
    +2

    Делал похожее устройство на похожей BQ и очень согласен про
    часть документации писали психически нездоровые люди
    Потратил тонны нервов на разгребание и понимание происходящего. Пришлось купить оригинальный конвертер i2c, проснифать обмен с bqstudio, чтобы понять почему не работает общение с bq из МК. Воспоминания в основном неприятные и нецензурные.


  1. sami777
    23.08.2024 16:09

    Да, помню, помню... Намучались, в свое время, bq3050.


  1. zatim
    23.08.2024 16:09
    +1

    Я когда делал себе мощный повербанк для ноута не стал заморачиваться со всякими bq. Сделал его простым, аналоговым. Контролем разряда "снизу" ведает китайская плата bms, эта функция есть во всех таких платах. Контроль заряда "сверху" обеспечивает зарядное устройство на базе переделанной платы от зарядника от старого ноута. Ограничение по току там уже было встроенное, ограничение по напряжению я выставил чуть меньше максимума для банок. В результате банки, конечно, немного недозаряжаются, но зато никогда в принципе не перезарядятся, не нужно контролировать окончание заряда, в таком режиме аккум может находиться неограниченно долго. Разброс банок нивелирует плата bms.

    Что не очень хорошо, заряд аккума гуляет от 0 до ~90%, тогда как для продления его жизни более предпочтительно от 20 до 80%. Зато девайс простой, дубовый, надежный.


    1. blind_oracle
      23.08.2024 16:09
      +1

      Современные БМС достаточно умные для всего что нужно: разряд, заряд, балансировка ячеек. Так что можно не заморачиваться.