0
1738

Прошивка ESC через C2 и Arduino

Неудачная компоновка Mobula 6HD, высокие температуры, восстановление встроенного ESC с помощью Arduino

Привет!


Недавно я купил вуп Mobula 6 HD от HappyMode. Брал его в качестве донора для будущего проекта, но для начала решил улучшить то, что есть, насколько это вообще возможно. В числе прочих улучшений был переход на emuflight.

Mobula 6 HD, как и обычная Mobula 6 комплектуется полётным контроллером Crazybee F4 Lite "всё в одном" (FC, RX, VTX, 4xESC).

Для перехода на emuflight руководствовался этой статьёй. На первый взгляд, всё прошло удачно. Но потом появился "нюанс".


Описание проблемы:


После успешной прошивки всех четырёх регуляторов через конфигуратор JESC, перестал работать один мотор. Диагностика переподключением местами с соседним мотором показала, что проблема в самом ESC. При повторном подключении платы полётного контроллера, конфигуратор перестал определять первый регуль. Стоимость нового полётника в 60$ подстегнула к изысканиям на тему восстановления ESC.


Кусочек debug log'а JESC конфигуратора:

Reading setup
sending cmd_DeviceInitFlash 0 0
received cmd_DeviceInitFlash ACK_D_GENERAL_ERROR 0 0,0,0,0
received cmd_DeviceInitFlash ACK_D_GENERAL_ERROR 0 0,0,0,0
ESC 1 read settings failed cmd_DeviceInitFlash ACK_D_GENERAL_ERROR
sending cmd_DeviceInitFlash 0 1
received cmd_DeviceInitFlash ACK_OK 0 178,232,100,1
sending cmd_DeviceRead 1a00 112
received cmd_DeviceRead ACK_OK 1a00

Очевидно, JESC конфигуратор не может получить доступ к флеш-памяти контроллера самого регулятора оборотов:

ESC 1 read settings failed cmd_DeviceInitFlash ACK_D_GENERAL_ERROR

С этой проблемой я пошёл в Google, откуда попал на сайт разработчиков JESC конфигуратора, где обнаружил простые рекомендации "выключить, и снова включить", а также повторить прошивку с галочкой "ignore inappropriate MCU and Layout".

Попробовал. Три ESC снова нормально прошились, а первый нет.

Пришлось копнуть глубже. В характеристиках регуляторов Crazybee F4 Lite кроме "BLHeli_S 5-6A" ничего не было. Я предположил, что проблема могла быть в JESC конфигураторе, и решил откатиться обратно на BLHeli_s. Скачал конфигуратор BLHeli, попробовал прошиться с той же галочкой "ignore inappropriate MCU and Layout", опять безрезультатно - всё та же ошибка:

ESC 1 read settings failed cmd_DeviceInitFlash ACK_D_GENERAL_ERROR

Но надежда на восстановление ещё теплилась. Очередной поиск в Google привёл к видео на Youtube "BLHeli ESC Firmware fail fix tip", в котором автор по-английски убедительно рассказывал, что решением подобной проблемы может является принудительная прошивка ESC через BLHeliSuite. Я решил ему довериться, скачал по ссылке с официального репозитория BLHeliSuite архив с исполняемыми файлами Windows для своей ОС (у меня Windows 10), распаковал, подключил полётник к компьютеру, запустил от имени администратора BLHeliSuite.exe, указал нужный COM-порт. Далее в меню "Select ATMEL / SILABS Interface" выбрал пункт "SILABS BLHeli Bootloader (Cleanflight)" как на картинке, чтобы подключиться к ESC через полётный контроллер:

Надписи Silabs и Atmel указывают на предполагаемого производителя микроконтроллера ESC.

Нажал кнопочку внизу слева "Read Setup", и получил такое сообщение:

Первый ESC опять не определился. Остальные три успешно считались, появилась сводка об их загрузчиках (BLHeli bootloader d) - значит в этих ESC стоят микроконтроллеры Silabs, а не Atmel, иначе информация бы не отобразилась должным образом. Вообще, правильно сначала смотреть своими глазами маркировку чипов на плате, и только потом тыкать менюшки, а не наоборот, как делал я. Ладно. Следуя наставлениям автора видео, внизу под надписью Multiple ESC нажал левой кнопкой мыши на исправные ESC, чтобы скрыть их, а правой кнопкой на первый - глючный, чтобы выбрать его для дальнейших манипуляций. Нажал "Flash BLHeli" , выбрал нужную прошивку:

Согласился со всеми предупреждениями:


Ответ программы был опять неутешительным:


Содержимое лога:

И снова ошибка подключения cmd_DeviceInitFlash.

У меня почти опустились руки. Стал гадать, отчего может не читаться флеш-память ESC. Не мог же я сжечь микроконтроллер регулятора или его интерфейс стандартной прошивкой, которая без проблем встаёт на точно таком же вупе у других людей, чем я хуже?!! Скитания по тематическим форумам бросали в ещё большее уныние - сообщения на них были пятилетней давности, зачастую совсем без ответа, а проблемы, описанные в них, оставались нерешёнными. А ведь я даже толком не полетал ни разу на этой Мобуле... Сжав булки продолжил поиски.


Решение:


В глубинах интернета нашлось несколько схожих сообщений с форумов, где успешным решением подобной проблемы была прошивка контроллера регулятора напрямую через C2 интерфейс в BLHeliSuite!

Суть в следующем: во время обновления в JESC мог возникнуть определённый сбой: например, кратковременная потеря питания от аккумулятора, просадка его напряжения, или потеря связи по USB с компьютером. После чего, микроконтроллер ESC теряет свой загрузчик (bootloader), и перестаёт отзываться через интерфейс полётного контроллера. Лечится это подключением программатора напрямую к микроконтроллеру ESC с дальнейшей записью загрузчика. Предстояло выяснить какая модель микроконтроллера используется в ESC, и чем залить в него загрузчик через интерфейс C2.


Прошивка ESC через C2:


В Crazybee F4 Lite чип микроконтроллера ESC имеет маркировку "BB21F16G", контактные пятачки для подключения по C2 расположены так же рядом с ним:


Идём в Google, находим Datasheet на этот чип EFM8BB21. Сопоставляем количество ножек чипа на плате с чертежами представленных корпусов и таблицами в документации. На фото видно по 4 капли припоя с каждой стороны, по площадке под каждым углом, ещё одна должна быть брюшком - значит это 20-пиновый QFN:

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

Теперь необходимо АККУРАТНО припаяться к пятачкам:

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

Имеем три припаянных провода. В моём случае БЕЛЫЙ = C2CK, СЕРЫЙ = C2D, ЧЁРНЫЙ = GND.


Теперь есть куда подключаться, и сразу возникает следующий вопрос - чем это можно сделать? К счастью, в репозитории BLHeliSuite в папочке Manuals лежит заветный гайд, в котором указано, что в микроконтроллер ESC Silabs можно залить загрузчик BLHeli по интерфейсу C2 через "Arduino 4-way interface" программатор. К слову, это не единственный способ, описанный там. У меня же в доступности была только Arduino Uno за 5$ с ATMega328p на борту, поэтому я использовал её.


Пришло время превратить Arduino UNO в C2 BLHeli программатор.

Подключаем Aduino к компьютеру через USB, открываем BLHeliSuite, выбираем вкладку "Make interfaces". Справа в выпадающем списке Arduino Board указываем "Uno w/ ATmega328", бодрейт 115200, COM5 - порт, на котором висит Arduino, жмём кнопку "Arduino 4-way interface":


В следующем окне жмём "Ок":

Выбираем файл прошивки для Arduino:

Шьём Arduino:


Получаем сообщение о том, что всё оки-доки, и мы стали счастливыми обладателями C2 программатора:


Идём в очередной мануал от BLHeliSuite, в котором есть таблица соответствия контактов Arduino и интерфейса C2 микроконтроллера ESC. Для Arduino UNO с ATMega 328p подходит эта табличка:

Теперь остаётся привести её в соответствие с распиновкой Arduino Uno:

Можно подключаться к любым из обозначенных красной рамкой ножкам, все они соединены между собой внутри платы Arduino.

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

Собираем цепь без аккумулятора и подключаем Arduino к компьютеру по USB:

Запускаем BLHeliSuite, указываем виртуальный COM-порт, на котором висит наша Arduino, выбираем интерфейс "SILABS C2 (4way-if)":

Затем подключаем в нашу цепь заряженный исправный аккумулятор:

Возвращаемся в BLHeliSuite, нажимаем последовательно кнопки "Connect" и "Flash BLHeli". Появится окно:

Указываем соответствующую версию, жмём "Ок". Дальше соглашаемся с появившимся предупреждением:

Начинается процесс выполнения записи загрузчика в память ESC:

Готово! Если всё было сделано правильно, появится сообщение подтверждающее успешность выполнения записи, в нём жмём "Ок":

Отключаем COM-порт в BLHeliSuite, откидываем аккумулятор, отключаем Arduino от компьютера и контроллера. Провода с пятачков пока не отпаиваем. Закрываем BLHeliSuite.

Подключаем полётный контроллер через USB к компьютеру, пока без аккумулятора:

Идём в JESC конфигуратор и подключаемся к полётному контроллеру:

Включаем в цепь аккумулятор:

В JESC конфигураторе жмём "Read setup", теперь у нас отображаются все четыре ESC, УРА!:

Дальше жмём "Flash all", появится окошко прошивки:

Нажимаем кнопку "Flash", следим за процессом. Ни в коем случае не отключаем во время прошивки аккумулятор/USB шнурок:

Готово!

Жмём кнопку "Disconnect", отключаем аккумулятор, отключаем USB.

Перед тем, как отпаивать провода от пятачков платы, настоятельно рекомендую повторить подключение полётника с аккумулятором к компьютеру, и проверить в JESC конфигураторе, что все регуляторы отображаются должным образом. После чего уже аккуратно отпаиваем провода.


Реальная причина выхода из строя:


В Mobula 6HD зазор между платами камеры и полётным контроллером всего несколько миллиметров. Плата камеры сильно нагревает близлежащие электронные компоненты, в том числе те, что находятся под ней, особенно под отсеком microSD. Я разворачивал плату HD-камеры, чтобы направить антенну приёмника вверх без ущерба доступу к microSD карте. Отсек карточки стал располагаться близко к чипу ESC, и он отключился по превышению температуры во время прошивки.

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

0
1738
Комментарий (1)
@mihailov
23.10.2020 в 07:34
при заводском расположении плат во время удара вылетает sd карта и все записи на ней безвозвратно теряются. так что надо располагать верхнюю плату так чтобы карта была сзади - без вариантов
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.