Калибровка датчика тока 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. Пока идёт прогон с блоком питания или разблокирован
мотор мастера, перейти на другую вкладку нельзя (остальные вкладки неактивны):
аварийная кнопка остаётся на экране. Остановите прогон или заблокируйте мотор —
вкладки снова доступны.
Порядок калибровки (ручной ввод показаний)
- Обнулите Offset. В iNav Configurator: вкладка Battery → Current
Sensor Offset →
0. Оставшийся ненулевой offset исказит каждую пару замеров. Заодно запишите текущий Scale (обычно 400–4000) — начальное значение берётся из документации на регулятор/датчик тока. - Включите внешний мультиметр (или токовые клещи) в разрыв силового провода — между батареей и входом питания ESC/FC, чтобы прибор видел реальный мгновенный ток.
- ⚠️ Ещё раз убедитесь, что пропеллер снят, а аппарат надёжно закреплён — на этом шаге мотор реально раскручивается. На одном паке, в одной сессии заармите и прогоните мотор(ы) на нескольких разных уровнях газа (рекомендуется 5 и более, например: холостой ход, 25%, 50%, 75%, 100%). На каждом уровне, когда показания устоятся, запишите ток по мультиметру (А) и одновременное показание Battery Current по FC (Configurator → Battery, либо OSD).
- Заполните таблицу замеров на странице инструмента (минимум 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 — только по нижнему участку диапазона: экстраполяция на полётные десятки ампер не проверена этим способом.
Пошагово: первый запуск «сухим прогоном»
- Выберите схему, соберите подключение при выключенном выходе ЛБП.
- «Connect the flight controller», затем «Connect the power supply» — во втором диалоге браузера выберите порт ИМЕННО блока питания (мастер всегда спрашивает порт ЛБП явно, чтобы не открыть полётный контроллер второй раз). Под кнопками появятся модель и пределы прибора.
- «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», после неё сухой прогон повторяется.
- Только после успешного сухого прогона открывается «Enable live mode» — отдельная кнопка с диалогом подтверждения.
- В схеме B после включения выхода мастер ~3 с держит газ 0 — регулятор «армится» (пищит), и только потом поднимает газ. Между прямым и обратным проходом выход не выключается, газ — 0.
- Проверьте лимиты (ток — 1 А на первом проходе, мощность, суммарное время под нагрузкой ≤ 300 с, напряжение дважды) и отметьте подтверждения.
- «Start calibration». На каждой точке мастер: ставит ток/газ ступенями → ждёт установления (изменение меньше 2 мА или 1 % за три отсчёта подряд, не дольше 3 с) → сразу берёт 5 пар → переходит к следующей. Выдержки и пауз нет: мотор и резистор греются, «чем быстрее, тем лучше». Таблица показывает каждую точку и её время, ниже — общее время и время под нагрузкой.
- Результат (New Scale / New Offset) показывается и никуда не пишется, пока вы не нажмёте «Write to flight controller» (Scale и Offset по имени + сохранение в EEPROM).
- «Check run (2–3 points)» — проверочный прогон с новыми значениями:
проходит, если на каждой точке
|ток полётного контроллера − эталон| ≤ max(0.05 А, 2 %). - «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, версия для ролика-инструкции):
- Нажмите «Calibrate current sensor (wizard)» — появляется секция мастера с бегунком газа.
- «Connect the flight controller» — выберите COM-порт полётного контроллера в диалоге браузера. Мастер сам читает текущий Scale и Offset; если Offset не 0, разблокировать бегунок нельзя, пока не нажмёте «Zero the offset on the flight controller» (методика требует Offset=0 до замеров).
- «Unlock throttle test» — модалка «Remove the propeller»: подтвердите чекбоксом, что пропеллер снят и аппарат закреплён. Кнопка окрашена в красный и разблокируется ТОЛЬКО чекбоксом.
- Плавно двигайте бегунок «Throttle» — мотор раскручивается (в пределах лимита газа-предохранителя выше, по умолчанию 20%, можно поднять). Как только отпустили бегунок (мышь/тач/клавиатура) — газ автоматически возвращается на 0, а показание тока с полётного контроллера появляется первой строкой таблицы.
- Впишите показание СВОЕГО мультиметра/токовых клещей в соседнее поле той же строки — точка готова.
- Двигайте бегунок ещё раз, на другой уровень газа, отпустите — появляется НОВАЯ строка (пока мультиметр предыдущей точки не введён, повторное отпускание просто обновляет ток в текущей строке — не создаёт лишних точек). Повторите для 2–5 и более уровней газа (idle/25/50/75/100%).
- Кнопка «Calculate» становится активной после 2 готовых точек (минимум для регрессии); подсказка под таблицей рекомендует 5 и более.
- Нажмите её — сервер считает Scale/Offset (
calc_scale_and_offset, та же формула) и показывает результат (New Scale / New Offset). Сам по себе расчёт НИЧЕГО не пишет на полётный контроллер. - Появляется кнопка «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 → снятие защиты → газ на разных уровнях → «Рассчитать».
Связанные разделы
- Подбор винтомоторной группы — ток и мощность силовой установки по расчёту
- Разделы платформы — где найти инструменты