Ссылка на ролик

Недавно я столкнулся с проблемой выхода из строя трёх новеньких аккумуляторов Ryobi. Мне стало интересно, и я решил разобраться, что могло послужить причиной. В итоге я погрузился в эту кроличью нору довольно глубоко — покупал десятки нерабочих аккумуляторов на eBay, реверсил печатную плату и документировал все этапы ремонта.

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

Кому интересно, вот мой проект на GitHub.

Дисклеймер

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

Схема

Эта схема получилась у меня в результате реверс-инжиниринга аккумулятора PBP005. Она завершена где-то на 95% и позволяет не только хорошо понять топологию, но и сделать какие-то выводы.

В целом такая архитектура батарей весьма распространена по сравнению с другими похожими BMS (Battery Management System). Конкретную модель микросхемы AFE (Analog Front-End) я не выяснил. Это либо клон, либо кастомная версия ASIC с маркировкой 3705T. Мне удалось успешно проанализировать и декодировать поток данных по шине I2C, но без спецификации разобраться я в них не смог. Я заглядывал в документацию TI BQ76920, но она не подошла.

В схеме также есть интересная цепь, проверяющая наличие нагрузки на контактах батареи. Она может обнаруживать достаточно высокое сопротивление и через МОП-транзистор активировать подачу тока на подключённое устройство.

Режимы отказа

В таблице ниже я перечислил все режимы отказа, которые выявил, пока диагностировал и чинил каждую батарею. Далее я расскажу о них подробнее.

Режим сбоя

Частота

Симптом

Решение

Перманентная программная блокировка

65%

одно мигание 1 светодиода -> 4 мигания всех

Дамп прошивки -> сброс байта блокировки -> перепрошивка

Разбалансировка ячеек

13%

Неровное напряжение ячеек + 4 мигания

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

Мягкая программная блокировка

7%

4 мигания

Сброс через J1

Глубокий разряд

16%

Очень низкое напряжение батареи (<5 В)

Мёртвые ячейки

3%

Очень низкое напряжение ячеек (<1 В/ячейку)

Испорченный резистор обратной связи

3%

4 мигания + неверное напряжение со стороны AFE от резисторов обратной связи

Замена резистора обратной связи равнозначным

Не срабатывающая индикаторная кнопка

6%

TP32 >1 В при нажатой кнопке

Удаление R27 и замена R28 на аналогичный 100 Ом

Сбой диода D10

3%

Не заряжается

Удаление D10

Перманентная программная блокировка

Это самый интересный режим. Именно он привёл к отказу моих аккумуляторов, с чего всё и началось. Как я понял, когда батареи какое-то время бездействуют, в определённый момент ПО решает, что они находятся в небезопасных условиях, и активирует перманентную программную блокировку, которая не даёт заряжать/разряжать их. При этом во время первого нажатия разово мигает один индикатор, а при последующих – все 4.

Изначально, когда я тестировал батареи с этой проблемой, то думал, что причиной может быть защита от переразряда, так как некоторые батареи были сильно разряжены. Тогда я вручную их зарядил, но оживить так и не смог. Я даже балансировал их до 0,01 В, но и это не помогло. Попытка сброса через замыкание J1 тоже оказалась безуспешной. И лишь после многочисленных перестановок микросхем, считывания дампа памяти и перекрёстной прошивки я выяснил, что проблема кроется в ПО. Путём множества проб и ошибок я нашёл конкретный байт по адресу 0x7E90, который при установке на 1 вызывал перманентную блокировку, а при установке на 0 – снимал её. Чуть позже я расскажу об этом подробнее.

Теперь нужно было выяснить, что служило причиной блокировки. В некоторых протестированных мной образцах с eBay присутствовали ячейки, которые были либо сильно разряжены, либо разбалансированы. Я предположил, что дело вполне могло быть в этом. Но только после того, как я получил пять почти нулёвых на вид батарей, у меня возникло подозрение, что блокировка может возникать даже при нормальном использовании или хранении. Все эти пять экземпляров я смог восстановить, просто сбросив на 0 бит блокировки и подключив их к родной зарядке Ryobi. Эти батареи имели отличный баланс напряжения и сохраняли его на протяжении нескольких циклов заряда/разряда.

К сожалению, я не записал ни показания диагностики моих первых аккумуляторов, ни шаги, которые проделывал в попытке их восстановления. Хотя, исходя из того, что я выяснил, скорее всего они переходят в какое-то особое программное состояние. Происходит это после пары месяцев простоя, когда цифровой блок потребляет достаточно тока для их разрядки, и напряжение падает до такого уровня, что возникает блокировка. На эту мысль меня натолкнуло то, что большинство батарей, которые я получил с eBay, оказались сильно разряжены.

Единственный случай, в котором, по моим наблюдениям, происходит такая блокировка, это когда напряжение одной из ячеек на ~0.15 В меньше напряжения остальных, а напряжение всей батареи находится в определённом диапазоне. В итоге при подключении к зарядке аккумулятор блокируется. И такой расклад вроде имеет смысл, так как при нормальных условиях аккумулятор никогда не достигает такой разбалансировки.

Так что выяснить основную причину этого сбоя может не получиться, особенно без доступа к коду. Я проведу кое-какие длительные тесты и посмотрю, удастся ли воссоздать этот режим сбоя. Если я выясню что-то новое, то дополню статью. Ну а так я по крайней мере знаю, как это можно исправить, если вдруг сбой повторится — просто перепрошить ПО.

Прошивка

Вкратце опишу, как можно сделать дамп памяти микроконтроллера, изменить её и залить обратно. В качестве микроконтроллера здесь у нас LPC804M101 от NXP. На его плате есть интерфейс SWD, к которому можно подключиться кабелем TagConnect (продаётся здесь). Я для отладки использовал имевшийся у меня программатор J-LInk EDU Mini (купить можно здесь), так что для его правильного подключения пришлось обратиться к спецификациям обоих устройств. Вот некоторые схемы, которые мне в этом помогли.

Затем с помощью SEGGER J-Flash я считал память микроконтроллера и сохранил её содержимое в HEX-файл. Анализ и сравнение прошивок я делал в основном через VSCode с плагином HexEditor. В итоге я просто инвертировал байт блокировки по адресу 0x7E90 и затем заливал прошивку обратно на микроконтроллер с помощью SEGGER J-Flash Lite.

Разбалансировка ячеек

В некоторых аккумуляторах часть ячеек оказалась разбалансирована. Об этой неисправности они сообщали 4-мя миганиями всех светодиодов. Причин могло быть несколько. Возможно, просто внутреннее сопротивление части ячеек было слегка выше сопротивления остальных, и при высокой нагрузке баланс нарушался. Тестирование показало, что балансировка ячеек в этих аккумуляторах происходит очень медленно, и только если они находятся в определённом диапазоне напряжения. Резистор на 500 Ом ограничивает максимальный ток балансировки до ~8 мА. Также есть зависимость от общего напряжения батареи и уровня разбалансировки, так что конкретную логику работы здесь определить очень трудно.

Чтобы это исправить, я выровнял напряжение ячеек вручную, используя источник питания с постоянным током 0,5 А. А для восстановления батарей я выполнил сброс с помощью перемычки J1. Покажу как.

Нажимаем на кнопку проверки состояния –> замыкаем перемычку J1 –> снова жмём на эту кнопку –> загораются LED 2 и 4 –> размыкаем J1 –> готово. 
Нажимаем на кнопку проверки состояния –> замыкаем перемычку J1 –> снова жмём на эту кнопку –> загораются LED 2 и 4 –> размыкаем J1 –> готово. 

Вполне возможно, что ячейки снова разбалансируются, если часть из них имеет более высокое сопротивление. Чем выше нагрузка, тем острее это проявляется. Также может быть, что из-за какого-то сбоя на печатной плате часть ячеек разряжается быстрее других. Ещё возможно, что причина в высоком внутреннем саморазряде ячеек из-за повреждения. Всё это может привести к регулярному возникновению описанных проблем и невозможности восстановить полную ёмкость аккумулятора. Я встречал случаи всех этих неисправностей и продолжу следить за некоторыми батареями, чтобы оценить, как они поведут себя со временем.

Мягкая программная блокировка

Аккумулятор входит в это состояние, если в какой-то момент обнаруживает разбалансировку ячеек. Я видел пару случаев, когда по факту напряжение ячеек было в балансе, но батарея всё равно указывала на ошибку, также мигая всеми светодиодами. Здесь у меня две догадки. Либо батарея допустила ошибку при самодиагностике, либо в определённый момент оказалась разбалансирована, но со временем баланс восстановила.

Как бы то ни было, исправляется это очень легко, и на Reddit есть много топиков по теме. Я имею в виду именно тот приём с перемычкой J1, о котором писал выше. А в отдельный режим отказа я этот случай записал лишь потому, что здесь нет заметной разбалансировки ячеек. И я также не уверен, были ли какие-то другие условия, которые могли бы заставить батарею войти в этот режим сбоя. Но, как я уже сказал, сбросить ошибку несложно.

Глубокий разряд

В этом случае на каждую из пяти ячеек будет приходиться менее 1 В. Мне даже попадались батареи, в которых каждая ячейка была полностью разряжена до 0 В. Причиной могла стать утечка тока на корпус, полностью высосавшая заряд. Возможно, это произошло из-за контакта с водой, так как ячейки в некоторых других «утопленниках» были полностью мертвы.

В остальных случаях напряжение каждой ячейки было в районе 0,5 В, а всей батареи — около 2,5 В. Думаю, что их цифровой блок вошёл в некое состояние, в котором потреблял ток до тех пор, пока из-за понижения напряжения нагрузка 3,3 В не исчезла.

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

Тем не менее я смог восстановить батареи с ячейками, разряженными до 0,5 В с помощью очень медленного капельного подзаряда. Он позволил мне довести их до уровня 18 В и дальше заряжать как обычно. Я подавал на них ток в несколько циклов и тестировал, используя внутренний омметр. В итоге кроме слегка уменьшенной ёмкости никаких проблем я не заметил. В процессе капельной зарядки 4 светодиода непрерывно мигали, пока я не отпаял перемычку питания, чтобы перезапустить микроконтроллер. Думаю, что его не порадовало видеть батарею при столь низком напряжении, и он просто расстроился. Но после перезапуска и сброса с помощью J1 он снова был бодр и работал должным образом.

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

Мёртвые ячейки

Этот случай аналогичен глубокому разряду, но касается только части ячеек, которые разрядились полностью в 0. Если такое произошло, значит, батарее конец, и вернуть её к жизни не получится. Проблема в том, что, даже если вам удастся воскресить глубоко разряженные ячейки, они точно не смогут сохранять баланс относительно своих соседей. Здесь лучшим выходом будет извлечь рабочие ячейки и использовать их в других проектах.

Но вопрос в том, почему это может происходить. Я считаю, что какой-то сбой в BMS привёл к возникновению постоянной высокой нагрузки на некоторые ячейки, в результате чего они полностью истощились. Причиной может быть сбой какого-то компонента или контакт с водой. Полный анализ этого режима отказа я не проводил.

Выход из строя резистора цепи обратной связи

Ещё один режим отказа был связан со сбоем резистора обратной связи RFx, который не пропускал напряжение считывания на микросхему AFE. Наблюдалось это лишь в одном случае, когда плата была повреждена водой, так что наверняка эти два факта связаны.

Но я заменил этот резистор, сбросил с помощью J1 батарею, и она исправно заработала.

Не срабатывающая индикаторная кнопка

Этот сбой я тоже смог исправить, хоть и не понял до конца его причину. Здесь проблема была в том, что индикаторная кнопка переставала реагировать. Если инструмент был заряжен, то он нормально разряжался, но вот заряжаться не хотел.

Я замерил подтягивающее сопротивление между TP32 и шиной 3,3 В — оно оказалось очень низким, ~1кОм. В результате нажатие кнопки недостаточно подтягивало TP32 к земле, и ошибочно срабатывал ввод-вывод. Чтобы это исправить, я заменил R27 на R28 с более низким сопротивлением, ~100 Ом. Проблема была решена.

Думаю, что скачок напряжения на шине 3,3 В привёл к попаданию тока на линию ввода-вывода и повреждению, которое и вызвало снижение подтягивающего сопротивления. Как вариант, здесь можно установить в качестве защиты опорный диод для ограничения напряжения. Я также вижу, что повреждение было вызвано электростатическим разрядом (ESD), но эту область я понимаю недостаточно, чтобы давать какие-то уверенные комментарии.

Неразгаданные режимы отказа

Было ещё несколько режимов сбоя, для которых я не смог найти лечения. На паре плат присутствовала проблема с зарядкой, когда зарядное устройство их не обнаруживало. Я пробовал прощупать схему T1, так как проблема скорее всего в ней. В итоге мне удалось заставить батарею заряжаться, замкнув TPxx на землю, то есть я подтвердил, что сбой именно в логике T1. Но саму проблему я исправить так и не смог. Дополнительно всё усложнялось тем, что я не знаю точных маркировок определённых транзисторов, а они были заряжены, так что любое неверное действие могло привести к попаданию напряжения V_BATT не туда и вызвать дополнительные повреждения BMS.

Заключение

Надеюсь, это руководство поможет вам восстановить какие-нибудь из своих аккумуляторов Ryobi, которые система BMS забраковала по ошибке. Если часть ячеек или даже все испорчены, то есть смысл отправить батарею в переработку. Если же ячейки исправны, и работе мешает именно BMS, то попробуйте восстановить их с помощью этого руководства.

А так, здесь возникает большой вопрос к разработчикам: «Является ли этот новый подход к созданию батарей с таким количеством программных проверок и блокировок более безопасным, и увеличивает ли он срок их службы?» Я, конечно, осознаю, что им важно обеспечить безопасное использование устройств и исключить критические сбои при работе. Но при этом они создали такую систему, которая часто даёт ложные срабатывания и может превратить абсолютно рабочие батареи в отходы.

Мой внутренний циник говорит, что это было намеренное техническое решение, нацеленное на повышения продаж. Но я бы вряд ли пошёл покупать новые, ведь аккумуляторы Ryobi имеют трёхлетнюю гарантию. Батареи, с которых всё началось, были у меня в использовании менее года, и я смог заменить их по гарантии. Интересно, что одна из батарей, которые мне выдали взамен, отказала аналогичным образом.

Но я всё же считаю, что инженеры Ryobi действовали из лучших побуждений и хотели обеспечить для своих клиентов безопасность. Просто они недостаточно протестировали батареи на предмет ложных срабатываний защиты. А поскольку они реализовали функцию блокировки, которая сама не сбрасывается, в случае ошибочного срабатывания защиты аккумулятор превращается в кирпич. Надеюсь, что они уже выпустили патч для исправления этого бага и доработали прошивку, чтобы ложных срабатываний не было. 

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


  1. Moog_Prodigy
    31.08.2025 09:23

    Конечно доработают, и первым делом зашифруют прошивку, а то вишь какой непорядок!


  1. CatAssa
    31.08.2025 09:23

    После прочтения этой статьи появилось желание избегать аккумуляторных Ryobi.


    1. nixtonixto
      31.08.2025 09:23

      У Milwaukee другая крайность: в их батареях нет даже ключа защиты от КЗ - выводы аккумулятора напрямую припаяны на контакты батареи.


      1. CatAssa
        31.08.2025 09:23

        Makita: масса дешёвых клонов аккумуляторов. Тот же Woftex: дёшево и сердито, аккумуляторы подходят к инструментам Makita.


        1. CatAssa
          31.08.2025 09:23

          WoRtex.