Как я сделал тестер батарей DJI Mavic 4 и Avata 360
У меня разбился DJI Mavic 4, а батареи остались. Мне хотелось проверить их состояние и, прежде всего, узнать, сколько раз каждая батарея заряжалась. Но отдельно от дрона посмотреть эти параметры в DJI Fly я не мог, а установить батарею в разбитый дрон уже не получалось. Поэтому я решил обратиться к батарее напрямую.
В итоге получился небольшой автономный тестер, который подключается к батарее тремя проводами и показывает заряд, число циклов, напряжение каждой банки, температуру, ёмкость и другие параметры.
Как нашлись контакты
Сначала я проверил контакты батареи обычным мультиметром. На силовых контактах присутствует высокое напряжение всей сборки 4S, а на сигнальных линиях напряжение значительно ниже.
После этого я включил батарею и начал проверять оставшиеся контакты недорогим логическим анализатором. Конкретная модель здесь не принципиальна — подойдёт практически любой простой анализатор, способный декодировать UART.
Так удалось найти первую линию UART. Вторая оказалась на соседнем контакте. Одна линия используется для запросов к батарее, другая — для её ответов. Для подключения также обязательно нужна общая земля.
Важно: это литиевая батарея 4S, и на части контактов присутствует напряжение всей сборки. Всё описанное я делал со своей батареей и на свой риск.
Что оказалось внутри
Обмен идёт по обычному UART на скорости 115200 бод, 8N1, с логическими уровнями 3,3 В. Поверх UART используется протокол DJI DUML.
С DUML я уже частично сталкивался в других проектах, поэтому сам формат пакетов не стал большой проблемой. После проверки контрольных сумм и разбора ответов удалось определить команды, которые возвращают:
- текущий заряд в процентах;
- число циклов зарядки;
- напряжение каждой из четырёх банок;
- общее напряжение батареи;
- температуру;
- расчётную полную и оставшуюся ёмкость;
- модель и версию прошивки.
Интересный момент: контроллер состояния батареи постоянно питается от её ячеек. Поэтому батарея отвечает по UART, даже когда внешне она выключена. Для чтения данных не нужен ни дрон, ни зарядный хаб, ни нажатие кнопки — достаточно подключить TX, RX и GND.
От Python-скрипта к отдельному прибору
Сначала я сделал Python-инструмент для компьютера. Он позволяет подключить батарею через недорогой USB-UART адаптер и посмотреть телеметрию в терминале.