

Эта библиотека общается с приемниками и сервоприводами SBU и совместима с системами сборки Arduino и Cmake.
SBUS является протоколом шины для приемников для отправки команд сервоприводам. В отличие от PWM, SBUs использует архитектуру автобуса, где одна последовательная линия может быть связана с 16 сервоприводами с каждым получением уникальной команды.
Протокол SBUS использует инвертированную последовательную логику с скоростью передачи 100000, 8 битов данных, даже паритета и 2 стоп -бита. Пакет SBUS длиной 25 байтов, состоящий из:
Обратите внимание, что потерянный кадр обозначается, когда кадр теряется между передатчиком и приемником. Активация сбоев, как правило, требует, чтобы многие кадры были потеряны в ряду, и указывает, что приемник перешел в режим сбоя. Пакеты отправляются примерно каждые 10 мс или 20 мс, в зависимости от конфигурации системы.
В начале началась изменение SBU, называемое «Fast SBU». Это использует Baudrate 200000 и более быстрая скорость обновления.
Примечание на CH17 и CH18: канал 17 и канал 18 являются цифровыми каналами. Они недоступны для всех приемников SBU и сервоприводов.
Приемники FRSKY выведут диапазон 172 - 1811 с каналами, установленными в диапазоне от -100% до +100%. Использование расширенных пределов от -150% до +150% выводит диапазон от 0 до 2047, что является максимальным диапазоном, достижимым с 11 битами данных.
Поскольку SBUS является цифровым форматом шины, это отличное средство получения пилотных команд от передатчика и приемника SBUS. Если сервоприводы SBU используются в самолете, SBU также является отличным средством отправки команд привода - команды сервоприводов часто можно отправлять с более низкой задержкой, и, используя только один вывод к команде до 16 сервоприводов, дополнительные контакты микроконтроллера освобождаются для других видов использования.
SBUS использует инвертированный серийный протокол, который обычно не поддерживается в Arduino. Эта библиотека способна использовать инвертированный сериал для следующих микроконтроллеров:
Для всех других микроконтроллеров вы должны использовать серийный инвертор. Если вы изменили эту библиотеку для работы с другими микроконтроллерами, отправьте запрос на вытяжение.
Просто клонируйте или загрузите и извлеките библиотеку Zipp в папку Arduino/Library. Библиотека добавлена как:
# include " sbus.h "Пример находится в примерах/arduino/sbus_example/sbus_example.ino . Эта библиотека проверяется с помощью устройств Teensy 3.x, 4.x и LC и должна работать с другими устройствами Arduino.
Cmake используется для создания этой библиотеки, которая экспортируется как цель библиотеки, называемую SBU . Заголовок добавляется как:
# include " sbus.h "Библиотека также может быть составлена отдельно с использованием идиомы Cmake для создания каталога сборки , а затем, из-за выпуска этого каталога:
cmake .. -DMCU=MK66FX1M0
make
Это построит библиотеку и пример исполняемого файла с именем SBUS_EXAMER . Пример исполняемого исходного файла расположен в примерах/cmake/sbus_example.cc . Обратите внимание, что команда CMAKE включает определение, указав микроконтроллер, для которого код собирается. Это необходимо для правильной настройки кода, частоты процессора и параметров компиляции/линкера. Доступные MCU:
Известно, что они работают с теми же пакетами, используемыми в продуктах Teensy. Также известно, что переключение пакетов работает хорошо, если это всего лишь изменение пакета.
Цель SBUS_Example создает исполняемый файл для общения с приемниками SBU и сервоприводами. Эта цель также имеет _hex для создания шестнадцатеричного файла и _upload для использования загрузчика Teensy CLI для прошивки Teensy. Инструкции по настройке среды вашей сборки можно найти в нашем репочтском репо.
Эта библиотека находится в пределах пространства имен BFS .
Эта структура определяет данные SBUS, которые могут быть прочитаны и возвращены объектом SBUSRX или установлены и отправлены объектом SBUSTX .
Bool Lost_frame , был ли кадр потерян.
Bool sakeSafe , введен ли приемник режим сбоев или для команды сервоприводов для ввода режима FaulSafe.
Bool CH17, CH18 Стату канала 17 и канал 18.
Static Constexpr int8_t num_ch = 16 Количество каналов SBUS.
int16_t ch [num_ch] массив данных канала SBUS.
Этот класс используется для получения данных SBU от приемника SBUS.
SBUSRX (Hardwareserial *Bus) создает объект SBUSRX . Указатель на последовательный объект, соответствующий используемому последовательному порту. RX -штифт последовательного порта будет получать пакеты SBUS.
bfs::SbusRx sbus (&Serial1);SBUSRX (Hardwareserial *Bus, Const Bool Inv) создает объект SBUSRX . Указатель на последовательный объект, соответствующий используемому последовательному порту, передается вместе со вторым параметром, Inv , который устанавливает, используется ли инвертированный последователь. Если INV верен, сигнал является стандартным инвертированным SBU, в противном случае это не инвертированный SBU.
bfs::SbusRx sbus (&Serial1, false );SBUSRX (Hardwareserial *Bus, Const Bool Inv, Const Bool Fast) То же, что и конструктор выше, но позволяет выбирать Fast SBUS Baudrate (200000), если быстро .
(Только ESP32) SBUSRX (Hardwareserial *Bus, const int8_t rxpin, const int8_t txpin, const bool vv) создает объект sbusrx . Указатель на последовательный объект, соответствующий используемому последовательному порту, передается вместе с номером RX ( RXPIN ), контактом TX ( TXPIN ) и используется ли инвертированный последовательный сериал ( Inv ). Если INV верен, сигнал является стандартным инвертированным SBU, в противном случае это не инвертированный SBU.
(Только ESP32) SBUSRX (Hardwareserial *Bus, const int8_t rxpin, const int8_t txpin, const bool inv, const bool fast), так же, как конструктор выше, но позволяет выбирать быстрый Sbus baudrate (200000), если быстрый .
void begin () инициализирует связь SBUS.
sbus.Begin();Bool Read () SACLSES SBUS Packets возвращает True при успешном получении пакета SBUS.
if (sbus.Read()) {
// Do something with the received data
}Data Sbusdata () возвращает структуру Sbusdata , заполненную данными из последнего полученного пакета.
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}Этот класс используется для передачи данных SBU на сервопривод SBU.
SBUSTX (Hardwareserial *Bus) создает объект SBUSTX . Указатель на последовательный объект, соответствующий используемому последовательному порту. TX -контакт последовательного порта будет получать пакеты SBUS.
bfs::SbusTx sbus (&Serial1);SBUSTX (Hardwareserial *Bus, Const Bool Inv) создает объект SBUSTX . Указатель на последовательный объект, соответствующий используемому последовательному порту, передается вместе со вторым параметром, Inv , который устанавливает, используется ли инвертированный последователь. Если INV верен, сигнал является стандартным инвертированным SBU, в противном случае это не инвертированный SBU.
bfs::SbusTx sbus (&Serial1, false );(Только ESP32) SBUSTX (Hardwareserial *Bus, const int8_t rxpin, const int8_t txpin, const bool vv) Создает объект sbustx . Указатель на последовательный объект, соответствующий используемому последовательному порту, передается вместе с номером RX ( RXPIN ), контактом TX ( TXPIN ) и используется ли инвертированный последовательный сериал ( Inv ). Если INV верен, сигнал является стандартным инвертированным SBU, в противном случае это не инвертированный SBU.
void begin () инициализирует связь SBUS.
sbus.Begin();void write () пишет пакет SBUS. Пакет записывается немедленно, вы должны регулировать время отправки пакетов на сервопривод для поддержания частоты приблизительно 100 Гц или 50 Гц, в зависимости от настройки системы SBUS.
sbus.Write();Данные void (const sbusdata & data) Устанавливает данные SBUS, которые будут переданы в следующем методе записи .
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);Sbusdata Data () возвращает буферизацию данных SBUS в объекте SBUSTX , который будет передаваться в следующем методе записи .
bfs::SbusData data = sbus.data();