

Perpustakaan ini berkomunikasi dengan penerima dan servos SBUS dan kompatibel dengan sistem pembuatan Arduino dan CMake.
SBUS adalah protokol bus untuk penerima untuk mengirim perintah ke servos. Tidak seperti PWM, SBUS menggunakan arsitektur bus di mana garis seri tunggal dapat dihubungkan dengan hingga 16 servo dengan masing -masing menerima perintah unik.
Protokol SBUS menggunakan logika serial terbalik dengan laju baud 100000, 8 bit data, bahkan paritas, dan 2 bit stop. Paket SBUS adalah 25 byte yang terdiri dari:
Perhatikan bahwa bingkai yang hilang ditunjukkan ketika bingkai hilang antara pemancar dan penerima. Aktivasi Failsafe biasanya mensyaratkan bahwa banyak frame hilang berturut -turut dan menunjukkan bahwa penerima telah pindah ke mode FailSafe. Paket dikirim kira -kira setiap 10 ms atau 20 ms, tergantung pada konfigurasi sistem.
Variasi pada SBU yang disebut "Fast SBUS" telah mulai digunakan. Ini menggunakan baudrate 200000 dan tingkat pembaruan yang lebih cepat.
Catatan pada CH17 dan CH18: Saluran 17 dan Saluran 18 adalah saluran hidup/off digital. Ini tidak tersedia secara universal di semua penerima SBU dan servo.
Penerima Frsky akan menghasilkan kisaran 172 - 1811 dengan saluran yang diatur ke kisaran -100% hingga +100%. Menggunakan batas yang diperpanjang -150% hingga +150% output kisaran 0 hingga 2047, yang merupakan kisaran maksimum yang dapat dicapai dengan 11 bit data.
Karena SBUS adalah format bus digital, ini adalah cara yang sangat baik untuk menerima perintah pilot dari pemancar dan penerima yang mampu SBUS. Jika SBUS Servos digunakan di pesawat, SBUS juga merupakan cara yang sangat baik untuk mengirim perintah aktuator - perintah servo sering dapat dikirim dengan latensi yang lebih rendah dan, dengan hanya menggunakan pin tunggal untuk memerintahkan hingga 16 servos, pin mikrokontroler tambahan dibebaskan untuk penggunaan lain.
SBUS menggunakan protokol serial terbalik, yang umumnya tidak didukung di Arduino. Perpustakaan ini dapat menggunakan serial terbalik untuk mikrokontroler berikut:
Untuk semua mikrokontroler lainnya, Anda harus menggunakan inverter serial. Jika Anda telah memodifikasi pustaka ini untuk bekerja dengan mikrokontroler lainnya, silakan kirim permintaan tarik.
Cukup klon atau unduh dan ekstrak perpustakaan zip ke folder Arduino/Libraries Anda. Perpustakaan ditambahkan sebagai:
# include " sbus.h "Contoh terletak di contoh/Arduino/sbus_example/sbus_example.ino . Perpustakaan ini diuji dengan perangkat Teensy 3.x, 4.x, dan LC dan harus bekerja dengan perangkat Arduino lainnya.
CMake digunakan untuk membangun perpustakaan ini, yang diekspor sebagai target perpustakaan yang disebut SBUS . Header ditambahkan sebagai:
# include " sbus.h "Perpustakaan juga dapat dikompilasi berdiri sendiri menggunakan idiom CMake untuk membuat direktori build dan kemudian, dari dalam direktori itu mengeluarkan:
cmake .. -DMCU=MK66FX1M0
make
Ini akan membangun perpustakaan dan contoh yang dapat dieksekusi yang disebut sbus_example . Contoh file sumber yang dapat dieksekusi terletak di contoh/cmake/sbus_example.cc . Perhatikan bahwa perintah cmake menyertakan define yang menentukan mikrokontroler kode sedang dikompilasi. Ini diperlukan untuk mengkonfigurasi dengan benar kode, frekuensi CPU, dan opsi kompilasi/penghubung. MCU yang tersedia adalah:
Ini diketahui bekerja dengan paket yang sama yang digunakan dalam produk -produk Teensy. Paket yang beralih juga diketahui bekerja dengan baik, asalkan hanya perubahan paket.
Target SBUS_Example menciptakan yang dapat dieksekusi untuk berkomunikasi dengan penerima SBUS dan servos. Target ini juga memiliki _hex untuk membuat file hex dan _upload untuk menggunakan pengunggah CLI Teensy untuk mem -flash Teensy. Instruksi untuk menyiapkan lingkungan build Anda dapat ditemukan di repo bangunan kami.
Perpustakaan ini berada di dalam BFS namespace.
Struct ini mendefinisikan data SBUS yang dapat dibaca dan dikembalikan oleh objek SBUSRX atau diatur dan dikirim oleh objek SBUSTX .
bool lost_frame apakah bingkai telah hilang.
BOOL gagal aman apakah penerima telah memasuki mode failsafe atau untuk memerintahkan servos untuk memasuki mode failsafe.
BOOL CH17, CH18 NEGARA SALURAN 17 DAN SALURAN 18.
Static Constexpr int8_t num_ch = 16 Jumlah saluran SBUS.
int16_t ch [num_ch] Array data saluran SBUS.
Kelas ini digunakan untuk menerima data SBUS dari penerima yang mampu SBUS.
SBUSRX (Hardwareserial *Bus) membuat objek SBUSRX . Pointer ke objek serial yang sesuai dengan port serial yang digunakan dilewatkan. Pin RX dari port serial akan menerima paket SBUS.
bfs::SbusRx sbus (&Serial1);SBUSRX (Hardwareserial *Bus, Const Bool Inv) membuat objek SBUSRX . Pointer ke objek serial yang sesuai dengan port serial yang digunakan dilewatkan bersama dengan parameter kedua, Inv , yang menetapkan apakah serial terbalik digunakan. Jika Inv benar, sinyal adalah SBU terbalik standar, jika tidak, itu adalah SBU yang tidak terbelakang.
bfs::SbusRx sbus (&Serial1, false );SBUSRX (Hardwareserial *Bus, Const Bool Inv, Const Bool Fast) Sama seperti konstruktor di atas, tetapi memungkinkan pemilihan Fast SBUS Baudrate (200000) jika cepat benar.
(ESP32 saja) SBUSRX (Hardwareserial *bus, const int8_t rxpin, const int8_t txpin, const bool inv) membuat objek SBUSRX . Pointer ke objek serial yang sesuai dengan port serial yang digunakan dilewatkan bersama dengan nomor pin RX ( RXPin ), nomor pin TX ( TXPin ), dan apakah serial terbalik digunakan ( Inv ). Jika Inv benar, sinyal adalah SBU terbalik standar, jika tidak, itu adalah SBU yang tidak terbelakang.
(ESP32 saja) SBUSRX (Hardwareserial *Bus, Const Int8_t Rxpin, Const Int8_t Txpin, Const Bool Inv, Const Bool Fast) Sama seperti konstruktor di atas, tetapi memungkinkan memilih Fast SBUS Baudrate (200000) jika cepat benar.
void begin () menginisialisasi komunikasi SBUS.
sbus.Begin();Bool Read () Parses SBUS Packets, kembali benar saat berhasil menerima paket SBUS.
if (sbus.Read()) {
// Do something with the received data
}SBUSData Data () Mengembalikan struktur SBUSData , diisi dengan data dari paket yang diterima terakhir.
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}Kelas ini digunakan untuk mengirimkan data SBU ke servos yang mampu SBU.
SBUSTX (Hardwareserial *Bus) membuat objek SBUSTX . Pointer ke objek serial yang sesuai dengan port serial yang digunakan dilewatkan. Pin TX dari port serial akan menerima paket SBUS.
bfs::SbusTx sbus (&Serial1);SBUSTX (Hardwareserial *Bus, Const Bool Inv) membuat objek SBUSTX . Pointer ke objek serial yang sesuai dengan port serial yang digunakan dilewatkan bersama dengan parameter kedua, Inv , yang menetapkan apakah serial terbalik digunakan. Jika Inv benar, sinyal adalah SBU terbalik standar, jika tidak, itu adalah SBU yang tidak terbelakang.
bfs::SbusTx sbus (&Serial1, false );(ESP32 saja) SBUSTX (Hardwareserial *bus, const int8_t rxpin, const int8_t txpin, const bool inv) membuat objek sbustx . Pointer ke objek serial yang sesuai dengan port serial yang digunakan dilewatkan bersama dengan nomor pin RX ( RXPin ), nomor pin TX ( TXPin ), dan apakah serial terbalik digunakan ( Inv ). Jika Inv benar, sinyal adalah SBU terbalik standar, jika tidak, itu adalah SBU yang tidak terbelakang.
void begin () menginisialisasi komunikasi SBUS.
sbus.Begin();void write () menulis paket SBUS. Paket ini ditulis segera, Anda harus mengatur waktu pengiriman paket ke servos untuk mempertahankan frekuensi sekitar 100 Hz atau 50 Hz, tergantung pada pengaturan sistem SBUS.
sbus.Write();void Data (Const SBUSData & Data) menetapkan data SBUS, yang akan ditransmisikan pada metode penulisan berikutnya.
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SBUSData Data () Mengembalikan data SBUS yang disangga di objek SBUSTX , yang akan ditransmisikan pada metode tulis berikutnya.
bfs::SbusData data = sbus.data();