
Недавно я столкнулся с проблемой выхода из строя трёх новеньких аккумуляторов 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. Покажу как.

Вполне возможно, что ячейки снова разбалансируются, если часть из них имеет более высокое сопротивление. Чем выше нагрузка, тем острее это проявляется. Также может быть, что из-за какого-то сбоя на печатной плате часть ячеек разряжается быстрее других. Ещё возможно, что причина в высоком внутреннем саморазряде ячеек из-за повреждения. Всё это может привести к регулярному возникновению описанных проблем и невозможности восстановить полную ёмкость аккумулятора. Я встречал случаи всех этих неисправностей и продолжу следить за некоторыми батареями, чтобы оценить, как они поведут себя со временем.
Мягкая программная блокировка
Аккумулятор входит в это состояние, если в какой-то момент обнаруживает разбалансировку ячеек. Я видел пару случаев, когда по факту напряжение ячеек было в балансе, но батарея всё равно указывала на ошибку, также мигая всеми светодиодами. Здесь у меня две догадки. Либо батарея допустила ошибку при самодиагностике, либо в определённый момент оказалась разбалансирована, но со временем баланс восстановила.
Как бы то ни было, исправляется это очень легко, и на 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 действовали из лучших побуждений и хотели обеспечить для своих клиентов безопасность. Просто они недостаточно протестировали батареи на предмет ложных срабатываний защиты. А поскольку они реализовали функцию блокировки, которая сама не сбрасывается, в случае ошибочного срабатывания защиты аккумулятор превращается в кирпич. Надеюсь, что они уже выпустили патч для исправления этого бага и доработали прошивку, чтобы ложных срабатываний не было.
Комментарии (8)
CatAssa
31.08.2025 09:23После прочтения этой статьи появилось желание избегать аккумуляторных Ryobi.
nixtonixto
31.08.2025 09:23У Milwaukee другая крайность: в их батареях нет даже ключа защиты от КЗ - выводы аккумулятора напрямую припаяны на контакты батареи.
cyber-jet
31.08.2025 09:23По идее это все одна компания, которая ещё выпускает инструмент под боендом AEG.
MakeYourVision
31.08.2025 09:23Именно, тайваньская TTI владеет всеми тремя и сегментирует Милку на промышленный/профессиональный инструмент высшего класса, AEG на просто профессиональный и Риоби на чисто бытовой/хоббийно-любительский.
Moog_Prodigy
31.08.2025 09:23Зато у них bms общается с девайсом по спецпротоколу, и если что не нравится - кирпичится. И с зарядным общается. Я уже давно с ними дел не имею, но лет 8 назад общался по интернету с мужиком, которые эти милуоки в гарантийке чинил. Он мне даже несколько лайфхаков рассказал, что-то даже пригодилось, чинил электроинструмент я мимоходом но в промышленных количествах. Инструмент конечно, качественный, но по сути одноразовый, такая вот у них фишка своя. Все платы залиты компаундом, у шуриков если щетки стерлись в моторе, меняй мотор в сборе. У болгарок наоборот, щетки расходник и под них есть даже специальные окошечки на винтах. А винты с хитрой головкой - типа torx но посредине еще пупырь торчит. Это сейчас китайцы под такое что угодно делают а тогда приходилось каленые биты Торкса прожигать электроэрозией.
Moog_Prodigy
Конечно доработают, и первым делом зашифруют прошивку, а то вишь какой непорядок!