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

PID и Rates … ↩ 7.13 m3

mod. Пятница, 09 октября 2026 09:26 . См. 138

Betaflight без GUI · Урок 7 из 13 · Модуль 3. Полётная настройка

Вся вкладка PID Tuning в командах: P/I/D/F по осям, DMin и DMax, Feedforward, I-term relax, TPA, динамический холостой ход, rates и все фильтры.

Ключевой нюанс — профили: параметры set применяются к текущему профилю. Выберите profile 0 или rateprofile 0 до правки. Имена параметров меняются между версиями — проверяйте через get.

Содержание

1. Цели урока

Общий экран PID-настройки Betaflight 4.5.4

Вкладка PID Tuning в конфигураторе — самая большая: десятки ползунков и выпадающих списков. В CLI ей соответствует столько же параметров, и все они доступны без графики.

Как читать таблицы: Колонка «Практический смысл» поясняет, что изменится при настройке и в чём компромисс. Это не дословные подсказки «?» из GUI и не готовые значения для любого аппарата. В квадратных скобках приведены только подписи, подтверждённые скриншотом этой вкладки.

После этого урока вы будете понимать:

  • зачем нужны профили и как их переключать
  • все коэффициенты P, I, D, F по трём осям
  • что дают DMin, DMax, Feedforward и I-term relax
  • как работает TPA и зачем снижать PID на полном газе
  • чем RC Rate, Super Rate и Expo отличаются и где задаются ограничения
  • какие бывают фильтры и чем статический отличается от динамического
  • что такое RPM-фильтры и упрощённая настройка
↑ К оглавлению

2. Профили

Betaflight хранит несколько независимых наборов настроек.

ЧтоКоманда выбораСколько
PID-профиль profile 0 … profile 2 3
Профиль rates rateprofile 0 … rateprofile 5 6
Профиль батареи battery_profile 0 … battery_profile 2 3, только с версий 2026.x
Параметры применяются к текущему профилю: Прежде чем менять PID, выберите профиль: profile 0. Прежде чем менять rates — rateprofile 0. Иначе правите не тот набор. Команда profile без номера покажет, какой профиль активен сейчас.
Профиль батареи — не везде: Команда battery_profile есть только в прошивках ветки 2026.x. В 4.4, 4.5 и 2025.12 на неё приходит ###ERROR IN input: UNKNOWN COMMAND — там настройки батареи не разбиты по профилям. Убедиться: battery_profile, либо посмотреть полный список команд — help.
Профили в выводе diff: В diff all настройки сгруппированы блоками profile 0, rateprofile 0 — но только если они отличаются от заводских. diff печатает раздел лишь тогда, когда внутри есть хотя бы одно изменённое значение: прошивка проверяет каждый блок и пропускает те, что полностью совпадают с умолчаниями. Поэтому на свежем полётнике с заводскими PID блоков профилей в выводе не будет вовсе — это нормально, а не признак их отсутствия. Достаточно выполнить set p_roll = 45, и в diff all появится строка # profile 0 с этой настройкой. Полный вывод со всеми профилями и всеми значениями даёт dump all.
↑ К оглавлению

3. Коэффициенты P, I, D, F

В графическом интерфейсе коэффициенты сведены в таблицу Basic/Acro: колонки [Proportional], [Integral], [D Max], [Derivative], [Feedforward] и строки [ROLL], [PITCH], [YAW]. Часть CLI-имён строится по правилу <коэффициент>_<ось>; у нижнего уровня D имя особое:

Поле GUIRoll [ROLL]Pitch [PITCH]Yaw [YAW]Практический смысл
P [Proportional] p_roll p_pitch p_yaw Исправляет текущую ошибку угловой скорости: больше P — жёстче следование команде, но выше риск быстрых колебаний.
I [Integral] i_roll i_pitch i_yaw Накапливает длительную ошибку: удерживает заданное вращение при ветре и дисбалансе; избыток может дать медленные колебания.
D Max [D Max] d_roll d_pitch d_yaw Верхний уровень D при активном динамическом демпфировании; больше — сильнее гашение, но чувствительнее к вибрации и нагреву моторов.
D [Derivative] d_min_roll d_min_pitch d_min_yaw Нижний уровень D в спокойном полёте (CLI-имя d_min_*). Должен быть ниже D Max: иначе динамическое усиление D не включится.
F [Feedforward] f_roll f_pitch f_yaw Упреждение от движения стика: ускоряет начало манёвра, но чрезмерное значение вызывает переброс и резкий отклик.
Почему D и D Max выглядят наоборот: На показанном экране [D Max] задаёт d_roll, а [Derivative] — d_min_roll. Это не опечатка: имена CLI говорят о верхнем и нижнем уровнях D, а не повторяют подписи таблицы. Например, крен 40/30 означает d_roll = 40 и d_min_roll = 30. При d_min_roll = 0 динамическое демпфирование по этой оси не применяется.

Пример для крена [ROLL] с числами из показанного GUI (не универсальный тюн):

# profile 0
# set p_roll = 45
# set i_roll = 80
# set d_roll = 40
# set d_min_roll = 30
# set f_roll = 120
Не трогайте, если летает: Заводские значения PID в большинстве случаев хороши. Правьте только при реальной проблеме: звон, перегрев моторов, сползание, «ватность» отклика.
↑ К оглавлению

4. DMin и DMax

D Max, Derivative и динамическое демпфирование

Динамическое D работает между двумя уровнями: [Derivative] — нижний уровень при спокойном полёте, [D Max] — верхний при быстрых изменениях угловой скорости или команды стика. Это части одного механизма, а не два взаимоисключающих способа настройки.

Элемент в GUICLIПрактический смысл
[D Max] [ROLL] set d_roll = 40 Верхний предел D по крену: помогает гасить колебания на резких манёврах; повышение усиливает и чувствительность к шуму.
[Derivative] [ROLL] set d_min_roll = 30 Нижний уровень D по крену: уменьшает постоянную нагрузку на моторы; 0 отключает динамическое переключение по этой оси.
[D Max] [PITCH] set d_pitch = 46 Верхний уровень D по тангажу; подбирается отдельно от крена.
[Derivative] [PITCH] set d_min_pitch = 34 Нижний уровень D по тангажу: должен быть меньше d_pitch.
[D Max] [YAW] / [Derivative] [YAW] set d_yaw = 0 / set d_min_yaw = 0 На показанном экране оба значения равны нулю: D по рысканью не используется.
[Коэффициент усиления] (блок «Динамическое демпфирование») set d_max_gain = 37 Определяет, насколько охотно D поднимается от нижнего уровня к верхнему при движении/возмущениях; не подменяет d_roll и d_min_roll.
[Коэффициент опережения] (блок «Динамическое демпфирование») set d_max_advance = 20 Регулирует долю реакции на изменение команды стика: больше — раньше поднимается D при резком вводе команды.
Условие для динамического D: По исходникам 4.5.4 механизм активен, только когда 0 < d_min_roll < d_roll (аналогично для других осей). Установка d_min_roll = 40 при d_roll = 30 отключит динамическое изменение D, а не усилит его.
↑ К оглавлению

5. Feedforward

Поля Feedforward в конфигураторе

В графическом интерфейсе этому соответствует блок [Feedforward] в секции «Настройки PID-контроллера».

Команды CLI (числа взяты из показанного GUI и не служат готовым тюном):

Поле GUI (блок «Feedforward»)CLIПрактический смысл
[Feedforward] в строках ROLL / PITCH / YAW set f_roll = 120 Упреждение от движения стика: выше значение — быстрее начальный отклик, но при избытке возможен переброс; 0 убирает вклад FF этой оси.
[Подавление дрожания] set feedforward_jitter_factor = 7 Подавляет малые скачки FF от микродвижений стика и неточных RC-пакетов; слишком сильное подавление скрывает и мелкие намеренные коррекции.
[Сглаживание] set feedforward_smooth_factor = 25 Сглаживает изменение команды до расчёта FF: уменьшает рывки, но может сделать начало манёвра менее отчётливым.
[Усреднение] set feedforward_averaging = OFF Усредняет несколько входящих RC-пакетов: подавляет неровный сигнал ценой дополнительного запаздывания; OFF — без усреднения.
[Усиление] set feedforward_boost = 15 Прибавляет FF при ускорении стика: быстрый старт вращения, но при избытке — переброс и дрожание на резких движениях.
[Предел макс. значение] set feedforward_max_rate_limit = 90 Ограничивает FF, когда требуемая скорость близка к максимальной: уменьшает риск переброса у края стика; код применяет это к крену/тангажу, не к yaw.
[Переход] set feedforward_transition = 0 Ослабляет FF вблизи центра стика, плавно возвращая его при отклонении; это не переход между коэффициентами P и FF.

Пример значений Feedforward в CLI

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

6. I-term: relax, windup, rotation

Ослабление и вращение I

В интерфейсе настройки сгруппированы в блоки [Ослабление I] и [Вращение I]:

Поле GUI / параметр CLICLIПрактический смысл
[Оси] (блок «Ослабление I») set iterm_relax = RP Ограничивает НАРАСТАНИЕ I при резкой команде: RP — крен и тангаж, RPY — ещё и yaw, *_INC допускает уменьшение уже накопленного I. Не сбрасывает I в ноль.
[Тип] (блок «Ослабление I») set iterm_relax_type = SETPOINT Выбирает способ ослабления прироста I: SETPOINT опирается на резкость команды, GYRO также учитывает расхождение с реальной скоростью вращения.
[Отсечка] (блок «Ослабление I») set iterm_relax_cutoff = 15 Частота среза фильтра команды для I-term relax: меняет, какие движения стика считаются быстрыми; не является величиной I-коэффициента.
[Вращение I] set iterm_rotation = OFF При повороте аппарата переносит накопленный вектор I между осями; полезно при сложных манёврах, это не повышение I.
I-term Windup set iterm_windup = 100 Порог по выходу PID, выше которого рост I ограничивается: снижает накопление интегратора при насыщении моторов.
I-term Limit set iterm_limit = 400 Ограничивает абсолютный вклад I в выход регулятора; защита от чрезмерного накопления, не то же самое, что iterm_windup.
Первое, что стоит включить: На большинстве современных сборок iterm_relax = RP включён по умолчанию и заметно улучшает поведение на резких движениях.
↑ К оглавлению

7. TPA — снижение PID на газе

Параметры TPA

В интерфейсе этому соответствует блок [TPA]. На полном газу аппарат становится избыточно резким и начинает звенеть — TPA уменьшает коэффициенты по мере роста газа:

Поле GUI (блок «TPA»)CLIПрактический смысл
[Режим TPA] set tpa_mode = D Определяет затронутые составляющие: D ослабляет только демпфирование, PD — и демпфирование, и точность P при высоком газе.
[Коэффициент TPA (%)] set tpa_rate = 65 Задаёт максимальное ослабление выбранных составляющих к верхнему краю газа: 65 означает сильное ослабление, а не рекомендуемое значение для любого дрона.
[Порог TPA (μs)] set tpa_breakpoint = 1350 Точка на кривой газа в мкс, после которой TPA нарастает; ниже порога обычный высокогазовый TPA не действует.
TPA Low Rate set tpa_low_rate = 20 Дополнительное ослабление на низком газе: помогает при низкогазовых колебаниях, но может ухудшить удержание траектории.
TPA Low Breakpoint set tpa_low_breakpoint = 1050 Ниже этого значения действует низкогазовая часть TPA; это иной порог, чем tpa_breakpoint для верхней части.
TPA Low Always set tpa_low_always = OFF Выбирает, продолжать ли низкогазовый TPA после первого перехода выше нижнего порога; это не включение всего TPA.
↑ К оглавлению

8. Компенсации и ограничения

Компенсации и ограничения PID

Параметры из блоков [Антигравити], [Параметры газа и моторов] и [Другие настройки]:

Поле GUI / параметр CLICLIПрактический смысл
[Коэффициент усиления] (блок «Антигравити») set anti_gravity_gain = 8000 На резких изменениях газа временно усиливает I, чтобы аппарат не терял заданную ориентацию; CLI 8000 соответствует показу 8.0 в GUI.
Anti Gravity P Gain set anti_gravity_p_gain = 0 Добавляет временный P при изменении газа и малом отклонении стика; не заменяет основной p_roll/p_pitch.
Anti Gravity Cutoff set anti_gravity_cutoff_hz = 5 Частота фильтра изменения газа для антигравитации: определяет, насколько быстрые изменения газа запускают коррекцию.
[Компенсация просадки аккумулятора (%)] set vbat_sag_compensation = 0 Меняет выход моторов при падении напряжения, чтобы тяга ощущалась стабильнее на протяжении разряда; требует корректного измерения напряжения.
[Линеаризация тяги (%)] set thrust_linear = 0 Корректирует нелинейную зависимость тяги от команды моторам; влияет на моторное управление, а не на форму кривой стика газа.
[Ускорение газа] set throttle_boost = 5 Кратковременно добавляет газ при быстром движении стика; избыток даёт рывки вместо ровного набора тяги.
[Ограничение выхода на двигатель] set motor_output_limit = 100 Ограничивает максимальную команду моторам; снижает пиковую мощность, но не исправляет перегрев от вибраций/неверных PID.
[Значение динамического холостого хода [* 100 об/мин]] set dyn_idle_min_rpm = 0 Целевая нижняя граница оборотов при нулевом газе: 20 означает 2000 об/мин; нужен двусторонний DShot и данные оборотов.
[Абсолютный контроль] set abs_control_gain = 0 Дополнительная коррекция длительного расхождения между желаемым и фактическим вращением; без измерений не стоит использовать как лечение любого переброса.
[Интегрированный Yaw] set use_integrated_yaw = OFF Меняет способ формирования выхода регулятора yaw: интегрирует команду по времени; экспериментальная настройка, не равна i_yaw.
[Акро тренер лимит угла] set acro_trainer_angle_limit = 20 Граница наклона, при приближении к которой тренерский режим ограничивает дальнейшее отклонение; в обычном Acro не действует.
Crash Recovery set crash_recovery = ON Поведение после распознанного удара/падения: автоматическое восстановление либо сигнал/разоружение; проверять только безопасно, без винтов.
↑ К оглавлению

9. Динамический холостой ход

Dynamic Idle удерживает минимальные обороты моторов, чтобы они не «захлёбывались» на нулевом газу. Работает только при включённом bidirectional DShot.

# set dshot_bidir = ON
# set dyn_idle_min_rpm = 20
# set dyn_idle_p_gain = 50
# set dyn_idle_i_gain = 50
# set dyn_idle_d_gain = 50
# set dyn_idle_max_increase = 150
# set dyn_idle_start_increase = 50
ПараметрЧто делает
dyn_idle_min_rpm Целевой минимум по телеметрии ESC: 20 × 100 = 2000 об/мин; 0 отключает динамический idle. Требует bidirectional DShot.
dyn_idle_p_gain / i_gain / d_gain P реагирует на текущую ошибку оборотов, I — на длительное отставание, D — на быстрое изменение; без логов обычно не менять.
dyn_idle_max_increase Предел дополнительного моторного выхода, который регулятор idle может запросить для удержания нижних оборотов; это не процент газа на стике.
dyn_idle_start_increase Ограничение добавки в начале работы регулятора до полного вступления Airmode; не устанавливает целевые обороты.
↑ К оглавлению

10. Rates

Вкладка Rates: Actual и сравнение пяти типов кривых

[Настройки профиля Rates] определяют, какую угловую скорость контроллер запросит при отклонении стиков. На скриншоте выбран [Тип коэффициентов] Actual и [Rate-профиль 1]. Первому профилю в CLI соответствует rateprofile 0. Имена CLI по осям одинаковы для разных типов rates, но смысл и масштаб чисел отличаются.

Поле на скриншоте (Actual)Roll [Крен [A]]Pitch [Тангаж [E]]Yaw [Рыск.[R]]Практический смысл
[Чувствительность по центру] roll_rc_rate pitch_rc_rate yaw_rc_rate Наклон кривой около центра: на скриншоте 70 град/с даёт CLI 7 (число CLI умножается на 10).
[Максимальный коэффициент] roll_srate pitch_srate yaw_srate Целевая угловая скорость на краю стика: на скриншоте 670 град/с даёт CLI 67. В режиме Actual это НЕ Super Rate из типа Betaflight.
[Экспонента] roll_expo pitch_expo yaw_expo Меняет форму между центром и краем, не изменяя эти две крайние характеристики; GUI 0.00 соответствует CLI 0.
Числа Actual в CLI: В Actual скорость около центра равна rc_rate × 10 град/с, а при srate ≥ rc_rate край стика даёт srate × 10 град/с. На снимке это условие выполнено. Числа 70 и 670 нельзя буквально записать в CLI-параметры roll_rc_rate и roll_srate.

При нулевой экспоненте, как на скриншоте, и относительном положении стика \(x\in[-1,1]\) отклик в град/с можно проверить по формуле:

\[\omega(x)=C x+(M-C)x|x|,\quad C=10r_c,\quad M=10r_s\]

Для значений крена на скриншоте при половине хода стика: \(\omega(0{,}5)=70\cdot0{,}5+(670-70)\cdot0{,}25=185\) град/с. Столбец [Макс. скор. град/сек] на экране — вычисленный результат, а не отдельное поле для ввода roll_rate_limit.

# rateprofile 0
# set rates_type = ACTUAL
# set roll_rc_rate = 7
# set pitch_rc_rate = 7
# set yaw_rc_rate = 7
# set roll_srate = 67
# set pitch_srate = 67
# set yaw_srate = 67
# set roll_expo = 0
# set pitch_expo = 0
# set yaw_expo = 0
Это запись показаний, не готовый тюн: Команды выше воспроизводят числа показанного снимка на выбранном rateprofile 0. Перед изменениями проверьте активный профиль через rateprofile и сохраните текущий diff all.

Пять типов Rates: как читать сравнительный скриншот

На нижней полосе большого скриншота показаны другие типы Rates при настройке крена. Прошивка хранит те же три CLI-поля roll_rc_rate, roll_srate, roll_expo, но обрабатывает их пятью разными формулами. Приведены числа именно этих снимков, а не таблица взаимозаменяемых тюнов:

[Тип коэффициентов]GUI, крен: три видимых числаCLI: rc_rate / srate / expoКрай стика и смысл
Actual 70 / 670 / 0.00 7 / 67 / 0 670 град/с: первый параметр задаёт отклик у центра, второй — скорость у края.
Betaflight 1.00 / 0.70 / 0.00 100 / 70 / 0 Около 667 град/с: RC Rate задаёт базовую чувствительность, Rate усиливает отклик к краю.
Raceflight 370 / 80 / 50 37 / 80 / 50 666 град/с: поле [Acro+] влияет на рост скорости к краю, экспонента 50 меняет форму кривой.
KISS 1.00 / 0.70 / 0.00 100 / 70 / 0 Около 667 град/с: при показанных нулевой экспоненте и rc_rate = 100 кривая совпадает с Betaflight; это частный случай.
Quick 1.00 / 670 / 0.00 100 / 67 / 0 670 град/с: близкие к Betaflight значения первого поля, но второе — максимальная скорость, а не Super Rate.

Проверка различий: при половине хода стика крена и показанных настройках Actual запрашивает около 185 град/с, Raceflight — 162 град/с, Betaflight и KISS — по 154 град/с, Quick — около 154 град/с. При этом у края все пять примеров показывают близкие 666–670 град/с. Расчёт выполнен по функциям Rates прошивки 4.5.4; это не результат замера моторов.

Три числа в каждой строке идут слева направо по полям GUI. У Raceflight это [Коэффициент], [Acro+], [Экспонента]; у KISS — [RC Rate], [Rate], [Кривая RC]. Поля под рисунком помогают сопоставить числа, но не превращают разные формулы в одинаковую настройку.

Похожая максимальная скорость — не та же кривая: Совпадение скорости у края не гарантирует одинаковый отклик между центром и краем: Actual и Quick на снимке оба дают 670 град/с, но формулы разные. При данных значениях Betaflight и KISS с нулевой экспонентой дают одинаковую кривую — это частный случай, не правило для всех настроек. Нельзя переключить только rates_type с BETAFLIGHT на ACTUAL и ждать прежней управляемости. Сначала сохраните diff all.

Если выбран тип BETAFLIGHT

Отдельный фрагмент GUI: RC Rate, Rate и RC Expo для типа Betaflight

На отдельном фрагменте GUI для rates_type = BETAFLIGHT видны [RC Rate], [Rate] и [RC Expo]. Отдельной надписи Super Rate на этом скриншоте нет: так называют действие [Rate], среднего столбца. Для крена это CLI-параметр roll_srate (для тангажа и рысканья — pitch_srate и yaw_srate). Те же имена CLI имеют другую интерпретацию при выборе Actual. Не переносите сюда числа Actual из верхней части скриншота:

Поле GUI BetaflightRollPitchYawПрактический смысл
[RC Rate] roll_rc_rate pitch_rc_rate yaw_rc_rate Значение 1.00 в GUI означает 100 в CLI; задаёт базовую чувствительность, а не скорость у центра в град/с.
[Rate] roll_srate pitch_srate yaw_srate Среднее поле GUI: 0.70 соответствует 70 в CLI. В типе BETAFLIGHT его действие называют Super Rate — усиление скорости ближе к краю стика.
[RC Expo] roll_expo pitch_expo yaw_expo Значение 0.00 в GUI означает 0 в CLI; большая экспонента смягчает отклик у центра.
Поле на скриншоте / параметр вне скриншотаCLIПрактический смысл
[Тип коэффициентов] set rates_type = ACTUAL Выбирает именно ту формулу, которую показывает скриншот. BETAFLIGHT, ACTUAL, QUICK и другие варианты не взаимозаменяемы.
Не на скриншоте: Rate Limits (не [Макс. скор. град/сек]) set roll_rate_limit = 1998 Жёсткий предел командуемой угловой скорости, град/с; отдельно для pitch и yaw. Число 670 на скриншоте — расчёт кривой Actual, а не этот предел.
Не на скриншоте: Rates Expo (Quick) set quickrates_rc_expo = OFF Форма экспоненты для типа QUICK; в Actual не заменяет roll_expo и остальные осевые expo.
[Ограничение газа] set throttle_limit_type = OFF Способ ограничения: SCALE сжимает диапазон газа, CLIP срезает верх; OFF не ограничивает.
[Ограничение газа (%)] set throttle_limit_percent = 100 Процент ограничения при SCALE/CLIP; 100 на скриншоте сохраняет полный диапазон.
[Газ, средняя точка] set thr_mid = 50 GUI 0.5 соответствует CLI 50: центр кривой экспоненты газа; не ограничивает максимальную тягу.
[Газ, экспонента] set thr_expo = 0 Меняет форму кривой газа вокруг средней точки; 0 на скриншоте даёт линейную кривую.
Не на скриншоте: Throttle Boost set throttle_boost = 5 Краткая прибавка газа при резком движении стика; описана в разделе компенсаций и не отображается на этом скриншоте.
Не на скриншоте: Throttle Boost Cutoff set throttle_boost_cutoff = 15 Частота фильтра краткой прибавки throttle_boost; не является ограничением газа.
Как найти параметры своей оси: get roll_ покажет roll_rc_rate, roll_srate, roll_expo и roll_rate_limit. Сначала проверьте rates_type и выбранный профиль через rateprofile, иначе числа легко истолковать неверно.
↑ К оглавлению

11. Фильтры

Настройки фильтров Betaflight 4.5.4: Gyro, D Term, notch и RPM

На скриншоте [Настройки фильтров] блок гироскопа слева не зависит от выбранного PID-профиля, а блок D Term справа — зависит. Числа в таблицах ниже взяты со скриншота выше (для пояснения параметров), и это не готовый набор фильтров для конкретного аппарата. Lowpass подавляет широкий диапазон высокочастотного шума, notch — узкую область вокруг резонанса, RPM-notch следует за оборотами моторов. НЕ ПРИМЕНЯТЬ НИ К КАКОМУ ДРОНУ!

Поле GUI: Gyro НЧ фильтрыCLIПрактический смысл
[Множитель фильтров гироскопа] set simplified_gyro_filter_multiplier = 100 Значение 100 отображается как 1.00. В упрощённой настройке уменьшение множителя снижает частоты среза (больше подавление, больше задержка); действует на гироскоп независимо от PID-профиля.
[Фильтр низких частот гироскопа - 1 «Lowpass»] [Режим: Динамический] [Мин. частота среза] / [Макс. частота среза] set gyro_lpf1_dyn_min_hz = 250 / set gyro_lpf1_dyn_max_hz = 500 Активный на скриншоте динамический LPF1: срез меняется в пределах 250–500 Гц. Эти значения относятся к гироскопу, не к D Term.
[Тип фильтра] (Gyro LPF1) set gyro_lpf1_type = PT1 Тип первого каскада гироскопа: GUI показывает PT1; другие видимые варианты BIQUAD, PT2, PT3 дают иное сочетание подавления и задержки.
[Фильтр низких частот гироскопа - 2 «Lowpass»] [Статическая частота среза] set gyro_lpf2_static_hz = 500 Второй каскад гироскопа со статической частотой 500 Гц; работает отдельно от динамического первого каскада.
[Тип фильтра] (Gyro LPF2) set gyro_lpf2_type = PT1 Тип второго каскада; на снимке PT1.
[Статический] режим Gyro LPF1 (не выбран) set gyro_lpf1_dyn_min_hz = 0 / set gyro_lpf1_static_hz = 250 Пример переключения на статический режим: при действующем динамическом LPF1 значение static_hz не задаёт его рабочую частоту.
Не на этом скриншоте: аппаратный LPF set gyro_hardware_lpf = NORMAL Аппаратная фильтрация внутри датчика; не путать с программными каскадами Gyro LPF1/LPF2.

D Term и фильтр рысканья

Поле GUI: D Term / YawCLIПрактический смысл
[Множитель фильтров D-Term] set simplified_dterm_filter_multiplier = 100 Значение 100 отображается как 1.00. Упрощённый множитель частот фильтра D Term относится к выбранному PID-профилю, а не ко всем профилям сразу.
[D-term фильтр низких частот - 1 «Lowpass»] [Режим: Динамический] [Мин. частота среза] / [Макс. частота среза] set dterm_lpf1_dyn_min_hz = 75 / set dterm_lpf1_dyn_max_hz = 150 На снимке динамический срез D Term меняется от 75 до 150 Гц. Слишком низкая частота добавляет задержку демпфирования; слишком высокая пропускает шум.
[Динамическая экспоненциальная кривая] set dterm_lpf1_dyn_expo = 5 Меняет форму перехода между минимальной и максимальной частотами D Term LPF1; это не Expo стика Rates.
[Тип фильтра] (D Term LPF1) set dterm_lpf1_type = PT1 Тип первого каскада D Term на снимке — PT1.
[D-term фильтр низких частот - 2 «Lowpass»] [Статическая частота среза] set dterm_lpf2_static_hz = 150 Дополнительный статический каскад D Term с частотой 150 Гц.
[Тип фильтра] (D Term LPF2) set dterm_lpf2_type = PT1 Тип второго каскада D Term на снимке — PT1.
[НЧ фильтр по рысканию] [Статическая частота среза] set yaw_lowpass_hz = 100 Отдельный lowpass для P-составляющей рысканья (Yaw), не третий каскад фильтра гироскопа.
[Статический] режим D Term LPF1 (не выбран) set dterm_lpf1_dyn_min_hz = 0 / set dterm_lpf1_static_hz = 75 Пример альтернативного режима: при активном динамическом LPF1 static_hz не задаёт его текущий срез.
Как отличить динамический режим от статического в CLI: Для LPF1 ненулевое gyro_lpf1_dyn_min_hz или dterm_lpf1_dyn_min_hz включает динамическую настройку соответствующего первого каскада. При переходе на статический режим обнулите нужный *_dyn_min_hz и задайте *_static_hz. Перед копированием цифр убедитесь, что выбран именно тот режим в GUI.

Режекторные фильтры

Поле GUICLIПрактический смысл
[Режекторный фильтр гироскопа - 1 «Notch»] [Центральная частота] / [Частота среза] set gyro_notch1_hz = 400 / set gyro_notch1_cutoff = 300 Первый фиксированный notch гироскопа: подавляет полосу вокруг измеренного резонанса; 400/300 Гц — значения экрана, не универсальная рекомендация.
[Режекторный фильтр гироскопа - 2 «Notch»] [Центральная частота] / [Частота среза] set gyro_notch2_hz = 400 / set gyro_notch2_cutoff = 300 Независимый второй notch гироскопа. Наличие двух одинаковых пар на экране не означает, что аппарату нужны два одинаковых фильтра.
[D Term режекторный фильтр] [Центральная частота] / [Частота среза] set dterm_notch_hz = 260 / set dterm_notch_cutoff = 160 Отдельный фиксированный notch в D-канале; полезность проверяют по Blackbox и нагреву моторов.
[Динамический Режекторный фильтр] [Количество режекторных фильтров] set dyn_notch_count = 3 До трёх отслеживаемых пиков вибраций; 0 отключает динамический notch. Это не feature-команда.
[Коэффициент Q (×100)] set dyn_notch_q = 300 Добротность динамических notch: чем больше число, тем уже подавляемая полоса; в CLI вводится 300, без деления на 100.
[Мин. частота] / [Макс. частота] (динамический notch) set dyn_notch_min_hz = 100 / set dyn_notch_max_hz = 600 Диапазон поиска меняющихся вибрационных пиков на снимке — 100–600 Гц.

RPM-фильтры

[Gyro RPM фильтр] строит режекторы по телеметрии оборотов ESC; переключатель GUI сам по себе недостаточен — нужен работающий bidirectional DShot.

Поле GUI / параметр вне снимкаCLIПрактический смысл
[Гармоники] (Gyro RPM фильтр) set rpm_filter_harmonics = 3 Число гармоник каждого мотора, для которых строятся notch-фильтры; 0 отключает RPM-фильтрацию.
[Мин. частота] (Gyro RPM фильтр) set rpm_filter_min_hz = 100 Нижняя граница RPM-notch, показанная на скриншоте.
Не показано: RPM Filter Q set rpm_filter_q = 500 Добротность RPM-notch; значение — пример CLI, не число с данного скриншота.
Не показано: RPM Filter Fade Range set rpm_filter_fade_range_hz = 50 Плавное ослабление RPM-notch возле нижней границы; значение — пример CLI.
Не показано: RPM Filter LPF set rpm_filter_lpf_hz = 150 Сглаживание входных данных RPM перед размещением notch; не является lowpass гироскопа.
Не переносите фильтры вслепую: Для частот статических notch нужны данные о резонансах именно вашего дрона. Уменьшение фильтрации без проверки Blackbox и температуры моторов может привести к высокочастотным колебаниям. Проверяйте свои значения через get gyro_lpf, get dterm_lpf, get dyn_notch, get rpm_filter.
↑ К оглавлению

12. Упрощённая настройка

PID_adjustment_sliders_1fe5a.png

В GUI этой функции соответствует левый блок [Ползунки настройки PID]. Вместо правки десятков коэффициентов можно двигать «крупные» ползунки — прошивка сама пересчитает P, I, D, DMax, Feedforward и фильтры:

Ползунок GUI / параметр CLICLIПрактический смысл
[Режим:] (RPY) set simplified_pids_mode = RPY Выбирает оси, на которые распространяются ползунки: RP — крен/тангаж, RPY — также yaw, OFF — без упрощённого пересчёта.
[Мастер-множитель:] (1.00) set simplified_master_multiplier = 100 Общий множитель упрощённого тюна: повышение одновременно меняет несколько связанных коэффициентов, поэтому результат нужно смотреть в фактических PID.
[Трекинг: P & I Gains] (1.00) set simplified_pi_gain = 100 Увеличивает слежение за командой (P) и удержание при постоянной нагрузке (I); не изменяет FF тем же ползунком.
[Демпфирование: D Gains] (1.00) set simplified_d_gain = 100 Сдвигает базовое демпфирование: больше подавляет колебания, но может усилить шум и нагрев моторов.
[Динамическое демпфирование: D Max] (1.00) set simplified_dmax_gain = 100 Отдельно меняет верхний предел динамического D, сохраняя зависимость от общего демпфирования.
[Отзывчивость стиков: FF Gains] (1.00) set simplified_feedforward_gain = 100 Меняет упреждение на движение стика: выше — быстрее начальный отклик, выше риск переброса.
[Дрейф - Колебание: I Gains] (1.00) set simplified_i_gain = 100 Отдельно меняет удержание при продолжительной нагрузке; помогает при дрейфе, но не устраняет вибрацию.
[Демпфирование по тангажу: Pitch:Roll D] (1.00) set simplified_pitch_d_gain = 100 Настраивает отношение демпфирования тангажа к крену; полезно, если механика/масса аппарата по этим осям отличается.
[Трекинг по тангажу: Pitch:Roll P I & FF] (1.00) set simplified_pitch_pi_gain = 100 Меняет отношение отклика тангажа к крену сразу по P, I и FF; это не изменение всех осей одновременно.
Только CLI: множитель фильтра гироскопа set simplified_gyro_filter_multiplier = 100 Масштаб частот среза фильтров гироскопа в упрощённом режиме: выше — меньше задержка и меньше подавление шума.
Только CLI: множитель фильтра D set simplified_dterm_filter_multiplier = 110 Масштаб частот среза D-term lowpass в упрощённом режиме: выше — отзывчивее D, но чувствительнее к вибрации.
Только CLI: упрощённый фильтр гироскопа / D set simplified_gyro_filter = ON / set simplified_dterm_filter = ON Включает расчёт фильтров из упрощённых ползунков; OFF оставляет фильтры для ручной настройки. Это не автоматический анализ Blackbox.
Сначала сохраните текущий тюн: Упрощённая настройка перезаписывает обычные коэффициенты. Перед включением сделайте diff all и сохраните вывод.
↑ К оглавлению

13. Выравнивание: Angle и Horizon

alignment_horizon_angle_66e5e.png

В интерфейсе эти поля расположены непосредственно под таблицей Basic/Acro (строки [Угол] и [Горизонт]). Они работают только при включённом самовыравнивании (режимы ANGLE и HORIZON):

Поле GUI / параметр CLICLIПрактический смысл
[Угол] [Скорость наклона] (50) set angle_p_gain = 50 Насколько быстро ANGLE исправляет наклон; в Acro не действует. Повышение делает возврат энергичнее.
[Макс. угол наклона] (60) set angle_limit = 60 Предел наклона в ANGLE; это не предел скорости вращения и не ограничение для Acro.
Angle Feedforward set angle_feedforward = 50 Даёт опережение на команду наклона в ANGLE; не является f_roll из режима Acro.
Angle Earth Ref set angle_earth_ref = 100 Влияние ориентации относительно земли на управление самовыравниванием; без необходимости оставьте значение профиля.
[Горизонт] [Скорость наклона] (75) set horizon_level_strength = 75 Возврат к горизонту при небольших отклонениях стика; ближе к краю стика самовыравнивание ослабевает.
[Горизонт] [Переход] (75) set horizon_limit_degrees = 75 Угол наклона, при приближении к которому HORIZON ослабляет выравнивание; это не значение rate.
Horizon Delay set horizon_delay_ms = 500 Задержка перед возвратом горизонта после активной команды; помогает избежать резкого возврата, но удлиняет его ожидание.
Level Race Mode set level_race_mode = OFF OFF / ON — режим для гонок
↑ К оглавлению

14. Пример полного сценария

Это отдельный пример rates типа BETAFLIGHT. Числа внутри разных типов нельзя переносить по аналогии. Перед применением сделайте diff all.

# profile 0
# set p_roll = 45
# set i_roll = 95
# set d_roll = 30
# set f_roll = 90
# set p_pitch = 47
# set i_pitch = 97
# set d_pitch = 32
# set f_pitch = 95
# set d_min_roll = 25
# set d_min_pitch = 27
# set iterm_relax = RP
# set tpa_rate = 20
# set tpa_breakpoint = 1350
# set tpa_mode = D

# rateprofile 0
# set rates_type = BETAFLIGHT
# set roll_rc_rate = 100
# set roll_srate = 70
# set roll_expo = 0
# set pitch_rc_rate = 100
# set pitch_srate = 70
# set pitch_expo = 0
# set yaw_rc_rate = 100
# set yaw_srate = 70
# set yaw_expo = 0

# filters
# set dyn_notch_count = 3
# set dyn_notch_min_hz = 100
# set dyn_notch_max_hz = 600

# save
Перенос готового тюна: Готовый «тюн» из интернета — это фрагмент diff с секциями profile 0 {...} и rateprofile 0 {...}. Вставьте эти блоки в CLI вместе с save. Обязательно берите тюн для вашей версии прошивки: имена параметров между версиями меняются.
↑ К оглавлению

15. Расчётное задание

Задание выполняется на бумаге или в калькуляторе. Решение — в статье «Ответы на контрольные вопросы курса», раздел «Ответы к расчётным заданиям».

Задание 7.1. Частота винтов и notch-фильтр

Расчётное задание, реальный аппарат не требуется.

  • Мотор с номиналом \(\mathrm{KV} = 2400\), батарея 4S (полное напряжение 16,8 В).
  • Вычислите частоту вращения винта \(n\) (об/мин) и частоту первой гармоники вибраций \(f\) (Гц).
  • Используйте соотношения \(n = \mathrm{KV} \cdot V_{bat}\) и \(f = \frac{n}{60}\).
  • Определите, на какую частоту настроить режекторный (notch) фильтр, и укажите вторую гармонику \(f_2 = 2f\).
↑ К оглавлению

16. Проверьте себя

Сформулируйте ответ своими словами, прежде чем сверяться со справочником ответов (последняя статья курса).

  1. Зачем выбирать profile 0 перед правкой PID?
  2. Чем поля [RC Rate], [Rate] и [RC Expo] отличаются при типе BETAFLIGHT? Где здесь Super Rate?
  3. Почему показанные в Actual 70 и 670 нельзя буквально записать в roll_rc_rate и roll_srate?
  4. Что такое Feedforward (F)?
  5. Как перенести готовый «тюн» из интернета?
↑ К оглавлению

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

  • Понимаю, зачем выбирать profile 0 / rateprofile 0 перед правкой
  • Знаю все 12 имён: p_roll, i_pitch, d_yaw, f_roll и остальные
  • Понимаю, чем DMin и DMax отличаются от обычного D
  • Знаю, зачем нужны iterm_relax и tpa_rate
  • Знаю разницу между RC Rate, Super Rate и Expo
  • Знаю, где искать имя параметра, если оно поменялось (get + часть имени)
Результат: Все пункты выполнены — переходите к следующему уроку.
↑ К оглавлению

18. Что дальше

  • Предыдущий урок: 6. Режимы полёта
  • Следующий урок: 8. Питание и батарея
  • Полный перечень тем — в статье «Содержание курса».
↑ К оглавлению
  • мод. : Пятница, 09 октября 2026