Not translated yet — page language: Russian

Калибровка датчика тока

Обновлено: 2026-11-12
На этой странице

Калибровка датчика тока iNav

Зачем это нужно

Датчик тока, встроенный в полётный контроллер или регулятор, почти всегда врёт «из коробки». Заводское значение Scale в iNav — это усреднённая цифра из даташита конкретного датчика/шунта, а не измерение именно вашей платы и вашей проводки. На практике показание может отличаться от истины на 10–30%.

Это не безобидная погрешность: по показанию Battery Current iNav считает, сколько заряда (мАч) осталось в батарее прямо в полёте. Если датчик занижает ток, контроллер решит, что заряда осталось больше, чем на самом деле — и предупреждение о низком заряде придёт позже, чем нужно, вплоть до отказа мотора в воздухе без предупреждения. Калибровка занимает около 10 минут с мультиметром и превращает «примерно» в «точно».

Инструмент /tools/current-sensor берёт на себя всю математику (line of best fit по методике INAV/mrd-rc) — от вас нужны только несколько показаний.

Что нужно

⚠️ Пропеллеры СНЯТЫ — прежде всего остального. Калибровка требует раскручивать мотор на разных уровнях газа под нагрузкой — он будет реально крутиться, как только вы дадите газ. Снимите пропеллер(ы), надёжно закрепите аппарат (тиски, стенд, тяжёлый груз) и держите руки, провода и посторонние предметы подальше от мотора. Проверяйте это перед каждым прогоном мотора, а не только один раз в начале — ниже это напоминание повторяется.

Дальше — что понадобится:

  • Мультиметр или токовые клещи в режиме измерения постоянного тока (DC A) — это и есть «истинный» ток, с которым сверяется показание FC. Мультиметр без клещей включается в разрыв силового провода, между батареей и входом питания ESC/FC (потребуется один раз разрезать провод или сделать измерительный переходник); токовые клещи провод разрывать не заставляют.
  • Заряженный аккумулятор (пак). На почти разряженном паке недоступны высокие токи на большом газу — точки калибровки лягут слишком близко друг к другу, регрессия станет менее надёжной.
  • Компьютер и USB-кабель. Нужны, чтобы обнулить Offset в INAV Configurator и прочитать Battery Current (альтернатива для чтения — OSD, если он показывает ток в реальном времени). Для мастера вкладки «Полуавтомат» ниже USB обязателен: он говорит с полётным контроллером прямо из браузера (Web Serial).

Как это работает (методика)

Инструмент /tools/current-sensor рассчитывает поправочные коэффициенты Current Sensor Scale и Current Sensor Offset для iNav по канону INAV/mrd-rc: регрессия по парам мгновенного тока — показание внешнего мультиметра (истина) против показания Battery Current полётного контроллера, снятые ОДНОВРЕМЕННО на разных уровнях газа.

⚠️ Без внешнего измерительного прибора калибровку не сделать. У инструмента уже была история ошибочных методик — обе считали не то:

  • Самая первая версия усредняла отношения old_scale × (израсходовано по OSD за полёт ÷ залито зарядным устройством после полёта) по нескольким пакам — на неровных бытовых замерах это давало абсурдные значения Scale (внутренний баг).
  • Следующая версия заменила усреднение на регрессию (line of best fit), но всё ещё сравнивала интегральные величины за разные события: расход мАч за полёт против последующего заряда мАч зарядным устройством. Это методически неверно — разряд и заряд отличаются по КПД, температуре и потерям, это не пара «истина / показание прибора» в одной точке.

Актуальная методика — пары мгновенного тока (не мАч!), снятые одновременно, на разных уровнях газа, в одной сессии, на одном паке, с current_meter_offset = 0, выставленным ДО начала замеров (иначе оставшийся offset исказит каждую пару). Именно так считает калькулятор-эталон mrd-rc.

Формула сверена с калькулятором-эталоном mrd-rc (Setting the current sensor in iNav, математический вывод — Current Sensor Scale and Offset calculation: how it works): метод «линия наилучшего приближения» (line of best fit). Каждая пара (мультиметр, FC) — точка данных; регрессия «что показал FC» ~ «что реально показал мультиметр» даёт И новый Scale (наклон), И новый Offset (пересечение с осью, переведённое в милливольты).

На странице три способа вкладками: «Полуавтомат» (открыта по умолчанию, мотор и полётный контроллер по USB), «Стандартный» (шаги и ручной калькулятор) и «Полностью автоматический» (лабораторный блок питания). Нужную вкладку открывает ссылка с #semi, #manual или #auto. Пока идёт прогон с блоком питания или разблокирован мотор мастера, перейти на другую вкладку нельзя (остальные вкладки неактивны): аварийная кнопка остаётся на экране. Остановите прогон или заблокируйте мотор — вкладки снова доступны.

Порядок калибровки (ручной ввод показаний)

  1. Обнулите Offset. В iNav Configurator: вкладка Battery → Current Sensor Offset → 0. Оставшийся ненулевой offset исказит каждую пару замеров. Заодно запишите текущий Scale (обычно 400–4000) — начальное значение берётся из документации на регулятор/датчик тока.
  2. Включите внешний мультиметр (или токовые клещи) в разрыв силового провода — между батареей и входом питания ESC/FC, чтобы прибор видел реальный мгновенный ток.
  3. ⚠️ Ещё раз убедитесь, что пропеллер снят, а аппарат надёжно закреплён — на этом шаге мотор реально раскручивается. На одном паке, в одной сессии заармите и прогоните мотор(ы) на нескольких разных уровнях газа (рекомендуется 5 и более, например: холостой ход, 25%, 50%, 75%, 100%). На каждом уровне, когда показания устоятся, запишите ток по мультиметру (А) и одновременное показание Battery Current по FC (Configurator → Battery, либо OSD).
  4. Заполните таблицу замеров на странице инструмента (минимум 2 пары, 5 и более — точнее) и нажмите Рассчитать. Запишите Новый Scale и Новый Offset обратно в iNav Configurator → Battery → Current Sensor.

Числовой пример (посчитано, подставьте свои замеры)

Ниже — правдоподобный набор замеров для типового мини-квадрика/крыла на 4S (старый Scale = 400, три уровня газа: холостой ход, крейсер, максимум) и полный расчёт, каким его делает сервер. Это ИЛЛЮСТРАЦИЯ метода, а не ваши данные — снимите свои показания мультиметром и введите их в калькулятор на этой странице.

№ Газ Ток, мультиметр i_meter (А) Ток, FC i_fc (А)
1 холостой ход 3.2 3.6
2 крейсер (~50%) 11.5 12.9
3 максимум 24.0 26.5

Старый Scale (из iNav) — 400.

Шаг 1 — средние значения:

mean_meter = (3.2 + 11.5 + 24.0) / 3 = 12.900
mean_fc    = (3.6 + 12.9 + 26.5) / 3 = 14.333

Шаг 2 — отклонения от среднего и их произведения/квадраты (нужны для наклона регрессии; отклонения даны с 3 знаками после запятой, чтобы ручной пересчёт по калькулятору сходился с итоговой суммой):

№ i_meter − mean_meter i_fc − mean_fc произведение (i_meter − mean_meter)²
1 −9.700 −10.733 104.11 94.09
2 −1.400 −1.433 2.01 1.96
3 11.100 12.167 135.05 123.21
Σ (сумма) — — 241.17 219.26

Шаг 3 — наклон (slope) и новый Scale:

slope     = Σ произведение / Σ квадратов = 241.17 / 219.26 ≈ 1.0999
new_scale = old_scale × slope = 400 × 1.0999 ≈ 439.97 → округляем → 440

Шаг 4 — пересечение (intercept) и новый Offset:

intercept = mean_fc − slope × mean_meter
          = 14.333 − 1.0999 × 12.900 ≈ 0.144
offset_mV = intercept × new_scale / 10 = 0.144 × 439.97 / 10 ≈ 6.35 → округляем → 6

Итог для этого примера: новый Scale = 440, новый Offset = 6 мВ.

Хотите проверить расчёт — введите Old Scale 400 и эти три пары в калькулятор на вкладке «Стандартный» этой же страницы: он должен выдать ровно New Scale = 440, New Offset = 6. FC в этом примере завышал ток примерно на 10% (slope ≈ 1.10) — после записи новых значений Battery Current на экране станет близок к показанию мультиметра на всех уровнях газа.

Три пары — математический минимум с запасом для демонстрации; в реальной калибровке используйте 5 и более уровней газа, как рекомендует методика (см. таблицу требований ниже) — больше точек усредняют шум замеров и дают более надёжный результат.

Замеры

Таблица принимает до восьми пар (ток по мультиметру / ток по FC, оба в А):

Пара Обязательна?
1–2 да — без второй пары Offset не считается
3–5 настоятельно рекомендуются — методика требует 5+ уровней газа
6–8 опционально, повышают точность

Инструмент не блокирует расчёт при 2–4 парах, но предупреждает: методика mrd-rc/INAV рассчитана на 5 и более точек с разным током — меньшее число даёт менее надёжную регрессию.

Результат

  • Новый Scale — запишите в iNav Configurator → Battery → Current Sensor Scale;
  • Новый Offset — туда же, поле Current Sensor Offset (значение уже в милливольтах, как ожидает iNav — конвертировать не нужно).

После записи коэффициентов слетайте и сверьте: Battery Current на экране FC должен быть близок к показанию независимого мультиметра/ваттметра на разных уровнях газа.

Автомат: лабораторный блок питания (ЛБП) под управлением сайта

⚠️ Проверено на эмуляторе, на реальном железе — ещё нет. Логика мастера, аварийные ветки и кадры протокола проверены автоматическими тестами на имитации блока питания и полётного контроллера. Первый запуск на настоящем стенде — только по порядку ниже, начиная с сухого прогона.

Вкладка «Полностью автоматический» (ссылка #auto) — карточка «Fully automatic calibration (bench power supply)». Мультиметр не нужен: эталоном служит выходной ток самого лабораторного блока питания, который сайт читает по USB одновременно с током полётного контроллера. Мастер сам задаёт ток (или газ), дожидается, пока ток устоится, снимает пары «ЛБП / полётный контроллер», считает Scale/Offset той же формулой и — только по вашей кнопке — пишет их на полётный контроллер.

Нужно: настольный Chrome/Edge (Web Serial, заняты сразу ДВА USB-порта — полётный контроллер и ЛБП) и поддерживаемый блок питания:

Прибор Связь Статус
Riden RD6006 Modbus RTU по USB, 115200, адрес 1 кадры протокола сверены с исследованием протокола
Riden RD6006P то же, множители V×1000, I×10000 (ShayBox/Riden) не проверено на приборе — доступен только сухой прогон
Своё SCPI-устройство (ESP32) текстовые команды SCPI заготовка в коде; в списке скрыто до первого реального устройства

Две схемы подключения (шаг 1 мастера)

Схема A — нагрузочный резистор (ЛБП в режиме стабилизации тока). Для тех, у кого есть мощный резистор или электронная нагрузка; мотор не нужен.

плюс ЛБП → вход батареи полётного контроллера (VBAT) → датчик тока → выход датчика (площадка регулятора)
        → резистор 0.5–1 Ом, рассчитанный на мощность (или электронная нагрузка) → минус ЛБП

Полётный контроллер питается только от USB, батарею не подключать. Ток задаёт мастер уставкой блока питания, введённое напряжение — потолок. Точки по умолчанию 0, 0.5, 1, 2, 3, 4, 5, 6 А — но не выше лимита тока (на первом проходе 1 А) и не выше возможностей прибора; затем обратный проход сверху вниз. Мощность на резисторе — I² × R: 6 А на 1 Ом это 36 Вт, резистор на 10 Вт сгорит.

Схема B — мотор (ЛБП в режиме стабилизации напряжения вместо батареи).

ЛБП → силовой разъём самолёта (вместо батареи) → датчик тока → регулятор → мотор
полётный контроллер дополнительно подключён по USB

Напряжение ЛБП = напряжение пакета (вводится дважды, допустимо 6.0–25.2 В, то есть 2S–6S), лимит тока ЛБП = ваш потолок. Ток задаёт газ — мастер поднимает его ступенями (по умолчанию 5 %, не больше 10 %) до границы газа (по умолчанию 30 %) или пока ток не дойдёт до 90 % потолка; между прямым и обратным проходом газ — 0. Пропеллер снят, мотор закреплён — без двух этих отметок запуск невозможен.

Ограничение RD6006 — 6 А. На датчике на 100–200 А offset определяется хорошо, а scale — только по нижнему участку диапазона: экстраполяция на полётные десятки ампер не проверена этим способом.

Пошагово: первый запуск «сухим прогоном»

  1. Выберите схему, соберите подключение при выключенном выходе ЛБП.
  2. «Connect the flight controller», затем «Connect the power supply» — во втором диалоге браузера выберите порт ИМЕННО блока питания (мастер всегда спрашивает порт ЛБП явно, чтобы не открыть полётный контроллер второй раз). Под кнопками появятся модель и пределы прибора.
  3. «Dry run» — сухой прогон: ТОЛЬКО чтение. Мастер читает ID прибора, уставки (V-SET, I-SET, OUT), пять отсчётов напряжения/тока ЛБП и тока полётного контроллера, Scale/Offset и состояние ARM полётного контроллера. Плановых записей нет, выход остаётся выключенным. Исключение — одна аварийная запись: «выход выкл» (OUT off). Она возможна и в сухом прогоне: если прибор покажет ток при выключенном выходе (или вы нажмёте аварийную кнопку), мастер пошлёт команду выключения выхода — и только её. Сверьте числа в таблице: ток ЛБП ≈ 0, выход OFF, offset полётного контроллера 0. Не прошёл — названа причина; offset ≠ 0 обнуляется кнопкой «Zero the offset on the flight controller», после неё сухой прогон повторяется.
  4. Только после успешного сухого прогона открывается «Enable live mode» — отдельная кнопка с диалогом подтверждения.
  5. В схеме B после включения выхода мастер ~3 с держит газ 0 — регулятор «армится» (пищит), и только потом поднимает газ. Между прямым и обратным проходом выход не выключается, газ — 0.
  6. Проверьте лимиты (ток — 1 А на первом проходе, мощность, суммарное время под нагрузкой ≤ 300 с, напряжение дважды) и отметьте подтверждения.
  7. «Start calibration». На каждой точке мастер: ставит ток/газ ступенями → ждёт установления (изменение меньше 2 мА или 1 % за три отсчёта подряд, не дольше 3 с) → сразу берёт 5 пар → переходит к следующей. Выдержки и пауз нет: мотор и резистор греются, «чем быстрее, тем лучше». Таблица показывает каждую точку и её время, ниже — общее время и время под нагрузкой.
  8. Результат (New Scale / New Offset) показывается и никуда не пишется, пока вы не нажмёте «Write to flight controller» (Scale и Offset по имени + сохранение в EEPROM).
  9. «Check run (2–3 points)» — проверочный прогон с новыми значениями: проходит, если на каждой точке |ток полётного контроллера − эталон| ≤ max(0.05 А, 2 %).
  10. «Download the command log» — журнал всех команд и ответов обоих приборов с отметками времени (пригодится при разборе).

Безопасность

  • Сначала сухой прогон. Боевой режим недоступен, пока сухой прогон не прошёл в этой сессии; после отключения любого прибора, смены прибора или схемы его нужно пройти заново.
  • Консервативные лимиты по умолчанию: ток 1 А, газ 30 %, ступень газа ≤ 10 %, точка — аварийный потолок 10 с, суммарно под нагрузкой — 60 с (поднимается до 300 с). Лимит тока нельзя поднять выше паспорта прибора.
  • Уставки сверяются с прибором: перед каждым включением выхода мастер читает фактические V-SET, I-SET и OUT из прибора; несовпадение с записанным — отказ без включения.
  • Сторож: нет свежих данных от ЛБП или полётного контроллера дольше 500 мс, ток выше лимита, резкий скачок тока, мощность выше лимита, точка дольше 10 с, превышено суммарное время → мастер сразу шлёт газ 0 и «выход выкл» (в порт напрямую, не дожидаясь текущей команды), затем читает состояние выхода и при необходимости повторяет — до трёх раз. Причина — на экране и в журнале. Если выключение не подтвердилось, на экране остаётся красное предупреждение «выход ЛБП может быть включён — выключите кнопкой на приборе».
  • Переход на другую вкладку, ошибка в коде мастера — та же аварийная последовательность с подтверждением выключения.
  • Закрытие или обновление вкладки во время прогона — браузер сначала спросит подтверждение ухода (и прогон к этому моменту уже остановлен); что происходит при самом закрытии — см. ниже.
  • «Disconnect» во время прогона заблокирована; в покое она сначала выключает выход и газ и только потом закрывает порты.
  • Аварийная кнопка «■ EMERGENCY STOP» видна и активна всегда.

Чего браузер сделать НЕ может — и что тогда делать руками.

  • Закрытие или обновление вкладки. В последний момент мастер отправляет газ 0 и «выход выкл», но только «по возможности»: Web Serial лишь ставит кадр в поток порта, а при выгрузке страницы браузер закрывает порт, и подтвердить выключение уже нечем. Закрыли вкладку во время прогона — посмотрите на индикатор OUT на приборе и при необходимости выключите кнопкой.
  • Обрыв USB блока питания (выдернули кабель, хаб отключил порт): выключить выход по этому кабелю физически нельзя. Мастер остановит мотор (если полётный контроллер на связи) и покажет причину, но выход ЛБП останется в том состоянии, в каком был — выключайте кнопкой OUTPUT на приборе.
  • Обрыв USB полётного контроллера в схеме B: газ 0 по этому кабелю уже не отправить; мастер выключит выход ЛБП — регулятор обесточится, мотор остановится.
  • Зависание браузера или компьютера, убитая вкладка, сон ноутбука: страница не успевает ничего отправить. В схеме B полётный контроллер при этом держит последнее значение газа motor test.
  • Поэтому: заранее выставьте на самом приборе OVP/OCP чуть выше ваших лимитов, не отходите от стенда во время прогона и держите руку у кнопки выхода прибора.
  • Белый список записи: в ЛБП пишутся только V-SET, I-SET и OUT (пороги защиты, адрес, калибровка прибора — никогда); в полётный контроллер — только газ motor test, current_meter_scale, current_meter_offset и сохранение EEPROM.
  • Своей защиты у Riden по USB нет (сторожевого таймера в родной прошивке нет) — отсюда весь список выше.
  • Модель, не проверенная на приборе (RD6006P), работает только в сухом прогоне: ошибка множителя ослепила бы все проверки тока.
  • Схема B только с аналоговыми выходами на моторы. «Газ 0» мастер подтверждает чтением выходов полётного контроллера (MSP_MOTOR, все каналы на «стопе»). Для протоколов STANDARD и ONESHOT125 это значения в микросекундах; для DShot (и неизвестного протокола) шкала этих значений на живом полётном контроллере не проверена, и ошибка там опасна — «стоп» при вращающемся моторе. Поэтому при motor_pwm_protocol не STANDARD/ONESHOT125 схема B доступна только в сухом прогоне. Первая живая проверка: с пропеллером снятым, мотор закреплён, в INAV Configurator → Outputs сравните показания выходов на стопе и на малом газе с тем, что пишет журнал мастера (MOTOR в выгрузке), — только после этого схему B с DShot можно разблокировать отдельным тикетом.

Мастер вкладки «Полуавтомат» (бегунок мотора + MSP)

На той же странице, на вкладке «Полуавтомат» (она открыта по умолчанию), — карточка «Semi-automatic calibration». Кнопка «Calibrate current sensor (wizard)» открывает мастер, который собирает пары автоматически, вместо ручного набора текста в восемь полей. Мастер подключается к полётному контроллеру НАПРЯМУЮ из браузера (Web Serial — только настольный Chrome/Edge по HTTPS, тот же транспорт, что /tools/inav-connect), у него своё соединение — /tools/inav-connect трогать/держать открытым параллельно не нужно.

⚠️ Крутится реальный мотор. Обязательно снимите пропеллер до того, как разблокируете бегунок газа — мастер явно предупреждает об этом модалкой с чекбоксом-подтверждением перед стартом.

Шаги (соответствуют реальному UI, версия для ролика-инструкции):

  1. Нажмите «Calibrate current sensor (wizard)» — появляется секция мастера с бегунком газа.
  2. «Connect the flight controller» — выберите COM-порт полётного контроллера в диалоге браузера. Мастер сам читает текущий Scale и Offset; если Offset не 0, разблокировать бегунок нельзя, пока не нажмёте «Zero the offset on the flight controller» (методика требует Offset=0 до замеров).
  3. «Unlock throttle test» — модалка «Remove the propeller»: подтвердите чекбоксом, что пропеллер снят и аппарат закреплён. Кнопка окрашена в красный и разблокируется ТОЛЬКО чекбоксом.
  4. Плавно двигайте бегунок «Throttle» — мотор раскручивается (в пределах лимита газа-предохранителя выше, по умолчанию 20%, можно поднять). Как только отпустили бегунок (мышь/тач/клавиатура) — газ автоматически возвращается на 0, а показание тока с полётного контроллера появляется первой строкой таблицы.
  5. Впишите показание СВОЕГО мультиметра/токовых клещей в соседнее поле той же строки — точка готова.
  6. Двигайте бегунок ещё раз, на другой уровень газа, отпустите — появляется НОВАЯ строка (пока мультиметр предыдущей точки не введён, повторное отпускание просто обновляет ток в текущей строке — не создаёт лишних точек). Повторите для 2–5 и более уровней газа (idle/25/50/75/100%).
  7. Кнопка «Calculate» становится активной после 2 готовых точек (минимум для регрессии); подсказка под таблицей рекомендует 5 и более.
  8. Нажмите её — сервер считает Scale/Offset (calc_scale_and_offset, та же формула) и показывает результат (New Scale / New Offset). Сам по себе расчёт НИЧЕГО не пишет на полётный контроллер.
  9. Появляется кнопка «Write to flight controller + reboot» — активна, только пока есть посчитанные значения И есть подключение. По нажатию мастер по имени записывает current_meter_scale/current_meter_offset на борт (MSP2_COMMON_SET_SETTING), сохраняет их в EEPROM (иначе значения потерялись бы при следующем отключении питания) и предлагает перезагрузить полётный контроллер, чтобы калибровка точно применилась — подтвердите в диалоге браузера («плата отключится и переподключится»); можно отказаться — значения уже сохранены в EEPROM независимо от перезагрузки. Рядом с кнопкой всегда видно состояние: «не записано» / «записано ✓ (scale=…, offset=…)» / текст ошибки, плюс тост об успехе или отказе. Повторное нажатие безопасно перезаписывает те же значения ещё раз.

Аварийная остановка: пока есть связь с полётным контроллером, доступна большая красная кнопка «■ EMERGENCY STOP» — немедленно останавливает мотор и снимает разблокировку бегунка, независимо от текущего состояния. Кнопка «Disarm» делает то же самое в спокойном режиме (конец сессии). Если бегунок не трогали 15 секунд — мастер сам останавливает мотор и снимает разблокировку (защита от «забыл»).

Если браузер не поддерживает Web Serial (Firefox, Safari, мобильные) — мастер честно сообщает об этом; ручная таблица на вкладке «Стандартный» по-прежнему работает везде.

Видеоинструкция

Те же шаги в виде короткого ролика (съёмка мультиметра и мотора + запись экрана мастера, сценарий подготовлен) — удобно, если проще посмотреть один раз, чем читать инструкцию по пунктам. Порядок действий тот же: пропеллер снят → мультиметр в разрыв провода → подключение по USB → снятие защиты → газ на разных уровнях → «Рассчитать».

Связанные разделы