Перейти к содержимому

Урок 10 из 18 · Модуль 3. DroneCAN на практике: устройства и настройка в ArduPilot

01 сентября 2026
Пилоту БПЛА | Технику БПЛА | Хобби

Протоколы в БАС: полный курс · Урок 10 из 18 · Модуль 3. Шины датчиков: I²C, SPI, CAN

Что реально подключают по DroneCAN: ESC, GPS, датчики воздушной скорости, модули питания — и как это настраивается в ArduPilot.

Все узлы шины должны работать на одной скорости (обычно 1 Мбит/с) и иметь уникальные node ID. Потеря терминатора проявляется нестабильной работой шины, а не полным обрывом.

Содержание

1. Цели урока

После этого урока вы сможете:

  • перечислять устройства DroneCAN и их преимущества по сравнению с классическим подключением;
  • объяснять, что такое node ID и как его назначают;
  • включать и настраивать DroneCAN в ArduPilot: CAN_P1_DRIVER, CAN_D1_PROTOCOL;
  • работать с узлами в Mission Planner: Setup → Optional Hardware → DroneCAN/UAVCAN;
  • диагностировать типовые ошибки настройки DroneCAN.
↑ К оглавлению

2. DroneCAN на практике

DroneCAN (до 2022 года — UAVCAN v0) — открытый прикладной протокол поверх CAN-шины, разработанный специально для БпЛА. Он определяет стандартные типы сообщений: команды газа для ESC, координаты GPS, данные барометра, состояние батареи и многое другое. Именно благодаря стандартизации оборудование разных производителей (Holybro, CUAV, Zubax, Matek) работает на одной шине без дополнительных адаптеров.

DroneCAN: что реально подключают

DroneCan_1200x1200_6ce9c.jpg

Проводное подключение DroneCAN-регуляторов к шине CAN (схема из официальной документации ArduPilot). Каждый ESC — узел шины со своим node ID: провода CAN_H и CAN_L идут последовательно от устройства к устройству, терминаторы — на концах. Один и тот же жгут обслуживает и управление моторами, и телеметрию (обороты, ток, температуру).

УстройствоПримерыЧто даёт по сравнению с «обычным» подключением
ESC Holybro Kotleta20, CUAV, Vimdrones S50, Zubax Myxa управление + телеметрия (обороты/ток/температура) по одной паре проводов; индивидуальный контроль и диагностика каждого ESC
GPS/ГЛОНАСС Holybro H-RTK F9P CAN, Matek M10-CAN RTK-приёмники с точностью до сантиметра; питание и данные по одному жгуту вместо отдельных UART и питания
Датчик воздушной скорости Holybro DroneCAN Airspeed, Matek ASPD-CAN трубка Пито для самолётов и VTOL; цифровой сигнал вместо аналогового, без дрейфа нуля
Модуль питания Holybro DroneCAN Power Module, CUAV CAN PMU напряжение и ток батареи цифрой вместо аналоговых делителей — точнее и без калибровки под конкретный экземпляр
Сервоприводы DroneCAN Servo Node, Volz DA 22 сервы в хвосте самолёта — без метровых PWM-проводов через весь фюзеляж; обратная связь по положению
Дальномеры DroneCAN Rangefinder, Lightware SF45 лидар для точной посадки и облёта препятствий; цифровой интерфейс без аналоговых искажений

Топология шины: как выглядит реальный жгут

DroneCAN использует топологию «цепочка» (daisy chain): устройства подключаются последовательно, провода CAN_H и CAN_L идут от одного узла к следующему. Терминаторы по 120 Ом устанавливаются только на крайних узлах — полётном контроллере и последнем устройстве в цепочке.

can_band2_64476.png

Важно: CAN_H и CAN_L — это только сигнальные провода. Питание (обычно +5 В или +12 В) и GND подводятся к каждому устройству отдельно. В разъёмах JST-GH 4-pin, типичных для DroneCAN: VCC — CAN_H — CAN_L — GND.

Node ID: адресация узлов

Каждый узел на шине DroneCAN должен иметь уникальный node ID — целое число от 1 до 127. Node ID 0 зарезервирован (используется при динамическом назначении). Node ID 127 традиционно резервируется для наземных инструментов (ноутбук с DroneCAN GUI Tool).

Существует два способа назначения node ID:

1. Статическое назначение (вручную). Node ID прошивается в память устройства через его конфигуратор или через Mission Planner. Рекомендуется для производственных аппаратов: после настройки ID не меняется при перезагрузке.

2. Динамическое назначение (DNA — Dynamic Node ID Allocation). Устройство включается без node ID, отправляет запрос на шину. ArduPilot (или другой allocator) назначает ему свободный ID и запоминает его по hardware ID устройства. При следующем включении устройство получит тот же ID автоматически. Это удобно при первом подключении нового оборудования.

dna_proc_4817d.png

После подключения нового устройства откройте Mission Planner → Setup → Optional Hardware → DroneCAN/UAVCAN и нажмите SLCan Mode CAN1. Через несколько секунд в списке появятся все узлы шины с их node ID, hardware ID и версией прошивки. Здесь же можно назначить node ID вручную и обновить прошивку узла.

Настройка в ArduPilot

Настройка выполняется через Mission Planner → Config → Full Parameter List. Все параметры CAN применяются после перезагрузки полётного контроллера.

  1. Включить драйвер CAN-порта.

    CAN_P1_DRIVER = 1 — активирует первый CAN-порт. Если на ФК два порта CAN и нужно использовать оба: CAN_P2_DRIVER = 1. Значение 0 означает «порт отключён».

    Can_Pn_Driver_4c7c4.png
  2. Выбрать протокол.

    CAN_D1_PROTOCOL = 1 — протокол DroneCAN на первом порту. Значение 8 — UAVCAN v1 (Cyphal, новая версия протокола, пока редко встречается в серийном оборудовании).

  3. Проверить скорость шины.

    CAN_D1_BAUDRATE = 1000000 — стандартная скорость 1 Мбит/с. Все устройства на шине должны работать на одной скорости. Если хотя бы одно устройство настроено на другую скорость — шина не будет работать.

  4. Для CAN-GPS.

    GPS1_TYPE = 9 — указывает ArduPilot искать GPS-данные по DroneCAN. При наличии двух GPS-модулей: GPS2_TYPE = 9. Дополнительно убедитесь, что у каждого GPS-модуля уникальный node ID.
    Параметр GPS_TYPE существовал в ArduPilot до версии 4.5 включительно и был удалён в 4.6. В версии 4.7 используется только GPS1_TYPE и GPS2_TYPE

  5. Для CAN-ESC.

    CAN_D1_UC_ESC_BM — битовая маска, указывающая какие моторы управляются через DroneCAN. Например, для четырёх моторов: 15 (двоичное 0b00001111). Каждый бит соответствует номеру мотора.

  6. Перезагрузить ФК и проверить узлы.

    Mission Planner → Setup → Optional Hardware → DroneCAN/UAVCAN → SLCan Mode CAN1. В таблице должны появиться все подключённые устройства.

Внимание: Все узлы на шине должны работать на одной скорости (обычно 1 Мбит/с) и иметь уникальные node ID. Два узла с одинаковым ID создают конфликт: оба будут отвечать одновременно, доминантные биты «перебьют» друг друга, CRC не совпадёт — кадры будут отбракованы. Шина при этом не «зависнет» полностью, но данные от конфликтующих узлов не будут поступать. И не забывайте про терминаторы: без них на концах шины сигнал отражается, что проявляется как нестабильная работа, а не полный обрыв.

Типовые ошибки настройки и их устранение

СимптомВероятная причинаСпособ устранения
Узлы не появляются в DroneCAN/UAVCAN после перезагрузки CAN_P1_DRIVER = 0 (порт не активирован); протокол не выбран; неверная скорость шины проверить CAN_P1_DRIVER = 1 и CAN_D1_PROTOCOL = 1; убедиться что все устройства на 1 Мбит/с; перезагрузить ФК
Узлы видны, но GPS не появляется в статусе GPS1_TYPE не установлен в 9; node ID GPS конфликтует с другим устройством установить GPS1_TYPE = 9; проверить уникальность node ID через DroneCAN/UAVCAN инспектор
ESC виден на шине, но моторы не реагируют неверная маска CAN_D1_UC_ESC_BM; node ID ESC не совпадает с номером мотора установить корректную маску; назначить ESC node ID равный номеру мотора (мотор 1 → node ID 1 и т.д.)
Два узла конфликтуют (один или оба не отвечают) одинаковый node ID в DroneCAN/UAVCAN инспекторе выбрать конфликтующий узел, назначить новый уникальный node ID; перезагрузить устройство
Узлы периодически пропадают из инспектора отсутствует один терминатор (120 Ом вместо 60 Ом); плохой контакт в разъёмах замерить сопротивление CAN_H–CAN_L при отключённом питании: должно быть 60 Ом; проверить разъёмы JST-GH
Все узлы пропали после подключения нового устройства новое устройство настроено на другую скорость шины (например, 500 кбит/с вместо 1 Мбит/с) подключить новое устройство отдельно, выставить скорость 1 Мбит/с через его конфигуратор, затем подключить к шине

💻 Для программиста

Для работы с DroneCAN есть два основных инструмента:

  • libcanard (C99) — минималистичная библиотека, используемая в ArduPilot и PX4. Работает без ОС, подходит для встраиваемых систем. Реализует сериализацию/десериализацию DSDL-сообщений и базовый транспортный уровень.
  • pycyphal (Python) — удобна для наземных стендов, тестовых скриптов и диагностических инструментов. Подключаете USB-CAN адаптер (например, Zubax Babel или SLCAN-совместимый), слушаете трафик на шине, отправляете команды — принципы DroneCAN становятся наглядными без написания прошивки.

Типы сообщений описаны в DSDL-файлах (Data Structure Description Language) — по аналогии с IDL в других протоколах. Примеры: uavcan.equipment.esc.RPMCommand (команда оборотов), uavcan.equipment.gnss.Fix2 (координаты GPS), uavcan.equipment.power.BatteryInfo (состояние батареи). Все типы открыты и задокументированы в репозитории DSDL на GitHub.

↑ К оглавлению

3. Чек-лист самопроверки

Урок освоен, если каждый пункт выполнен на практике:

  • Подключил CAN-GPS (GPS1_TYPE = 9) и увидел фикс в Mission Planner
  • Открыл DroneCAN/UAVCAN инспектор и вижу все узлы с их node ID
  • Знаю, где менять node ID и обновлять прошивки узлов
  • Могу объяснить разницу между статическим и динамическим назначением node ID
  • Понимаю, чем DroneCAN-ESC лучше PWM/DShot на больших аппаратах
Результат: все пункты выполнены — переходите к следующему уроку.
↑ К оглавлению

4. Что дальше

  • Предыдущий урок: Урок 9. CAN: физика шины и арбитраж
  • Следующий урок: Урок 11. PWM: сервы и классические ESC
  • Полный перечень тем — в статье «Содержание курса».
↑ К оглавлению

Сводка актуальных параметров для ArduPilot 4.6+

Старый параметр (≤4.5)Новый параметр (4.6+)Значение для DroneCAN
GPS_TYPE GPS1_TYPE 9
GPS_TYPE2 GPS2_TYPE 9
GPS_DELAY_MS GPS1_DELAY_MS
GPS_POS1_X GPS1_POS_X
8