Греются моторы: как настроить фильтры по blackbox логу
Сел после пака, а моторы такие, что палец не удержать. Или на газу слышно шуршание, в видео «желе», в висении квадрик мелко дрожит. Это шум, и первая мысль — крутить фильтры. Но фильтры не убирают причину. Механику они прячут и добавляют задержку, а если шум несёт feedforward от пульта, фильтры гироскопа вообще ни при чём. Ниже — четыре числа, по которым bbdoctor ищет источник шума в логе, разбор реальных логов и порядок правок.
Почему шум греет моторы
Гироскоп чувствует не только движения квадрика, но и всё, что вибрирует: дисбаланс пропа, подшипник, лучи, стек. Фильтры вырезают часть, остальное уходит в PID. P передаёт шум как есть, а D — производная, и его отклик растёт с частотой. До фильтра D-term колебание на 300 Гц той же амплитуды, что раскачка на 30 Гц, D усиливает в десять раз сильнее.
Дальше шум попадает в команды моторам. Ротор с пропом не успевает менять обороты так быстро: при сравнении оборотов с командой bbdoctor закладывает отставание ротора около 20 мс, это примерно фильтр с частотой среза 8 Гц. На 80 Гц обороты повторяют команду раз в десять слабее, на 300 Гц — почти никак. Тяги нет, а ток через обмотки дёргается на каждом колебании, и регулятор с мотором превращают его в тепло. Поэтому граница «шума» в bbdoctor — 80 Гц: выше неё полезных движений квадрика нет, только нагрев.
Четыре числа из лога
Все числа считаются только по участкам полёта, шум — это среднеквадратичное значение (СКЗ) выше 80 Гц.
| Число | Как считается | Норма | Внимание | Плохо |
|---|---|---|---|---|
| Сырой гироскоп, °/с | СКЗ нефильтрованного гироскопа, худшая из осей roll и pitch | ниже 4 | 4–10 | 10 и выше |
| Гироскоп после фильтров, °/с | то же для отфильтрованного гироскопа (то, что видит PID) | до 1 — есть запас | больше 3: шум идёт в PID | — |
| Задержка фильтров, мс | сдвиг, при котором сырой и отфильтрованный гироскоп совпадают лучше всего (взаимная корреляция), среднее roll и pitch | жёсткой нормы нет; в логах из этого гайда 0.8–3.2 | больше 1.5 при чистом шуме — можно выиграть | — |
| ВЧ-шум моторов, % хода | СКЗ команд моторам, худший мотор; только для логов от 500 Гц | до 2.5 | больше 2.5 | больше 4 |
Есть и пятое число — кто несёт шум. Betaflight и INAV пишут составляющие PID в лог по отдельности: axisP, axisD, axisF. bbdoctor пропускает каждую через тот же фильтр «выше 80 Гц», переводит в проценты хода мотора (сумма PID 1000 — это весь ход) и считает долю каждого члена в энергии шума. У кого 60% и больше, тот и источник, иначе источник «смешанный».
Два уточнения. Задержка меряется между сырым и отфильтрованным гироскопом, поэтому это задержка цепочки гироскопа: ФНЧ, notch, RPM-фильтр. Фильтры D-term стоят дальше, их задержка в это число не входит. И частота записи: лог на 250 Гц видит частоты только до 125 Гц, а шум моторов лежит в сотнях герц. Поэтому шум моторов bbdoctor считает только по логам от 500 Гц.

Откуда шум: четыре случая
Механика: шумит сырой гироскоп
Лог A на рисунке: Betaflight 4.2.5, 215 секунд полёта. Сырой шум по roll 35.8 °/с, по pitch 23.8 — «плохо» с большим запасом. А после фильтров 1.34 °/с, моторы чистые: отчёт помечает сырой шум как критичный, а фильтры — «в норме». Фильтры честно справились, но ценой задержки 3.2 мс — самой большой во всех логах из этого гайда. Если смотреть только на отфильтрованный гироскоп или на моторы, проблемы не видно. А она есть: горб на 200–450 Гц дают пропы, моторы или что-то болтается.
Лечится это отвёрткой и новыми пропами, а не фильтрами. После ремонта сырой шум падает, и только тогда у фильтров появляется настоящий запас, чтобы вернуть часть задержки. Как найти конкретный мотор или проп — в гайде как найти плохой мотор по логу.
Тюн: шум проходит фильтры, и его несёт D
Лог C на втором рисунке: вупер 1S на INAV 8.0. Сырой гироскоп 22.1 °/с, после фильтров 4.8 — шум проходит фильтры, ВЧ-шум моторов 5.5%, это критично. 97% шума на моторах несёт D. Снижать D или частоты D-term фильтров здесь имеет смысл, но при 4.8 °/с после фильтров D просто усиливает то, что фильтры пропустили, так что пропы и раму тоже придётся лечить. А раньше всего этого в логе есть коэффициент, похожий на опечатку (ниже).
D может быть проблемой, даже пока моторы не дошли до 2.5%. Как только один D отправляет на моторы 1.5% хода и больше (от 3% — критично), bbdoctor выдаёт отдельную находку «Шум D-term идёт на моторы» с лестницей советов. Гироскоп после фильтров шумит 1 °/с и больше — сначала механика. RPM-фильтр выключен (dshot_bidir = OFF или rpm_filter_harmonics = 0) — включить его. Дальше частоты D-term фильтров −15% от текущих, а если D-term фильтр уже ниже 70 Гц, ниже не опускать: задержка растёт, толку мало, лучше снизить D на 10%. Моторы и после этого горячие — следующим полётом D −10%. Когда на моторах уже больше 2.5%, совет короче: механика, затем D-term фильтры −15% или меньше D.
Дрожание feedforward от пульта
Лог A на втором рисунке: VX3.5 на Betaflight 4.5.2, лог 1 кГц. ВЧ-шум моторов 3.0% — предупреждение. Стандартный совет «опусти D-term фильтры или снизь D» тут не помог бы: D несёт 4% шума, P — меньше процента, а 96% — feedforward. FF — это производная стика. Пульт шлёт команды пакетами, и на каждом пакете FF даёт рывок. В этом полёте составляющая FF выше 40 Гц — 3.6% хода мотора по roll, рывков больше 5% хода — 51 в секунду (по 112 секундам движения стиков).
Признак, который видно и без разбора: моторы шумят, пока двигаешь стики, а в висении чисто. В том же отчёте было перерегулирование 25–31%, поэтому первым шагом bbdoctor ставит снижение FF из той находки, следующим полётом — усреднение и сглаживание FF, потом feedforward_jitter_factor 7 → 12:
set feedforward_averaging = 2_POINT set feedforward_smooth_factor = 65 save
Это имена Betaflight 4.3 и новее. В 4.2 bbdoctor берётся за ff_interpolate_sp (AVERAGED_2, а при пульте 500 Гц — AVERAGED_3), ff_spike_limit (до 50) и rc_smoothing_auto_smoothness (до 20). Как перелёт от FF выглядит в переходной характеристике — в гайде PID-тюнинг по blackbox.
Опечатка в коэффициентах
Тот же вупер: по roll P 17 и D 50, а по pitch P 40 и D 35 (по умолчанию в INAV D 23 при P 40). На одной оси D втрое больше P, а на соседней D меньше P — так настраивают редко, это похоже на ошибку ввода. В записи D-составляющая roll в 12 раз сильнее P. bbdoctor ловит такое правило: на одной оси D не меньше 2×P, а на другой D не больше P. Это он ставит первым, ведь опечатка правится одной строкой в CLI: D × 0.7 на этой оси, а если шум останется — механика и D-term фильтры:
set mc_d_roll = 35 save

Доля и величина — разные вещи. В логе B D несёт 83% шума, но шума всего 0.5% хода, моторам всё равно, трогать нечего. Доля говорит, кого лечить, величина — надо ли лечить вообще.
Порядок правок
- Механика. Новые пропы из одной пачки, протянутые винты моторов, каждый мотор покрути рукой: ровно, без хруста и люфта. Лучи без трещин, стек на мягких проставках, камера, антенна и ремешок батареи не болтаются.
- RPM-фильтр. Нужен двунаправленный DShot (
dshot_bidir = ON), регуляторы на Bluejay, AM32 или BLHeli_32 и правильныйmotor_poles(число магнитов в колоколе). Число гармоник —rpm_filter_harmonics, в 4.1–4.2gyro_rpm_notch_harmonics; 0 значит, что фильтр выключен. Чтобы проверить его работу, пиши в лог и обороты — см. настройку blackbox. - Динамический notch — для резонансов, не привязанных к оборотам. С работающим RPM-фильтром ему обычно хватает 1–2 вырезов (
dyn_notch_count, BF 4.3+). Пик, который стоит на одной частоте при разном газе (на 6 дБ над фоном минимум в 60% диапазонов газа, выше 60 Гц), bbdoctor считает резонансом рамы или стека. Статический notch он предлагает, только если частота однозначна: лог пишется на частоте PID-цикла или от 2 кГц, а пик ниже половины частоты Найквиста. В трёх 6S-логах на 4.5.1 (запись 1013 Гц при PID-цикле 4 кГц) пики видны на 186–226 Гц, и, например, «206 Гц» на деле может быть 206, 807 или 1219 Гц. Вместо notch наугад bbdoctor просит короткий лог сblackbox_sample_rate = 1/1. - ФНЧ (lowpass). −15% от текущих частот — у D-term, если шум несёт D, или у гироскопа, если шум проходит фильтры или его несёт P. Ниже 70 Гц D-term фильтр не опускай.
- D — последним и только если шум несёт D, а фильтры уже низкие. Имена D в 2025.12 поменялись — см. ниже.
Исключение из этого порядка одно: коэффициент, похожий на опечатку, исправляй первым. Одно изменение за полёт. После каждого — 30–60 секунд в воздухе, посадка, отключи батарею и потрогай моторы. Стали холоднее — оставляешь, нет — откатываешь.
Главное правило: не поднимай D на горячих и шумных моторах, даже ради пропвоша. И обратное: если в отчёте перерегулирование по roll или pitch, снижать D ради холодных моторов нельзя — перелёт вырастет. bbdoctor в таком случае оставляет только совет про механику и фильтры D-term.
Имена фильтров в разных версиях Betaflight
| Что | Betaflight 4.0–4.2 | Betaflight 4.3–4.5 и 2025.12 |
|---|---|---|
| Динамический ФНЧ гироскопа | dyn_lpf_gyro_min_hz / dyn_lpf_gyro_max_hz | gyro_lpf1_dyn_min_hz / gyro_lpf1_dyn_max_hz |
| Статический ФНЧ1 гироскопа | gyro_lowpass_hz | gyro_lpf1_static_hz |
| ФНЧ2 гироскопа | gyro_lowpass2_hz | gyro_lpf2_static_hz |
| Динамический ФНЧ D-term | dyn_lpf_dterm_min_hz / dyn_lpf_dterm_max_hz | dterm_lpf1_dyn_min_hz / dterm_lpf1_dyn_max_hz |
| Статический ФНЧ1 D-term | dterm_lowpass_hz | dterm_lpf1_static_hz |
| ФНЧ2 D-term | dterm_lowpass2_hz | dterm_lpf2_static_hz |
| Гармоники RPM-фильтра | gyro_rpm_notch_harmonics (4.1–4.2) | rpm_filter_harmonics |
| Слайдеры фильтров | 4.2: только в Configurator, раньше не было | simplified_gyro_filter, simplified_dterm_filter |
В 2025.12 имена фильтров те же, но поменялся смысл D: базовый теперь d_roll/d_pitch, а верхний — d_max_roll/d_max_pitch.
Ловушка слайдеров (4.3+): если simplified_dterm_filter = ON, Configurator при сохранении вкладки со слайдерами пересчитывает частоты от множителя, и ручные значения пропадают. В реальном логе VX3.5 D-term стоит на 180/420 Гц при включённом слайдере с множителем 100 — а слайдер при множителе 100 дал бы заводские 75/150, то есть частоты поставлены вручную или пресетом. Меняешь частоты через CLI — выключай слайдер.
Считай от своих текущих значений (get dterm_lpf в CLI покажет их). bbdoctor собирает команды из заголовка лога: каждая частота × 0.85, чтобы опустить на 15%, или × 1.15, чтобы поднять, а в конце выключает слайдер. Для D-term этого VX3.5 (180/420 Гц, ФНЧ1 158, ФНЧ2 150) снижение на 15% выглядело бы так. Это пример арифметики, а не совет для этого лога: там шум несёт FF.
set dterm_lpf1_dyn_min_hz = 153 set dterm_lpf1_dyn_max_hz = 357 set dterm_lpf1_static_hz = 134 set dterm_lpf2_static_hz = 128 set simplified_dterm_filter = OFF save
И не используй simplified_tuning apply как «быструю правку»: он пересчитывает фильтры и PID от заводских значений Betaflight, а не от твоих, и молча сбрасывает ручной тюн.
Когда фильтры можно ослабить
Меньше фильтрации — меньше задержка и лучше гасится пропвош. bbdoctor советует поднять частоты фильтров гироскопа на 15%, только когда сходится всё сразу:
- после фильтров шум ниже 1 °/с по roll и pitch;
- задержка больше 1.5 мс, иначе выигрывать нечего;
- сырой гироскоп ниже 4 °/с;
- резонансов рамы нет;
- лог записан на 500 Гц или чаще.
Для заводских частот 4.5 (250/500 Гц, ФНЧ2 500) команды были бы такими:
set gyro_lpf1_dyn_min_hz = 288 set gyro_lpf1_dyn_max_hz = 575 set gyro_lpf1_static_hz = 288 set gyro_lpf2_static_hz = 575 set simplified_gyro_filter = OFF save
Если шум и задержка проходят, но шумит сырой гироскоп или есть резонанс, отчёт пишет «запас есть, но ослаблять рано». Если не проходят шум или задержка, он просто пишет «фильтры в норме» (а при шуме после фильтров больше 3 °/с предупреждает), а по логу медленнее 500 Гц вердикта об ослаблении нет вообще. Пример — 6S на Betaflight 4.5.1 как раз с этими заводскими частотами: после фильтров 0.6 °/с, задержка 2.2 мс, по двум числам запас огромный. Но сырой гироскоп 7.4 °/с и резонанс на 206 Гц. Запас создают фильтры, которые сейчас работают на шумную механику: ослабишь их — пустишь шум на моторы. Ещё пример — Betaflight 4.2, 6S, лог 534 Гц: после фильтров 0.31 °/с, задержка 2.8 мс, но сырой гироскоп 4.7 °/с, тоже «рано». Из 17 логов, где удалось измерить и сырой гироскоп, и задержку, все пять условий сразу не выполнились ни разу: чистая механика встречается реже, чем кажется.
Задержка против пропвоша
Задержка — цена фильтрации. В логах для этого гайда она от 0.8 мс (INAV 6.0) до 3.2 мс (тот самый Betaflight 4.2.5 с горбом на 200–450 Гц). Чтобы понять, много ли это, переведи задержку в фазу: на 50 Гц, в середине полосы пропвоша, 1 мс — это 18° запаздывания, 3.2 мс — уже 58°. Чем позже PID видит колебание, тем хуже он его гасит. Отсюда пропвош, а при большой задержке — ещё и собственная раскачка контура.
Пример — два полёта VX3.5 на Betaflight 4.5.2. В первом гироскопный ФНЧ стоял на 250/500 Гц, D-term — на 75/150. Во втором — 300/700 и 180/420. Задержка упала с 2.2 до 1.2 мс, а худший по осям шум после фильтров остался около 1.4–1.5 °/с в обоих полётах. ВЧ-шум моторов вырос с 1.6 до 3.0%, но 96% этого шума во втором полёте — feedforward, а не D. Да и стиками во втором полёте работали больше: 112 секунд против 45. Возвращать D-term фильтры вниз ради моторов здесь бессмысленно. Как задержка выглядит в переходной характеристике, разобрано в гайде PID-тюнинг по blackbox.
Типичные ошибки
- Опускать фильтры, когда шум несёт FF. Задержка растёт, моторы такие же горячие. Сначала посмотри, кто несёт шум.
- Поднимать D на горячих моторах ради пропвоша или «чёткости». D усиливает именно высокие частоты.
- Судить о шуме по логу 250 Гц. Он видит до 125 Гц, а шум мотора на 300 Гц в таком логе складывается в 50 Гц (300 − 250) и выглядит как низкочастотная раскачка. Как настроить запись — в гайде настройка blackbox.
- Ставить notch на пик из медленного лога, не проверив однозначность частоты: вырежешь не ту частоту и добавишь задержку.
INAV, ArduPilot и PX4
INAV. ФНЧ гироскопа — gyro_main_lpf_hz (по умолчанию 60 Гц), динамический ходит между gyro_dyn_lpf_min_hz и gyro_dyn_lpf_max_hz и включается через gyro_use_dyn_lpf = ON до 7.x или gyro_filter_mode = DYNAMIC с 8.0 (там же появился режим ADAPTIVE). D-term — dterm_lpf_hz (по умолчанию 110, у вупера из примера 120). D — mc_d_roll / mc_d_pitch, FF — mc_cd_roll / mc_cd_pitch. RPM-фильтр rpm_gyro_filter_enabled работает только с отдельным проводом телеметрии регуляторов. Подробнее — разбор логов INAV.
ArduPilot. ФНЧ гироскопа — INS_GYRO_FILTER (в большинстве логов ArduCopter из нашей подборки 20 Гц), фильтр D — ATC_RAT_RLL_FLTD / ATC_RAT_PIT_FLTD. bbdoctor масштабирует их так же, × 0.85 или × 1.15. Шум моторов и резонансы в ArduPilot режет гармонический notch INS_HNTCH_* по газу, по телеметрии ESC или по FFT. Для резонанса рамы с однозначной частотой bbdoctor предлагает второй notch — INS_HNTC2_* с INS_HNTC2_MODE = 0. Подробнее — анализ логов ArduPilot.
PX4. ФНЧ гироскопа — IMU_GYRO_CUTOFF, фильтр D — IMU_DGYRO_CUTOFF. Сдвиг между записанными топиками у PX4 не равен задержке фильтра (бывает 0 при срезе 30–60 Гц), поэтому задержку bbdoctor оценивает по настройке: √2/(2π·fc) для ФНЧ второго порядка. При 40 Гц, как в большинстве PX4-логов из подборки, это 5.6 мс — больше, чем у любого Betaflight-лога выше. При 70 Гц — 3.2 мс. Статический notch — IMU_GYRO_NF0_FRQ / IMU_GYRO_NF0_BW (с 1.13; раньше — IMU_GYRO_NF_FREQ / IMU_GYRO_NF_BW), динамический (по оборотам ESC или по FFT) — IMU_GYRO_DNF_EN. Подробнее — анализ PX4 ULog.
Как проверить автоматически
Загрузи лог в bbdoctor: .bbl и .bfl Betaflight, .txt INAV, .bin ArduPilot или .ulg PX4. Отчёт посчитает все четыре числа, разложит шум моторов по P, D и FF, найдёт резонансы с проверкой однозначности частоты и даст команды CLI от твоих текущих частот, со слайдером, выключенным там, где он перезаписал бы правку. Посмотри пример отчёта. Лога нет, а есть diff all — проверка конфига покажет выключенные ФНЧ и dyn notch, RPM-фильтр без телеметрии и слайдеры далеко от 1.0.
Частые вопросы
Почему греются моторы на Betaflight?
Из-за шума выше 80 Гц в командах моторам. Тяги он не создаёт: ток в обмотках дёргается на каждом колебании и уходит в тепло. Источник видно по логу: механика (шумит сырой гироскоп), D-term или дрожание feedforward от пульта. Фильтры трогай, только когда знаешь, какой член PID несёт шум.
Что снижать первым: фильтры или D?
Сначала механика и RPM-фильтр. Если шум на моторах несёт D, опусти частоты D-term фильтров на 15% от текущих, а если D-term фильтр уже ниже 70 Гц — снизь D на 10%. Если шум несёт feedforward, не помогут ни фильтры, ни D: нужно сглаживание FF. Одно изменение за полёт.
Можно ли ослабить фильтры ради пропвоша?
Только если сходится всё сразу: после фильтров шум ниже 1 °/с, задержка больше 1.5 мс, сырой гироскоп ниже 4 °/с, резонансов рамы нет, лог записан на 500 Гц или чаще. Тогда подними частоты фильтров гироскопа на 15% и трогай моторы после каждого полёта.
Насколько горячие моторы — это уже много?
Сядь сразу после обычного пака, отключи батарею и возьмись за колокол. Держишь палец несколько секунд — нормально. Отдёргиваешь сразу, пахнет лаком или один мотор заметно горячее остальных — так летать нельзя, ищи причину по логу. После каждой правки фильтров начинай с короткого полёта на 30–60 секунд.
Обновлено: