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.

-
Betaflight | Функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold)
Betaflight 4.6 представляет функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold). Эти функции позволяют пилоту использовать тумблер для включения функции зависания дрона в фиксированном месте и на постоянной высоте в режиме Angle. Стики можно использовать для регулировки высоты и положения. Обязательно требуется GPS, а использование магнитометра (компаса) настоятельно рекомендуется.