Применение: Лёгкие задачи без ударов: наклон FPV-камеры, дверца, переключатель. Дёшево и 9 г.
Внимание! Шестерни ломаются от удара и перегруза. На захват груза и рули самолёта - только металл.
Серва - маленький моторчик, который встаёт в заданный угол и держит его. На ней держится всё, что на аппарате двигается кроме винтов: наклон камеры, подвес, захват груза, шасси, рули самолёта, руль наземного робота, поворот антенны.
Здесь всё по порядку. Как серва устроена и как понимает команду. Какую купить под задачу и как посчитать. Куда паять, от чего питать и почему перезагружается полётник. Как настроить в Betaflight, INAV и ArduPilot, на пульте EdgeTX и прямо на приёмнике. И по готовым сценариям - от наклона FPV-камеры и подвеса со стабилизацией до VTOL, антенного трекера на земле и антенны на борту, которая сама смотрит на оператора.
Прочитал, прошёл одиннадцать тренажёров - подключаешь и настраиваешь любую серву сам, и она не гудит, не дёргается и не роняет груз. Опытным сразу в разделы про разрешение каналов ELRS, питание, failsafe захвата и механику.
Уровни в шапке разделов: Уровень 1: минимум - без этого серву не подключить. Уровень 2: базовый - настройка под конкретную задачу. Уровень 3: проф - самолёты, наземка, трекеры, свои контроллеры.
Обычный мотор просто крутится. Серва - мотор с мозгами: ей говорят угол, она встаёт в этот угол и держит его, даже если на неё давят.
Словарь на одну минуту. Эти слова дальше будут везде:
| Слово | Что это простыми словами |
|---|---|
| Серва, сервопривод | мотор с редуктором и датчиком угла: встаёт в заданный угол и держит его |
| Импульс, 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) - это одна и та же настройка, меняется только то, что стоит на качалке.
Результат раздела: вы знаете, что серва - это не мотор «вообще», а мотор, который держит угол. Дальше - как она это делает.
Материалы базы: подключение сервопривода к полётному контроллеру, то же на форуме с обсуждением.
Внутри пять частей. Мотор крутится быстро и слабо. Редуктор из шестерёнок превращает скорость в силу. На выходном валу сидит качалка. Датчик угла (обычно потенциометр) знает, где сейчас вал. Плата сравнивает угол из команды с углом вала и крутит мотор, пока они не совпадут.
Как серве говорят угол. По жёлтому (оранжевому, белому) проводу идёт импульс 50 раз в секунду. Серва смотрит только на ширину импульса:
мкс - микросекунда, миллионная доля секунды. Полётник и приёмник по умолчанию выдают 1000-2000 мкс.
Важная деталь: 1000-2000 мкс - это не полный ход. У большинства обычных серв этот диапазон даёт около 90° (по 45° в каждую сторону). Полные 180° - при 500-2500 мкс. Нужен больший ход - расширяйте концевые точки (крайние импульсы MIN и MAX) в полётнике или на пульте (разделы 9-12). Точный диапазон - в паспорте сервы.
Аналоговая и цифровая. Аналоговая обновляет положение 50 раз в секунду, цифровая - до 300 и больше. Цифровая точнее держит угол и быстрее отвечает, но больше ест в покое. Частоту импульсов выше 50 Гц ставят только цифровым сервам, иначе аналоговая сгорит. В Betaflight и INAV это servo_pwm_rate (по умолчанию 50), в ArduPilot - SERVO_RATE.
Покрутите сами:
Результат: вы знаете, что серве нужны три вещи - питание, общий минус и импульс нужной ширины. Всё остальное в методичке - как их правильно дать.
Применение: Лёгкие задачи без ударов: наклон FPV-камеры, дверца, переключатель. Дёшево и 9 г.
Внимание! Шестерни ломаются от удара и перегруза. На захват груза и рули самолёта - только металл.
Применение: Захват, сброс, рули, всё, где бывают рывки и удары. Выдерживает посадки.
Внимание! Тяжелее. Дешёвые копии люфтят - качалка болтается на пару градусов.
Применение: Рули больших самолётов, VTOL, наземка: мотор без щёток не изнашивается, держит угол тише и точнее, ресурс в разы выше.
Внимание! Дорогая. Выгода видна только при долгой работе и больших нагрузках; на наклон камеры - переплата.
Применение: Самолёты и крылья: быстрый отклик, точность, меньше дрожи.
Внимание! Дороже в разы. Для захвата и наклона камеры - переплата.
Применение: Питание прямо от 2S (7,4-8,4 В): больше момент и скорость, без лишнего BEC.
Внимание! От 5 В работает слабее паспорта. На 5V полётника такую не вешают - нужен свой BEC на 7,4 В.
Применение: Колёса маленького робота, лебёдка, барабан. Серва крутится, импульс задаёт скорость.
Внимание! Угол не держит совсем. Как подвес или захват - не годится.
Применение: Манипуляторы: все сервы на одном проводе, каждая сообщает угол, ток и температуру.
Внимание!!! Нужен свой контроллер и протокол. С полётником напрямую не работает.
Угол хода. Обычная - 180° (часто реально 120-180°), бывают 270°: подходят для поворотных механизмов и трекеров. На коробке и в названии это «180°» или «270°». Серва 360° - это вращение, а не угол.
Результат: под наклон камеры - пластиковая микро, под захват и рули - металл, под самолёт - coreless, под наземку - мощная влагозащищённая, под манипулятор - шинная.
| Что в паспорте | Что значит | Как читать |
|---|---|---|
| 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 |
Паспортный момент - это в упоре, на пределе. В работе держите нагрузку не больше половины паспорта. Иначе серва греется, гудит и быстро изнашивает редуктор.
Результат: вы читаете паспорт сервы и понимаете, выдержит ли она вашу задачу. Как посчитать задачу - в следующем разделе.
Как посчитать, по шагам:
Считает калькулятор ниже - зелёным сервы, которые справятся, рамкой самая дешёвая:
Два способа не покупать серву мощнее:
Результат: вы знаете нужный момент в кг·см и модель сервы под него.
Цены проверены 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 ₽ |
Питание, провода, проверка:
| Что | Зачем | Где и почём |
|---|---|---|
| Сервотестер | проверить серву и найти центр без полётника | 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 ₽ |
Три провода:
Куда сигнал на полётнике. На любой свободный вывод, который прошивка умеет отдать под серву:
resource, раздел 10.Как подпаять, по шагам:
Результат: серва сидит на своём выводе, питание и минус подведены. Перевернёте разъём - серва не сгорит, плюс посередине. Просто не заработает.
Пайка - чеклист пайки и пайка дронов в базе.
Частая ситуация: моторы, видеопередатчик, GPS, приёмник, LED - на плате не осталось ни одной свободной площадки. Серву всё равно можно подключить. Сначала ответьте на один вопрос: что серва должна делать?
| Задача | Способ | Вывод полётника |
|---|---|---|
| Серва повторяет канал, приёмник меняем или ставим новый | 1. ELRS-приёмник с PWM: два выхода - CRSF в полётник, остальные - сервы | не нужен |
| Серва повторяет канал, приёмник менять не хотим | 2. ESP32 подслушивает CRSF от приёмника | не нужен |
| Нужна прошивка, Betaflight | 3. Отдать серве другую площадку: PPM, TX пустого UART, LED | освобождаем |
| Нужна прошивка, ArduPilot, выходов мало | 4. SBUS-выход на свободный UART и декодер: до 16 серв | один UART |
| Серв много и надолго | 5. Полётник с большим числом выходов | - |
Приёмник ELRS с PWM-выходами (Radiomaster ER4, ER6, ER8 - раздел 6) умеет отдать два своих выхода под CRSF для полётника, а остальными крутить сервы напрямую (документация ELRS). Полётник получает всё управление как от обычного приёмника, а серва не занимает у него ни одной площадки.
Как проверить: в конфигураторе, вкладка Receiver, все каналы ходят от стиков. Серва ходит от своего тумблера. Выключите пульт - серва встаёт в положение Failsafe.
Результат: серва работает от пульта, у полётника занят только один UART, который и так был под приёмник.
Приёмник шлёт полётнику кадры CRSF со всеми каналами по одному проводу (TX приёмника). ESP32 можно подключить к этому же проводу параллельно: полётник по-прежнему получает управление, а ESP32 читает нужный канал и сама крутит серву. От полётника не нужно ничего.
Что нужно: ESP32 DevKit (раздел 6), серва, BEC 5-6 В, Arduino IDE с поддержкой ESP32 (как установить платы и библиотеки).
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); // нет кадров полсекунды - безопасное положение
}
SAFE_US.Код проверен компиляцией (ESP32, ядро 3.3) и разбором собранных вручную кадров CRSF - все 16 каналов читаются верно. На железе мы его ещё не гоняли: проверка на столе из пункта 4 - обязательна до полёта. Много серв - добавьте к ESP32 плату PCA9685 (раздел 22).
Результат: серва работает от канала пульта, у полётника не занято ничего.
Серве нужна не «серво-площадка», а любой вывод процессора, у которого есть таймер и который не делит этот таймер с моторами. Кандидаты: вход PPM (если приёмник по UART - он свободен), TX пустого UART, LED, управление камерой, M5-M8 без моторов.
resource show - что на каких выводах.timer show - выводы с таймерами. Для любого вывода: timer <вывод> list - какие таймеры ему можно дать.resource PPM 1 none (только если приёмник по UART) или resource SERIAL_TX 3 none (если UART3 пустой на вкладке Ports).resource SERVO 1 A03. Таймера нет - timer A03 af<номер> из списка пункта 2.save. Дальше - как в разделе 10: SERVO_TILT, вкладка Servos.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.
Результат: серва на своём выводе с отдельным таймером, моторы работают.
ArduPilot умеет выдать выходы SERVO1...SERVO16 по одному проводу SBUS на свободный UART (документация). Декодер SBUS - PWM превращает его обратно в обычные выходы для серв. Выходы 9-16 при этом работают, даже если на плате физически их нет.
SERIAL4_PROTOCOL = 15 (SBus servo out). Скорость 100 000 ставится сама.SERIAL4_OPTIONS = 2 (бит 1 - инверсия TX). На F4 - внешний инвертор на транзисторе или готовый инвертор SBUS.SERVO13_FUNCTION = 28 (Gripper), SERVO14_FUNCTION = 7 (Mount1Pitch). Разделы 12, 15, 16.SERVO_SBUS_RATE = 50 (25-250 Гц). Часть декодеров выдаёт фиксированные ~170 Гц - это может сжечь аналоговую серву, ставьте цифровые или декодер с настройкой частоты.Как проверить: Mission Planner - Setup - Servo Output: на выходе 13 меняется импульс; серва на выходе декодера ходит так же.
В INAV SBUS-выход формально есть, но разработчики прямо советуют его не использовать: он работает только на F7 и H7 и не на всех платах (ответ разработчика). В Betaflight SBUS-выхода для серв нет.
Результат: до 16 серв на одном проводе UART, все функции ArduPilot работают.
Если серв три и больше и это надолго - честнее поставить полётник под задачу. У крыльевых плат (SpeedyBee F405 WING, Matek F405-Wing и подобные) выходов под сервы много и есть свой BEC на 5-8 В для них. Перед покупкой откройте схему платы у производителя и посчитайте: моторы + сервы + запас на один выход.
Серва ест ток рывками. Пока стоит - миллиамперы. Тронулась с места или упёрлась - до сотен миллиампер у SG90 (по разным даташитам 0,36-0,6 А) и до 2,5 А у MG996R (даташит). Если она питается от 5V полётника, напряжение на полётнике проседает, и он перезагружается. В воздухе.
Правило:
Как подключить отдельный BEC, по шагам:
Сколько ампер нужно от BEC. Сложите токи серв в упоре и возьмите 60% (все сразу в упоре бывают редко) плюс 0,5 А. Две MG996R: 2 × 2,5 × 0,6 + 0,5 = 3,5 А - нужен BEC на 4-5 А. Калькулятор в разделе 5 считает это сам.
Результат: серва питается от своего BEC, полётник - от своего, минус общий. Полётник не перезагружается, когда серва дёргается.
Серва управляется каналом. Канал - это то, что пульт передаёт на аппарат: 1-4 стики, 5 и дальше - тумблеры и крутилки. Сначала назначаем крутилку или тумблер на свободный канал.
На пульте EdgeTX, по шагам:
Концевые точки на пульте. Страница Outputs: у канала CH9 можно задать Min / Max (−100 / +100 по умолчанию), Subtrim (сдвиг центра) и Direction (реверс). Это удобно, когда серва стоит прямо на приёмнике (раздел 13). С полётником концевые точки лучше ставить в полётнике (разделы 10-12).
Предохранитель на сброс груза. Чтобы груз не ушёл от случайного щелчка:
AND, V1 = SF↓ (тумблер-предохранитель), V2 = SH↓ (кнопка с возвратом).Соберите всё это на экране пульта - рядом камера на CH9 и захват на CH10, проверьте предохранитель тумблерами:
Не берите для серв канал 5 (AUX1). Это канал постановки на охрану (Arm). В ELRS 3.x он ещё и двухпозиционный. В ELRS 4.x в режимах Full Res канал 5 уже полноценный (документация ELRS), но Arm на нём остаётся - серву всё равно не вешайте.
Разрешение каналов ELRS - почему камера поворачивается рывками. Это то, что упускают даже опытные.
Как переключить: на пульте откройте скрипт ExpressLRS (SYS - Tools - ExpressLRS) - Switch Mode = Wide. Или Packet Rate = 100Hz Full. Выйдите из скрипта, дождитесь переподключения приёмника.
Результат: крутилка или тумблер на своём канале, канал плавно ходит на экране Channels monitor, режим ELRS не режет его до 6 шагов.
Материалы базы: что такое EdgeTX, полное руководство EdgeTX на русском, EdgeTX Companion, что такое ExpressLRS, ExpressLRS Configurator.
Betaflight - прошивка гоночных и фристайл-дронов. Серв в ней мало и просто: до двух на наклон и подвес через SERVO_TILT и дальше - проброс каналов.
Что нужно: Betaflight Configurator (для Windows - с сайта Betaflight), полётник с Betaflight 4.4 и новее, серва на свободном выводе (раздел 7).
Шаг 1. Прошивка с сервами. С версии 4.4 прошивка собирается на сервере под ваш полётник, и сервы надо включить при сборке.
diff all - Save to File. Это бэкап настроек.save.Без этого шага нет ни вкладки Servos, ни пункта SERVO_TILT, а CLI на feature SERVO_TILT отвечает Unavailable SERVO_TILT. Это первая причина, почему «ничего не работает». Вкладка Servos появляется сразу после прошивки с SERVOS.
Шаг 2. Отдать вывод серве.
resource - Enter. Найдите строку вашего вывода. Например, серва на LED: resource LED_STRIP 1 C08 - запомните C08 (у вас буква и цифры могут быть другими).resource LED_STRIP 1 none.resource SERVO 1 C08.resource MOTOR 5 B00, затем resource MOTOR 5 none и resource SERVO 2 B00.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:
SERVO 1 и SERVO 2 из шага 2 (в CLI счёт с 1, во вкладке с 0).То же одной командой в 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 - камера и сброс - не работают». Проверьте по порядку:
resource SERVO 1 и SERVO 2, выводы не на таймере моторов (шаг 2).Пройдите всё руками до железа. Окно - копия Betaflight Configurator, рядом серва с камерой на раме. Меняете настройку - смотрите, что делает серва:
Результат: серва слушается крутилки или тумблера, не упирается, в Live mode видно движение.
Материалы базы: что такое Betaflight, подключение сервы: SERVO_TILT и CHANNEL_FORWARDING, полное руководство по CLI, прошивка полётного контроллера, вопрос с форума про две сервы.
В INAV сервы настраиваются правилами микшера: «серва номер N двигается от входа X с весом Y».
Что нужно: INAV Configurator (или с сайта INAV), полётник с INAV 7 и новее.
Как сделать, по шагам:
То же в 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.
Плавность. Поле Speed: 10 - полный ход за 10 секунд, 100 - за 1 секунду. Для шасси и дверец - 20-30.
Условия. Последнее поле правила - Logic Condition (вкладка Programming): правило работает, только когда условие выполнено. Для обычной сервы ставьте -1 - без условия, иначе серва будет молчать.
Результат: серва на своём выходе, двигается от канала или от стабилизации, ход без упора.
Материалы базы: что такое INAV, квадрокоптер на INAV переворачивается при взлёте - про порядок выходов.
В ArduPilot у каждого выхода есть функция. Выход SERVO9 = функция «наклон подвеса» - и всё, полётник сам знает, что туда слать.
Что нужно: Mission Planner или QGroundControl.
Как сделать, по шагам:
SERVOn_FUNCTION для выхода, куда припаяна серва. Выходы 1-8 - MAIN, 9-16 - AUX на Pixhawk.SERVOn_MIN, SERVOn_MAX, SERVOn_TRIM - концевые точки и центр, от 800 до 2200 мкс. SERVOn_REVERSED = 1 - реверс.| Функция | Номер | Для чего |
|---|---|---|
| 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.
Самолёт без полётника, наземный робот, поворотная антенна на земле - серву можно воткнуть прямо в приёмник. Нужен приёмник ELRS с PWM-выходами.
Как сделать, по шагам:
По умолчанию каналы идут «прямо»: канал 1 на выход 1 и так далее (документация ELRS). Канал 5 (AUX1) и здесь только двухпозиционный.
Failsafe задаётся на каждый выход, и режимов три. Set Position - встать на заданный импульс (по умолчанию 1500 мкс, у выхода 3 - газа - 988). No Pulses - импульсы пропадают, серва обмякает и перестаёт держать: подпружиненная защёлка может открыться. Last Position - держать последнее: если захват был открыт, так и останется. Для захвата - только Set Position со значением «закрыто» (раздел 16). Для руля робота - Set Position в центре.
Результат: серва работает от пульта без полётника, при потере связи встаёт в заданное вами положение.
Зачем: на скорости дрон сильно наклонён вперёд, и неподвижная камера смотрит в землю. Летите быстро - поднимите камеру, чтобы видеть горизонт. Висите или летите медленно - опустите, чтобы видеть землю перед собой. На съёмке и осмотре - навели камеру на объект, не наклоняя дрон.
Что нужно: SG90 или MG90S, крепление камеры с осью (печатается, в базе - маунты под камеры 19 и 22 мм), свободный вывод полётника, крутилка на пульте.
Как сделать, по шагам:
Результат: крутите S1 - камера плавно меняет угол, в центре крутилки - привычный угол полёта.
Что нужно: кронштейн пан-тилт, две SG90 или MG90S, внешний BEC на 2-3 А, два канала на пульте (две крутилки или стик на втором пульте).
Как собрать, по шагам:
Настройка в ArduPilot, по шагам:
MNT1_TYPE = 1 (Servo), перезагрузка.SERVO9_FUNCTION = 6 (Mount1Yaw) - серва PAN, SERVO10_FUNCTION = 7 (Mount1Pitch) - серва TILT.MNT1_PITCH_MIN / MNT1_PITCH_MAX - пределы наклона в градусах. Не шире того, что реально проходит механика: обычная серва на 1000-2000 мкс даёт ±45°, значит, например, −45 и 20. Смотреть вниз на −90 можно только с сервой, которая ходит шире (500-2500 мкс или 270°). По умолчанию в ArduPilot стоит −90 и 20 - с обычной сервой это даёт недоворот. MNT1_YAW_MIN / MNT1_YAW_MAX - поворота.SERVO10_MIN / SERVO10_MAX - импульсы, при которых камера реально стоит на этих углах. Подбирайте по транспортиру.RC9_OPTION = 213 (Mount1 Pitch), RC10_OPTION = 214 (Mount1 Yaw).MNT1_RC_RATE = 0 - крутилка задаёт угол; 30-60 - задаёт скорость поворота в градусах в секунду.Стабилизация в ArduPilot включается сама. С MNT1_TYPE = 1 полётник сам доворачивает сервы против наклона рамы - камера смотрит туда, куда задано, а не куда наклонился дрон. Проверка, по шагам:
SERVO10_REVERSED = 1.SERVO10_MIN / SERVO10_MAX по транспортиру (шаг 4 выше): полётник считает угол по этим импульсам.MNT1_LEAD_PTCH 0,02-0,05 с: серва начнёт доворачивать с упреждением. Перелетает и качается - уменьшайте. Для крена то же - MNT1_LEAD_RLL.MNT1_ROLL_MIN / MNT1_ROLL_MAX.Настройте подвес руками - окно Mission Planner, рядом дрон с камерой, транспортир и карта для антенны на оператора (раздел 21):
Стабилизация в INAV, по шагам:
В 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 - крен.
Rate × наклон / 50 (наклон в десятых долях градуса): при Rate 100 серва перекручивает почти вдвое.Поворота (PAN) в SERVO_TILT нет. Для него в Betaflight - ставьте вторую серву на проброс канала крутилки, стабилизации по рысканию не будет.
Честно про качество. Подвес на сервах даёт грубую картинку: дрожь и шаги видны. Для видео, по которому надо что-то разглядеть, берут бесколлекторный подвес со своей стабилизацией (в ArduPilot - другое значение MNT1_TYPE под конкретный подвес: 4-14, по списку параметров). Сервы - для обзора и наведения.
Результат: две крутилки поворачивают и наклоняют камеру, пределы выставлены, питание отдельное.
Материалы базы: управление подвесом Topotek, движение подвеса Topotek, крепление тепловизионной камеры.
Доставить аптечку на остров, рацию на позицию, спасательный круг на воду, пробоотборник на реку, прикормку рыбакам. Серва держит груз и отпускает по команде.
Что нужно: MG90S (груз до 0,5 кг) или MG996R (до 1-2 кг), корпус захвата - печатный из базы: гравитационный зацеп или рычажный механизм на MG90S, проверен на 3,6 кг, кольцо или петля на грузе.
Как собрать, по шагам:
Настройка в ArduPilot, по шагам:
GRIP_ENABLE = 1, перезагрузка.GRIP_TYPE = 1 (Servo).SERVO9_FUNCTION = 28 (Gripper).GRIP_GRAB - импульс «закрыто», GRIP_RELEASE - «открыто», GRIP_NEUTRAL - куда серва встаёт при включении полётника. По умолчанию нейтраль 1500 - посередине, и многие защёлки при включении приоткрываются. Поставьте GRIP_NEUTRAL равным GRIP_GRAB. Подбирайте тренажёром ниже и потом на железе.RC10_OPTION = 19 (Gripper): тумблер вверх - открыть, вниз - закрыть.GRIP_AUTOCLOSE - через сколько секунд закрыться после открытия (0 - не закрывать).В Betaflight и INAV - проброс канала на серву (разделы 10, 11) с тумблером и предохранителем на пульте (раздел 9).
Самое важное - потеря связи. Пропала связь - захват должен остаться закрытым. Как обеспечить:
rxfail 9 s 1000 - канал 10 (счёт с нуля) при потере связи встаёт на 1000 мкс;Потренируйтесь до железа: выставьте концевые точки так, чтобы серва не упиралась, и проверьте потерю связи.
Проверка на столе, без винтов:
Результат: захват держит груз, открывается только по команде и не роняет его при потере связи.
Шасси. Убранное шасси не лезет в кадр камеры и меньше тормозит. На крупных коптерах - серва или готовая электростойка.
Настройка в ArduPilot, по шагам:
SERVO9_FUNCTION = 29 (LandingGear).LGR_ENABLE = 1.RC10_OPTION = 29: импульс канала меньше 1200 - выпустить, больше 1800 - убрать (документация).SERVO9_REVERSED = 1.LGR_RETRACT_ALT - убрать выше этой высоты, LGR_DEPLOY_ALT - выпустить ниже; LGR_OPTIONS - бит 0 уборка после взлёта, бит 1 - выпуск при посадке.LGR_STARTUP = 2 - при включении шасси выпущено.Серва шасси ходит резко - поставьте замедлитель сервы между полётником и сервой, или в INAV - поле Speed (раздел 11).
Парашют. Серва выдёргивает чеку, пружина выбрасывает купол. Нужен на тяжёлых аппаратах над людьми.
CHUTE_ENABLED = 1, CHUTE_TYPE = 10 (Servo).SERVO11_FUNCTION = 27 (Parachute).CHUTE_SERVO_OFF - импульс «закрыто», CHUTE_SERVO_ON - «выпущен».CHUTE_ALT_MIN - ниже этой высоты не выпускать (купол не успеет раскрыться).RC11_OPTION = 22 (Parachute Release) - ручной выпуск. CHUTE_CRT_SINK - автоматический выпуск при падении быстрее заданной скорости.Результат: шасси убирается и выпускается сам по высоте, парашют выпускается по кнопке или при аварийном снижении.
Какие сервы: на крылья до 1,5 м - 9-12 г металл (MG90S, ES08MA II) или coreless; на большие - стандартные цифровые. Момент считают по площади руля и скорости, упрощённо: на каждый руль серва с запасом ×2 от рекомендации производителя модели.
Настройка в ArduPilot (ArduPlane), по шагам:
SERVOn_REVERSED = 1.SERVOn_TRIM - руль стоит ровно в нейтрали. Лучше механически выставить тягой, а TRIM оставить около 1500.В INAV - пресет самолёта на вкладке Mixer, дальше то же: MANUAL - направления, ANGLE - стабилизация, Outputs - реверс и ход.
Результат: все рули ходят в правильную сторону в MANUAL и парируют наклон в FBWA.
VTOL с наклоном моторов (tilt-rotor). Что получаем: на взлёте и посадке моторы смотрят вверх, как у коптера, в полёте наклоняются вперёд, и аппарат летит самолётом. Наклоняет их серва.
Что нужно: ArduPlane 4.5 и новее; на каждую наклонную ось - цифровая серва с металлическим редуктором и запасом ×3 по моменту: на ней висит мотор с винтом, а раскрученный винт ещё и сопротивляется повороту как гироскоп. На 5-7" винтах - уровень DS3218, на лёгких крыльях - MG90S. Питание - BEC 6-7,4 В на 5 А и больше.
Как настроить, по шагам (документация ArduPilot):
Q_ENABLE = 1, перезагрузите полётник и обновите список параметров - появятся все Q_.Q_FRAME_CLASS - 1 (четыре мотора) или 7 (трикоптер), Q_FRAME_TYPE - по раме.Q_TILT_ENABLE = 1, перезагрузка.Q_TILT_MASK - какие моторы наклоняются, битовая маска по номерам моторов в схеме рамы. У Quad X передние - моторы 1 и 3, маска 5 (мотор 1 - передний правый, 2 - задний левый, 3 - передний левый, 4 - задний правый). У трикоптера передние - 1 и 2, маска 3. Все четыре - 15. Ошибка тут частая: маска 3 на Quad X объявляет наклонными моторы по диагонали.Q_TILT_TYPE: 0 - непрерывный (серва встаёт на любой угол), 1 - бинарный (только «вверх» или «вперёд», как уборка шасси), 2 - векторное рыскание (в висении моторы наклоняются по-разному и поворачивают аппарат).Q_TILT_RATE_UP и Q_TILT_RATE_DN - скорость наклона. Начните с 15 °/с: медленно и безопасно.Q_TILT_MAX - до какого угла наклона ещё работает коптерное управление, для начала 45.Q_TILT_YAW_ANGLE - на сколько градусов мотор уходит назад за вертикаль для поворота, для начала 20.SERVOn_REVERSED = 1, дальше SERVOn_MIN и SERVOn_MAX, пока углы не совпадут по транспортиру.Пройдите настройку руками до железа - окно Mission Planner, рядом мотор на серве наклона с транспортиром:
Как проверить: в QSTABILIZE наклоните аппарат рукой - моторы в векторном режиме доворачиваются против наклона, в обычном - стоят вверх. Первый взлёт - в QHOVER, низко, переход в самолёт - только после уверенного висения.
Результат: моторы стоят вверх в коптерных режимах и ложатся вперёд в самолётных, серва не упирается, переход идёт с заданной скоростью.
Подробно про VTOL другой схемы, где наклоняется весь аппарат, - тейлситтер.
Материалы базы: режимы полёта ArduPlane и настройка аппаратуры, системы автоматического управления самолётом, модели самолётов: Nomad, Вьюрок v2, Micro Sector, аэродинамика и самолётостроение.
На наземке вес не главное, главное - грязь, вода, удары колёс о камни. Берите сервы с запасом ×3, металл и влагозащиту (IP66-IP67 в названии).
Руль, в ArduPilot Rover, по шагам:
SERVO1_FUNCTION = 26 (GroundSteering), SERVO3_FUNCTION = 70 (Throttle) - регулятор хода.SERVO1_TRIM.SERVO1_MIN, пока рулевые тяги не упрутся, и отступите на 50 мкс. Так же SERVO1_MAX.SERVO1_REVERSED = 1.Мачта камеры - подвес на двух сервах, как в разделе 15 (функции 6 и 7).
Манипулятор. 4-6 серв, каждая считает момент от всей руки дальше неё: чем ближе к основанию, тем мощнее. Для самодельной руки на MG996R/DS3218 - драйвер PCA9685 и Arduino (раздел 22). Для точной - шинные сервы STS3215: одна шина, каждая серва знает свой угол и ток. Проект SO-ARM100/101 - открытый, с моделями для печати.
Результат: робот рулит без упоров, камера на мачте поворачивается, манипулятор на своём контроллере.
Материалы базы: гусеничная тележка НРТК, каталог наземных беспилотных аппаратов, роботы-манипуляторы своими руками, математические основы робототехники, мобильные роботы на ESP32, ArduPilot Rover 4.7.
Направленная антенна на земле - патч, Яги, спираль - даёт дальность в разы больше штыря, но смотрит узким лучом, 30-60°. Аппарат ушёл из луча - связь просела. Держать антенну руками весь полёт никто не будет. Трекер делает это сам: знает, где стоит, получает координаты аппарата по телеметрии, считает, куда смотреть, и крутит две сервы.
Из чего состоит трекер:
Дальше - семь шагов. Первый решает, откуда трекер возьмёт координаты, остальные - сборка и настройка.
| Что у вас | Путь | Что добавить |
|---|---|---|
| Любой полётник (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).
SERIAL1_PROTOCOL = 2 (MAVLink2), SERIAL1_BAUD = 115.Рюкзак отдаёт трекеру сообщения HEARTBEAT и GLOBAL_POSITION_INT - именно их трекер ArduPilot и слушает (видно в исходниках Backpack). Эту связку мы собрали по документации и исходникам, на железе ещё не гоняли. Поэтому проверка на земле, шаг 6, - до первого вылета обязательна.
Путь Б: радиомодем, по шагам.
SERIALx_PROTOCOL = 2 - как для обычной телеметрии в Mission Planner.SERIAL1_PROTOCOL = 2, SERIAL1_BAUD = 57 (скорость модема по умолчанию 57600).Результат шага: координаты аппарата приходят на трекер.
| Что | Зачем |
|---|---|
| Полётник под 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 (для пути А) | рюкзак |
Результат шага: механика ходит свободно, антенна сбалансирована, сервы только поворачивают.
AHRS_ORIENTATION (например, Pitch90 - смотрит вверх под 90° к антенне). Компас повёрнут - COMPASS_ORIENT.| Параметр | Значение | Что делает |
|---|---|---|
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 |
Названия и диапазоны - по списку параметров трекера.
Концевые точки:
SERVO1_MIN. Так же вверх - SERVO1_MAX.SERVO2_REVERSED = 1. Поворот уезжает от аппарата в край и стоит - SERVO1_REVERSED = 1 (в документации трекера это ещё названо по-старому, RC1_REV).YAW_RANGE. Углы наклона в краях - PITCH_MIN и PITCH_MAX.SERVO1_TRIM и SERVO2_TRIM - середина между MIN и MAX.Пройдите шаги 4-6 руками до железа - окно Mission Planner, подключённое к трекеру, и карта с аппаратом, который можно таскать:
Результат шага: трекер знает, какой импульс даёт какой угол, и ни одна серва не упирается.
YAW_TRIM (±10°): поправка на компас. По наклону - PITCH_TRIM.Результат шага: антенна смотрит на аппарат с точностью до нескольких градусов - для луча 30-60° этого хватает с запасом.
Трекер сравнивает, куда антенна смотрит на самом деле (по полётнику на кронштейне), с тем, куда нужно, и поправляет серву регулятором. Регулятор - три коэффициента. Настраивайте по одному, по симптому:
| Что видно | Что крутить |
|---|---|
| Доводит медленно, отстаёт от аппарата | 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 меньше, проверьте балансировку и питание |
Покрутите коэффициенты до железа - аппарат летает вокруг, трекер ведёт его по вашим настройкам:
Результат раздела: трекер собран, настроен и держит антенну на аппарате весь полёт - связь на дальности направленной антенны.
Трекер из шагов 1-7 наводит антенну по координатам аппарата. А если GPS на борту нет, спутники пропали или аппарат маленький и без телеметрии? Антенну всё равно можно навести. Способов несколько, и сначала - главный факт, который решает выбор.
Антенне не нужна большая точность. Лепесток антенны на краю луча теряет 3 дБ, а ближе к оси - совсем мало. Промах в 5° у патча с лучом 60° стоит меньше 0,1 дБ, у спирали с лучом 30° - около 0,3 дБ. То есть ±5° - уже отлично.
| Способ | Точность | Дальность | Собрать самому |
|---|---|---|---|
| По сигналу двух антенн (RSSI) | ±3-5° | вся дальность видеоканала | да, проще всего: Arduino + два видеоприёмника + серва |
| По камере | доли градуса, пока аппарат виден | маленький дрон - десятки метров, с длинным объективом - сотни | да: Raspberry Pi + камера + пан-тилт |
| По маякам (UWB, ультразвук) и позиции без GPS | сантиметры | 50-100 м | площадка, посадка, помещение |
| По пеленгу фазы (UWB с двумя антеннами, Bluetooth AoA) | 2-5° | до ~100 м | только ближняя зона, на оценочных наборах |
| По инерциальным датчикам (IMU, счисление пути) | не годится | - | нет: ошибка больше 150 м за минуту |
Цифры - из источников в конце блока, дальности для камеры посчитаны по размеру аппарата и полю зрения объектива.
Как работает. Две одинаковые направленные антенны стоят на голове трекера и смотрят чуть в разные стороны: левая левее, правая правее. Аппарат ровно посередине - обе принимают одинаково. Ушёл вправо - правая принимает сильнее. Контроллер сравнивает уровни (RSSI - уровень принятого сигнала) и доворачивает голову, пока они не сравняются. В какую сторону крутить, видно сразу, качать антенну не нужно. Разница уровней зависит только от угла, а не от дальности, поэтому трекер одинаково работает на 100 м и на 5 км.
Что нужно:
| Что | Зачем |
|---|---|
| Два одинаковых видеоприёмника 5,8 ГГц с выходом RSSI (модули RX5808 или диверсити-приёмник с двумя выходами RSSI) | уровни сигнала левой и правой антенны. Одинаковые, из одной партии: иначе один «врёт» на пару дБ |
| Две одинаковые направленные антенны: патчи (луч ~60°) или спирали | левая и правая |
| Arduino Nano или Pro Mini | контроллер; готовый код ниже |
| Серва поворота: 9 г для лёгкой головы, 270° для тяжёлой (раздел 6) | азимут |
| Механика - как в шаге 3 выше: подшипник, балансировка | чтобы серва только крутила |
| UBEC на серву, 5 В на приёмники и Arduino | питание |
Сборка:
Прошивка. Готовый открытый код - 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° в секунду.
Калибровка, по шагам:
RSSI_MIN. Передатчик в 1-2 м - это RSSI_MAX.RSSI_OFFSET_*, чтобы левый и правый уровни сравнялись. Поменяйте приёмники местами и повторите: так видно, кто виноват в разнице - антенны или приёмники. Разбаланс в 1 дБ сдвигает «ноль» трекера примерно на 2,5°.SERVO_DIRECTION = -1.SERVO_MIN / SERVO_MAX - углы, где серва не упирается.DEADBAND больше. Отстаёт - меньше.Ограничения - честно:
Потренируйтесь до железа - окно Arduino IDE с #define прямо в коде, рядом голова трекера и аппарат. Развал, баланс, мёртвая зона и кривые:
Результат: голова трекера сама держит аппарат по сигналу, без GPS, телеметрии и компаса.
Как работает. Камера стоит на том же пан-тилт кронштейне, что и антенна, оси параллельны. Программа находит аппарат в кадре и считает, на сколько пикселей он ушёл от центра. Регулятор (PID - тот же, что в шаге 7) поворачивает сервы, пока аппарат не встанет в центр. Антенна смотрит туда же, куда камера. Работает и по азимуту, и по наклону.
Что нужно: Raspberry Pi 4 или 5, камера Raspberry Pi Camera Module 3 (поле зрения 66°) или HQ Camera с длинным объективом - для дальности, пан-тилт на сервах (раздел 15), плата PCA9685 для серв (раздел 22), отдельный UBEC на сервы.
Как найти аппарат в кадре - три варианта:
Логика программы, по шагам:
cx, cy.ex = 320 - cx, ey = cy - 240. Перевести в градусы: умножить на 0,103.Калибровка:
Дальность - честно. Дрон размером 25 см в кадре 640 px на 20 м занимает около 7 пикселей, на 100 м - меньше 2. Детектору нужно хотя бы 10-20 пикселей. Значит, маленький дрон камера широкого угла ведёт на десятки метров, с длинным объективом - на сотни. Самолёт с размахом 1,5-2 м виден в 6-8 раз дальше. Сколько кадров в секунду дают трекеры OpenCV на Raspberry Pi, мерьте на месте: задержка камеры и обработки ограничивает Kp.
Результат: антенна и камера сами держат аппарат в центре кадра, по азимуту и наклону, без радиосигнала и GPS.
Если аппарат уже летает без GPS по маякам (UWB - Pozyx, Nooploop; ультразвук - Marvelmind) или визуальной одометрии, трекер ArduPilot из шагов 1-7 работает и так. Аппарат отправляет свою позицию сообщением GLOBAL_POSITION_INT, а оно заполняется из оценки положения полётника, а не прямо из GPS (список поддерживаемых систем без GPS).
START_LATITUDE / START_LONGITUDE - её координаты (параметр как раз для трекера без GPS), ALT_SOURCE = 0 (барометр).Это площадка до 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 мВт вытащить километры.
Серва на борту может двигать не только камеру, но и антенну. Три задачи:
Всё это - только для линейной поляризации. Диполь, T-антенна, Moxon, Яги, линейный патч. Когда у борта и земли линии антенн перекрещены, сигнал теряет на практике 15-20 дБ - это десятки раз по мощности. Антенны круговой поляризации (клевер, спираль, RHCP/LHCP) крена почти не чувствуют, крутить их незачем. Что такое поляризация - наглядно в базе.
Что нужно: SG90 или MG90S, печатный держатель антенны на качалке, гибкий кабель антенны (пигтейл IPEX-SMA на тонком кабеле) с запасом длины, свободный тумблер на пульте.
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).Как проверить: наземная антенна вертикальная. Отойдите на 300-500 м, щёлкайте тумблером и смотрите LQ и RSSI в OSD. В положении «вертикаль» сигнал заметно лучше.
Результат: поляризация борта меняется с пульта под наземную антенну.
На крене 30° вертикальный диполь уже наклонён на 30° к наземному - часть сигнала теряется, на 90° в вираже - почти весь. Серва под антенной доворачивает её против крена, как подвес камеры.
ArduPilot, по шагам:
MNT1_TYPE = 1 (Servo), перезагрузка.SERVOn_FUNCTION = 8 (Mount1Roll). Вал сервы - вдоль корпуса, по оси крена.MNT1_ROLL_MIN = −45, MNT1_ROLL_MAX = 45 - или ход вашей механики.SERVOn_MIN / SERVOn_MAX - импульсы, при которых антенна наклонена ровно на −45° и +45°, по транспортиру.MNT1_DEFLT_MODE = 3 (RC Targeting) и не назначайте на крен канал пульта: цель по крену - ноль, то есть вертикаль.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 с минусом).
Результат: в виражах антенна смотрит вертикально, как наземная.
Патч или маленькая Яги на борту дают дальность больше штыря, но только если смотрят на оператора. ArduPilot умеет наводить подвес на точку взлёта (Home) - на пан-тилт кронштейн вместо камеры ставим антенну. Работает в Copter, Plane и Rover - значит, и на наземном роботе.
Что нужно: GPS с компасом на борту, пан-тилт кронштейн (раздел 15), серва поворота 270° (DS3240 или HV 35 кг 270°, раздел 6) - с ней антенна обходит больше направлений, серва наклона любая по моменту.
ArduPilot, по шагам:
MNT1_TYPE = 1, перезагрузка.SERVO9_FUNCTION = 6 (Mount1Yaw), наклона: SERVO10_FUNCTION = 7 (Mount1Pitch).MNT1_YAW_MIN / MNT1_YAW_MAX = −135 / 135 для сервы 270° (−90 / 90 для сервы 180°), MNT1_PITCH_MIN / MNT1_PITCH_MAX - по ходу механики наклона (раздел 15, шаг 3), например −45 / 20.SERVO9_MIN / SERVO9_MAX - импульсы, при которых кронштейн повёрнут ровно на −135° и +135° от носа. Так же для наклона. По транспортиру.MNT1_DEFLT_MODE = 6 (Home Location) - смотреть на точку взлёта.Как проверить на земле, без винтов:
Потренироваться до железа - тренажёр подвеса в разделе 15, задание 6: там же карта, точка взлёта и патч на серве.
Результат: направленная антенна на борту сама смотрит на оператора, куда бы аппарат ни повернул.
Материалы базы: выносные антенны для FPV, руководство по выбору FPV-антенн, мобильные роботы на ESP32, ArduPilot Rover 4.7.
Сервотестер, по шагам. Лучший способ проверить серву и выставить центр перед сборкой.
Arduino или ESP32 - когда нужна своя логика: таймер, датчик, кнопка, манипулятор.
Одна серва на Arduino Nano, по шагам:
// Серва повторяет крутилку. 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):
// 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 в автоматизации.
Как поставить качалку правильно, по шагам:
Крепление сервы: на винты через резиновые втулки из комплекта - они гасят вибрацию. Затягивайте до касания, не зажимайте втулки в блин. Серва в печатном корпусе - корпус из PETG или ABS.
Результат: качалка по центру, тяга под 90°, ход симметричный, всё затянуто и на фиксаторе.
Материалы базы: основы 3D-печати, технологии и материалы 3D-печати, КОМПАС-3D: создание моделей и печать.
| Симптом | Причина | Что сделать |
|---|---|---|
| Серва не двигается вообще | нет питания, нет общего минуса, вывод не назначен | мультиметр на разъём (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. 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 Гц, выше - только цифровым.
Здесь вопросы, с которыми люди реально приходят на форумы: наш voronfpv.ru, форумы ArduPilot, Betaflight, INAV, ExpressLRS, rcopen. Найдите свой симптом - дальше причина, как проверить и как исправить. Сообщения прошивок процитированы дословно по их исходникам.
Сначала - общий маршрут. Серва не работает - идите от сервы к пульту, звено за звеном:
«Серва стоит мёртво, даже в центр не встаёт».
- Причина: на разъёме нет питания; нет общего минуса 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.
«В 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».
channel_forwarding_start - по умолчанию это AUX1, канал Arm. На такие сервы MIN/MAX и галочки не действуют. На нашем форуме этот совет «обязательно включить» встречается - для одной-двух серв он вреден.feature - есть ли CHANNEL_FORWARDING; get channel_forwarding_start.feature -CHANNEL_FORWARDING, save, дальше галочки во вкладке Servos. Нужна третья серва - set channel_forwarding_start = 8 (канал 9, счёт с нуля), save: серва 3 пойдёт от канала 9, серва 4 - от 10.«Серва ходит от стика, а не от тумблера».
- Причина: галочка стоит в колонке 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 на своей.
«Серва не реагирует на 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), а не реверсируйте сервы.
«В Servo Output импульс меняется, а серва стоит».
SERVOn_FUNCTION.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 в режиме 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° не останавливается».
SERVO_YAW_TYPE = 2.«Уходит в сторону сама», «трещит, качалка болтается». Раздел 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.
Результат раздела: по симптому вы находите причину и чините её сами, не дожидаясь ответа на форуме. Не нашли свой вопрос - задайте его на форуме или в общем чате: мы добавим его сюда.
Распечатайте карточку и положите в кейс. При установке - левая колонка, перед каждым вылетом - правая.
Берегите себя!