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

Вибрация квадрокоптера: ищем плохой мотор или проп по логу

Квадрик после краша стал жужжать на газу, в видео поплыло «желе», один мотор после пака горячее остальных. Классический способ — снимать пропы по одному и переставлять моторы: долго, а при плавающей проблеме ненадёжно. Если в логе записаны нужные поля, он сразу показывает конкретный мотор, а заодно отделяет настоящую вибрацию от того, что на неё только похоже: смещённого центра тяжести, перекошенного мотора, ошибок телеметрии.

Ниже — как это устроено в bbdoctor, его пороги и что показали реальные логи.

Что именно трясёт: мотор, проп или рама

Что видно в логеВероятная причинаЧто делать
У одного мотора составляющая на частоте его вращения (1×) намного выше, чем у остальныхДисбаланс: погнутый или плохо севший проп, мусор под ступицей, погнутый колокол или валНовый проп, затем осмотр колокола и вала
У одного мотора повышены 2× или 3× частоты вращенияПовреждённая лопасть, лопасти с разным шагом или трекингомЗаменить проп
Мотор крутится медленнее остальных при той же командеИзношенные подшипники, колокол задевает, подгоревшая обмотка, проп с большим шагомПокрутить рукой, поменять местами с соседним
Мотор крутится быстрее остальных при той же командеПроп создаёт меньше нагрузки: сколот, срезан, другой размер, проворачивается на валуОсмотреть и заменить проп
Пик на одной частоте при любом газеРезонанс рамы, стека, камеры или антенныПротянуть винты, закрепить; notch — только временная мера
Моторы одного направления вращения всё время работают сильнееМотор стоит с перекосом, скрученный луч, пропы разного шага на диагоналяхПоложить раму на стол, выставить моторы, одинаковые пропы
Одна пара (задняя или передняя) всё время нагружена сильнее, I-term по pitch не уходит в нольСмещённый центр тяжестиСдвинуть батарею, а не менять моторы

Последние две строки — не вибрация, но именно они чаще всего дают «один мотор горячее остальных».

Почему по спектру мотор не назвать

Обороты всё время меняются, и за полёт пики моторов размазываются в спектре в общую полосу. В каждый момент моторы с одинаковой нагрузкой отличаются на несколько герц, и их пики накладываются. Даже когда пары крутятся по-разному (у VX3.5 из примеров ниже из-за смещённого ЦТ задние моторы крутились в среднем на 240–280 Гц, передние — на 190–215), спектр укажет в лучшем случае на пару, но не на мотор.

Вторая проблема — частота записи. У того же 3,5-дюймового VX3.5 максимум оборотов в разных полётах был 583–644 Гц (около 35–39 тысяч оборотов в минуту), а лог писался на 1 кГц, то есть виден только диапазон до 500 Гц. Всё, что выше, «заворачивается» обратно: 600 Гц в спектре выглядят как 400 Гц, 644 Гц — как 356 Гц. Пик на месте, но его частота уже не говорит, откуда он взялся.

Какой лог нужен, чтобы увидеть конкретный мотор

Нужны две вещи: нефильтрованный гироскоп и обороты каждого мотора.

Для Betaflight 4.5+ (14 полюсов — у большинства моторов от 18xx и крупнее; если не уверен, посчитай магниты на колоколе):

set dshot_bidir = ON
set motor_poles = 14
set blackbox_disable_rpm = OFF
set blackbox_disable_gyrounfilt = OFF
set blackbox_sample_rate = 1/2
save

Делитель 1/2 — для PID-цикла 4 кГц; при 8 кГц ставь 1/4, иначе лог пойдёт на 4 кГц и флешка заполнится вдвое быстрее. Полёт простой: минута-две с висением, плавным газом и полётом вперёд. Фристайл с крашами хуже: удары шумят сами, а обороты моторов постоянно пересекаются и съедают пригодные данные. Подробнее о настройке записи — в гайде настройка blackbox.

Как работает разбор по моторам

Это порядковый анализ (order tracking) из диагностики вращающихся машин. Простыми словами:

  1. Фаза мотора. Из eRPM известна частота вращения каждого мотора в каждый момент; накопленная во времени, она даёт угол поворота ротора — фазу.
  2. Нарезка. Сырой гироскоп по roll и pitch (без медленных движений ниже 30 Гц) режется на окна по 0,25 с. Разрешение по частоте — 4 Гц.
  3. Демодуляция. Гироскоп в окне «прокручивается назад» фазой конкретного мотора. Всё, что вращается синхронно с этим мотором, складывается в одно число, а вибрации остальных моторов и шум усредняются. Так считается 1× (один раз за оборот — дисбаланс), 2× и 3×.
  4. Уровень шума. Тот же расчёт делается на частотах в 12 и 16 Гц по обе стороны от гармоники. Это фон, он вычитается по мощности, и в отчёт идёт вибрация «за вычетом шума».
  5. Отбраковка. Окно пропускается, если какой-то мотор крутится медленнее 20 Гц, а гармоника — если она ниже 40 Гц, ближе 15 Гц к половине частоты записи или ближе 10 Гц к любой другой гармонике (чужой или своей после «заворачивания»): в момент пересечения их не разделить.
  6. Итог. По всем окнам берётся медиана — она не боится отдельных выбросов. Нужно минимум 8 окон, то есть две секунды пригодного полёта.

Так как фаза считается от настоящей частоты вращения, алиасинг не мешает: мотор на 640 Гц при записи 1 кГц разбирается так же, как на 300 Гц. Отбраковка урезает данные: в 193-секундном полёте VX3.5 для переднего левого мотора пригодными оказались 387 окон из примерно 770.

Решение о находке принимается так:

УсловиеПорогЗачем
Гармоника мотора над своим шумомне меньше ×2,5Не обвинять мотор по уровню, который тонет в фоне
Эталон для сравнениямедиана остальных моторов, у которых гармоника хотя бы ×1,5 над шумом; если таких нет — 0,1 °/сСам мотор в эталон не входит, а моторы, у которых гармоника тонет в шуме, не занижают его
1× сильнее эталонаот 1,8× — предупреждение, от 3× — критичноДля сравнения: в наших логах разброс без находки доходил до 1,5–1,7×
2× или 3× сильнее эталонаот 2,2× — предупреждениеЭти гармоники слабее, и случайный разброс между моторами по ним больше
Минимум данных8 окон по 0,25 с, данные хотя бы у трёх моторовНа паре окон медиана ничего не значит, а сравнивать надо минимум с двумя соседями

Что показали реальные логи

Один и тот же мотор в трёх полётах

3,5-дюймовый VX3.5 на Betaflight 4.5.2, 4S, запись 1 кГц, три полёта по 2–3 минуты. Во всех трёх отчёт отметил один мотор — M4, передний левый:

Вибрация 1× по каждому мотору в семи полётах: у VX3.5 в полётах A, B и C выше всех каждый раз M4 (2,0×, 2,0×, 2,2×), у 6S-квадрика в полётах D–G громче всех то M3, то M1, то M4
Вибрация 1× по моторам за вычетом шума: VX3.5, полёты A–C (слева), и 6S-квадрик, полёты D–G (справа, порог пройден только в E и F). Пунктир — 1,8× от медианы остальных моторов, подписи — во сколько раз самый громкий мотор сильнее остальных.

Это главный признак железной проблемы: случайность не повторяется три раза на одном и том же моторе. В четвёртом полёте того же квадрика M4 снова был громче всех, но на 1,75× — чуть ниже порога, и отчёт его не отметил. Порог отсекает пограничные случаи, а решение ты принимаешь по серии логов.

M3 (задний левый) тоже выше остальных, 1,6–1,7×, но порог не проходит ни разу: осмотри его заодно, не более. При этом M4 — самый ненагруженный мотор на этом квадрике (во втором полёте передняя пара в среднем работала на 21% команды, задняя — на 33%), а вибрирует сильнее всех. Значит, дело не в нагрузке, а в дисбалансе вращающейся части: проп, колокол, вал.

6S-квадрик: виноватый мотор «гуляет»

Другой аппарат, Betaflight 4.5.1, 6S, запись около 1 кГц, четыре полёта за две недели. В одном полёте отчёт отметил M3 (задний левый): 3,2 против ~1,7 °/с, 1,8×, над шумом ×12,4, 619 окон. В соседнем — M1 (задний правый): 4,0 против ~2,1, 1,9×, ×13,3, 713 окон. В двух других громче всех были M3 и M4, но на 1,5× и 1,6× — без находки.

Сигнал здесь сильнее, чем у VX3.5 (над шумом в 12–13 раз), но виноватый мотор меняется от полёта к полёту. Так обычно выглядят пропы: их меняют, они цепляют траву и колются. Когда находка «переезжает», начинай с полного комплекта новых пропов, а не с моторов.

Там же видно, зачем нужен порог над шумом. У отдельных моторов этого квадрика кратность по 2× получалась 4,8–5,3 — выглядит страшно. Но у остальных моторов 2× не поднималась над шумом даже в 1,5 раза, эталон оставался пустым, и делить приходилось на 0,1 °/с. Сама гармоника — около 0,5 °/с, над шумом всего ×1,6–1,9, ниже порога ×2,5, и отчёт её правильно отбросил.

Как читать строку «чем ровнее, тем лучше»

В отчёте есть строка с вибрацией 1× по каждому мотору. Для второго полёта VX3.5 она такая: M1: 1.4, M2: 0.7, M3: 2.3, M4: 2.9.

Слева столбцы вибрации 1×, 2× и 3× для моторов M1–M4: по 1× выделяется M4 (2,95 °/с), 2× у всех низкая, 3× ровная около 1 °/с. Справа отклонение оборотов каждого мотора от остальных при той же команде: все линии в пределах ±4%, далеко от порогов ±6% и −10%
VX3.5, второй полёт. A — 1×, 2× и 3× по моторам за вычетом шума, серые точки — уровень шума: по 1× выделяется M4, 2× везде ниже 0,6 °/с, 3× ровная — признаков повреждённой лопасти нет. B — отклонение оборотов от остальных моторов при той же команде: всё внутри ±4%. Красный пунктир — пороги ±6%, красные точки — −10%.

Абсолютные числа зависят от рамы, лучей и крепления полётника, поэтому сравнивать «2,9 °/с» между квадриками бессмысленно. Сравнивай моторы внутри одного аппарата и один аппарат со своими прошлыми логами. Если после замены пропа строка выровнялась — проблема решена, даже если отчёт до этого молчал.

Когда данных мало

Лог PX4 1.12 с записью 200 Гц на большом 6S-аппарате: моторы на 41–53 Гц, гармоники то падают ниже 40 Гц, то упираются в верхний край (85 Гц), то пересекаются. 1× посчиталась только для двух моторов. По 2× отчёт выдал «мотор 2: повышена 2-я гармоника, в 52,9× сильнее (5,3 против ~0,0 °/с)», но у остальных моторов не удалось измерить шум, в эталон они не попали, и кратность посчитана от 0,1 °/с — хотя у мотора 1 сама 2× была даже выше, 8,6 °/с. Пропы осмотреть стоит, но это не вердикт: смотри на абсолютные °/с, число окон и частоту записи, а не только на кратность.

Обороты при одинаковой команде

Вторая независимая проверка не про вибрацию, а про трение и нагрузку. Исправные моторы с одинаковыми пропами при одной и той же команде крутятся одинаково. Анализ раскладывает полёт по команде мотора (от 10 до 90% с шагом 5%; в диапазоне нужно хотя бы 0,3 с данных по каждому мотору) и сравнивает медианные обороты каждого мотора со средним остальных — чтобы один слабый мотор не делал соседей «быстрыми». Итог — среднее по диапазонам.

Тонкость: ротор разгоняется не мгновенно, обороты отстают от команды примерно на 20 мс. Если это не учесть, сильнее нагруженные моторы (например, задняя пара при смещённом ЦТ) выглядят на 2–3% «медленнее» без всякой неисправности. Поэтому команда перед сравнением пропускается через такое же запаздывание.

Отклонение от остальныхУровеньЧто проверить
−6% и нижепредупреждениеПодшипники (крути рукой — нет ли хруста), задевает ли колокол, следы перегрева обмотки, шаг пропа
−10% и нижекритичноТо же, и до проверки на нём лучше не летать: он съедает запас тяги и греется
+6% и вышепредупреждениеПроп: сколота или срезана лопасть, другой шаг или размер, проворачивается на валу

Как выглядит норма: у VX3.5 итог +2,0%, −1,7%, +2,0%, −2,2%, в отдельных диапазонах до ±4% (рисунок выше, B). Задняя пара почти везде чуть «быстрее» передней — скорее всего, не из-за моторов: из-за смещённого ЦТ задние подолгу стоят на высокой команде, а передние доходят до неё короткими всплесками. У 6S-квадрика итоги ещё ровнее, в пределах ±0,6%. Порог 6% стоит с запасом над таким разбросом.

Сопоставляй обе проверки. Сильная 1× при нормальных оборотах — дисбаланс (так было с M4 у VX3.5). Пониженные обороты без всплеска 1× — трение или подгоревшая обмотка. И то и другое на одном моторе — чаще всего мотор после удара: погнутый вал или задевающий колокол.

Подтверди на столе

  1. Новый проп. Поставь на подозрительный мотор свежий проп из той же пачки и слетай. Пик ушёл — дело было в пропе. Заодно проверь, что ступица села ровно: песчинка или перекошенная шайба под пропом дают тот же дисбаланс.
  2. Мотор рукой. Отключи батарею, сними проп и покрути колокол (сразу после полёта мотор бывает горячим): хруст, неравномерность, люфт вала вверх-вниз, следы трения о статор — повод менять подшипники или мотор. Посмотри сбоку, не бьёт ли колокол при вращении: после удара его часто гнёт.
  3. Перестановка. Поменяй мотор местами с соседним. Проблема переехала — виноват мотор. Осталась на месте — ищи в регуляторе, пайке или луче.
  4. Геометрия. Положи раму на ровный стол и проверь, что все моторы стоят вертикально, а лучи не скручены.
  5. Контрольный лог. Слетай тот же простой полёт и сравни строку вибрации 1× с прошлой.

Тест на вкладке Motors с раскруткой моторов по одному — только без пропов. На столе без нагрузки часть дефектов не проявляется, поэтому последнее слово за логом.

Нумерация моторов. В Betaflight и INAV для Quad X: M1 — задний правый, M2 — передний правый, M3 — задний левый, M4 — передний левый. В ArduPilot и PX4: 1 — передний правый, 2 — задний левый, 3 — передний левый, 4 — задний правый. bbdoctor называет моторы в нумерации прошивки лога и, если раскладка рамы известна, пишет положение: «Мотор 4 (передний левый)».

Что ещё похоже на вибрацию, хотя моторы целы

Желе в видео

«Желе» — артефакт построчного считывания матрицы (rolling shutter): если камера дрожит, пока кадр читается сверху вниз, строки смещаются. Поэтому желе — прямой индикатор вибрации, которая доходит до камеры: дисбаланс пропа или колокола, болтающееся крепление, резонанс маунта.

Сначала лог: если у одного мотора выделяется 1×, меняй проп и смотри мотор, потом ставь свежий комплект пропов. Если вибрация по моторам ровная, а желе осталось, дело в креплении камеры: протяни винты, проверь, что камера не касается рамы, поставь демпферы или TPU-крепление. Мелкое высокочастотное желе стабилизация в постобработке убирает далеко не всегда.

Если оборотов в логе нет

INAV и EmuFlight, как правило, не пишут обороты каждого мотора в blackbox, Betaflight до 4.5 — тоже, а у ArduPilot и PX4 без ESC-телеметрии их неоткуда взять. Разбор по моторам тогда недоступен, и отчёт об этом пишет. Что остаётся:

Тогда остаётся старый способ: сначала новые пропы, потом перестановка моторов по одному. Если регуляторы умеют bidirectional DShot, включить его на Betaflight 4.5 быстрее, чем гонять перестановки.

Как проверить автоматически

Загрузи лог в bbdoctor — бесплатно и онлайн. Он делает все проверки из этого гайда. Если нужных полей в логе нет, отчёт скажет, какие включить, и даст команды CLI. Смотри пример отчёта, а настройки до полёта проверь на странице проверки конфига.

Частые вопросы

Как понять, какой мотор даёт вибрацию?

Нужен лог с нефильтрованным гироскопом и оборотами каждого мотора (bidirectional DShot или ESC-телеметрия). Тогда вибрацию можно разложить по моторам: у виноватого составляющая на частоте его вращения (1×) заметно выше, чем у остальных. bbdoctor отмечает мотор, если она в 1,8 раза сильнее, чем у остальных, и заметно выше уровня шума. Без оборотов в логе остаются перестановки пропов и моторов.

Как отличить плохой проп от плохого мотора?

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

Почему один мотор греется сильнее остальных?

Сравни его обороты при той же команде: если он крутится на 6% и больше медленнее соседей, мотор тормозят подшипники, задевающий колокол, подгоревшая обмотка или проп с большим шагом. Если обороты в норме, чаще всего виноват смещённый центр тяжести: одна пара моторов всё время работает сильнее и греется.

Работает ли поиск плохого мотора без bidirectional DShot?

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

Обновлено:

Другие гайды