Betaflight | PINIO & PINIO Box (ПИНИО и Бокс ПИНИО)
Обзор
PINIO — это абстракция простого интерфейса GPIO (General Purpose Input/Output — универсальные входы/выходы).
PINIO BOX — это механизм для привязки логических боксов (режимов) к выходам PINIO.
Большинство целевых плат (flight controllers) поддерживают настройку до четырёх выводов для функции PINIO, которыми затем можно управлять через PINIO BOX.
PINIO
Вывод микроконтроллера (MCU) можно назначить на PINIO с помощью CLI-команды resource:
resource PINIO <индекс> <ID_вывода>
Пример назначения ресурсов для PINIO:
resource PINIO 1 A01 resource PINIO 2 A08 resource PINIO 3 C99 resource PINIO 4 D02
Конфигурация PINIO (PINIO CONFIG)
Конфигурация режима работы каждого вывода задаётся CLI-переменной pinio_config
. Это список (массив) из 8-битных значений, разделённых запятыми.
Старший бит (MSB) указывает на инверсию сигнала, а оставшиеся 7 бит определяют режим ввода/вывода согласно описанию в drivers/pinio.h
(в текущей реализации поддерживается только режим push-pull output).
Константа | HEX | DEC | Описание |
---|---|---|---|
PINIO_CONFIG_OUT_INVERTED | 0x80 | 128 | Инвертированный выход |
PINIO_CONFIG_MODE_MASK | 0x7F | 127 | Маска для режима |
PINIO_CONFIG_MODE_OUT_PP | 0x01 | 1 | Выход в режиме Push-Pull (двухтактный выход) |
Примечание: Значения можно комбинировать, например, инверсия плюс режим.
Пример значения pinio_config
:
set pinio_config = 1,129,1,1
Это означает:
- режим Output-Push-Pull для PINIO #1, #3 и #4
- режим Inverted Output-Push-Pull для PINIO #2 (128 + 1 = 129)
Значение по умолчанию: 1
(Output-Push-Pull).
PINIO BOX (Бокс ПИНИО)
CLI-переменная pinio_box
— это список, разделённый запятыми, из постоянных ID боксов (Permanent ID). Она связывает боксы с соответствующими выходами PINIO.
После привязки статус активации бокса (включён/выключен) отражается на состоянии связанного выхода PINIO (и, следовательно, на физическом выводе). Механизм PINIO BOX самостоятельно отслеживает состояние активации боксов и работает независимо от их основного назначения, по сути расширяя управление выходами PINIO через боксы.
Постоянные ID с 40 по 43 соответствуют пользовательским боксам USER1–USER4, которые отображаются в списках боксов на вкладке «Modes» в конфигураторе.
Пример установки pinio_box
:
set pinio_box = 0,39,43,255
При такой настройке PINIO #1–#4 будут связаны с бокcами:
PINIO | Описание | Постоянный ID |
---|---|---|
1 | ARM (Взведение) | 0 |
2 | VTX PIT MODE | 39 |
3 | USER4 | 43 |
4 | BOXID_NONE (Не используется) | 255 |
Таблица постоянных ID боксов (AUX-режимов) — источник msp/msp_box.c:
Бокс (Box) | Режим (Mode) | ID | Примечания |
---|---|---|---|
BOXARM | ARM | 0 | |
BOXANGLE | ANGLE | 1 | |
BOXHORIZON | HORIZON | 2 | |
BOXALTROLD | ALTITUDE HOLD | 3 | добавлено в 4.6 |
BOXANTIGRAVITY | ANTI GRAVITY | 4 | |
BOXMAG | MAG | 5 | |
BOXHEADFREE | HEADFREE | 6 | |
BOXHEADADJ | HEADADJ | 7 | |
BOXCAMSTAB | CAMSTAB | 8 | |
BOXCAMTRIG | CAMTRIG | 9 | удален |
BOXGPSHOME | GPS HOME | 10 | удален |
BOXPOSHOLD | POSITION HOLD | 11 | добавлено в 4.6 |
BOXPASSTHRU | PASSTHRU | 12 | |
BOXBEEPERON | BEEPER | 13 | |
BOXLEDMAX | LEDMAX | 14 | удален |
BOXLEDLOW | LEDLOW | 15 | |
BOXLLIGHTS | LLIGHTS | 16 | удален |
BOXCALIB | CALIB | 17 | |
BOXGOV | GOVERNOR | 18 | удален |
BOXOSD | OSD DISABLE SW | 19 | |
BOXTELEMETRY | TELEMETRY | 20 | |
BOXGTUNE | GTUNE | 21 | удален |
BOXRANGEFINDER | RANGEFINDER | 22 | удален |
BOXSERVO1 | SERVO1 | 23 | |
BOXSERVO2 | SERVO2 | 24 | |
BOXSERVO3 | SERVO3 | 25 | |
BOXBLACKBOX | BLACKBOX | 26 | |
BOXFAILSAFE | FAILSAFE | 27 | |
BOXAIRMODE | AIR MODE | 28 | |
BOX3D | DISABLE / SWITCH 3D | 29 | |
BOXFPVANGLEMIX | FPV ANGLE MIX | 30 | |
BOXBLACKBOXERASE | BLACKBOX ERASE (>30s) | 31 | |
BOXCAMERA1 | CAMERA CONTROL 1 | 32 | |
BOXCAMERA2 | CAMERA CONTROL 2 | 33 | |
BOXCAMERA3 | CAMERA CONTROL 3 | 34 | |
BOXFLIPOVERAFTERCRASH | FLIP OVER AFTER CRASH | 35 | |
BOXPREARM | PREARM | 36 | |
BOXBEEPGPSCOUNT | BEEP GPS SATELLITE COUNT | 37 | |
BOX3DDISABLESWITCH | 3D ON A SWITCH | 38 | удален |
BOXVTXPITMODE | VTX PIT MODE | 39 | |
BOXUSER1 | USER1 | 40 | |
BOXUSER2 | USER2 | 41 | |
BOXUSER3 | USER3 | 42 | |
BOXUSER4 | USER4 | 43 | |
BOXPIDAUDIO | PID AUDIO | 44 | |
BOXPARALYZE | PARALYZE | 45 | |
BOXGPSRESCUE | GPS RESCUE | 46 | |
BOXACROTRAINER | ACRO TRAINER | 47 | |
BOXDISABLEVTXCONTROL | DISABLE VTX CONTROL | 48 | |
BOXLAUNCHCONTROL | LAUNCH CONTROL | 49 | |
BOXMSPOVERRIDE | MSP OVERRIDE | 50 |
Примечание: Значение 255 определено как BOXID_NONE
и означает, что слот PINIO не используется.
Примеры использования
Включение/выключение устройств
Многие встроенные или внешние устройства/модули имеют специальный провод для включения/выключения. Поведение зависит от устройства:
- Некоторым требуется подать сигнал HIGH (логическую 1, примерно 3.3 В) на этот провод для включения.
- Другим требуется сигнал LOW (логический 0, примерно 0 В) для включения.
Обязательно изучите документацию вашего устройства для правильного подключения.
Поиск предопределённых функций PINIO
Некоторые полётные контроллеры поставляются с заранее настроенными PINIO, например для переключения камеры, подачи питания VTX или управления встроенным Bluetooth.
Используйте команду resource
на работающей плате для просмотра назначения выводов:
resource PINIO 1 B00
Это означает, что PINIO #1 назначен на вывод B00. Для добавления новых PINIO не удаляйте существующие ресурсы, а увеличивайте индекс.
Отключение встроенного Bluetooth при взведении мотора (ARM)
Большинство контроллеров с Bluetooth модулем имеют настройку по умолчанию. Пример конфигурации:
# resource ... resource PINIO 1 B00 # get pinio_config pinio_config = 129,1,1,1 # get pinio_box pinio_box = 0,255,255,255
PINIO #1 назначен на вывод B00, pinio_box
равен 0, что соответствует боксу BOXARM
(ARM). При взведении бокс активируется.
pinio_config
равно 129 (128 + 1), то есть PINIO настроен как Output-Push-Pull с инверсией. Физический сигнал на выводе инвертирован — при активации бокса сигнал LOW (~0 В).
Встроенный Bluetooth выключается подачей LOW на вывод (по проекту схемы).
Отключение внешнего Bluetooth UART-адаптера при взведении мотора (ARM)
Принцип тот же, что и для встроенного модуля. Для настройки:
- Выберите свободный вывод для управления устройством.
- Уточните, какой сигнал (HIGH или LOW) требуется для включения/выключения устройства.
Пример:
Имеется PPM-вывод B09, который освобождается для управления внешним Bluetooth-модулем с проводом POWER или ENABLE. Документация показывает, что сигнал LOW выключает модуль.
Для настройки:
resource PPM B09 resource PINIO 1 C08 resource PINIO 2 C09 resource PPM none resource PINIO 3 B09 # get pinio_config pinio_config = 1,1,1,1 # set pinio_config = 1,1,129,1 # Устанавливаем инверсию (129) для PINIO #3 # get pinio_box pinio_box = 40,41,255,255 # set pinio_box = 40,41,0,255 # Привязываем PINIO #3 к боксу ARM (ID=0) # save
Комментарий:
- Для PINIO #3 изменяем
pinio_config
с 1 на 129 (инверсия), чтобы устройство выключалось при активации бокса (ARM). - Изменяем
pinio_box
с 255 на 0 (BOXARM
), чтобы PINIO #3 активировался при взведении. - Не забывайте выполнять команду
save
.
Включение Bluetooth в режиме Pit Mode (VTX PIT MODE)
Идентичная настройка, но для pinio_box
PINIO #3 устанавливаем 39 (BOXVTXPITMODE
), чтобы Bluetooth включался при активации Pit Mode.
Управление включением/выключением VTX с пульта с помощью пользовательской функции (USERn)
Цель — управлять питанием VTX с помощью переключателя на пульте.
Требуется:
- VTX с выводом для включения/выключения (POWER / ENABLE)
- Функция на плате контроллера, позволяющая отключать питание VTX (готовый модуль типа RealPit или самодельная схема с транзистором)
- Использование одного из боксов BOXUSER<n> (ID 40–43), который появится на вкладке Modes и может быть назначен на канал пульта
Пример:
# resource resource PPM B03 # resource PPM none # освобождаем ресурс PPM # resource PINIO 1 B03 # назначаем вывод B03 на PINIO #1 # get pinio_box pinio_box = 255,255,255,255 # set pinio_box = 40,255,255,255 # привязываем PINIO #1 к боксу USER1 (ID=40) # save
Комментарий:
pinio_config
менять не требуется — значение по умолчанию 1 (Output-Push-Pull) подходит для включения по сигналу HIGH.- Первое значение
pinio_box
устанавливается в 40 (BOXUSER1
), так как это первая пользовательская функция. - После сохранения в конфигураторе на вкладке Modes появится режим USER1, который можно привязать к каналу пульта.
- Не забудьте выполнить
save
.
Ключевые термины и пояснения
- PINIO (ПИНИО): Абстракция GPIO вывода для универсального управления.
- PINIO BOX (Бокс ПИНИО): Механизм привязки логических режимов (боксов) к физическим выводам PINIO.
- CLI (Command Line Interface): Интерфейс командной строки для настройки полётного контроллера.
- Resource (Ресурс): Команда CLI для назначения физических выводов микроконтроллера на логические функции.
- Box (Бокс / Режим): Логическое состояние (например, ARM, ANGLE, USER1), которое можно включить или выключить с помощью переключателя на пульте или автоматически.
- Permanent ID (Постоянный ID): Уникальный числовой идентификатор бокса.
- ARM (Взведение): Режим, когда двигатели коптера готовы к работе (обычно активируется стиком или переключателем).
- VTX (Video Transmitter): Видеопередатчик.
- Pit Mode: Режим пониженной мощности VTX (часто для соблюдения правил или экономии энергии на земле).
- Push-Pull Output (Двухтактный выход): Тип выхода цифровой логики, способный явно выдавать и высокий (HIGH), и низкий (LOW) уровень.
- Inverted (Инвертированный): Состояние физического вывода, противоположное логическому состоянию бокса (HIGH при выключенном боксе, LOW при включённом).
- BOXID_NONE (255): Значение, указывающее, что слот PINIO не используется.
- USER1 - USER4: Пользовательские боксы/режимы, которые можно свободно назначать для управления через PINIO.
Техническое руководство: Управление периферийными устройствами БПЛА через PinIO в Betaflight
Быстрая навигация
1. Введение и принцип работы
Функция PinIO позволяет программно управлять состоянием свободных контактов (пинов) полётного контроллера (FC), привязывая их к виртуальным "пользовательским режимам". Эти режимы, в свою очередь, активируются переключателями на пульте. Таким образом, при переключении тумблера на пульте соответствующий пин на FC подает сигнал (3.3V), который можно использовать для управления питанием или сигнальными входами периферийных устройств.
2. Определение свободных контактов на полётном контроллере
Первым шагом необходимо найти физически свободные и программно не занятые контакты на плате FC.
Визуальный осмотр
Найдите свободные контактные пады на плате. Часто хорошими кандидатами являются незадействованные выводы UART (например, TX/RX R11, T11), лишние выходы для моторов (Motor 5, 6) или контакты для LED-ленты.
Проверка в CLI
Подключите FC к Betaflight Configurator и перейдите во вкладку CLI.
Выполните команду:
resource
Эта команда выведет список всех ресурсов контроллера и их текущее назначение.
Проанализируйте список. Исключите из рассмотрения пины, которые уже используются (например, serial_rx
, serial_tx
, motor
, led
).
Найдите подходящие свободные пины. В примере используются пады R11 ( в списке ресурсов - serial_rx
) и T11 (serial_tx
). Их обозначение в ресурсах будет выглядеть как контакты B10
или A00
(точные названия зависят от FC).
Обозначение выводов контроллера
3. Освобождение и переназначение выбранных ресурсов
Если выбранный пин ранее был назначен на другую функцию (например, как UART), его необходимо освободить.
diff all
и сохраните вывод в текстовый файл для возможности отката.Освобождение ресурсов
В CLI выполните команды для освобождения ресурсов. Например, для освобождения пина serial_rx 11
и serial_tx 11
:
resource SERIAL_RX 11 NONE
resource SERIAL_TX 11 NONE
(Замените 11 на номер используемого ресурса, который вы нашли в шаге 2)
Сохранение изменений
Выполните команду:
save
для сохранения изменений и перезагрузки контроллера.
4. Настройка виртуальных режимов PinIO
Функция PinIO использует четыре слота (0-3) для создания до четырех пользовательских режимов.
!!! При настройке мы всегда обращаемся ко всем четырем.
Например:
set pinio_box = 0, 39, 43, 255
Проверка предустановок
Перед настройкой проверьте, не используются ли слоты PinIO другими функциями вашей прошивки:
get pinio_config
get pinio_box
Если значения не равны 255
(значение по умолчанию, означающее "не используется"), возможно, их не нужно изменять. В противном случае настраивайте свободные слоты.
Назначение пинов режимам
Свяжите физический пин с одним из четырех слотов PinIO. Например, чтобы назначить пин B10
на слот 0
:
set pinio_config = 0, 1, 255, 255
0
- номер слота PinIO1
- номер физического пина (здесь1
соответствуетB10
, уточните номер для вашего FC через командуresource
)255
- неиспользуемые слоты
Определение логики активации (pinio_box)
Задайте, к какому режиму работы БПЛА будет привязана активация пина. Чаще всего его привязывают к состоянию виртуального "пользовательского режима".
set pinio_box = 40, 41, 255, 255
40
- идентификатор для создания первого пользовательского режима (User 1)41
- идентификатор для второго пользовательского режима (User 2)
Сохранение настроек
Выполните команду:
save
5. Настройка вкладки "Modes" в Configurator
После перезагрузки в графическом интерфейсе Betaflight на вкладке Modes появятся новые режимы: User 1 и User 2 (или больше, в зависимости от настройки).
Назначение переключателей
Назначьте каждому из этих режимов отдельный переключатель AUX на вашем пульте.
Рекомендуемая логика
Для управления камерой:
- User 1: Назначьте для управления записью (старт/стоп). Например, среднее положение переключателя - запись, нижнее - пауза.
- User 2: Назначьте для управления питанием камеры. Например, нижнее положение - питание включено, верхнее - выключено.
6. Физическое подключение и проверка
Пайка
Припаяйте сигнальные провода к выбранным вами контактным падам на FC (в нашем примере это бывшие R11 и T11).
Проверка мультиметром
Подайте питание на БПЛА.
Переключайте назначенные AUX-переключатели.
С помощью мультиметра убедитесь, что при активации соответствующего пользовательского режима на физическом пине появляется напряжение 3.3V, а при деактивации оно пропадает.
Подключение к камере
Подключите этот сигнальный провод к соответствующему контакту на камере или платах управления (например, к контакту "Remote" на GoPro). Второй провод (землю) соедините с GND на FC.
Краткий алгоритм действий:
- Найти свободный пин (
resource
) - Освободить его, если он занят (
resource ... NONE
) - Назначить пин на слот PinIO (
pinio_config
) - Привязать слот PinIO к пользовательскому режиму (
pinio_box
) - Назначить переключатель AUX на новый режим во вкладке Modes
- Припаять провод и проверить напряжение
- Подключить к управляемому устройству
B10
, A00
) всегда необходимо сверять для конкретной модели полётного контроллера с помощью команды resource
.
-
Betaflight | Функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold)
Betaflight 4.6 представляет функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold). Эти функции позволяют пилоту использовать тумблер для включения функции зависания дрона в фиксированном месте и на постоянной высоте в режиме Angle. Стики можно использовать для регулировки высоты и положения. Обязательно требуется GPS, а использование магнитометра (компаса) настоятельно рекомендуется.