DShot, RPM и телеметрия ESC в ArduPilot: что включать и как проверить

Коротко: DShot, RPM и телеметрия ESC решают разные задачи. DShot передаёт команду мотору в цифровом виде и не требует классической калибровки диапазона PWM. RPM-телеметрия сообщает автопилоту скорость вращения, а ArduPilot может использовать её для динамического harmonic notch. Если в системе нет подтверждённых RPM, включать фильтр «по оборотам» вслепую нельзя.

Телеметрия ESC и RPM в Mission Planner
Отображение RPM и данных ESC в Mission Planner. Иллюстрация: ArduPilot documentation, CC BY-SA 3.0. Источник.
⚠️ Безопасность. Любая проверка моторов выполняется со снятыми пропеллерами. Перед пайкой и изменением проводов отключите аккумулятор. Не включайте bidirectional DShot на ESC с неподдерживаемой прошивкой: ArduPilot предупреждает о непредсказуемой работе моторов. Первый тест после смены протокола делайте на стенде без винтов.

Сначала разделите три понятия

Что настраивается Что это делает Чего это не делает
DShot Передаёт автопилоту цифровую команду ESC с контрольной суммой. Не создаёт RPM-телеметрию автоматически на любом ESC.
ESC telemetry Может передавать от ESC RPM, напряжение, ток, температуру и другие доступные для конкретной модели поля. Не заменяет правильное питание, проводку и проверку мотора.
Bidirectional DShot Возвращает RPM по тому же сигнальному проводу DShot, если это поддерживают FC, DMA-раскладка и прошивка ESC. Не работает на любом DShot-совместимом ESC и не является синонимом обычного DShot.
Harmonic notch Вырезает узкие полосы шума вокруг частоты вращения и её гармоник. Не исправляет кривой пропеллер, подшипник, люфт или ошибочную распиновку.

Сноска 1. В разговоре часто говорят «RPM-фильтр», имея в виду сразу два разных источника частоты: телеметрию ESC и In-Flight FFT. FFT анализирует сигнал гироскопа, а ESC telemetry получает обороты от силовой электроники. Эти методы можно сравнивать, но нельзя проверять один через другой.

Нужна ли калибровка ESC

Классическая ESC calibration нужна для аналоговых протоколов, когда ESC должен запомнить минимальный и максимальный импульс PWM. Для цифрового DShot и CAN ESC ArduPilot прямо указывает, что такая калибровка не требуется. Поэтому пункт «сначала откалибровать ESC» в инструкции для DShot может только запутать.

Если используется PWM, OneShot или OneShot125, порядок другой: сначала калибруют радиоуправление, затем выбирают протокол и выполняют процедуру, подходящую конкретному ESC. Названия звуковых сигналов и поведение при старте отличаются у производителей. Для DShot нужно проверить не калибровку диапазона, а распознавание протокола, карту выходов, направление моторов и RC banner после перезагрузки.

Не переноси значения MOT_PWM_TYPE, маски выходов и настройки телеметрии с другой платы. У автопилотов с IOMCU группы MAIN/AUX и поддержка DShot отличаются. У некоторых плат DShot доступен только на AUX, у других — на всех выходах. Это определяется аппаратным описанием платы и версией прошивки.

Выбор скорости DShot

Режим Практический ориентир Главный риск
DShot150 Большой аппарат и длинные сигнальные провода, когда важнее устойчивость к шуму. Более длинный импульс и меньшая скорость обновления.
DShot300 Универсальный вариант и один из предпочтительных режимов для bidirectional DShot. Нужно подтвердить поддержку возврата телеметрии на конкретном FC и ESC.
DShot600 Часто применяется на небольших аппаратах; также предпочтителен для bidirectional DShot. Более высокая чувствительность длинной линии к шуму.
DShot1200 Только когда это оправдано платой, ESC и разводкой. Выше требования к сигналу; высокая скорость не гарантирует лучший фильтр.

Официальная документация ArduPilot рекомендует DShot150 для крупных аппаратов с длинными линиями, а DShot600 — как распространённый вариант для малых. Если нужен именно bidirectional DShot, ориентиром служат DShot300 или DShot600: обратный ответ ESC увеличивает требования к длительности обмена. Финальный выбор всё равно проверяется по RC banner, отсутствию ошибок и фактическим RPM.

Как получить RPM

Вариант A: отдельный провод ESC telemetry

Телеметрийные провода ESC объединяют на RX одного UART автопилота, если это разрешено схемой конкретной платы. Для BLHeli32/AM32 telemetry обычно задают SERIALx_PROTOCOL = 16, где x — номер физического UART. Частота опроса задаётся SERVO_BLH_TRATE: официальное значение по умолчанию — 10 Гц, а для работы harmonic notch документация допускает повышение до 100 Гц, если система это выдерживает.

Проверь три условия до первого полёта:

  1. ESC действительно передаёт телеметрию, а провод подключён к RX правильного UART.
  2. В прошивке ESC включены нужные поля и выбран поддерживаемый тип telemetry.
  3. В Mission Planner появляются esc1_rpm и другие поля либо в DataFlash-логе есть сообщения ESCn.

Если через тот же аппарат нужно передавать данные в наземную станцию по отдельному телеметрийному порту, этот порт должен работать с MAVLink2. Не путай SERIALx_PROTOCOL = 16 для входа от ESC с SERIALx_PROTOCOL = 2 для MAVLink2: это разные физические подключения и разные задачи.

Вариант B: bidirectional DShot

Здесь отдельный телеметрийный провод не нужен: ESC возвращает RPM по сигнальной линии. Но требуется совместимость сразу трёх элементов: автопилота, DMA/выходов и прошивки ESC. В актуальной документации ArduPilot указана поддержка, например, BLHeli32 начиная с 32.7, BLHeli_S начиная с 16.73 и соответствующих версий AM32. У BLHeli_S это не означает, что любая заводская прошивка поддерживает bidirectional DShot: могут потребоваться JESC или BlueJay.

Типовая группа параметров выглядит так:

  • SERVO_BLH_BDMASK — маска выходов, на которых включается возврат DShot. Значение зависит от того, где расположены моторы и есть ли IOMCU.
  • SERVO_BLH_POLES — число магнитных полюсов мотора, используемое для пересчёта e-field RPM в обороты вала. Значение по умолчанию 14 подходит не каждому мотору.
  • SERVO_DSHOT_ESC — тип DShot ESC для поддерживаемых команд и расширенной телеметрии; выбирай его по документации конкретной прошивки ESC.

Сноска 2. Не путай число полюсов и число пар полюсов. В параметре ArduPilot используется обозначение, указанное в его документации; данные из калькулятора производителя нужно сопоставить с этим обозначением. Ошибка здесь не обязательно остановит мотор, но исказит RPM и положение центра notch.

Как включать harmonic notch по RPM

Вариант по ESC telemetry выбирается через INS_HNTCH_MODE = 3. Сам по себе этот параметр не создаёт телеметрию: сначала должны появиться реальные обороты. Затем включают notch через INS_HNTCH_ENABLE = 1, задают INS_HNTCH_FREQ ниже частоты оборотов в висении, но выше INS_GYRO_FILTER, и выбирают ширину INS_HNTCH_BW.

Для обычного single-source режима ArduPilot приводит практический стартовый ориентир INS_HNTCH_BW = INS_HNTCH_FREQ / 2. Если включается multi-source, когда создаётся отдельный первый notch для каждого мотора, ширину нужно уменьшать: несколько notch увеличивают фазовую задержку. В официальном примере начальный ratio для такого режима — примерно 4:1 вместо 2:1. Это не готовый пресет для любой рамы, а точка, с которой начинают проверку.

Число гармоник задаётся INS_HNTCH_HMNCS. Каждая дополнительная гармоника повышает нагрузку CPU, а multi-source добавляет фильтр для каждого мотора. Для первого теста разумнее оставить небольшой набор и посмотреть на загрузку, задержку и реакцию аппарата. Красивый график не оправдывает пропуски логов или осцилляции.

Диагностика по симптому

Симптом Что проверить сначала Чего не делать
Моторы не запускаются после перехода на DShot Поддержку DShot, выходную группу, RC banner, SERVOx_FUNCTION, питание и направление. Не повышать сразу скорость DShot и не включать bidirectional DShot.
DShot работает, RPM в Mission Planner отсутствует Прошивку ESC, BDMASK/выходы, телеметрийный провод, SERIALx_PROTOCOL и наличие ESCn в логе. Не ставить INS_HNTCH_MODE = 3 в надежде, что RPM появится.
RPM есть, но число явно неверное SERVO_BLH_POLES, выбранный тип ESC и соответствие номера ESC мотору. Не подбирать INS_HNTCH_FREQ по неверному RPM.
После notch стало хуже Центральную частоту, ширину, число гармоник, multi-source, CPU load и фазовую задержку. Не лечить осцилляции отключением failsafe или копированием чужого набора INS_HNTCH_*.
Один ESC показывает нулевой RPM Провод, разъём, нумерацию ESC, прошивку и фактический запуск этого мотора без винта. Не считать среднее RPM подтверждением исправности всех четырёх каналов.

Проверка без гадания

  1. Сохрани полный параметр-файл и версии FC/ESC. Зафиксируй выходы, протокол и число полюсов моторов.
  2. Сними пропеллеры. Проверь питание, землю, RX телеметрии и отсутствие короткого замыкания.
  3. Включи только базовый DShot и перезагрузи автопилот. Проверь RC banner и тест каждого мотора в Mission Planner.
  4. Подключи один источник RPM: отдельный провод telemetry или bidirectional DShot. Не меняй сразу оба метода.
  5. Убедись, что RPM меняется при кратком тесте газа, а в логе появляются соответствующие ESCn и RCOU.
  6. Только после этого включай harmonic notch и меняй один параметр за раз.
  7. Сделай короткий контрольный полёт, сохрани лог и сравни шум, температуру моторов, реакцию и нагрузку CPU с исходным состоянием.

Практические кейсы из сообщества

В экспортированном чате FPV Club обсуждение BlueJay и записи ESC-телеметрии показывает типичную ошибку: наличие прошивки ESC ещё не означает, что телеметрия физически приходит в автопилот (messages2.html#message147587). Отдельная ветка про Dynamic FFT без bidirectional DShot полезна для другой границы: FFT может анализировать гироскоп, но это не заменяет RPM-источник для режима ESC telemetry (messages3.html#message233564).

Для неофициальной части полезны документация и исходники BlueJay, а также расширение Extended DShot Telemetry. Это материалы сообщества, а не гарантия совместимости с конкретной платой. Версию прошивки, поддерживаемые поля и карту выходов нужно сверять с официальной документацией ArduPilot и производителя ESC.

Короткий чек-лист

  • Для DShot/CAN не выполнялась лишняя классическая калибровка PWM.
  • Выходы и протокол подтверждены после перезагрузки по RC banner.
  • RPM реально виден в Mission Planner или сообщениях ESCn, а не только ожидается по параметрам.
  • Число полюсов мотора проверено по документации и не перепутано с числом пар.
  • INS_HNTCH_MODE = 3 включён только после проверки ESC telemetry.
  • После изменения сохранён новый лог; загрузка CPU, задержка и осцилляции не ухудшились.

Источники и связанные материалы

Сноска 3. Названия параметров, доступные выходы, поддержка DMA и версия прошивки ESC меняются между платами и релизами ArduPilot. Перед подключением питания сверяй документацию именно для своей платы, ESC и версии прошивки. Проверено: 31 июля 2026 года.

Прокрутить вверх