Методическая рекомендацияvoronfpv.ru

Сервоприводы для БПЛА и роботов: полная методическая рекомендация

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

Здесь всё по порядку. Как серва устроена и как понимает команду. Какую купить под задачу и как посчитать. Куда паять, от чего питать и почему перезагружается полётник. Как настроить в Betaflight, INAV и ArduPilot, на пульте EdgeTX и прямо на приёмнике. И по готовым сценариям - от наклона FPV-камеры и подвеса со стабилизацией до VTOL, антенного трекера на земле и антенны на борту, которая сама смотрит на оператора.

Прочитал, прошёл одиннадцать тренажёров - подключаешь и настраиваешь любую серву сам, и она не гудит, не дёргается и не роняет груз. Опытным сразу в разделы про разрешение каналов ELRS, питание, failsafe захвата и механику.

Уровни в шапке разделов: Уровень 1: минимум - без этого серву не подключить. Уровень 2: базовый - настройка под конкретную задачу. Уровень 3: проф - самолёты, наземка, трекеры, свои контроллеры.

Раздел 1
Что такое серва
и зачем она на аппарате
Уровень 1: минимум

Обычный мотор просто крутится. Серва - мотор с мозгами: ей говорят угол, она встаёт в этот угол и держит его, даже если на неё давят.

Какие бывают сервы
Микро 9 гSG90, наклон камеры
Стандарт 55 гMG996R, захват, руль
Мощная 20 кгDS3218, наземка
Самолётнаябез сердечника
Шиннаяманипуляторы
Вращения 360°колёса, лебёдка

Словарь на одну минуту. Эти слова дальше будут везде:

Слово Что это простыми словами
Серва, сервопривод мотор с редуктором и датчиком угла: встаёт в заданный угол и держит его
Импульс, PWM, мкс команда серве: сигнал 50 раз в секунду, его длина в микросекундах (мкс) задаёт угол
Качалка, тяга рычаг на валу сервы и стержень от него к тому, что двигаем
Концевые точки, MIN / MAX крайние импульсы, дальше которых серву не пускаем, чтобы не упиралась
Полётник (FC) полётный контроллер - плата-мозг аппарата
Прошивка: Betaflight, INAV, ArduPilot программы полётника. Betaflight - гоночные дроны, INAV - дальние полёты и крылья, ArduPilot - сложная автоматика, миссии, наземка
Пульт, EdgeTX аппаратура управления и её программа
Канал, AUX одна «ручка» пульта, которую видит аппарат: 1-4 - стики, дальше (AUX1, AUX2...) - тумблеры и крутилки
ELRS (ExpressLRS), CRSF система радиоуправления и протокол, по которому приёмник говорит с полётником
UART последовательный порт полётника: пара выводов TX/RX для приёмника, GPS, телеметрии
BEC, UBEC понижающий преобразователь: из батареи 6-25 В делает 5-7,4 В для серв
Failsafe что делает аппарат и серва, когда пропала связь с пультом
Mission Planner программа на компьютере для настройки ArduPilot

Где сервы стоят на технике:

Где Что делает серва Раздел
FPV-дрон наклоняет камеру в полёте 14
Коптер с камерой подвес: поворот и наклон камеры 15
Коптер доставки захват и сброс груза 16
Большой коптер, самолёт шасси, парашют 17
Самолёт, крыло, VTOL рули, элероны, наклон моторов 18
Наземный робот руль, мачта камеры, манипулятор 19
Наземная станция поворот антенны за аппаратом - по GPS, по сигналу или по камере 20
Борт любого аппарата антенна: поляризация, вертикаль в кренах, наведение на оператора 21

Сервы также стабилизируют камеру и антенну против наклона аппарата (разделы 15 и 21) - это одна и та же настройка, меняется только то, что стоит на качалке.

Результат раздела: вы знаете, что серва - это не мотор «вообще», а мотор, который держит угол. Дальше - как она это делает.

Материалы базы: подключение сервопривода к полётному контроллеру, то же на форуме с обсуждением.

Раздел 2
Устройство и импульс
мотор, редуктор, датчик угла и ширина импульса
Уровень 1: минимум
Рис. 1. Серва в разрезе: мотор, редуктор, выходной вал, датчик угла и плата.

Внутри пять частей. Мотор крутится быстро и слабо. Редуктор из шестерёнок превращает скорость в силу. На выходном валу сидит качалка. Датчик угла (обычно потенциометр) знает, где сейчас вал. Плата сравнивает угол из команды с углом вала и крутит мотор, пока они не совпадут.

Как серве говорят угол. По жёлтому (оранжевому, белому) проводу идёт импульс 50 раз в секунду. Серва смотрит только на ширину импульса:

мкс - микросекунда, миллионная доля секунды. Полётник и приёмник по умолчанию выдают 1000-2000 мкс.

Рис. 2. Ширина импульса задаёт угол. Период - 20 мс, то есть 50 Гц.

Важная деталь: 1000-2000 мкс - это не полный ход. У большинства обычных серв этот диапазон даёт около 90° (по 45° в каждую сторону). Полные 180° - при 500-2500 мкс. Нужен больший ход - расширяйте концевые точки (крайние импульсы MIN и MAX) в полётнике или на пульте (разделы 9-12). Точный диапазон - в паспорте сервы.

Аналоговая и цифровая. Аналоговая обновляет положение 50 раз в секунду, цифровая - до 300 и больше. Цифровая точнее держит угол и быстрее отвечает, но больше ест в покое. Частоту импульсов выше 50 Гц ставят только цифровым сервам, иначе аналоговая сгорит. В Betaflight и INAV это servo_pwm_rate (по умолчанию 50), в ArduPilot - SERVO_RATE.

Покрутите сами:

Результат: вы знаете, что серве нужны три вещи - питание, общий минус и импульс нужной ширины. Всё остальное в методичке - как их правильно дать.

Раздел 3
Виды серв
какую брать под задачу
Уровень 1: минимум
Отличаются не только размером
Микро металлMG90S, 12-14 г
Высоковольтная HV7,4-8,4 В
Бесколлекторнаяресурс, скорость
Линейная1,5 г, для микросамолётов
Постоянного вращениявместо угла - скорость
Шинная STS3215цепочкой по одному проводу
Чем отличаются на практике
Пластиковый редуктор (SG90)

Применение: Лёгкие задачи без ударов: наклон FPV-камеры, дверца, переключатель. Дёшево и 9 г.

Внимание! Шестерни ломаются от удара и перегруза. На захват груза и рули самолёта - только металл.

Металлический редуктор (MG90S, MG996R)

Применение: Захват, сброс, рули, всё, где бывают рывки и удары. Выдерживает посадки.

Внимание! Тяжелее. Дешёвые копии люфтят - качалка болтается на пару градусов.

Бесколлекторная (brushless)

Применение: Рули больших самолётов, VTOL, наземка: мотор без щёток не изнашивается, держит угол тише и точнее, ресурс в разы выше.

Внимание! Дорогая. Выгода видна только при долгой работе и больших нагрузках; на наклон камеры - переплата.

Без сердечника (coreless)

Применение: Самолёты и крылья: быстрый отклик, точность, меньше дрожи.

Внимание! Дороже в разы. Для захвата и наклона камеры - переплата.

Высоковольтная (HV)

Применение: Питание прямо от 2S (7,4-8,4 В): больше момент и скорость, без лишнего BEC.

Внимание! От 5 В работает слабее паспорта. На 5V полётника такую не вешают - нужен свой BEC на 7,4 В.

Постоянного вращения (360°)

Применение: Колёса маленького робота, лебёдка, барабан. Серва крутится, импульс задаёт скорость.

Внимание! Угол не держит совсем. Как подвес или захват - не годится.

Шинная (STS3215, Dynamixel)

Применение: Манипуляторы: все сервы на одном проводе, каждая сообщает угол, ток и температуру.

Внимание!!! Нужен свой контроллер и протокол. С полётником напрямую не работает.

Угол хода. Обычная - 180° (часто реально 120-180°), бывают 270°: подходят для поворотных механизмов и трекеров. На коробке и в названии это «180°» или «270°». Серва 360° - это вращение, а не угол.

Результат: под наклон камеры - пластиковая микро, под захват и рули - металл, под самолёт - coreless, под наземку - мощная влагозащищённая, под манипулятор - шинная.

Раздел 4
Характеристики
момент, скорость, напряжение, шлицы
Уровень 1: минимум
MG996R: стандартный размер, металлический редуктор
9,4 кг·сммомент при 4,8 В
11 кг·смпри 6 В
0,17 с/60°скорость
до 2,5 Аток в упоре
Что в паспорте Что значит Как читать
Stall torque, кг·см момент в упоре 10 кг·см = держит 10 кг на плече 1 см или 1 кг на 10 см
Speed, с/60° за сколько повернёт на 60° 0,1 с/60° - быстрая, 0,2 - медленная
Voltage, В допустимое питание 4,8-6 В обычная, 6-8,4 В - HV
Stall current, А ток в упоре по нему считают BEC, раздел 8
Gear редуктор plastic / metal / titanium
Spline, T число зубьев вала 25T - стандарт Futaba и большинства китайских
Dead band, мкс зона нечувствительности SG90 - 10 мкс; меньше - точнее

Паспорта ходовых серв:

Серва Момент Скорость Вес Источник
SG90 1,8 кг·см (4,8 В) 0,1 с/60° 9 г даташит TowerPro
MG90S 1,8 (4,8 В) / 2,2 кг·см (6 В) 0,1 / 0,08 с/60° 13,4 г components101
EMAX ES08MA II 1,6 (4,8 В) / 2,0 кг·см (6 В) 0,12 / 0,10 с/60° 12 г RMRC
MG996R 9,4 (4,8 В) / 11 кг·см (6 В) 0,17 / 0,14 с/60° 55 г components101
DS3218 19 (5 В) / 21,5 кг·см (6,8 В) 0,16 / 0,14 с/60° 60 г servodatabase

Паспортный момент - это в упоре, на пределе. В работе держите нагрузку не больше половины паспорта. Иначе серва греется, гудит и быстро изнашивает редуктор.

Результат: вы читаете паспорт сервы и понимаете, выдержит ли она вашу задачу. Как посчитать задачу - в следующем разделе.

Раздел 5
Выбор сервы
момент = масса × плечо, и запас
Уровень 1: минимум
Рис. 3. Нужный момент - масса груза на длину плеча. Запас ×2.

Как посчитать, по шагам:

  1. Взвесьте то, что серва двигает или держит. Груз, камеру с креплением, руль.
  2. Измерьте плечо - от оси вала до точки, где висит груз или цепляется тяга. В сантиметрах.
  3. Перемножьте. 0,5 кг × 1,5 см = 0,75 кг·см.
  4. Добавьте запас: ×1,5 - для камеры, ×2 - обычно, ×3 - если удары, мороз, ветер, наземка.
  5. Выберите серву с паспортным моментом не меньше этой цифры при вашем напряжении питания.
  6. Проверьте скорость. Захвату и шасси скорость не важна, рулям самолёта и подвесу - важна: 0,1 с/60° и быстрее.

Считает калькулятор ниже - зелёным сервы, которые справятся, рамкой самая дешёвая:

Два способа не покупать серву мощнее:

Результат: вы знаете нужный момент в кг·см и модель сервы под него.

Раздел 6
Что купить
сервы, питание, провода, механика
Уровень 1: минимум

Цены проверены 24.09.2026, на Ozon - с Ozon Картой (без неё на 5-10% дороже).

Сервы:

Что Для чего Где и почём
SG90 наклон FPV-камеры, лёгкие дверцы Ozon - 125 ₽
MG90S Tower Pro захват груза до 0,5 кг, микро-рули Ozon - 303 ₽
EMAX ES08MA II рули лёгких крыльев Ozon - 293 ₽
MG996R захват до 1-2 кг, руль маленького робота Ozon - 348 ₽
DS3218 PRO, 20 кг наземка, тяжёлые захваты Ozon - 684 ₽ · DS3218-180 21,5 кг - 1 481 ₽
DS3225, 25-28 кг руль тяжёлого робота Ozon - 1 533 ₽
DS3240, 40 кг, 270° поворотные механизмы Ozon - 2 326 ₽
HV 45 кг (HV6245MG) манипулятор, мачта Ozon - 1 448 ₽
HV 35 кг, влагозащита, 270° наземка, трекер Ozon - 4 226 ₽
Серва 360° (SG90 / MG90S) колёса, лебёдка SG90 360° - 155 ₽ · MG90S 360° - 233 ₽
Линейная 1,5 г микросамолёты Ozon - 763 ₽
Шинная Feetech STS3215 манипуляторы Ozon - 1 823 ₽

Питание, провода, проверка:

Без чего не обойтись
Сервотестерпроверка без полётника
Внешний BECпитание серв
Приёмник с PWMсерва прямо на приёмник
Пан-тилт кронштейнпод две SG90
Что Зачем Где и почём
Сервотестер проверить серву и найти центр без полётника Ozon - 198 ₽
UBEC 5 В 3 А Hobbywing отдельное питание серв Ozon - 223 ₽
Конденсатор 1000 мкФ 16 В, Low ESR гасит броски тока серв Ozon, 10 шт - 135 ₽
Удлинитель сервы 30 см довести провод до полётника Ozon, 5 шт - 261 ₽
Y-разветвитель две сервы на один канал Ozon, 2 шт - 177 ₽
Замедлитель сервы плавный ход дверцы или шасси без настроек Ozon - 254 ₽
Мультиметр напряжение и ток серв UNI-T UT33A+ в chipdip - 1 650 ₽

Механика:

Что Зачем Где и почём
Пан-тилт кронштейн подвес на двух SG90 Ozon - 419 ₽
Алюминиевая качалка 25T вместо пластиковой на мощной серве Ozon - 163 ₽
Кабанчики (рычаги на руле, к которым цепляется тяга) с наконечниками рули самолёта, заслонки Ozon, 10 шт - 183 ₽

Без полётника:

Что Зачем Где и почём
Приёмник Radiomaster ER4/ER6/ER8 сервы прямо на приёмник ELRS Ozon - 1 361 ₽
Arduino Nano свой контроллер на 1-2 сервы Ozon - 315 ₽
ESP32 DevKit то же плюс Wi-Fi Ozon - 472 ₽
Драйвер PCA9685 до 16 серв на одной плате Ozon - 440 ₽
Раздел 7
Провода и разъёмы
три провода и куда каждый
Уровень 1: минимум
Рис. 4. Цвета проводов у разных производителей и типичные выводы на полётнике.

Три провода:

Куда сигнал на полётнике. На любой свободный вывод, который прошивка умеет отдать под серву:

Как подпаять, по шагам:

  1. Найдите схему своего полётника у производителя - где 5V, GND и свободные сигнальные выводы.
  2. Отрежьте разъём сервы или купите удлинитель и отрежьте один его конец.
  3. Залудите провода и площадки. Паяльник 350 °C, секунда на площадку.
  4. Сигнал - на выбранный вывод. Минус - на GND. Плюс - на 5V полётника (только для SG90 / MG90S) или на внешний BEC (раздел 8).
  5. Прозвоните мультиметром: плюс и минус не замкнуты между собой.

Результат: серва сидит на своём выводе, питание и минус подведены. Перевернёте разъём - серва не сгорит, плюс посередине. Просто не заработает.

Пайка - чеклист пайки и пайка дронов в базе.

Все выводы заняты: куда ещё подключить серву

Частая ситуация: моторы, видеопередатчик, GPS, приёмник, LED - на плате не осталось ни одной свободной площадки. Серву всё равно можно подключить. Сначала ответьте на один вопрос: что серва должна делать?

Рис. 5. Все выводы заняты: пять путей. Слева - когда серве хватает канала пульта, справа - когда нужна прошивка.
Задача Способ Вывод полётника
Серва повторяет канал, приёмник меняем или ставим новый 1. ELRS-приёмник с PWM: два выхода - CRSF в полётник, остальные - сервы не нужен
Серва повторяет канал, приёмник менять не хотим 2. ESP32 подслушивает CRSF от приёмника не нужен
Нужна прошивка, Betaflight 3. Отдать серве другую площадку: PPM, TX пустого UART, LED освобождаем
Нужна прошивка, ArduPilot, выходов мало 4. SBUS-выход на свободный UART и декодер: до 16 серв один UART
Серв много и надолго 5. Полётник с большим числом выходов -

Способ 1. ELRS-приёмник с PWM-выходами, по шагам

Приёмник ELRS с PWM-выходами (Radiomaster ER4, ER6, ER8 - раздел 6) умеет отдать два своих выхода под CRSF для полётника, а остальными крутить сервы напрямую (документация ELRS). Полётник получает всё управление как от обычного приёмника, а серва не занимает у него ни одной площадки.

  1. Прошейте приёмник на ELRS 3.x и привяжите к пульту (ExpressLRS Configurator).
  2. Включите приёмник без пульта. Через минуту он поднимет Wi-Fi ExpressLRS RX - подключитесь, откройте в браузере 10.0.0.1.
  3. Вкладка Model. Найдите два выхода, у которых в списке Mode есть Serial TX и Serial RX (обычно CH2 и CH3 - смотрите список своего приёмника). Поставьте им Serial TX и Serial RX, протокол - CRSF. Save.
  4. Провода: выход Serial TX приёмника - в RX свободного UART полётника, Serial RX - в TX того же UART. GND - общий.
  5. Полётник: вкладка Ports - Serial RX на этом UART; Receiver - протокол CRSF. Как с обычным ELRS-приёмником.
  6. Остальные выходы приёмника - сервы. У каждого: Input = канал пульта (например, 10), Mode = 50Hz, Failsafe = безопасное положение (для захвата - «закрыто», раздел 16).
  7. Питание: приёмник и сервы - от одного BEC 5-6 В на разъём BATT приёмника. 5V полётника к приёмнику не подключайте: два источника на одной линии будут спорить. Минус BEC - общий с полётником.

Как проверить: в конфигураторе, вкладка Receiver, все каналы ходят от стиков. Серва ходит от своего тумблера. Выключите пульт - серва встаёт в положение Failsafe.

Результат: серва работает от пульта, у полётника занят только один UART, который и так был под приёмник.

Способ 2. ESP32 подслушивает CRSF, по шагам

Приёмник шлёт полётнику кадры CRSF со всеми каналами по одному проводу (TX приёмника). ESP32 можно подключить к этому же проводу параллельно: полётник по-прежнему получает управление, а ESP32 читает нужный канал и сама крутит серву. От полётника не нужно ничего.

Что нужно: ESP32 DevKit (раздел 6), серва, BEC 5-6 В, Arduino IDE с поддержкой ESP32 (как установить платы и библиотеки).

  1. Подпаяйте тонкий провод к площадке, где TX приёмника входит в RX полётника, и ведите его на GPIO16 ESP32. Второй провод - GND приёмника на GND ESP32. TX ESP32 никуда не подключайте: она только слушает.
  2. Сигнал сервы - GPIO18. Питание сервы и ESP32 (вывод VIN или 5V) - от BEC. Минус общий.
  3. Залейте код. В начале - какой канал крутит серву (CH = 10) и куда встать без сигнала (SAFE_US = 1000, для захвата - «закрыто»):
// ESP32 слушает CRSF от приёмника (параллельно с полётником) и крутит серву от канала 10.
// Провод: TX приёмника -> RX полётника И GPIO16 ESP32. Общий минус. ESP32 ничего не передаёт.
const int RX_PIN = 16;       // сюда сигнал TX приёмника
const int SERVO_PIN = 18;    // сигнал сервы
const int CH = 10;           // какой канал пульта крутит серву
const int SAFE_US = 1000;    // куда встать без сигнала (захват: «закрыто»)

uint8_t buf[64];
int len = 0;
uint32_t lastFrame = 0;

void servoUs(int us) { ledcWrite(SERVO_PIN, (uint32_t)us * 65535UL / 20000UL); }  // 50 Гц = 20 000 мкс

uint8_t crc8(const uint8_t *p, int n) {
  uint8_t c = 0;
  while (n--) { c ^= *p++; for (int i = 0; i < 8; i++) c = (c & 0x80) ? (c << 1) ^ 0xD5 : (c << 1); }
  return c;
}

void setup() {
  Serial2.begin(420000, SERIAL_8N1, RX_PIN, -1);   // CRSF: 420000 бод, не инвертирован
  ledcAttach(SERVO_PIN, 50, 16);                   // ШИМ 50 Гц, 16 бит
  servoUs(SAFE_US);
}

void loop() {
  while (Serial2.available()) {
    uint8_t b = Serial2.read();
    if (len == 0 && b != 0xC8) continue;           // начало кадра для полётника
    buf[len++] = b;
    if (len == 2 && (buf[1] < 2 || buf[1] > 62)) { len = 0; continue; }
    if (len >= 2 && len == buf[1] + 2) {
      if (buf[2] == 0x16 && crc8(buf + 2, buf[1] - 1) == buf[len - 1]) {   // кадр каналов
        int bit = (CH - 1) * 11, i = 3 + bit / 8, sh = bit % 8;
        uint32_t v = ((uint32_t)buf[i] | (uint32_t)buf[i + 1] << 8 | (uint32_t)buf[i + 2] << 16) >> sh & 0x7FF;
        int us = 1500 + ((int)v - 992) * 5 / 8;    // 172..1811 -> 988..2012 мкс
        servoUs(constrain(us, 988, 2012));
        lastFrame = millis();
      }
      len = 0;
    }
  }
  if (millis() - lastFrame > 500) servoUs(SAFE_US); // нет кадров полсекунды - безопасное положение
}
  1. Как проверить на столе: включите пульт - серва ходит от тумблера канала 10, дрон при этом управляется как обычно. Выключите пульт - через полсекунды серва встаёт в SAFE_US.

Код проверен компиляцией (ESP32, ядро 3.3) и разбором собранных вручную кадров CRSF - все 16 каналов читаются верно. На железе мы его ещё не гоняли: проверка на столе из пункта 4 - обязательна до полёта. Много серв - добавьте к ESP32 плату PCA9685 (раздел 22).

Результат: серва работает от канала пульта, у полётника не занято ничего.

Способ 3. Betaflight: отдать серве другую площадку, по шагам

Серве нужна не «серво-площадка», а любой вывод процессора, у которого есть таймер и который не делит этот таймер с моторами. Кандидаты: вход PPM (если приёмник по UART - он свободен), TX пустого UART, LED, управление камерой, M5-M8 без моторов.

  1. CLI: resource show - что на каких выводах.
  2. timer show - выводы с таймерами. Для любого вывода: timer <вывод> list - какие таймеры ему можно дать.
  3. Выберите вывод, чей таймер не совпадает с таймерами моторов. Например, PPM на A03 с TIM9, моторы на TIM3 и TIM4 - подходит.
  4. Освободите: resource PPM 1 none (только если приёмник по UART) или resource SERIAL_TX 3 none (если UART3 пустой на вкладке Ports).
  5. Отдайте серве: resource SERVO 1 A03. Таймера нет - timer A03 af<номер> из списка пункта 2.
  6. save. Дальше - как в разделе 10: SERVO_TILT, вкладка Servos.
  7. Серва на TIM1 или TIM8 молчит, хотя всё верно - это DShot bitbang: он забирает TIM1 и/или TIM8. Отдайте ему другой: set dshot_bitbang_timer = TIM1 (если серва на TIM8) или TIM8, save. Крайний вариант - set dshot_bitbang = OFF, но на части плат F411 это выключает RPM-фильтр (issue Betaflight).

Как проверить: timer show - у вывода сервы свой таймер; во вкладке Servos серва ходит в Live mode; моторы во вкладке Motors крутятся все.

Синтаксис команд timer и настроек dshot_bitbang сверен с исходниками Betaflight. В INAV команды resource нет - там выходы раздаются группами таймеров на вкладке Mixer (раздел 11). Не хватает выходов в INAV - способы 1, 2 или 5.

Результат: серва на своём выводе с отдельным таймером, моторы работают.

Способ 4. ArduPilot: SBUS-выход и виртуальные выходы, по шагам

ArduPilot умеет выдать выходы SERVO1...SERVO16 по одному проводу SBUS на свободный UART (документация). Декодер SBUS - PWM превращает его обратно в обычные выходы для серв. Выходы 9-16 при этом работают, даже если на плате физически их нет.

  1. Свободный UART, например 4: SERIAL4_PROTOCOL = 15 (SBus servo out). Скорость 100 000 ставится сама.
  2. SBUS инвертирован. Полётник на F7 или H7: SERIAL4_OPTIONS = 2 (бит 1 - инверсия TX). На F4 - внешний инвертор на транзисторе или готовый инвертор SBUS.
  3. Декодер SBUS - PWM: вход - на TX этого UART, питание декодера и серв - от BEC 5-6 В, минус общий. 5V с разъёма UART на сервы не берите.
  4. Выход декодера N = выход ArduPilot N. Декодеры на 8 выходов обычно отдают каналы 1-8, у части есть переключение на 9-16 - смотрите описание своего. Каналы 1-4 - моторы, сервы вешайте на 9-16.
  5. Функции как обычно: например, SERVO13_FUNCTION = 28 (Gripper), SERVO14_FUNCTION = 7 (Mount1Pitch). Разделы 12, 15, 16.
  6. SERVO_SBUS_RATE = 50 (25-250 Гц). Часть декодеров выдаёт фиксированные ~170 Гц - это может сжечь аналоговую серву, ставьте цифровые или декодер с настройкой частоты.

Как проверить: Mission Planner - Setup - Servo Output: на выходе 13 меняется импульс; серва на выходе декодера ходит так же.

В INAV SBUS-выход формально есть, но разработчики прямо советуют его не использовать: он работает только на F7 и H7 и не на всех платах (ответ разработчика). В Betaflight SBUS-выхода для серв нет.

Результат: до 16 серв на одном проводе UART, все функции ArduPilot работают.

Способ 5. Полётник с большим числом выходов

Если серв три и больше и это надолго - честнее поставить полётник под задачу. У крыльевых плат (SpeedyBee F405 WING, Matek F405-Wing и подобные) выходов под сервы много и есть свой BEC на 5-8 В для них. Перед покупкой откройте схему платы у производителя и посчитайте: моторы + сервы + запас на один выход.

Раздел 8
Питание
BEC, ток в упоре, конденсатор
Уровень 1: минимум
Рис. 6. Серва на 5V полётника против отдельного BEC с общим минусом.

Серва ест ток рывками. Пока стоит - миллиамперы. Тронулась с места или упёрлась - до сотен миллиампер у SG90 (по разным даташитам 0,36-0,6 А) и до 2,5 А у MG996R (даташит). Если она питается от 5V полётника, напряжение на полётнике проседает, и он перезагружается. В воздухе.

Правило:

Как подключить отдельный BEC, по шагам:

  1. Вход BEC - к батарее через разъём питания дрона (параллельно полётнику). Проверьте входное напряжение BEC: для 6S нужен вход до 26 В и больше.
  2. Выход BEC: плюс - на красный провод сервы, минус - на коричневый.
  3. Минус BEC соедините с GND полётника. Без общего минуса серва не поймёт сигнал.
  4. Сигнальный провод - на полётник, как в разделе 7. Красный провод от сервы на полётник НЕ подключайте, иначе BEC и полётник будут бороться друг с другом.
  5. Конденсатор 1000 мкФ поставьте на плюс и минус рядом с сервой. Полоска на корпусе - минус. Он сгладит броски тока.
  6. Мультиметром проверьте напряжение на разъёме сервы: 5-6 В.

Сколько ампер нужно от BEC. Сложите токи серв в упоре и возьмите 60% (все сразу в упоре бывают редко) плюс 0,5 А. Две MG996R: 2 × 2,5 × 0,6 + 0,5 = 3,5 А - нужен BEC на 4-5 А. Калькулятор в разделе 5 считает это сам.

Результат: серва питается от своего BEC, полётник - от своего, минус общий. Полётник не перезагружается, когда серва дёргается.

Раздел 9
Пульт и каналы
EdgeTX, микшер, концевые точки, ELRS
Уровень 1: минимум
Рис. 7. Пять звеньев от крутилки до сервы. Не работает - ищите разрыв слева направо.

Серва управляется каналом. Канал - это то, что пульт передаёт на аппарат: 1-4 стики, 5 и дальше - тумблеры и крутилки. Сначала назначаем крутилку или тумблер на свободный канал.

На пульте EdgeTX, по шагам:

  1. Кнопка MDL - ваша модель - страница Mixes (Микшер).
  2. Выберите свободный канал, например CH9. Нажмите на него - Insert/Edit.
  3. Source (источник): крутилка S1 - для камеры и подвеса; тумблер SA - для захвата, шасси.
  4. Weight 100.
  5. Нужна плавность - Slow up / Slow down: например 1,0 с. Серва будет двигаться плавно, даже если щёлкнули тумблером.
  6. Выйдите и откройте Channels monitor (экран каналов). Крутите S1 - столбик CH9 ходит от −100 до +100.

Концевые точки на пульте. Страница Outputs: у канала CH9 можно задать Min / Max (−100 / +100 по умолчанию), Subtrim (сдвиг центра) и Direction (реверс). Это удобно, когда серва стоит прямо на приёмнике (раздел 13). С полётником концевые точки лучше ставить в полётнике (разделы 10-12).

Предохранитель на сброс груза. Чтобы груз не ушёл от случайного щелчка:

  1. Страница Logical switches: L1 = AND, V1 = SF↓ (тумблер-предохранитель), V2 = SH↓ (кнопка с возвратом).
  2. В Mixes на CH10 две строки: первая - Source MAX, Weight −100 (всегда «закрыто»); вторая - Source MAX, Weight +100, Switch L1, Multiplex Replace (открыть, только если взведён SF и нажата SH).

Соберите всё это на экране пульта - рядом камера на CH9 и захват на CH10, проверьте предохранитель тумблерами:

Не берите для серв канал 5 (AUX1). Это канал постановки на охрану (Arm). В ELRS 3.x он ещё и двухпозиционный. В ELRS 4.x в режимах Full Res канал 5 уже полноценный (документация ELRS), но Arm на нём остаётся - серву всё равно не вешайте.

Разрешение каналов ELRS - почему камера поворачивается рывками. Это то, что упускают даже опытные.

Рис. 8. Сколько положений у крутилки в разных режимах ELRS.

Как переключить: на пульте откройте скрипт ExpressLRS (SYS - Tools - ExpressLRS) - Switch Mode = Wide. Или Packet Rate = 100Hz Full. Выйдите из скрипта, дождитесь переподключения приёмника.

Результат: крутилка или тумблер на своём канале, канал плавно ходит на экране Channels monitor, режим ELRS не режет его до 6 шагов.

Материалы базы: что такое EdgeTX, полное руководство EdgeTX на русском, EdgeTX Companion, что такое ExpressLRS, ExpressLRS Configurator.

Раздел 10
Betaflight
сборка с сервами, resource, SERVO_TILT, вкладка Servos
Уровень 2: базовый

Betaflight - прошивка гоночных и фристайл-дронов. Серв в ней мало и просто: до двух на наклон и подвес через SERVO_TILT и дальше - проброс каналов.

Что нужно: Betaflight Configurator (для Windows - с сайта Betaflight), полётник с Betaflight 4.4 и новее, серва на свободном выводе (раздел 7).

Шаг 1. Прошивка с сервами. С версии 4.4 прошивка собирается на сервере под ваш полётник, и сервы надо включить при сборке.

  1. Вкладка CLI - команда diff all - Save to File. Это бэкап настроек.
  2. Вкладка Firmware Flasher: выберите полётник и версию.
  3. В поле Other Options добавьте SERVOS.
  4. Load Firmware [Online] - Flash Firmware.
  5. После прошивки: CLI - Load from file - ваш бэкап - save.

Без этого шага нет ни вкладки Servos, ни пункта SERVO_TILT, а CLI на feature SERVO_TILT отвечает Unavailable SERVO_TILT. Это первая причина, почему «ничего не работает». Вкладка Servos появляется сразу после прошивки с SERVOS.

Шаг 2. Отдать вывод серве.

  1. CLI - resource - Enter. Найдите строку вашего вывода. Например, серва на LED: resource LED_STRIP 1 C08 - запомните C08 (у вас буква и цифры могут быть другими).
  2. Освободите вывод: resource LED_STRIP 1 none.
  3. Отдайте его серве: resource SERVO 1 C08.
  4. Вторая серва на M5: найдите resource MOTOR 5 B00, затем resource MOTOR 5 none и resource SERVO 2 B00.
  5. save.

Вывод серве не отдаётся, если он на одном таймере с моторами. Каналы одного таймера не могут работать на разных функциях (документация Betaflight). Не заработало - возьмите другой вывод. LED и S-выводы часто на отдельном таймере, но не всегда: на части плат LED делит таймер с M5 и M6. Проверить - timer show в CLI (подробно - раздел 7, «Все выводы заняты», способ 3).

Шаг 3. Включить SERVO_TILT. Вкладка Configuration - переключатель SERVO_TILT (в интерфейсе подписан «Servo gimbal») - Save and Reboot. В CLI то же: feature SERVO_TILT, save. Без него на квадрокоптере серва молчит, хотя вкладка Servos уже есть: прошивка не включает выводы серв. Не путайте с set servo_tilt = ON - такой настройки нет, CLI ответит ошибкой.

Шаг 4. Привязать канал. Вкладка Servos:

  1. В таблице строки Servo 0 и Servo 1 - это ваши SERVO 1 и SERVO 2 из шага 2 (в CLI счёт с 1, во вкладке с 0).
  2. В строке Servo 0 поставьте галочку в колонке нужного AUX. Например, крутилка на CH9 - это AUX5.
  3. MIN / MID / MAX - 1000 / 1500 / 2000 для начала.
  4. Save. Включите Enable Live mode и крутите крутилку - серва ходит.
Рис. 9. Команда servo по числам и какой канал писать последним.

То же одной командой в CLI: servo 0 1000 2000 1500 100 8 и save. Порядок: номер, мин, макс, центр, rate, канал. Каналы считаются с нуля: 0-3 - стики, 4 - AUX1, 5 - AUX2... 8 - AUX5.

Шаг 5. Концевые точки. Серва упирается и гудит - уменьшайте MIN/MAX с шагом 50, пока гул не пропадёт. Ход мал - увеличивайте. Прошивка примет от 500 до 2500 мкс (меньше или больше - ARGUMENT OUT OF RANGE), но большинство обычных серв за пределами 750-2250 упирается - проверяйте по гулу.

Не включайте CHANNEL_FORWARDING «на всякий случай». Эта функция сама раздаёт каналы на сервы после подвеса, подряд, начиная с AUX1 - а это канал Arm. Третья серва начинает ходить от тумблера арма, а MIN/MAX и галочки на неё не действуют (исходник Betaflight). Для одной-двух серв она не нужна: feature -CHANNEL_FORWARDING, save. Нужна третья серва - set channel_forwarding_start = 8 (с канала 9, счёт с нуля) и ставьте её на канал 9 и дальше.

Стабилизация камеры. SERVO_TILT может держать камеру ровно, пока дрон наклоняется. Включается режимом CAMSTAB на вкладке Modes, сила - полем Rate во вкладке Servos. Без CAMSTAB серва просто слушается канала - для захвата так и нужно.

Разбор вопроса с форума: «две MG90S - камера и сброс - не работают». Проверьте по порядку:

  1. Прошивка собрана с SERVOS (шаг 1).
  2. Обе сервы отданы через resource SERVO 1 и SERVO 2, выводы не на таймере моторов (шаг 2).
  3. SERVO_TILT включён (шаг 3).
  4. Servo 0 - галочка на AUX крутилки (камера), Servo 1 - на AUX тумблера (сброс). Не AUX1 - он занят Arm.
  5. Питание: две MG90S от 5V полётника - на пределе, лучше отдельный BEC (раздел 8).
  6. Режим CAMSTAB для сброса не включать: иначе захват начнёт качаться вслед за дроном.

Пройдите всё руками до железа. Окно - копия Betaflight Configurator, рядом серва с камерой на раме. Меняете настройку - смотрите, что делает серва:

Результат: серва слушается крутилки или тумблера, не упирается, в Live mode видно движение.

Материалы базы: что такое Betaflight, подключение сервы: SERVO_TILT и CHANNEL_FORWARDING, полное руководство по CLI, прошивка полётного контроллера, вопрос с форума про две сервы.

Раздел 11
INAV
выходы под сервы и правила микшера
Уровень 2: базовый

В INAV сервы настраиваются правилами микшера: «серва номер N двигается от входа X с весом Y».

Что нужно: INAV Configurator (или с сайта INAV), полётник с INAV 7 и новее.

Как сделать, по шагам:

  1. Выход под серву. Вкладка Mixer: внизу видно, какие выходы на каком таймере. Группу, где сидит ваша серва, переведите в SERVOS (с INAV 7, документация). Выходы одного таймера всегда одной функции - моторы и сервы на одном таймере не живут.
  2. Правило микшера. Там же, Servo mixer - Add: Servo = номер сервы, Input = источник, Weight = 100, Speed = 0 (или 10-50 для плавности).
  3. Источник: - крутилка на CH9 - RC channel 9; - наклон камеры со стабилизацией - GIMBAL PITCH (угол дрона по тангажу); - руль самолёта - Stabilised ROLL / PITCH / YAW.
  4. Save and Reboot.
  5. Вкладка Outputs: у сервы MIN / MID / MAX и Reverse. Выставьте ход без упора.

То же в CLI: smix 0 0 15 100 0 -1 - правило 0, серва 0, вход 15 (RC channel 9), вес 100, без ограничения скорости, без условия. Входы: 8-11 - каналы 5-8, 15-22 - каналы 9-16, 12 - Gimbal Pitch, 13 - Gimbal Roll (таблица входов). Концевые точки: servo 0 1000 2000 1500 100.

Рис. 10. Правило smix по числам и таблица входов INAV.

Плавность. Поле Speed: 10 - полный ход за 10 секунд, 100 - за 1 секунду. Для шасси и дверец - 20-30.

Условия. Последнее поле правила - Logic Condition (вкладка Programming): правило работает, только когда условие выполнено. Для обычной сервы ставьте -1 - без условия, иначе серва будет молчать.

Результат: серва на своём выходе, двигается от канала или от стабилизации, ход без упора.

Материалы базы: что такое INAV, квадрокоптер на INAV переворачивается при взлёте - про порядок выходов.

Раздел 12
ArduPilot
SERVOx_FUNCTION и концевые точки
Уровень 2: базовый

В ArduPilot у каждого выхода есть функция. Выход SERVO9 = функция «наклон подвеса» - и всё, полётник сам знает, что туда слать.

Рис. 11. Пример раскладки: моторы на MAIN, сервы подвеса, захвата, шасси и парашюта на AUX.

Что нужно: Mission Planner или QGroundControl.

Как сделать, по шагам:

  1. Config - Full Parameter List (или Servo Output).
  2. Найдите SERVOn_FUNCTION для выхода, куда припаяна серва. Выходы 1-8 - MAIN, 9-16 - AUX на Pixhawk.
  3. Поставьте функцию из таблицы ниже.
  4. SERVOn_MIN, SERVOn_MAX, SERVOn_TRIM - концевые точки и центр, от 800 до 2200 мкс. SERVOn_REVERSED = 1 - реверс.
  5. Write Params, перезагрузите полётник (после смены функции обязательно).
  6. Проверка: Setup - Servo Output показывает, какой импульс идёт на каждый выход.
Функция Номер Для чего
RCIN9 ... RCIN16 59 ... 66 серва просто повторяет канал 9...16
Mount1Yaw / Pitch / Roll 6 / 7 / 8 подвес на сервах, раздел 15
Gripper 28 захват груза, раздел 16
LandingGear 29 шасси, раздел 17
Parachute 27 парашют, раздел 17
Aileron / Elevator / Rudder 4 / 19 / 21 самолёт, раздел 18
ElevonLeft / Right 77 / 78 летающее крыло
VTailLeft / Right 79 / 80 V-хвост
TiltMotorsFront / Rear 41 / 45 наклон моторов VTOL
GroundSteering 26 руль ровера, раздел 19
TrackerYaw / Pitch 71 / 72 антенный трекер, раздел 20
Disabled 0 выход для команд миссии DO_SET_SERVO

Номера - по списку параметров ArduPilot.

Кнопка на пульте. Параметр RCn_OPTION канала: 19 - Gripper, 29 - Landing Gear, 22 - Parachute Release, 213 - Mount1 Pitch, 214 - Mount1 Yaw.

Pixhawk и похожие платы: сервы питаются не от полётника. Автопилот не подаёт питание на ряд сервовыходов (документация): нужен BEC 5-6 В в этот ряд. И пока мигает кнопка safety, выходы заблокированы - нажмите и держите её. Без этого в Servo Output импульс меняется, а серва стоит.

Частота. SERVO_RATE - 50 Гц по умолчанию (25-400). Цифровым сервам можно 200-300.

При потере связи. Функции Gripper, LandingGear, Mount держат последнее положение. Серва на RCIN (проброс канала) тоже держит последнее, если не включить SERVO_RC_FS_MSK - тогда уходит в TRIM. Для захвата это важно, раздел 16.

Результат: каждая серва на своём выходе со своей функцией, концевые точки выставлены, в Servo Output видны импульсы.

Материалы базы: что такое ArduPilot, руководство по настройке ArduPilot, подключение ELRS к Pixhawk, скрипт управления камерой Topotek в Mission Planner, управление камерой Topotek с Radiomaster TX12.

Раздел 13
Серва на приёмник
ELRS с PWM-выходами
Уровень 2: базовый
Radiomaster ER6: приёмник ELRS с шестью выходами под сервы
6 PWMвыходов
50-400 Гцчастота
failsafeна каждый выход
BATTпитание серв

Самолёт без полётника, наземный робот, поворотная антенна на земле - серву можно воткнуть прямо в приёмник. Нужен приёмник ELRS с PWM-выходами.

Как сделать, по шагам:

  1. Питание: 5-6 В на разъём BATT приёмника (от регулятора с BEC или от UBEC). Оно же пойдёт на сервы.
  2. Серву - в выход CH1...CH6. Коричневый - к краю с минусом, как нарисовано на корпусе.
  3. Включите приёмник без пульта, через минуту он поднимет Wi-Fi. Подключитесь к сети ExpressLRS RX, откройте в браузере 10.0.0.1.
  4. Вкладка Model: у каждого выхода задайте Input (какой канал пульта), Mode (50 Hz для обычных серв), Failsafe - положение при потере связи, от 988 до 2012 мкс.
  5. Save. Перезагрузите приёмник, включите пульт.

По умолчанию каналы идут «прямо»: канал 1 на выход 1 и так далее (документация ELRS). Канал 5 (AUX1) и здесь только двухпозиционный.

Failsafe задаётся на каждый выход, и режимов три. Set Position - встать на заданный импульс (по умолчанию 1500 мкс, у выхода 3 - газа - 988). No Pulses - импульсы пропадают, серва обмякает и перестаёт держать: подпружиненная защёлка может открыться. Last Position - держать последнее: если захват был открыт, так и останется. Для захвата - только Set Position со значением «закрыто» (раздел 16). Для руля робота - Set Position в центре.

Результат: серва работает от пульта без полётника, при потере связи встаёт в заданное вами положение.

Раздел 14
Наклон FPV-камеры
угол камеры с пульта
Уровень 2: базовый
Какая серва на наклон
SG909 г, хватает для камеры
MG90Sесли камера тяжелее 50 г

Зачем: на скорости дрон сильно наклонён вперёд, и неподвижная камера смотрит в землю. Летите быстро - поднимите камеру, чтобы видеть горизонт. Висите или летите медленно - опустите, чтобы видеть землю перед собой. На съёмке и осмотре - навели камеру на объект, не наклоняя дрон.

Что нужно: SG90 или MG90S, крепление камеры с осью (печатается, в базе - маунты под камеры 19 и 22 мм), свободный вывод полётника, крутилка на пульте.

Как сделать, по шагам:

  1. Посчитайте момент: камера 30 г × плечо 1 см = 0,03 кг·см, с запасом - любая микросерва.
  2. Закрепите камеру на оси, серву - сбоку, качалку - к рамке камеры тягой или напрямую на ось.
  3. Выставьте серву в центр сервотестером (1500 мкс) до того, как надеть качалку. Камера в центре - смотрит на 20-30° вверх, как обычно.
  4. Сигнал - на свободный вывод, питание - 5V полётника (одна SG90 - можно).
  5. Настройте по разделу 10 (Betaflight) или 11 (INAV): крутилка S1 на канал, канал на серву.
  6. На пульте ELRS - режим Wide или Full, иначе камера будет прыгать ступеньками (раздел 9).
  7. Концевые точки: камера доходит до нужных углов, серва не упирается в раму.

Результат: крутите S1 - камера плавно меняет угол, в центре крутилки - привычный угол полёта.

Раздел 15
Подвес на сервах
PAN и TILT, стабилизация от полётника
Уровень 2: базовый
Рис. 12. Двухосевой подвес: нижняя серва поворачивает, верхняя наклоняет.
Пан-тилт кронштейн под две SG90 или MG90S
2 осиповорот и наклон
SG90 / MG90Sсервы
до 100 гкамера

Что нужно: кронштейн пан-тилт, две SG90 или MG90S, внешний BEC на 2-3 А, два канала на пульте (две крутилки или стик на втором пульте).

Как собрать, по шагам:

  1. Обе сервы в центр сервотестером.
  2. Нижнюю серву (PAN) - в основание кронштейна, качалку-крестовину - к поворотной площадке.
  3. Верхнюю (TILT) - в боковину, качалку - к рамке камеры.
  4. Проверьте на руках: камера доходит до нужных углов, провода не натягиваются.
  5. Питание обеих - от отдельного BEC, минус общий с полётником.

Настройка в ArduPilot, по шагам:

  1. MNT1_TYPE = 1 (Servo), перезагрузка.
  2. SERVO9_FUNCTION = 6 (Mount1Yaw) - серва PAN, SERVO10_FUNCTION = 7 (Mount1Pitch) - серва TILT.
  3. MNT1_PITCH_MIN / MNT1_PITCH_MAX - пределы наклона в градусах. Не шире того, что реально проходит механика: обычная серва на 1000-2000 мкс даёт ±45°, значит, например, −45 и 20. Смотреть вниз на −90 можно только с сервой, которая ходит шире (500-2500 мкс или 270°). По умолчанию в ArduPilot стоит −90 и 20 - с обычной сервой это даёт недоворот. MNT1_YAW_MIN / MNT1_YAW_MAX - поворота.
  4. SERVO10_MIN / SERVO10_MAX - импульсы, при которых камера реально стоит на этих углах. Подбирайте по транспортиру.
  5. Каналы: RC9_OPTION = 213 (Mount1 Pitch), RC10_OPTION = 214 (Mount1 Yaw).
  6. MNT1_RC_RATE = 0 - крутилка задаёт угол; 30-60 - задаёт скорость поворота в градусах в секунду.

Стабилизация в ArduPilot включается сама. С MNT1_TYPE = 1 полётник сам доворачивает сервы против наклона рамы - камера смотрит туда, куда задано, а не куда наклонился дрон. Проверка, по шагам:

  1. Подключите аккумулятор, дождитесь конца инициализации (сервы дёрнутся и встанут).
  2. Наклоните дрон рукой вперёд на 20° - камера должна остаться смотреть туда же, куда смотрела.
  3. Уходит не в ту сторону (наклон удваивается) - SERVO10_REVERSED = 1.
  4. Доворачивает больше или меньше наклона - подгоните SERVO10_MIN / SERVO10_MAX по транспортиру (шаг 4 выше): полётник считает угол по этим импульсам.
  5. Отстаёт при резком наклоне - MNT1_LEAD_PTCH 0,02-0,05 с: серва начнёт доворачивать с упреждением. Перелетает и качается - уменьшайте. Для крена то же - MNT1_LEAD_RLL.
  6. Нужен ещё и крен - третья серва с функцией 8 (Mount1Roll), пределы MNT1_ROLL_MIN / MNT1_ROLL_MAX.

Настройте подвес руками - окно Mission Planner, рядом дрон с камерой, транспортир и карта для антенны на оператора (раздел 21):

Стабилизация в INAV, по шагам:

  1. Вкладка Mixer - Servo mixer - Add: Servo = серва наклона, Input = GIMBAL PITCH, Weight = 200.
  2. Крен (если есть серва) - второе правило: Input = GIMBAL ROLL, Weight = 400.
  3. Хотите ещё и крутилкой задавать угол - третье правило на ту же серву: Input = RC channel 9, Weight = 50. Правила одной сервы складываются.
  4. Save and Reboot. Наклоните дрон - камера доворачивает против наклона. Уходит не туда - Weight с минусом (−200).
  5. Проверьте транспортиром: дрон на 20° - камера на те же 20° в обратную сторону. Мало - Weight больше, много - меньше.

В CLI то же: smix 0 0 12 200 0 -1 и smix 1 1 13 400 0 -1.

Почему Weight 200 и 400, а не 100. Это упускают даже опытные. Вход GIMBAL PITCH даёт 500 мкс на 90° наклона, GIMBAL ROLL - 500 мкс на 180° (таблица входов INAV). А обычная серва на 500 мкс поворачивается всего на 45° (раздел 2). С весом 100 камера доворачивает только половину наклона по тангажу и четверть по крену.

Настройте то же руками - окно INAV Configurator, рядом камера и антенна на сервах, наклоняйте дрон и подбирайте Weight:

Стабилизация в Betaflight, по шагам: подвес - это SERVO_TILT (раздел 10): Servo 0 - наклон, Servo 1 - крен.

  1. Вкладка Modes - режим CAMSTAB на тумблер.
  2. Вкладка Servos - поле Rate у Servo 0 и Servo 1: начните с 55. Прошивка добавляет к импульсу Rate × наклон / 50 (наклон в десятых долях градуса): при Rate 100 серва перекручивает почти вдвое.
  3. Включите CAMSTAB, наклоните дрон на 20° - камера на 20° в обратную сторону. Не туда - Rate с минусом (−55). Подгоните по транспортиру.
  4. Потренируйтесь в тренажёре раздела 10: задание 7 - как раз подбор Rate.

Поворота (PAN) в SERVO_TILT нет. Для него в Betaflight - ставьте вторую серву на проброс канала крутилки, стабилизации по рысканию не будет.

Честно про качество. Подвес на сервах даёт грубую картинку: дрожь и шаги видны. Для видео, по которому надо что-то разглядеть, берут бесколлекторный подвес со своей стабилизацией (в ArduPilot - другое значение MNT1_TYPE под конкретный подвес: 4-14, по списку параметров). Сервы - для обзора и наведения.

Результат: две крутилки поворачивают и наклоняют камеру, пределы выставлены, питание отдельное.

Материалы базы: управление подвесом Topotek, движение подвеса Topotek, крепление тепловизионной камеры.

Раздел 16
Захват груза
доставка аптечки, рации, круга - и чтобы не уронить
Уровень 2: базовый
Захват-крюк на серве для доставки груза
MG90S / MG996Rсерва
защёлкадержит груз
failsafeзакрыто

Доставить аптечку на остров, рацию на позицию, спасательный круг на воду, пробоотборник на реку, прикормку рыбакам. Серва держит груз и отпускает по команде.

Рис. 13. Два положения захвата. При потере связи - только «закрыт».

Что нужно: MG90S (груз до 0,5 кг) или MG996R (до 1-2 кг), корпус захвата - печатный из базы: гравитационный зацеп или рычажный механизм на MG90S, проверен на 3,6 кг, кольцо или петля на грузе.

Как собрать, по шагам:

  1. Напечатайте корпус из PETG, не PLA: PLA ведёт от солнца.
  2. Серву в центр сервотестером, потом ставьте качалку-защёлку.
  3. Груз держит защёлка, а не серва. Правильно - когда серва только отпирает, а вес груза давит на корпус. Тогда хватает MG90S даже на тяжёлый груз.
  4. Закрепите захват под центром масс дрона - иначе с грузом дрон будет висеть боком.
  5. Провод - к полётнику, питание - по разделу 8.

Настройка в ArduPilot, по шагам:

  1. GRIP_ENABLE = 1, перезагрузка.
  2. GRIP_TYPE = 1 (Servo).
  3. SERVO9_FUNCTION = 28 (Gripper).
  4. GRIP_GRAB - импульс «закрыто», GRIP_RELEASE - «открыто», GRIP_NEUTRAL - куда серва встаёт при включении полётника. По умолчанию нейтраль 1500 - посередине, и многие защёлки при включении приоткрываются. Поставьте GRIP_NEUTRAL равным GRIP_GRAB. Подбирайте тренажёром ниже и потом на железе.
  5. RC10_OPTION = 19 (Gripper): тумблер вверх - открыть, вниз - закрыть.
  6. GRIP_AUTOCLOSE - через сколько секунд закрыться после открытия (0 - не закрывать).
  7. В миссии - команда DO_GRIPPER: сбросить в точке маршрута.

В Betaflight и INAV - проброс канала на серву (разделы 10, 11) с тумблером и предохранителем на пульте (раздел 9).

Самое важное - потеря связи. Пропала связь - захват должен остаться закрытым. Как обеспечить:

Потренируйтесь до железа: выставьте концевые точки так, чтобы серва не упиралась, и проверьте потерю связи.

Проверка на столе, без винтов:

  1. Повесьте настоящий груз.
  2. Закрыть - открыть 10 раз. Серва не гудит в крайних положениях.
  3. Выключите пульт. Груз должен остаться на месте.
  4. Встряхните дрон рукой - груз не срывается.

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

Раздел 17
Шасси и парашют
уборка шасси и аварийный парашют
Уровень 3: проф
Электроубирающееся шасси: три стойки и блок управления
3 стойкикомплект
1 каналуправление
плавновстроенный замедлитель

Шасси. Убранное шасси не лезет в кадр камеры и меньше тормозит. На крупных коптерах - серва или готовая электростойка.

Настройка в ArduPilot, по шагам:

  1. SERVO9_FUNCTION = 29 (LandingGear).
  2. LGR_ENABLE = 1.
  3. RC10_OPTION = 29: импульс канала меньше 1200 - выпустить, больше 1800 - убрать (документация).
  4. Шасси работает наоборот - SERVO9_REVERSED = 1.
  5. Автоматика: LGR_RETRACT_ALT - убрать выше этой высоты, LGR_DEPLOY_ALT - выпустить ниже; LGR_OPTIONS - бит 0 уборка после взлёта, бит 1 - выпуск при посадке.
  6. LGR_STARTUP = 2 - при включении шасси выпущено.

Серва шасси ходит резко - поставьте замедлитель сервы между полётником и сервой, или в INAV - поле Speed (раздел 11).

Парашют. Серва выдёргивает чеку, пружина выбрасывает купол. Нужен на тяжёлых аппаратах над людьми.

  1. CHUTE_ENABLED = 1, CHUTE_TYPE = 10 (Servo).
  2. SERVO11_FUNCTION = 27 (Parachute).
  3. CHUTE_SERVO_OFF - импульс «закрыто», CHUTE_SERVO_ON - «выпущен».
  4. CHUTE_ALT_MIN - ниже этой высоты не выпускать (купол не успеет раскрыться).
  5. RC11_OPTION = 22 (Parachute Release) - ручной выпуск. CHUTE_CRT_SINK - автоматический выпуск при падении быстрее заданной скорости.
  6. Моторы при выпуске полётник глушит сам.

Результат: шасси убирается и выпускается сам по высоте, парашют выпускается по кнопке или при аварийном снижении.

Раздел 18
Самолёт и VTOL
рули, элевоны, V-хвост, наклон моторов
Уровень 3: проф
Рис. 14. Куда должен идти каждый руль. Проверять до первого взлёта.

Какие сервы: на крылья до 1,5 м - 9-12 г металл (MG90S, ES08MA II) или coreless; на большие - стандартные цифровые. Момент считают по площади руля и скорости, упрощённо: на каждый руль серва с запасом ×2 от рекомендации производителя модели.

Настройка в ArduPilot (ArduPlane), по шагам:

  1. Функции выходов: элероны - 4, руль высоты - 19, руль направления - 21. Летающее крыло - 77 и 78 (элевоны). V-хвост - 79 и 80.
  2. Режим MANUAL. Ручка вправо - правый элерон вверх, левый вниз. Ручка на себя - руль высоты вверх. Не так - SERVOn_REVERSED = 1.
  3. Режим FBWA. Наклоните самолёт рукой вправо - элероны должны отклониться так, чтобы вернуть его в горизонт: правый вниз, левый вверх. Это проверка стабилизации.
  4. SERVOn_TRIM - руль стоит ровно в нейтрали. Лучше механически выставить тягой, а TRIM оставить около 1500.
  5. Концевые точки - руль не упирается в конструкцию.

В INAV - пресет самолёта на вкладке Mixer, дальше то же: MANUAL - направления, ANGLE - стабилизация, Outputs - реверс и ход.

Результат: все рули ходят в правильную сторону в MANUAL и парируют наклон в FBWA.

VTOL с наклоном моторов (tilt-rotor). Что получаем: на взлёте и посадке моторы смотрят вверх, как у коптера, в полёте наклоняются вперёд, и аппарат летит самолётом. Наклоняет их серва.

Что нужно: ArduPlane 4.5 и новее; на каждую наклонную ось - цифровая серва с металлическим редуктором и запасом ×3 по моменту: на ней висит мотор с винтом, а раскрученный винт ещё и сопротивляется повороту как гироскоп. На 5-7" винтах - уровень DS3218, на лёгких крыльях - MG90S. Питание - BEC 6-7,4 В на 5 А и больше.

Как настроить, по шагам (документация ArduPilot):

  1. Q_ENABLE = 1, перезагрузите полётник и обновите список параметров - появятся все Q_.
  2. Q_FRAME_CLASS - 1 (четыре мотора) или 7 (трикоптер), Q_FRAME_TYPE - по раме.
  3. Q_TILT_ENABLE = 1, перезагрузка.
  4. Q_TILT_MASK - какие моторы наклоняются, битовая маска по номерам моторов в схеме рамы. У Quad X передние - моторы 1 и 3, маска 5 (мотор 1 - передний правый, 2 - задний левый, 3 - передний левый, 4 - задний правый). У трикоптера передние - 1 и 2, маска 3. Все четыре - 15. Ошибка тут частая: маска 3 на Quad X объявляет наклонными моторы по диагонали.
  5. Q_TILT_TYPE: 0 - непрерывный (серва встаёт на любой угол), 1 - бинарный (только «вверх» или «вперёд», как уборка шасси), 2 - векторное рыскание (в висении моторы наклоняются по-разному и поворачивают аппарат).
  6. Функции выходов: в обычном непрерывном и бинарном наклоне все сервы наклона - функция 41 (TiltMotorsFront). Функции 45 (задние), 75 и 76 (передние левая и правая), 46 и 47 (задние левая и правая) нужны только для векторного рыскания, тип 2. Функцию ставьте на свободный выход, не на выходы моторов. После смены функции - перезагрузка.
  7. Q_TILT_RATE_UP и Q_TILT_RATE_DN - скорость наклона. Начните с 15 °/с: медленно и безопасно.
  8. Q_TILT_MAX - до какого угла наклона ещё работает коптерное управление, для начала 45.
  9. Только для типа 2: Q_TILT_YAW_ANGLE - на сколько градусов мотор уходит назад за вертикаль для поворота, для начала 20.
  10. Снимите винты. Режим MANUAL - моторы должны лечь вперёд, ось винта по полёту. Режим QSTABILIZE - встать строго вверх. Не так - SERVOn_REVERSED = 1, дальше SERVOn_MIN и SERVOn_MAX, пока углы не совпадут по транспортиру.
  11. Переключайте MANUAL и QSTABILIZE 10 раз подряд. Наклон плавный, в крайних положениях серва не гудит, провода мотора не натягиваются и не трутся.

Пройдите настройку руками до железа - окно Mission Planner, рядом мотор на серве наклона с транспортиром:

Как проверить: в QSTABILIZE наклоните аппарат рукой - моторы в векторном режиме доворачиваются против наклона, в обычном - стоят вверх. Первый взлёт - в QHOVER, низко, переход в самолёт - только после уверенного висения.

Результат: моторы стоят вверх в коптерных режимах и ложатся вперёд в самолётных, серва не упирается, переход идёт с заданной скоростью.

Подробно про VTOL другой схемы, где наклоняется весь аппарат, - тейлситтер.

Материалы базы: режимы полёта ArduPlane и настройка аппаратуры, системы автоматического управления самолётом, модели самолётов: Nomad, Вьюрок v2, Micro Sector, аэродинамика и самолётостроение.

Раздел 19
Наземный робот
руль, мачта камеры, манипулятор
Уровень 3: проф
Рис. 15. Где сервы на наземном роботе.
Сервы наземки
РульDS3218, влагозащита
Манипуляторшинные сервы STS3215

На наземке вес не главное, главное - грязь, вода, удары колёс о камни. Берите сервы с запасом ×3, металл и влагозащиту (IP66-IP67 в названии).

Руль, в ArduPilot Rover, по шагам:

  1. SERVO1_FUNCTION = 26 (GroundSteering), SERVO3_FUNCTION = 70 (Throttle) - регулятор хода.
  2. Колёса прямо - подберите SERVO1_TRIM.
  3. Руль влево до упора - уменьшайте SERVO1_MIN, пока рулевые тяги не упрутся, и отступите на 50 мкс. Так же SERVO1_MAX.
  4. Ручка влево - колёса влево. Нет - SERVO1_REVERSED = 1.
  5. Сервы руля питайте от BEC на 6-7,4 В: руль тяжёлого робота ест токи, как MG996R и больше.

Мачта камеры - подвес на двух сервах, как в разделе 15 (функции 6 и 7).

Манипулятор. 4-6 серв, каждая считает момент от всей руки дальше неё: чем ближе к основанию, тем мощнее. Для самодельной руки на MG996R/DS3218 - драйвер PCA9685 и Arduino (раздел 22). Для точной - шинные сервы STS3215: одна шина, каждая серва знает свой угол и ток. Проект SO-ARM100/101 - открытый, с моделями для печати.

Результат: робот рулит без упоров, камера на мачте поворачивается, манипулятор на своём контроллере.

Материалы базы: гусеничная тележка НРТК, каталог наземных беспилотных аппаратов, роботы-манипуляторы своими руками, математические основы робототехники, мобильные роботы на ESP32, ArduPilot Rover 4.7.

Раздел 20
Антенный трекер
собрать и настроить поворотный механизм за день
Уровень 3: проф
Антенный трекер на сервах: поворот и наклон направленной антенны
PANазимут
TILTугол места
MAVLinkкоординаты аппарата

Направленная антенна на земле - патч, Яги, спираль - даёт дальность в разы больше штыря, но смотрит узким лучом, 30-60°. Аппарат ушёл из луча - связь просела. Держать антенну руками весь полёт никто не будет. Трекер делает это сам: знает, где стоит, получает координаты аппарата по телеметрии, считает, куда смотреть, и крутит две сервы.

Рис. 16. Трекер считает азимут и угол места по координатам и высоте.

Из чего состоит трекер:

Рис. 17. Пять частей трекера. Полётник и компас - на кронштейне антенны, там, где он видит, куда антенна смотрит на самом деле.
  1. Основание на штативе.
  2. Поворотный стол на подшипнике и серва поворота (PAN) - азимут.
  3. Кронштейн наклона и серва наклона (TILT) - угол места.
  4. Полётник с GPS и компасом на прошивке ArduPilot AntennaTracker. Стоит на кронштейне антенны, а не на основании: он меряет, куда антенна смотрит на самом деле, и доводит её (документация).
  5. Источник координат аппарата - телеметрия.

Дальше - семь шагов. Первый решает, откуда трекер возьмёт координаты, остальные - сборка и настройка.

Шаг 1. Откуда трекер возьмёт координаты аппарата

Рис. 18. Два пути координат. ELRS - по воздуху от пульта, без проводов. Радиомодем - для ArduPilot и INAV с MAVLink-телеметрией.
Что у вас Путь Что добавить
Любой полётник (Betaflight, INAV, ArduPilot) + ELRS 3.5+ и GPS на борту ELRS Backpack: пульт пересылает координаты по воздуху на приёмник-«рюкзак» у трекера ELRS-приёмник на ESP (не STM32)
ArduPilot или INAV с телеметрией по радиомодему 433/868 МГц наземный модем - прямо в порт трекера ничего, модем уже есть

Путь А: ELRS Backpack, по шагам. Пульт с ELRS-модулем получает координаты с борта и по ESP-NOW (прямая Wi-Fi-связь между платами ESP) рассылает их «рюкзакам» с вашей фразой привязки. Рюкзак отдаёт их трекеру по проводу в формате MAVLink (документация ELRS).

  1. Прошивки: передатчик и приёмник на борту - ELRS 3.5.0 и новее, рюкзак передатчика (TX Backpack) - 1.5.0 и новее. Обновление - ExpressLRS Configurator.
  2. GPS на борту, спутники пойманы. На пульте: Telemetry - Discover new sensors - должны появиться GPS-датчики с координатами. Нет координат на пульте - не будет и на трекере.
  3. На пульте: скрипт ExpressLRS - Backpack - Telemetry = ESPNOW. В разделе Telem Ratio - от 1:2 до 1:8.
  4. Рюкзак трекера: возьмите любой ELRS-приёмник на ESP8285 или ESP32 (например, RadioMaster RP1) или отладочную плату ESP32 - у неё Wi-Fi дальше. STM32-приёмники не подходят: у них нет Wi-Fi.
  5. ExpressLRS Configurator - вкладка Backpack - MFD Crossbow Antenna Tracker Backpack - Generic ESP8285 Receiver (или ваш чип) - версия 1.5.0+ - та же фраза привязки, что на пульте - Flash.
  6. Провода: TX рюкзака - в RX порта UART1 полётника трекера, 5V и GND - от полётника. Скорость 115200.
  7. На трекере: SERIAL1_PROTOCOL = 2 (MAVLink2), SERIAL1_BAUD = 115.

Рюкзак отдаёт трекеру сообщения HEARTBEAT и GLOBAL_POSITION_INT - именно их трекер ArduPilot и слушает (видно в исходниках Backpack). Эту связку мы собрали по документации и исходникам, на железе ещё не гоняли. Поэтому проверка на земле, шаг 6, - до первого вылета обязательна.

Путь Б: радиомодем, по шагам.

  1. На борту: модем в UART полётника, SERIALx_PROTOCOL = 2 - как для обычной телеметрии в Mission Planner.
  2. Наземный модем: TX модема - в RX порта UART1 трекера, RX - в TX, GND, питание 5 В.
  3. На трекере: SERIAL1_PROTOCOL = 2, SERIAL1_BAUD = 57 (скорость модема по умолчанию 57600).
  4. Ноутбук с Mission Planner подключайте к трекеру по USB: трекер пересылает ему пакеты аппарата, и вы видите в Mission Planner и то и другое.

Результат шага: координаты аппарата приходят на трекер.

Шаг 2. Что купить

Что Зачем
Полётник под ArduPilot: SpeedyBee F405 WING или Matek F405-Wing мозги трекера; на обоих есть прошивка AntennaTracker (список плат), много выходов под сервы и свой BEC
GPS с компасом (модуль M10 с магнитометром) трекер знает, где стоит и куда повёрнут
Серва поворота 270°: DS3240 40 кг или HV 35 кг 270° азимут; цены - раздел 6
Серва наклона: DS3218 20 кг угол места; раздел 6
Поворотный подшипник «ленивая Сьюзан» 150 мм держит вес стола и антенны, серва только крутит
Две алюминиевые качалки 25T крепление столов к сервам; раздел 6
UBEC 5-6 В на 5 А питание серв
Аккумулятор 3S-4S и штатив с винтом 1/4" питание и установка
ELRS-приёмник на ESP (для пути А) рюкзак

Шаг 3. Механика, по шагам

  1. Основание. Пластина 20×20 см (фанера 10 мм или печать PETG), снизу - гайка 1/4" под штатив.
  2. Подшипник. Прикрутите «ленивую Сьюзан» к основанию, на неё - поворотный стол. Вес антенны лежит на подшипнике. Серва только крутит - иначе она гудит и ломает выходной вал.
  3. Серва PAN - в основание, вал строго в центре подшипника. Серву в центр сервотестером (раздел 22), потом алюминиевая качалка - к столу четырьмя винтами.
  4. Стойки наклона на столе, между ними - ось. Серва TILT - на одной стойке, её вал и есть ось.
  5. Кронштейн антенны на оси. На него же - полётник и GPS с компасом, стрелками по лучу антенны. Компас - не ближе 10 см к сервам: магниты в их моторах сбивают компас.
  6. Балансировка. Центр масс антенны с полётником - на оси наклона. Отпустите кронштейн в любом положении - он стоит и не падает. Не стоит - грузик с противоположной стороны. Несбалансированная антенна висит на серве: серва гудит, греется и дрожит.
  7. Провода. Серва 270° не крутится по кругу. Кабель антенны и провода - петлёй на 3/4 оборота вокруг оси, стяжкой к столу. Для непрерывного вращения на 360° нужен токосъёмник и вращающийся ВЧ-переход - это уже другой класс сборки, первый трекер делайте на 270°.
  8. Проверка на руках: стол крутится без люфта и заеданий на весь ход, кабель не натягивается.

Результат шага: механика ходит свободно, антенна сбалансирована, сервы только поворачивают.

Шаг 4. Электроника и прошивка, по шагам

  1. Серва PAN - в выход 1 полётника, TILT - в выход 2. Питание серв - от UBEC, минус UBEC соедините с GND полётника (раздел 8).
  2. GPS с компасом - в свободный UART и шину I2C (SDA/SCL) по схеме платы.
  3. Телеметрия - в UART1 (шаг 1).
  4. Прошивка: Mission Planner - Setup - Install Firmware - Antenna Tracker.
  5. Калибровка акселерометра: Initial Setup - Mandatory Hardware - Accel Calibration, шесть положений. Удобнее сделать до установки полётника на кронштейн.
  6. Полётник стоит не стрелкой по лучу - AHRS_ORIENTATION (например, Pitch90 - смотрит вверх под 90° к антенне). Компас повёрнут - COMPASS_ORIENT.
  7. Калибровка компаса: Compass - Live Calibration, вращайте весь кронштейн с антенной во все стороны.

Шаг 5. Параметры и концевые точки, по шагам

Параметр Значение Что делает
SERVO1_FUNCTION 71 выход 1 - поворот (TrackerYaw)
SERVO2_FUNCTION 72 выход 2 - наклон (TrackerPitch)
SERVO_YAW_TYPE / SERVO_PITCH_TYPE 0 обычные сервы с углом (1 - вкл/выкл, 2 - серва постоянного вращения)
YAW_RANGE 270 полный ход поворота, градусы - по факту, пункт 4 ниже
PITCH_MIN / PITCH_MAX −10 / 90 пределы наклона, градусы
INITIAL_MODE 10 после включения сразу AUTO - следить
SYSID_TARGET 0 за каким аппаратом следить, 0 - найдёт сам
ALT_SOURCE 1 высота по GPS (2 - трекер без GPS)
DISTANCE_MIN 5 ближе 5 м не следить
MAV_UPDATE_RATE 5-10 сколько раз в секунду трекер просит позицию аппарата; по умолчанию 1 - трекер ведёт рывками
START_LATITUDE / START_LONGITUDE ваши координаты только если на трекере нет GPS

Названия и диапазоны - по списку параметров трекера.

Концевые точки:

  1. В Mission Planner, вкладка Flight Data, переведите трекер в режим SERVO_TEST: в нём сервы встают на импульс, который вы отправите.
  2. Вкладка Servo/Relay: выход 1 - отправляйте импульс шагом 50 мкс от 1500 вниз, пока стол не дойдёт до края без упора. Это SERVO1_MIN. Так же вверх - SERVO1_MAX.
  3. Выход 2 так же: меньше импульс - антенна опускается, больше - поднимается. Наоборот - SERVO2_REVERSED = 1. Поворот уезжает от аппарата в край и стоит - SERVO1_REVERSED = 1 (в документации трекера это ещё названо по-старому, RC1_REV).
  4. Запишите курс на экране Flight Data в обоих краях поворота. Разница - это YAW_RANGE. Углы наклона в краях - PITCH_MIN и PITCH_MAX.
  5. SERVO1_TRIM и SERVO2_TRIM - середина между MIN и MAX.

Пройдите шаги 4-6 руками до железа - окно Mission Planner, подключённое к трекеру, и карта с аппаратом, который можно таскать:

Результат шага: трекер знает, какой импульс даёт какой угол, и ни одна серва не упирается.

Шаг 6. Первый запуск и проверка на земле

  1. Трекер на штатив, выставьте основание по уровню. Включите, дождитесь GPS.
  2. Включите аппарат, дождитесь его GPS. Трекер в AUTO.
  3. Отнесите аппарат на 50 м в сторону - антенна поворачивается за вами. Обойдите трекер по кругу в пределах хода - антенна ведёт.
  4. Поднимите аппарат на шесте или в висении - наклон растёт.
  5. Антенна стабильно смотрит на пару градусов мимо по курсу - YAW_TRIM (±10°): поправка на компас. По наклону - PITCH_TRIM.

Результат шага: антенна смотрит на аппарат с точностью до нескольких градусов - для луча 30-60° этого хватает с запасом.

Шаг 7. Настройка, чтобы вёл точно и не дёргался

Трекер сравнивает, куда антенна смотрит на самом деле (по полётнику на кронштейне), с тем, куда нужно, и поправляет серву регулятором. Регулятор - три коэффициента. Настраивайте по одному, по симптому:

Что видно Что крутить
Доводит медленно, отстаёт от аппарата YAW2SRV_P (и PITCH2SRV_P) больше на 20%
Качается вокруг цели, перелетает P меньше на 30%, потом YAW2SRV_D 0,005-0,02
Стоит с постоянной ошибкой в пару градусов YAW2SRV_I 0,02-0,1
Рывки при включении и на больших поворотах YAW_SLEW_TIME 2-4 с: время полного хода
Серва дребезжит в покое P меньше, проверьте балансировку и питание

Покрутите коэффициенты до железа - аппарат летает вокруг, трекер ведёт его по вашим настройкам:

Результат раздела: трекер собран, настроен и держит антенну на аппарате весь полёт - связь на дальности направленной антенны.

Трекер без GPS: по сигналу, по камере, по маякам

Трекер из шагов 1-7 наводит антенну по координатам аппарата. А если GPS на борту нет, спутники пропали или аппарат маленький и без телеметрии? Антенну всё равно можно навести. Способов несколько, и сначала - главный факт, который решает выбор.

Антенне не нужна большая точность. Лепесток антенны на краю луча теряет 3 дБ, а ближе к оси - совсем мало. Промах в 5° у патча с лучом 60° стоит меньше 0,1 дБ, у спирали с лучом 30° - около 0,3 дБ. То есть ±5° - уже отлично.

Рис. 19. Сколько сигнала теряет антенна от промаха наведения. Главный лепесток посчитан по стандартной аппроксимации G = −12·(θ/BW)² дБ.
Способ Точность Дальность Собрать самому
По сигналу двух антенн (RSSI) ±3-5° вся дальность видеоканала да, проще всего: Arduino + два видеоприёмника + серва
По камере доли градуса, пока аппарат виден маленький дрон - десятки метров, с длинным объективом - сотни да: Raspberry Pi + камера + пан-тилт
По маякам (UWB, ультразвук) и позиции без GPS сантиметры 50-100 м площадка, посадка, помещение
По пеленгу фазы (UWB с двумя антеннами, Bluetooth AoA) 2-5° до ~100 м только ближняя зона, на оценочных наборах
По инерциальным датчикам (IMU, счисление пути) не годится - нет: ошибка больше 150 м за минуту

Цифры - из источников в конце блока, дальности для камеры посчитаны по размеру аппарата и полю зрения объектива.

Способ 1. Трекер по сигналу двух антенн, по шагам

Как работает. Две одинаковые направленные антенны стоят на голове трекера и смотрят чуть в разные стороны: левая левее, правая правее. Аппарат ровно посередине - обе принимают одинаково. Ушёл вправо - правая принимает сильнее. Контроллер сравнивает уровни (RSSI - уровень принятого сигнала) и доворачивает голову, пока они не сравняются. В какую сторону крутить, видно сразу, качать антенну не нужно. Разница уровней зависит только от угла, а не от дальности, поэтому трекер одинаково работает на 100 м и на 5 км.

Рис. 20. Два лепестка разведены на ширину луча. Аппарат вправо от оси - правый канал сильнее, голова поворачивает вправо.

Что нужно:

Что Зачем
Два одинаковых видеоприёмника 5,8 ГГц с выходом RSSI (модули RX5808 или диверсити-приёмник с двумя выходами RSSI) уровни сигнала левой и правой антенны. Одинаковые, из одной партии: иначе один «врёт» на пару дБ
Две одинаковые направленные антенны: патчи (луч ~60°) или спирали левая и правая
Arduino Nano или Pro Mini контроллер; готовый код ниже
Серва поворота: 9 г для лёгкой головы, 270° для тяжёлой (раздел 6) азимут
Механика - как в шаге 3 выше: подшипник, балансировка чтобы серва только крутила
UBEC на серву, 5 В на приёмники и Arduino питание

Сборка:

  1. Обе антенны - на одну голову, развёрнуты друг от друга на угол, равный ширине луча: для патчей 60° - каждая на 30° от оси, для спиралей 40° - на 20°. Меньше развал - трекер неточный. Больше - посередине провал, и трекер теряет аппарат, который стоит прямо впереди.
  2. Каждая антенна - на свой приёмник. Приёмники - на один канал видео.
  3. Выход RSSI левого приёмника - на A0 Arduino, правого - на A1. Серва - на D5. Минусы общие.
  4. Видео в очки - с любого приёмника или через диверсити. На оси обе антенны дают −3 дБ от своего максимума: это плата за способ. Лучше - третья антенна по центру только для видео.

Прошивка. Готовый открытый код - simple-rssi-antenna-tracker, Arduino IDE (раздел 22). Что в нём настраивать:

Параметр в коде По умолчанию Что делает
RSSI_MIN / RSSI_MAX 120 / 400 уровень АЦП без сигнала и с передатчиком в 1-2 м - ваши числа будут свои
RSSI_OFFSET_LEFT / RSSI_OFFSET_RIGHT 0 / 0 поправка на разницу приёмников
DEADBAND 5 мёртвая зона: разница меньше - не двигаться
SERVO_MAX_STEP / SERVO_MIN_STEP 5° / 0,09° самый большой и самый маленький шаг сервы за 50 мс
SERVO_DIRECTION 1 направление поворота, −1 - наоборот
кривая SIGMOID включена как шаг зависит от разницы; автор пишет, что это лучшая, PROPORTIONAL - «дёрганая»

Код читает RSSI каждые 5 мс, усредняет по 10 отсчётам и 20 раз в секунду делает шаг сервы.

Одна правка в коде перед заливкой. В строке if (abs(avgRight - avgLeft) < dynamicDeadband ) уровни - беззнаковые числа. На Arduino Nano и Pro Mini (процессор AVR) разность беззнаковых при «левый сильнее» не становится отрицательной, и мёртвая зона в эту сторону не работает - голова дёргается. Замените на if (abs((int)avgRight - (int)avgLeft) < dynamicDeadband ). Это вывод из чтения кода, на железе мы его не проверяли. Самый быстрый поворот - 5° × 20 = 100° в секунду: самолёт на 60 км/ч в 50 м сбоку идёт всего ~19° в секунду.

Калибровка, по шагам:

  1. RSSI_MIN и RSSI_MAX. Включите монитор порта в Arduino IDE. Передатчик выключен - запишите уровень, это RSSI_MIN. Передатчик в 1-2 м - это RSSI_MAX.
  2. Баланс. Поставьте передатчик ровно по оси головы на 20-50 м (по визиру). Подберите RSSI_OFFSET_*, чтобы левый и правый уровни сравнялись. Поменяйте приёмники местами и повторите: так видно, кто виноват в разнице - антенны или приёмники. Разбаланс в 1 дБ сдвигает «ноль» трекера примерно на 2,5°.
  3. Направление. Отнесите передатчик вправо - голова должна повернуться вправо. Нет - SERVO_DIRECTION = -1.
  4. Пределы. SERVO_MIN / SERVO_MAX - углы, где серва не упирается.
  5. Дрожание. Голова дрожит на неподвижном передатчике - DEADBAND больше. Отстаёт - меньше.
  6. Поле. Обойдите трекер по кругу на 50-100 м с включённым передатчиком: голова идёт за вами, промах на глаз в пределах ±5°.

Ограничения - честно:

Потренируйтесь до железа - окно Arduino IDE с #define прямо в коде, рядом голова трекера и аппарат. Развал, баланс, мёртвая зона и кривые:

Результат: голова трекера сама держит аппарат по сигналу, без GPS, телеметрии и компаса.

Способ 2. Трекер по камере, по шагам

Как работает. Камера стоит на том же пан-тилт кронштейне, что и антенна, оси параллельны. Программа находит аппарат в кадре и считает, на сколько пикселей он ушёл от центра. Регулятор (PID - тот же, что в шаге 7) поворачивает сервы, пока аппарат не встанет в центр. Антенна смотрит туда же, куда камера. Работает и по азимуту, и по наклону.

Что нужно: Raspberry Pi 4 или 5, камера Raspberry Pi Camera Module 3 (поле зрения 66°) или HQ Camera с длинным объективом - для дальности, пан-тилт на сервах (раздел 15), плата PCA9685 для серв (раздел 22), отдельный UBEC на сервы.

Как найти аппарат в кадре - три варианта:

Логика программы, по шагам:

  1. Кадр 640×480. На нём один пиксель - около 0,1° для камеры 66°.
  2. Найти цель (любым вариантом выше) - координаты центра cx, cy.
  3. Ошибка в пикселях: ex = 320 - cx, ey = cy - 240. Перевести в градусы: умножить на 0,103.
  4. Регулятор, начальные значения из открытого проекта PyImageSearch: поворот - Kp 0,09, Ki 0,08, Kd 0,002; наклон - Kp 0,11, Ki 0,10, Kd 0,002.
  5. Настройка - тем же порядком, что в шаге 7: Ki и Kd в ноль, поднимайте Kp до раскачки, возьмите половину, добавьте Ki против постоянной ошибки, Kd - если качает. Эти коэффициенты привязаны к своей камере и сервам, на вашем железе числа будут свои.
  6. Цель потеряна - держите последнее направление 1-2 секунды, потом медленный обзор.

Калибровка:

  1. Масштаб. Наведите камеру на далёкий предмет, поверните серву на 10° и посмотрите, на сколько пикселей он сдвинулся.
  2. Соосность антенны и камеры. Передатчик на 50 м и больше. Поставьте его в центр кадра, покачайте голову руками и найдите максимум сигнала. Максимум не в центре - держите цель не в центре кадра, а в той точке.
  3. Знаки. Цель справа в кадре - голова поворачивает вправо. Нет - поменяйте знак ошибки.

Дальность - честно. Дрон размером 25 см в кадре 640 px на 20 м занимает около 7 пикселей, на 100 м - меньше 2. Детектору нужно хотя бы 10-20 пикселей. Значит, маленький дрон камера широкого угла ведёт на десятки метров, с длинным объективом - на сотни. Самолёт с размахом 1,5-2 м виден в 6-8 раз дальше. Сколько кадров в секунду дают трекеры OpenCV на Raspberry Pi, мерьте на месте: задержка камеры и обработки ограничивает Kp.

Результат: антенна и камера сами держат аппарат в центре кадра, по азимуту и наклону, без радиосигнала и GPS.

Способ 3. Позиция без GPS: трекер ArduPilot на маяках

Если аппарат уже летает без GPS по маякам (UWB - Pozyx, Nooploop; ультразвук - Marvelmind) или визуальной одометрии, трекер ArduPilot из шагов 1-7 работает и так. Аппарат отправляет свою позицию сообщением GLOBAL_POSITION_INT, а оно заполняется из оценки положения полётника, а не прямо из GPS (список поддерживаемых систем без GPS).

  1. Настройте на аппарате навигацию по маякам по документации своей системы: Marvelmind, Pozyx. Точку отсчёта системы маяков привяжите к широте и долготе.
  2. Поставьте трекер в эту точку отсчёта. На трекере: START_LATITUDE / START_LONGITUDE - её координаты (параметр как раз для трекера без GPS), ALT_SOURCE = 0 (барометр).
  3. Телеметрия MAVLink - как в шаге 1, путь Б.
  4. Проверка на земле - как в шаге 6.

Это площадка до 50-100 м: посадка на платформу, работа у объекта, наземный робот. Связку «маяки - трекер» мы собрали по документации и исходникам ArduPilot, на железе не гоняли.

Что не годится и почему

Научная основа - для тех, кто хочет глубже: слежение одной антенной со сканированием по эллипсу - 98% точности GPS-трекера в симуляции (Iscan и др., 2023); два аппарата наводят направленные антенны друг на друга только по сигналу (IEEE/ASME Transactions on Mechatronics, 2024); таблица точности амплитудного пеленга по числу антенн - EMSOPEDIA.

Если антенна тяжёлая. Серва держит патч или лёгкую Яги до 0,5-1 кг. Для тяжёлых антенных блоков нужен редукторный поворотный механизм. В базе есть готовый - «Оскол-30МСП» для антенн до 13 кг. Готовые трекеры под ту же ELRS-связку - MFD Crossbow и Sentinel (документация ELRS).

Материалы базы: ArduPilot Tracker 4.7, практические конструкции антенн, диаграмма направленности простыми словами, антенны: как из тех же 25 мВт вытащить километры.

Раздел 21
Антенна на борту
серва меняет поляризацию, держит вертикаль и наводит антенну на оператора
Уровень 3: проф
Рис. 21. Три задачи сервы под антенной на борту.

Серва на борту может двигать не только камеру, но и антенну. Три задачи:

  1. Сменить поляризацию линейной антенны с пульта: вертикаль, горизонталь.
  2. Держать антенну вертикально в кренах и виражах.
  3. Наводить направленную антенну на оператора - на самолёте, дальнем коптере, наземном роботе.

Всё это - только для линейной поляризации. Диполь, T-антенна, Moxon, Яги, линейный патч. Когда у борта и земли линии антенн перекрещены, сигнал теряет на практике 15-20 дБ - это десятки раз по мощности. Антенны круговой поляризации (клевер, спираль, RHCP/LHCP) крена почти не чувствуют, крутить их незачем. Что такое поляризация - наглядно в базе.

Задача 1. Смена поляризации с пульта, по шагам

Что нужно: SG90 или MG90S, печатный держатель антенны на качалке, гибкий кабель антенны (пигтейл IPEX-SMA на тонком кабеле) с запасом длины, свободный тумблер на пульте.

  1. Серву поставьте так, чтобы её вал смотрел туда, куда антенна излучает - на оператора (у самолёта и коптера обычно назад). Серва крутит антенну вокруг этой оси.
  2. Серву в центр сервотестером, антенну на держателе - под 45°. Тогда ±45° хода дают вертикаль и горизонталь.
  3. Кабель - петлёй, чтобы четверть оборота его не натягивала.
  4. На пульте: трёхпозиционный тумблер SA на канал 10 (раздел 9).
  5. Полётник: - ArduPilot: SERVOn_FUNCTION = 60 (RCIN10 - серва повторяет канал 10); - INAV: правило Servo mixer, Input = RC channel 10, Weight 100 (раздел 11); - Betaflight: Servo 1 в SERVO_TILT, колонка A6 - это канал 10 (раздел 10); - приёмник с PWM: выход с Input = канал 10 (раздел 13).
  6. Концевые точки: в краях антенна строго вертикально и строго горизонтально - по уровню (подойдёт приложение-уровень в телефоне).

Как проверить: наземная антенна вертикальная. Отойдите на 300-500 м, щёлкайте тумблером и смотрите LQ и RSSI в OSD. В положении «вертикаль» сигнал заметно лучше.

Результат: поляризация борта меняется с пульта под наземную антенну.

Задача 2. Антенна держит вертикаль в кренах

На крене 30° вертикальный диполь уже наклонён на 30° к наземному - часть сигнала теряется, на 90° в вираже - почти весь. Серва под антенной доворачивает её против крена, как подвес камеры.

ArduPilot, по шагам:

  1. MNT1_TYPE = 1 (Servo), перезагрузка.
  2. Серва под антенной: SERVOn_FUNCTION = 8 (Mount1Roll). Вал сервы - вдоль корпуса, по оси крена.
  3. MNT1_ROLL_MIN = −45, MNT1_ROLL_MAX = 45 - или ход вашей механики.
  4. SERVOn_MIN / SERVOn_MAX - импульсы, при которых антенна наклонена ровно на −45° и +45°, по транспортиру.
  5. MNT1_DEFLT_MODE = 3 (RC Targeting) и не назначайте на крен канал пульта: цель по крену - ноль, то есть вертикаль.
  6. Отстаёт в резком вираже - MNT1_LEAD_RLL 0,02-0,05 с.

INAV: правило Servo mixer, Input = GIMBAL ROLL, Weight около 400 (почему не 100 - раздел 15). Betaflight: Servo 1 в SERVO_TILT, режим CAMSTAB, Rate около 55 (раздел 15).

Как проверить: включите полётник, наклоните аппарат рукой по крену на 30° - антенна остаётся вертикальной. Уходит в другую сторону - SERVOn_REVERSED = 1 (в INAV - Weight с минусом).

Результат: в виражах антенна смотрит вертикально, как наземная.

Задача 3. Направленная антенна на борту смотрит на оператора

Патч или маленькая Яги на борту дают дальность больше штыря, но только если смотрят на оператора. ArduPilot умеет наводить подвес на точку взлёта (Home) - на пан-тилт кронштейн вместо камеры ставим антенну. Работает в Copter, Plane и Rover - значит, и на наземном роботе.

Что нужно: GPS с компасом на борту, пан-тилт кронштейн (раздел 15), серва поворота 270° (DS3240 или HV 35 кг 270°, раздел 6) - с ней антенна обходит больше направлений, серва наклона любая по моменту.

ArduPilot, по шагам:

  1. MNT1_TYPE = 1, перезагрузка.
  2. Серва поворота: SERVO9_FUNCTION = 6 (Mount1Yaw), наклона: SERVO10_FUNCTION = 7 (Mount1Pitch).
  3. Пределы: MNT1_YAW_MIN / MNT1_YAW_MAX = −135 / 135 для сервы 270° (−90 / 90 для сервы 180°), MNT1_PITCH_MIN / MNT1_PITCH_MAX - по ходу механики наклона (раздел 15, шаг 3), например −45 / 20.
  4. SERVO9_MIN / SERVO9_MAX - импульсы, при которых кронштейн повёрнут ровно на −135° и +135° от носа. Так же для наклона. По транспортиру.
  5. MNT1_DEFLT_MODE = 6 (Home Location) - смотреть на точку взлёта.
  6. Перезагрузка. Точка взлёта запоминается при армировании.

Как проверить на земле, без винтов:

  1. На улице, дождитесь GPS, заармьте на месте, где будет стоять оператор, и разармьте.
  2. Отнесите аппарат на 30-50 м - антенна поворачивается в сторону точки взлёта.
  3. Поверните аппарат в руках - антенна продолжает смотреть на точку взлёта, пока хватает хода сервы.
  4. Точка взлёта позади, за пределами хода - кронштейн стоит в крае. Широкий луч патча (60-90°) закрывает часть этого сектора; для полного круга нужна механика на 360°.

Потренироваться до железа - тренажёр подвеса в разделе 15, задание 6: там же карта, точка взлёта и патч на серве.

Результат: направленная антенна на борту сама смотрит на оператора, куда бы аппарат ни повернул.

Материалы базы: выносные антенны для FPV, руководство по выбору FPV-антенн, мобильные роботы на ESP32, ArduPilot Rover 4.7.

Раздел 22
Серва без полётника
сервотестер, Arduino, ESP32, PCA9685
Уровень 3: проф
Проверить серву за минуту
Сервотестерцентр и проверка

Сервотестер, по шагам. Лучший способ проверить серву и выставить центр перед сборкой.

  1. Питание 5-6 В на вход тестера (от UBEC или батареи через BEC).
  2. Серву - в выход.
  3. Режим Neutral - серва встаёт в центр (1500 мкс). В этот момент надевайте качалку.
  4. Режим Manual - крутилкой гоняйте от края до края: серва идёт плавно, без рывков и треска.
  5. Режим Auto - серва ходит сама. Оставьте на пару минут: не греется - исправна.

Arduino или ESP32 - когда нужна своя логика: таймер, датчик, кнопка, манипулятор.

Рис. 22. Одна-две сервы - прямо на Arduino, больше - через PCA9685.

Одна серва на Arduino Nano, по шагам:

  1. Установите Arduino IDE (как начать).
  2. Сигнал сервы - на D9, плюс и минус - на UBEC 5 В, минус UBEC - на GND Arduino.
  3. Крутилку (потенциометр 10 кОм) - крайние выводы на 5V и GND Arduino, средний - на A0.
  4. Залейте код:
// Серва повторяет крутилку. Arduino Nano, библиотека Servo (встроена в IDE).
#include <Servo.h>
Servo s;
void setup() {
  s.attach(9, 1000, 2000);        // вывод D9, ход 1000-2000 мкс
}
void loop() {
  int v = analogRead(A0);          // 0...1023
  s.writeMicroseconds(map(v, 0, 1023, 1000, 2000));
  delay(20);
}

Шестнадцать серв через PCA9685 (ESP32 или Arduino):

  1. Библиотека: Tools - Manage Libraries - «Adafruit PWM Servo Driver» - Install.
  2. SDA и SCL платы - на SDA и SCL модуля (ESP32: GPIO21 и GPIO22; Nano: A4 и A5). VCC модуля - 3,3 или 5 В от платы, V+ на клеммнике модуля - от UBEC 5-6 В на ток всех серв.
  3. Сервы - в выходы 0-15 модуля.
  4. Залейте код:
// PCA9685: серва на выходе 0 ходит из края в край. ESP32 или Arduino.
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pca = Adafruit_PWMServoDriver();   // адрес 0x40
void setup() {
  pca.begin();
  pca.setOscillatorFrequency(27000000);
  pca.setPWMFreq(50);                  // 50 Гц для обычных серв
}
void loop() {
  pca.writeMicroseconds(0, 1000); delay(1000);
  pca.writeMicroseconds(0, 2000); delay(1000);
}

Оба кода проверены компиляцией (Arduino Nano и ESP32). Перед манипулятором прогоните каждую серву по одной.

Результат: серва работает от своей логики, без полётника и пульта.

Материалы базы: Arduino IDE 2: установка библиотек, как загрузить скетч, первые шаги с Arduino, Arduino от азов программирования, контроллеры Arduino в автоматизации.

Раздел 23
Механика
качалка, тяга, отверстия, центровка
Уровень 2: базовый
Чем серва передаёт движение
Пластиковые качалкив комплекте
Алюминиевая 25Tна мощные сервы
Шаровые наконечникитяги без люфта
Рис. 23. Отверстие качалки меняет силу и ход. В нейтрали качалка и тяга - под 90°.

Как поставить качалку правильно, по шагам:

  1. Серву в центр: сервотестер (Neutral) или полётник с каналом в середине.
  2. Наденьте качалку так, чтобы она стояла перпендикулярно корпусу сервы. Не встаёт ровно - поверните на один зуб или переверните качалку: у неё зубья сдвинуты.
  3. Закрутите центральный винт. На вибрации - капля фиксатора резьбы средней силы.
  4. Тяга: в нейтрали качалка и тяга под 90°, иначе ход в одну сторону больше, чем в другую.
  5. Отверстие: ближнее к валу - больше сила, меньше ход (захваты). Дальнее - больше ход, меньше сила (рули).
  6. Прогоните ход сервой: ничего не упирается раньше концевых точек.

Крепление сервы: на винты через резиновые втулки из комплекта - они гасят вибрацию. Затягивайте до касания, не зажимайте втулки в блин. Серва в печатном корпусе - корпус из PETG или ABS.

Результат: качалка по центру, тяга под 90°, ход симметричный, всё затянуто и на фиксаторе.

Материалы базы: основы 3D-печати, технологии и материалы 3D-печати, КОМПАС-3D: создание моделей и печать.

Раздел 24
Неисправности
от симптома к причине
Уровень 1: минимум
Чем искать
Сервотестерпервым делом
BECполовина бед от питания
Симптом Причина Что сделать
Серва не двигается вообще нет питания, нет общего минуса, вывод не назначен мультиметр на разъём (5-6 В), минус BEC к GND полётника, раздел 10-12
Дрожит в покое помеха на сигнале, плохое питание, высокая частота для аналоговой провод сигнала короче или скрутить с минусом, конденсатор 1000 мкФ, servo_pwm_rate = 50
Гудит в крайнем положении упирается в механику уменьшить MIN/MAX, тренажёр раздела 16
Греется перегруз или упор меньше плечо или мощнее серва, раздел 5
Полётник перезагружается, когда серва двигается питание сервы от 5V полётника отдельный BEC, раздел 8
Ходит ступеньками канал ELRS в режиме Hybrid Wide или Full Resolution, раздел 9
Ход маленький диапазон 1000-2000 мкс даёт около 90° расширить концевые точки до 750-2250
Трещит, качалка болтается сломаны зубья редуктора заменить серву или редуктор, пластик - на металл
Уходит в сторону сама потенциометр износился заменить серву
После потери связи захват открылся failsafe «нет импульсов» или «держать» failsafe выхода = «закрыто», раздел 16

Как искать, по шагам:

  1. Отключите серву от полётника, проверьте сервотестером. Работает - дело в полётнике или настройке.
  2. Не работает и на тестере - серва или питание: другой BEC, другая серва.
  3. Полётник: вкладка Receiver (канал меняется?) - вкладка Servos / Outputs / Servo Output (импульс меняется?).
  4. Импульс есть, серва молчит - нет общего минуса или вывод на таймере моторов.

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

Раздел 25
Частые ошибки
от последствия к исправлению
Уровень 1: минимум
Рис. 24. Самая частая ошибка - питание сервы от полётника.

№ 1. MG996R на 5V полётника. В упоре до 2,5 А - полётник перезагружается в воздухе. Как исправить: отдельный BEC, общий минус. Раздел 8.

№ 2. Серва на канале 5 (AUX1). Он занят Arm, а в ELRS 3.x ещё и двухпозиционный. Как исправить: канал 6 и дальше.

№ 3. Прошивка Betaflight без SERVOS. Нет SERVO_TILT, нет вкладки Servos. Как исправить: пересобрать с SERVOS. Раздел 10.

№ 4. Вывод сервы на таймере моторов. Серва молчит или моторы перестают работать. Как исправить: другой вывод, команда timer.

№ 5. Качалку надели, не выставив центр. Ход в одну сторону больше, серва упирается. Как исправить: центр сервотестером, потом качалка.

№ 6. Концевые точки дальше механики. Серва гудит, греется, сажает BEC. Как исправить: уменьшить ход до пропадания гула.

№ 7. Пластиковый редуктор на захвате. Зубья срезает первым рывком. Как исправить: MG90S и мощнее.

№ 8. Failsafe захвата не задан. Пропала связь - груз упал. Как исправить: failsafe = «закрыто». Раздел 16.

№ 9. Крутилка в режиме Hybrid. Камера прыгает ступеньками. Как исправить: Wide или Full. Раздел 9.

№ 10. Аналоговой серве 300 Гц. Греется и горит. Как исправить: 50 Гц, выше - только цифровым.

Раздел 26
FAQ: у меня не работает
реальные вопросы с форумов - и что делать по шагам
Уровень 1: минимум

Здесь вопросы, с которыми люди реально приходят на форумы: наш voronfpv.ru, форумы ArduPilot, Betaflight, INAV, ExpressLRS, rcopen. Найдите свой симптом - дальше причина, как проверить и как исправить. Сообщения прошивок процитированы дословно по их исходникам.

Сначала - общий маршрут. Серва не работает - идите от сервы к пульту, звено за звеном:

Рис. 25. Пять звеньев от крутилки до сервы. Не работает - ищите разрыв слева направо.
  1. Серву - на сервотестер (раздел 22). Не двигается - дело в серве или питании.
  2. Мультиметр на красный и коричневый провод у самой сервы: 4,8-6 В (HV - до 8,4 В).
  3. Канал меняется на пульте: Channels monitor (раздел 9).
  4. Канал меняется в полётнике: вкладка Receiver.
  5. Импульс меняется на выходе: вкладка Servos / Outputs / Servo Output.
  6. Импульс есть, серва стоит - питание, общий минус или не тот вывод.

Серва не двигается вообще

«Серва стоит мёртво, даже в центр не встаёт». - Причина: на разъёме нет питания; нет общего минуса BEC и полётника; серва припаяна не к тому выводу, что назначен в прошивке; серва сгорела. - Проверить: мультиметр на разъём сервы (4,8-6 В). Betaflight - resource show: у вывода должно быть SERVO 1, а не FREE. - Исправить: питание и общий минус - раздел 8. Сверить физическую площадку с выводом в resource. На сервотестере молчит - меняйте серву.

«От USB работает, от батареи нет» - или наоборот. - Причина: на многих полётниках площадки 5V живут только от батареи, от USB питается одна отдельная (у SpeedyBee она подписана 4V5). От батареи не работает - сгорел или проседает 5V-регулятор полётника. - Проверить: напряжение на площадке сервы от USB, от батареи и когда серва двигается. - Исправить: проверяйте серву только с батареей (винты сняты), питайте её от BEC, а не от площадки USB. Регулятор сгорел - внешний BEC 5-6 В.

«Ползунки в конфигураторе ходят, а серва стоит». - Причина: вывод на одном таймере с моторами; в Betaflight не включён SERVO_TILT - тогда выводы серв вообще не запускаются; в INAV выключен вывод сигналов на моторы и сервы. - Проверить: Betaflight - feature (есть ли SERVO_TILT в Enabled), timer show (не делит ли вывод таймер с MOTOR). INAV - status, строка ошибки выходов, и надпись в конфигураторе «PWM output is disabled». - Исправить: Betaflight - feature SERVO_TILT, save; вывод с отдельным таймером (раздел 7, способ 3). INAV - feature PWM_OUTPUT_ENABLE, save или галочка на вкладке Outputs.

Betaflight

«В Configuration нет SERVO_TILT, вкладки Servos нет». - Причина: прошивка собрана без SERVOS - с Betaflight 4.4 сервы по умолчанию в сборку не входят. - Проверить: CLI feature - в строке Unavailable видно SERVO_TILT. resource SERVO 1 C08 отвечает INVALID RESOURCE NAME: 'SERVO', команда servo - UNKNOWN COMMAND. - Исправить: diff all в файл, перепрошивка с SERVOS в Other Options, бэкап обратно, save (раздел 10, шаг 1). В интерфейсе переключатель SERVO_TILT подписан «Servo gimbal».

«Настроил серву - перестал крутиться мотор». - Причина: серве отдан вывод с тем же таймером, что у моторов. Таймер переключился на 50 Гц для сервы, и соседний мотор потерял сигнал. - Проверить: timer show - на каком таймере SERVO и какие MOTOR на нём же. - Исправить: вернуть вывод моторам: resource SERVO 1 none, resource MOTOR 5 <вывод>, save. Серву - на вывод с отдельным таймером. Все заняты - раздел 7, «Все выводы заняты».

«Третья серва ходит от тумблера арма» / «серва не слушается галочек и MIN/MAX».

Рис. 26. CHANNEL_FORWARDING раздаёт каналы на сервы подряд после подвеса, начиная с AUX1 - канала Arm.

«Серва ходит от стика, а не от тумблера». - Причина: галочка стоит в колонке CH1-CH4 (стики), или в команде servo последнее число со сдвигом. Счёт с нуля: 0-3 - стики, 4 - AUX1, 8 - AUX5 (канал 9). - Проверить: servo без чисел - строки servo номер MIN MAX центр rate канал. - Исправить: servo 0 1000 2000 1500 100 8 для крутилки на канале 9, save. Тренажёр - раздел 10.

«Ввёл команду из совета - Betaflight ругается».

Команда Ответ CLI Почему и как правильно
servo 0 100 2000 1500 100 -1 ARGUMENT OUT OF RANGE импульс только 500-2500, и MIN ≤ центр ≤ MAX: servo 0 1000 2000 1500 100 -1
set servo_tilt = ON INVALID NAME SERVO_TILT - функция, а не настройка: feature SERVO_TILT
servo 0 1000 2000 1500 100 INVALID ARGUMENT COUNT чисел должно быть шесть, последнее - канал
строки бэкапа с ###ERROR IN ...### строка не применилась заливайте diff построчно и смотрите, какая строка с ошибкой

«Камера на CAMSTAB уезжает не туда / качается». - Причина: знак Rate; CAMSTAB включён на серве захвата. - Исправить: Rate с минусом (−55), подобрать по транспортиру (раздел 15, тренажёр раздела 10, задание 7). Для захвата CAMSTAB не включать.

«Серва на M5 не работает, на LED работает» (или наоборот). - Причина: таймер; на конкретной плате площадка не выведена на таймер. - Проверить: timer M5-вывод list - есть ли у вывода таймер вообще. - Исправить: перебрать площадки с отдельным таймером (раздел 7, способ 3). На части плат ПвХ-2 серву ставят на S1/S2 - это отзывы с форума, проверьте timer show на своей.

INAV

«Серва не реагирует на smix». - Причина: выключен вывод сигналов (PWM_OUTPUT_ENABLE); выход не отдан под сервы - на мультироторе сначала всё уходит моторам; выход делит выводы с используемым UART и тихо пропускается; вход smix не тот (канал 9 - это вход 15, не 9). - Проверить: status - строка PWM output init error: Not enough servo outputs/timers; вкладка Mixer - у выхода должна быть пометка S; timer_output_mode. - Исправить: timer_output_mode <номер таймера> SERVOS, save; вход - по таблице раздела 11; тренажёр - раздел 15.

«Настроил smix на серву 3, а двигается выход S1». - Причина: в INAV номер сервы в smix относительный: правило с самым маленьким номером идёт на первый выход, отданный сервам (документация). - Исправить: смотрите номер сервы в таблице выходов вкладки Mixer. Одна серва - начинайте с номера 0.

«Рули в MANUAL правильно, в ANGLE стабилизация не туда». - Исправить: сначала MANUAL - направление от стика знаком Weight или Reverse. Потом ANGLE - наклоните самолёт рукой. Не туда - проверьте ориентацию платы (Board alignment), а не реверсируйте сервы.

ArduPilot

«В Servo Output импульс меняется, а серва стоит».

Рис. 27. Pixhawk не питает ряд сервовыходов: нужен BEC. Пока мигает кнопка safety, выходы заблокированы.

PreArm-сообщения про сервы. Mission Planner пишет их с приставкой PreArm::

Сообщение Причина Как исправить
SERVO9_MIN is greater than SERVO9_TRIM MIN больше TRIM TRIM между MIN и MAX
SERVO9_MAX is less than SERVO9_TRIM MAX меньше TRIM то же
Mount: check TYPE MNT1_TYPE задан, перезагрузки не было перезагрузить
Mount: not healthy тип подвеса задан, а подвес не отвечает верный MNT1_TYPE или 0
Chute has no channel парашют через серву, а выхода с функцией 27 нет SERVOn_FUNCTION = 27
Servo voltage to low напряжение ряда серв ниже BRD_VSERVO_MIN (опечатка «to» - в самой прошивке) питание ряда серв, раздел 8
Safety Switch не нажата кнопка safety нажать и держать

«Подвес на сервах не слушается пульта». - Причина: после MNT1_TYPE = 1 не было перезагрузки; нет RCn_OPTION = 213/214; MNT1_RC_RATE = 0 - крутилка задаёт угол, а не скорость, и в центре кажется, что «не работает»; MNT1_PITCH_MIN не меньше MNT1_PITCH_MAX. - Исправить: раздел 15 по шагам; для управления скоростью - MNT1_RC_RATE 30-90. Тренажёр подвеса - там же.

«Подвес держит горизонт криво». - Причина: градусы MNT1_PITCH_MIN/MAX прошивка переводит в импульсы SERVOn_MIN/MAX по прямой. Не совпадают с реальным ходом сервы - стабилизация недо- или перекручивает. - Исправить: при SERVOn_MIN камера должна стоять ровно на MNT1_PITCH_MIN, при SERVOn_MAX - на MNT1_PITCH_MAX. По транспортиру (раздел 15, шаг 3).

«Захват при включении сам приоткрывается». - Причина: при старте серва встаёт на GRIP_NEUTRAL, по умолчанию 1500 - посередине. - Исправить: GRIP_NEUTRAL = GRIP_GRAB (раздел 16).

«Захват не открывается с тумблера». - Причина: GRIP_ENABLE = 0 или не было перезагрузки; нет SERVOn_FUNCTION = 28; RCn_OPTION = 19 не на том канале; ряд серв не запитан. - Проверить: в сообщениях Mission Planner при щелчке тумблером появляется Gripper load releasing. Есть сообщение, а серва стоит - питание или выход.

«Шасси сами убираются при включении». - Причина: LGR_STARTUP = 1. - Исправить: LGR_STARTUP = 2 - при включении выпущены (раздел 17). Автоматика по высоте работает только в армированном состоянии.

«Самолёт: в MANUAL рули правильно, в FBWA наоборот». - Исправить: реверс только в полётнике, SERVOn_REVERSED. На пульте реверс не делайте - документация ArduPilot прямо это запрещает (Four-channel plane). Проверка FBWA - раздел 18.

«Камера Topotek или SIYI не управляется как серва». - Причина: это не серво-подвес: у таких камер своё управление по SBUS, MAVLink или сети. - Исправить: в ArduPilot - свой тип подвеса: MNT1_TYPE = 8 (Siyi) или 12 (Topotek). Материалы - в разделе 12.

Пульт, ELRS, приёмник

«Серва ходит ступеньками». - Причина: ELRS в режиме Hybrid - 6 положений на канале. - Исправить: Switch Mode = Wide или Packet Rate = 100Hz Full / 333Hz Full (раздел 9).

«Серва на канале 5 работает только в двух положениях». - Причина: в ELRS 3.x канал 5 двухпозиционный, и на нём Arm. - Исправить: серву на канал 6 и дальше.

«Серва дрожит в покое, стоит прямо на приёмнике». - Причина: на пульте выключен фильтр стиков и крутилок (ADC filter) - дрожь крутилки идёт прямо в серву; низкое разрешение канала; завышенное напряжение. - Проверить: выключите пульт. Дрожь ушла - источник в канале. Осталась - питание или приёмник. - Исправить: EdgeTX - Radio Setup - Hardware - ADC filter = On. Разработчики ELRS советуют: для полётника фильтр выключен, для серв напрямую - включён (обсуждение ELRS). Плюс режим 100Hz Full и питание 5-6 В.

«Пропала связь - серва на приёмнике повисла или обмякла». - Причина: режим failsafe выхода: No Pulses - серва обмякает, Last Position - держит последнее. - Исправить: Set Position и значение «закрыто» (раздел 13).

«С приёмника ход маленький / нужен реверс». - Исправить: в веб-интерфейсе ELRS у выхода флаги Invert (реверс) и Stretch (растянуть импульс до 500-2500 мкс) (документация). Или Min / Max на пульте, раздел 9.

Питание

«Мощная серва перезагружает полётник». Раздел 8: отдельный BEC, общий минус, конденсатор 1000 мкФ у сервы, серва не должна упираться.

«MG90S сгорела за 5 секунд». - Причина: обычная серва на 4,8-6 В подключена к напряжению батареи. Отзыв с нашего форума: на 12S маленькие сервы «живут секунд 5». - Исправить: обычные сервы - только от BEC 5-6 В. Напрямую от батареи - никогда, кроме HV-серв от 2S. Мультиметр на разъём - до подключения сервы.

«При подаче питания серва дёргается в край». - Причина: питание пришло раньше сигнала; у Pixhawk при загрузке на выходах MAIN проскакивают короткие импульсы, цифровые сервы уходят в край. Короткий дёрг и возврат в центр - норма. - Исправить: на Pixhawk - сервы на выходы AUX. На Arduino и ESP32 - сначала выдать импульс, потом подать питание сервы. У трекера - STARTUP_DELAY: сервы стоят в центре заданное время после включения.

Поведение сервы

«Гудит в крайнем положении». Упор в механику. MIN/MAX меньше шагом 50 до пропадания гула (раздел 10, шаг 5; тренажёр захвата, раздел 16).

«Цифровая серва пищит в покое». - Причина: у цифровых серв тихий писк при удержании - норма. Громкий писк с нагревом - нагрузка, упор или дрожащий канал. - Проверить: снимите качалку. Писк тихий - норма. Громкий и серва греется - ищите упор. - Исправить: убрать упор; ADC filter на пульте; servo_pwm_rate вернуть к 50.

«Серва греется». Держит нагрузку (уменьшить плечо - раздел 5, груз на защёлку - раздел 16, балансировка - раздел 20, шаг 3), упор или аналоговая серва на высокой частоте (50 Гц).

«Серва 360° не останавливается».

Рис. 28. У сервы постоянного вращения импульс задаёт скорость. Точка остановки - около 1500 мкс, у каждой сервы своя.

«Уходит в сторону сама», «трещит, качалка болтается». Раздел 24: износ датчика угла, помеха на длинном проводе, срезанные зубья.

Захват и сброс

«При потере связи сбросила груз». - Причина: Betaflight по умолчанию держит последнее значение AUX; ArduPilot держит последнее у Gripper и проброшенного канала; приёмник ELRS - режим No Pulses или Last Position. - Проверить: выключите пульт на столе с грузом. - Исправить: Betaflight - rxfail 9 s 1000 (канал 10); ELRS - Set Position «закрыто»; ArduPilot - SERVO_RC_FS_MSK или открывать только над точкой сброса. Раздел 16.

«Сброс срабатывает от случайного щелчка». Предохранитель на пульте из двух тумблеров - раздел 9 и тренажёр EdgeTX.

«После сброса ремень попадает в винты». Это механика: автор модели сброса на нашем форуме прямо требует ставить на лучи ограничители, чтобы ремень не доставал до винтов (Сброс 13-15).

Антенный трекер

«Трекер не двигается / сервы обмякли». - Причина: режим STOP или ещё идёт запуск - в них по умолчанию на выходы идёт ноль импульсов (SAFE_DISARM_PWM = 0); не нажата safety; идёт STARTUP_DELAY; ряд серв не запитан. - Исправить: режим AUTO (INITIAL_MODE = 10), safety, питание. Чтобы в стопе сервы держали центр - SAFE_DISARM_PWM = 1.

«Трекер уезжает от аппарата в край и стоит». - Причина: реверс поворота; неверная ориентация платы или компаса; магниты серв рядом с компасом. - Исправить: SERVO1_REVERSED = 1 (поворот) или SERVO2_REVERSED = 1 (наклон); потом AHRS_ORIENTATION, COMPASS_ORIENT и калибровка компаса (раздел 20, шаги 4-5).

«Трекер не видит аппарат». - Причина: скорость или протокол порта не совпадают с модемом или рюкзаком; SYSID_TARGET не 0; путь ELRS - на пульте нет GPS-датчиков, разная фраза привязки у рюкзака или Backpack Telemetry не ESPNOW; аппарат ближе DISTANCE_MIN. - Проверить: Mission Planner, подключённый к трекеру, должен видеть второй аппарат.

«Трекер ведёт рывками, отстаёт». - Причина: MAV_UPDATE_RATE по умолчанию 1 - трекер просит позицию раз в секунду. - Исправить: MAV_UPDATE_RATE = 5-10, потом P и D (раздел 20, шаг 7).

После прошивки или обновления

«Обновил Betaflight - серва перестала работать». Новая сборка без SERVOS, или бэкап лёг с ошибками. Проверьте feature, resource show, servo, залейте diff построчно и смотрите на ###ERROR IN.

«Обновил ArduPilot - подвес и PreArm». С версии 4.3 появилась проверка Mount: not healthy, а управление подвесом с пульта - только через RCn_OPTION 212-214 (раздел 12).

«Сменил функцию выхода - ничего не изменилось». Нужна перезагрузка после смены SERVOn_FUNCTION.

Результат раздела: по симптому вы находите причину и чините её сами, не дожидаясь ответа на форуме. Не нашли свой вопрос - задайте его на форуме или в общем чате: мы добавим его сюда.

Раздел 27
Чеклист
распечатать и держать в кейсе
Уровень 1: минимум

Распечатайте карточку и положите в кейс. При установке - левая колонка, перед каждым вылетом - правая.

Рис. 29. Карточка для кейса. Правой кнопкой - «Сохранить изображение» - печать.

Берегите себя!