bbdoctor
Діагностика дрона за логом: Betaflight, INAV, ArduPilot, PX4
RUENESPTUA

Гарячі мотори на Betaflight: налаштуй фільтри за логом Blackbox

Після польоту мотори такі гарячі, що не торкнутися, на різких наборах чути шипіння, зображення тремтить, у висінні є дзижчання: це шум, і перший порив — крутити фільтри. Але фільтри не усувають причину. Вони приховують механічні проблеми, додають затримку й нічого не дають, коли шум спричинений реакцією feedforward на апаратуру. Нижче — чотири числа, які bbdoctor отримує з логу, щоб знайти джерело, реальні логи для кожного випадку й порядок виправлень.

Чому шум перегріває мотори

Гіроскоп вловлює не лише рух дрона: дисбаланс пропелерів, шорсткий підшипник, гнучкість променя, розхитаний стек. Фільтри зрізають частину шуму, а решта потрапляє в PID-контур. P пропускає шум безпосередньо. D — похідна, тому її вихід зростає з частотою: до фільтра низьких частот D-складової вібрація 300 Гц тієї самої амплітуди, що й хитання на 30 Гц, створює в десять разів більший D.

Цей шум потрапляє в команди моторів, але пропелерний ротор не встигає за ним. Коли bbdoctor порівнює оберти з командою, він враховує приблизно 20 мс запізнення ротора — це приблизно фільтр низьких частот на 8 Гц. На 80 Гц оберти реагують приблизно вдесятеро слабше, а на 300 Гц майже не змінюються. Тяги немає, але струм в обмотці все одно смикається в кожному циклі й нагріває ESC і мотор. Звідси поріг 80 Гц.

Чотири числа

Усе обчислюється лише за даними польоту; «шум» означає RMS понад 80 Гц.

ПоказникЯк обчислюєтьсяДобреУвагаПогано
Сирий гіроскоп, град/сRMS нефільтрованого гіроскопа, гірше зі значень roll і pitchнижче 44–1010 або більше
Відфільтрований гіроскоп, град/сте саме для відфільтрованого гіроскопа, який бачать PID-регуляторинижче 1: є запасвище 3: шум доходить до PID-регуляторів—
Затримка фільтра, мсзсув, за якого сирий і відфільтрований сигнали гіроскопа найкраще збігаються (взаємна кореляція), середнє для roll і pitchсталого нормативу немає; у логах цього гайда — 0,8–3,2понад 1,5 за низького шуму: затримку можна скоротити—
ВЧ-шум моторів, % ходуRMS команд моторів, найгірший мотор; лише для логів із частотою 500 Гц або вищедо 2,5понад 2,5понад 4

П'ятий показник — яка складова несе шум. Betaflight та INAV окремо записують складові PID (axisP, axisD, axisF). bbdoctor застосовує до кожної фільтр високих частот на 80 Гц, переводить значення у відсоток ходу моторів (сума PID 1000 відповідає повному ходу) й обчислює частку кожної складової в енергії шуму: 60% або більше означає, що це джерело, інакше результат «змішаний».

Два застереження. Затримка порівнює сирий і відфільтрований сигнали гіроскопа, тому враховує лише його ланцюг (фільтри низьких частот, notch, RPM-фільтр), а не фільтри D-складової далі по ланцюгу. А шум моторів лежить у сотнях герців, яких не побачить лог на 250 Гц (його межа — 125 Гц), тому потрібна частота щонайменше 500 Гц.

Спектри гіроскопа roll до й після фільтрації: ліворуч широкий горб сирого шуму на 200–450 Гц, сирий сигнал 35,8 град/с і відфільтрований 1,34 град/с; праворуч сирий 4,1 град/с і відфільтрований 0,53 град/с
Спектр гіроскопа roll до фільтрації (сірий) і після (синій); шум — це RMS понад 80 Гц (пунктирна лінія). A: Betaflight 4.2.5, 4S, лог 2 кГц, широкий горб на 200–450 Гц, 35,8 град/с сирого сигналу й 1,34 град/с після фільтрації, мотори чисті (0,8–0,9% ВЧ-шуму). B: Betaflight 4.5.2, лог 1 кГц, сирий сигнал 4,1 град/с і відфільтрований 0,53 град/с. В обох панелях однакова шкала дБ.

Звідки береться шум: чотири випадки

Механіка: шумить сирий гіроскоп

Лог A на рисунку: Betaflight 4.2.5, 215 секунд польоту. Сирий шум — 35,8 град/с по roll і 23,8 по pitch. Після фільтрів — 1,34 град/с, мотори чисті: звіт позначає сирий шум як критичний, але вважає фільтри в нормі. Фільтри впоралися, ціною затримки 3,2 мс — найбільшої серед усіх логів у цьому гайді. Якщо дивитися на відфільтрований гіроскоп або мотори, проблему не помітиш, але цей горб на 200–450 Гц спричинений пропелерами, моторами або чимось незакріпленим.

Рішення — викрутка й нові пропелери, а не фільтри. Коли сирий шум зменшиться, у фільтрів з'явиться реальний запас, щоб скоротити затримку. Як знайти конкретний мотор або пропелер: як знайти несправний мотор або пропелер за логом.

Налаштування: шум проходить крізь фільтри, і його несе D

Лог C на другому рисунку: whoop 1S на INAV 8.0. Сирий гіроскоп — 22,1 град/с, після фільтрів — 4,8, отже шум проходить. ВЧ-шум моторів критичний — 5,5%, 97% якого несе D. Тут доречно зменшити D або частоти зрізу фільтрів D-складової, але за 4,8 град/с шуму після фільтрації треба також перевірити пропелери й раму (D підсилює все, що проходить), а насамперед варто виправити коефіцієнт, який схожий на помилку (див. нижче).

D може бути проблемою, навіть якщо шум моторів нижче 2,5%. Щойно сама D-складова передає моторам 1,5% ходу (критичний рівень — 3%), bbdoctor окремо повідомляє «Шум D-складової доходить до моторів» і пропонує послідовність дій: відфільтрований гіроскоп 1 град/с або більше — спочатку механіка; RPM-фільтр вимкнено (dshot_bidir = OFF або rpm_filter_harmonics = 0) — увімкни; далі знизь частоти зрізу D-фільтрів на 15% від поточних або, якщо фільтр D-складової вже нижче 70 Гц, зменш D на 10%, адже нижча частота додає затримку за незначного ефекту. Мотори все ще гарячі? На наступному польоті зменш D ще на 10%. Якщо шум моторів перевищує 2,5%, рекомендація коротша: механіка, потім частоти зрізу фільтрів D-складової нижче на 15% або зменшення D.

Тремтіння feedforward через апаратуру

Лог A на другому рисунку: VX3.5 на Betaflight 4.5.2, лог 1 кГц, ВЧ-шум моторів на рівні попередження — 3,0%. Стандартна порада знизити фільтри D-складової або D нічого б не дала: D несе 4% шуму, P — менше 1%, feedforward — 96%. FF — це похідна від команди стика, а оскільки апаратура надсилає команди пакетами, кожен крок пакета спричиняє стрибок. Тут FF понад 40 Гц становив 3,6% ходу моторів по roll, із 51 стрибком за секунду понад 5% ходу під час 112 секунд руху стиками.

Ознаку можна помітити й без аналізу: мотори шумлять, коли рухаєш стиками, і тихі у висінні. Той самий звіт показав перерегулювання 25–31%, тож перший крок bbdoctor — зменшити 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 або AVERAGED_3 для каналу 500 Гц), ff_spike_limit (знизити до 50) і rc_smoothing_auto_smoothness (підвищити до 20). Як виглядає перерегулювання FF на перехідній характеристиці: налаштування PID за Blackbox.

Коефіцієнт, який схожий на помилку

Той самий whoop: P roll — 17 і D — 50, P pitch — 40 і D — 35 (стандартне значення INAV: D 23 за P 40). На одній осі D утричі більший за P, на іншій — менший за P, а в лозі D-складова roll у 12 разів сильніша за P. bbdoctor позначає такий шаблон (D щонайменше вдвічі більший за P на одній осі й не більший за P на іншій) як імовірну помилку й ставить виправлення на перше місце, бо потрібен лише один рядок CLI: помнож D на цій осі на 0,7; якщо шум залишиться, перевір механіку й фільтри D-складової:

set mc_d_roll = 35
save
Три стовпчикові діаграми шуму моторів за PID-складовими: на першій більшість шуму несе FF, на другій і третій — D, але на другій шуму мало, а на третій — багато
Шум понад 80 Гц, який кожна PID-складова передає моторам, у % ходу моторів (середнє для roll і pitch); під кожним значенням — частка цієї складової в енергії шуму на всіх осях. Для кожної панелі своя шкала. A: VX3.5, Betaflight 4.5.2, шум моторів 3,0%, 96% від feedforward. B: 6S, Betaflight 4.5.1, D несе 83% шуму, але мотори чисті — 0,5%. C: whoop 1S, INAV 8.0, D несе 97%, шум моторів — 5,5%.

Частка й рівень — різні речі. У лозі B D несе 83% шуму, але це лише 0,5% ходу: виправляти нічого. Частка підказує, що виправляти; рівень — чи варто за це братися.

Порядок виправлень

  1. Механіка. Нові пропелери з однієї партії, гвинти моторів затягнуті, кожен мотор прокручується рукою: рух плавний, без скреготу й люфту. На променях немає тріщин, стек на м'яких кріпленнях, нічого не бовтається: камера, антена, ремінець акумулятора.
  2. RPM-фільтр. Потрібен двонаправлений DShot (dshot_bidir = ON), ESC на Bluejay, AM32 або BLHeli_32 і правильне значення motor_poles (кількість магнітів у дзвоні). Гармоніки задаються через rpm_filter_harmonics, а у версіях 4.1–4.2 — через gyro_rpm_notch_harmonics; значення 0 вимикає фільтр. Щоб перевірити роботу, записуй у лог також RPM: див. налаштування Blackbox.
  3. Динамічний notch для резонансів, які не залежать від RPM. Якщо RPM-фільтр працює, зазвичай достатньо 1–2 notch-фільтрів (dyn_notch_count, BF 4.3+). bbdoctor вважає пік, який зберігається на тій самій частоті за різного газу (на 6 дБ вище фонового рівня щонайменше у 60% діапазонів газу й понад 60 Гц), резонансом рами або стека. Статичний notch він пропонує лише тоді, коли частота однозначна: лог записано з частотою циклу PID або з частотою від 2 кГц, а пік нижчий за половину частоти Найквіста. У трьох логах 6S на 4.5.1 (запис 1013 Гц, цикл PID 4 кГц) піки з'являються на 186–226 Гц, і пік «206 Гц» насправді може бути на 206, 807 або 1219 Гц. Замість випадкового notch bbdoctor просить короткий лог із blackbox_sample_rate = 1/1.
  4. Фільтри низьких частот. Знизь поточні значення на 15%: фільтри D-складової, якщо шум несе D; гіроскопічні фільтри, якщо шум проходить крізь них або його несе P. Не опускай частоту зрізу фільтра D-складової нижче 70 Гц.
  5. D — в останню чергу й лише якщо шум несе D, а фільтри вже налаштовані низько. Назви параметрів D змінилися у версії 2025.12, див. нижче.

Виняток із цього порядку: коефіцієнт, який схожий на помилку, виправляй першим. Одна зміна за політ. Після кожної зміни політа́й 30–60 секунд, приземлись, від'єднай акумулятор і перевір температуру моторів. Стали холодніші — залиш зміну. Не охололи — відкотити її.

Головне правило: не збільшуй D на гарячих моторах із шумом, навіть заради пропвошу. І навпаки: якщо звіт показує перерегулювання по roll або pitch, не зменшуй D, щоб охолодити мотори: перерегулювання зросте, тож bbdoctor радить зайнятися механікою й фільтрами D-складової.

Назви фільтрів у різних версіях Betaflight

ПараметрBetaflight 4.0–4.2Betaflight 4.3–4.5 і 2025.12
Динамічний фільтр низьких частот гіроскопаdyn_lpf_gyro_min_hz / dyn_lpf_gyro_max_hzgyro_lpf1_dyn_min_hz / gyro_lpf1_dyn_max_hz
Статичний фільтр низьких частот гіроскопа 1gyro_lowpass_hzgyro_lpf1_static_hz
Фільтр низьких частот гіроскопа 2gyro_lowpass2_hzgyro_lpf2_static_hz
Динамічний фільтр низьких частот D-складовоїdyn_lpf_dterm_min_hz / dyn_lpf_dterm_max_hzdterm_lpf1_dyn_min_hz / dterm_lpf1_dyn_max_hz
Статичний фільтр низьких частот D-складової 1dterm_lowpass_hzdterm_lpf1_static_hz
Фільтр низьких частот D-складової 2dterm_lowpass2_hzdterm_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-складової має значення 180/420 Гц, а повзунок увімкнений на 100 — стандартні значення були б 75/150, отже ці частоти встановили вручну або пресетом. Змінюєш частоти зрізу в CLI? Вимкни повзунок.

Відштовхуйся від поточних значень (команда get dterm_lpf їх покаже). bbdoctor бере їх із заголовка логу, множить кожну частоту зрізу на 0,85 (або на 1,15 для підвищення) і вимикає повзунок. Для фільтра D-складової цього 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% лише за виконання всіх умов:

Для стандартних значень 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 на 4.5.1 з такими самими стандартними значеннями: відфільтрований шум — 0,6 град/с, затримка — 2,2 мс, на папері запасу вдосталь, але сирий сигнал — 7,4 град/с і є резонанс на 206 Гц. Фільтри зайняті шумною механікою, і їх послаблення передасть цей шум моторам. Лог 6S на 4.2 із частотою 534 Гц: відфільтрований шум — 0,31 град/с, затримка — 2,8 мс, але сирий сигнал — 4,7, тож і тут послаблювати зарано. Із 17 логів, де вдалося виміряти і сирий гіроскоп, і затримку, жоден не відповідав усім п'ятьом умовам. Чиста механіка трапляється рідше, ніж здається.

Затримка й пропвош

Затримка — це ціна фільтрації. У логах цього гайда вона становить від 0,8 мс (INAV 6.0) до 3,2 мс (лог 4.2.5 із горбом). Щоб оцінити її, переведи в фазу: на 50 Гц, у середньому діапазоні пропвошу, 1 мс — це відставання на 18°, а 3,2 мс — уже 58°. Що пізніше контур бачить коливання, то гірше він його гасить: звідси пропвош, а за достатньої затримки контур починає коливатися сам.

Два польоти VX3.5 на 4.5.2: у першому фільтр гіроскопа низьких частот налаштовано на 250/500 Гц, а D-складової — на 75/150; у другому — на 300/700 і 180/420. Затримка зменшилася з 2,2 до 1,2 мс, а шум після фільтрації на найгіршій осі в обох випадках залишився близько 1,4–1,5 град/с. ВЧ-шум моторів зріс із 1,6 до 3,0%, але в другому польоті 96% шуму спричинив feedforward, а стиками рухали 112 секунд проти 45. Знижувати фільтри D-складової, щоб охолодити мотори, було б марно. Про затримку на перехідній характеристиці див. налаштування PID за Blackbox.

Поширені помилки

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-складової низьких частот — dterm_lpf_hz (за замовчуванням 110, у згаданому вище whoop — 120). D задають параметри mc_d_roll / mc_d_pitch, FF — mc_cd_roll / mc_cd_pitch. RPM-фільтр rpm_gyro_filter_enabled працює лише з окремим проводом телеметрії ESC. Докладніше: аналіз Blackbox INAV.

ArduPilot. Фільтр гіроскопа низьких частот — INS_GYRO_FILTER (20 Гц у більшості перевірених мною логів ArduCopter), фільтр D — ATC_RAT_RLL_FLTD / ATC_RAT_PIT_FLTD. bbdoctor масштабує їх так само: × 0,85 або × 1,15. Шум моторів і резонанси контролює гармонічний 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), а динамічний notch (ESC RPM або FFT) — IMU_GYRO_DNF_EN. Докладніше: аналіз PX4 ULog.

Автоматична перевірка

Завантаж лог на bbdoctor: Betaflight .bbl і .bfl, INAV .txt, ArduPilot .bin або PX4 .ulg. Звіт обчислює всі чотири показники, розділяє шум моторів на складові P, D і FF, перевіряє, чи однозначна частота резонансів, і пропонує команди CLI, розраховані від поточних частот зрізу, за потреби вимикаючи повзунок. Див. приклад звіту. Логу ще немає, але маєш diff all? Перевірка конфігурації позначає вимкнені фільтри низьких частот і динамічний notch, RPM-фільтр без телеметрії та повзунки, далекі від 1,0.

Часті запитання

Чому на Betaflight нагріваються мотори?

Шум понад 80 Гц у командах моторів. Він не створює тяги: струм в обмотці смикається туди-сюди в кожному циклі й перетворюється на тепло. Лог показує джерело: механіка (шумний сирий гіроскоп), D-складова або тремтіння feedforward через апаратуру. Чіпай фільтри лише тоді, коли знаєш, яка PID-складова несе шум.

Спершу знижувати фільтри чи D?

Спочатку механіка й RPM-фільтр. Якщо шум моторів несе D, знизь частоти зрізу фільтрів D-складової на 15% від поточних; якщо фільтр D-складової вже нижче 70 Гц, натомість знизь D на 10%. Якщо шум несе feedforward, ані фільтри, ані D не допоможуть: згладь feedforward. Одна зміна за політ.

Чи можна послабити фільтри, щоб боротися з пропвошем?

Лише коли збігаються всі умови: шум після фільтрації нижче 1 град/с, затримка понад 1,5 мс, сирий гіроскоп нижче 4 град/с, резонансу рами немає, а лог записано з частотою 500 Гц або вище. Тоді підніми частоти зрізу гіроскопічних фільтрів на 15% і перевіряй температуру моторів після кожного польоту.

Наскільки гарячі мотори — це вже забагато?

Після звичайного акумулятора одразу приземлись, від'єднай його й торкнися дзвона мотора. Якщо можеш потримати палець кілька секунд — усе гаразд. Якщо відсмикуєш руку, відчуваєш запах лаку або один мотор явно гарячіший за інші, припини польоти й шукай причину в лозі. Після будь-якої зміни фільтрів почни з короткого польоту на 30–60 секунд.

Оновлено:

Інші гайди