

該庫與SBUS接收器和伺服器進行通信,並與Arduino和Cmake Build Systems兼容。
SBU是接收器將命令發送到伺服器的總線協議。與PWM不同,SBU使用總線體系結構,在該體系結構中,可以將單個串行線連接到最多16個伺服器,每個接收到唯一的命令。
SBUS協議使用倒置的串行邏輯,波特率為100000,8個數據位,甚至奇偶校驗和2個停止位。 SBU小包長25個字節長,包括:
請注意,當發射器和接收器之間丟失幀時,會指示丟失的幀。 FailSafe激活通常要求連續丟失許多幀,並表明接收器已進入故障安全模式。根據系統配置,數據包大約每10 ms或20 ms發送一次。
已經開始使用稱為“快速SBU”的SBU的變體。這使用了200000的波特rate和更快的更新速率。
在CH17和CH18上的注意: 17頻道和第18頻道是數字開/關通道。這些並不是所有SBU接收器和伺服器上普遍可用的。
Frsky接收器將輸出172-1811的範圍,其頻道設置為-100%至 +100%。使用-150%至 +150%的擴展限制輸出的範圍為0到2047,這是可在11位數據的最大範圍內獲得的最大範圍。
由於SBU是一種數字總線格式,因此它是從發射器和能夠SBU的接收器接收飛行員命令的絕佳方法。如果飛機中使用了SBUS伺服器,SBU也是發送執行器命令的絕佳方法 - 伺服命令通常可以以較低的延遲發送,並且僅使用單個PIN命令命令多達16個伺服器,則可以將其他微控制器引腳釋放出來。
SBU使用倒串行協議,該協議在Arduino中通常不支持。該庫可以在以下微控制器上使用倒置序列:
對於所有其他微控制器,您必須使用串行逆變器。如果您已經修改了此庫與其他微控制器合作,請提交拉動請求。
只需克隆或下載並將zpipter庫提取到您的arduino/libraries文件夾中即可。庫的添加為:
# include " sbus.h "一個示例位於示例/arduino/sbus_example/sbus_example.ino中。該庫由Teensy 3.x,4.x和LC設備進行測試,並應與其他Arduino設備一起使用。
Cmake用於構建此庫,該庫被以稱為SBU的庫目標導出。添加標題為:
# include " sbus.h "也可以使用創建構建目錄的cmake Idiom進行獨立編譯,然後從該目錄中發行:
cmake .. -DMCU=MK66FX1M0
make
這將構建庫和示例可執行的示例稱為sbus_example 。示例可執行源文件位於示例/cmake/sbus_example.cc中。請注意, CMAKE命令包括一個定義,指定密碼正在編譯的微控制器。這是正確配置代碼,CPU頻率和編譯/鏈接器選項所需的。可用的MCU是:
眾所周知,這些可以與青少年產品中使用的相同包裝一起使用。同樣,只要它只是一個包裝更改,就知道切換軟件包的運行良好。
SBUS_example目標創建用於與SBUS接收器和伺服器通信的可執行文件。該目標還具有用於創建十六進製文件的_hex和一個用於使用Teensy CLI上傳器閃爍Teeensy的_UPLOAD 。可以在我們的Build-Tools存儲庫中找到建立構建環境的說明。
該庫在命名空間BFS內。
該結構定義了可以由SBUSRX對象讀取和返回的SBU數據,也可以由Sbustx對象設置和發送。
BOOL LOST_FRAME是否丟失了框架。
BOOL FAILSAFE是接收器是否輸入了故障安全模式,還是命令Servos輸入失敗圖模式。
Bool CH17,CH18頻道17和第18頻道的狀態。
靜態constexpr int8_t num_ch = 16 sbus通道的數量。
INT16_T CH [NUM_CH] SBUS通道數據數組。
該類用於從能夠SBU的接收器接收SBU數據。
SBUSRX(硬件 *BUS)創建一個SBUSRX對象。傳遞了與所使用串行端口相對應的串行對象的指針。串行端口的RX引腳將接收SBUS數據包。
bfs::SbusRx sbus (&Serial1);SBUSRX(HardWareserial *Bus,const bool Inv)創建一個SBUSRX對象。通往與所使用串行端口相對應的串行對象的指針與第二個參數Inv一起傳遞,該參數設置了是否使用了倒置串行。如果INV為true,則信號是標準倒置的SBU,否則它是無向後的SBU。
bfs::SbusRx sbus (&Serial1, false );SBUSRX(HardWareserial *BUS,const bool Inv,const bool fast)與上面的構造函數相同,但如果快速為true,則可以選擇快速SBUS Baudrate(200000)。
(僅ESP32)SBUSRX(HARDWARESERIAL *BUS,const int8_t rxpin,const int8_t txpin,const bool Inv)創建一個SBUSRX對象。與RX PIN號( RXPIN ),TX PIN號( TXPIN )以及是否使用了倒置序列( INV )一起傳遞到與使用串行端口相對應的串行對象的指針。如果INV為true,則信號是標準倒置的SBU,否則它是無向後的SBU。
(僅ESP32)SBUSRX(HARDWARESERIAL *BUS,const int8_t rxpin,const int8_t txpin,const bool Inv,const bool inv,const bool fast)與上面的構造函數相同,但如果快速為true,則可以選擇快速SBUS BAUDRATE(200000)。
void begin()初始化sbus通信。
sbus.Begin();Bool Read()解析SBUS數據包,在成功接收SBU的數據包時返回true。
if (sbus.Read()) {
// Do something with the received data
}SBUSDATA DATA()返回SBUSDATA結構,該結構帶有來自最後一個接收的數據包的數據。
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}該類用於將SBU數據傳輸到具有SBU的伺服器。
SBUSTX(HARDWARESERIAL *BUS)創建一個Sbustx對象。傳遞了與所使用串行端口相對應的串行對象的指針。串行端口的TX引腳將接收SBUS數據包。
bfs::SbusTx sbus (&Serial1);Sbustx(Hardwaresial *Bus,const bool Inv)創建一個Sbustx對象。通往與所使用串行端口相對應的串行對象的指針與第二個參數Inv一起傳遞,該參數設置了是否使用了倒置串行。如果INV為true,則信號是標準倒置的SBU,否則它是無向後的SBU。
bfs::SbusTx sbus (&Serial1, false );(僅ESP32)sbustx(HardWareserial *BUS,const int8_t rxpin,const int8_t txpin,const bool inv)創建一個sbustx對象。與RX PIN號( RXPIN ),TX PIN號( TXPIN )以及是否使用了倒置序列( INV )一起傳遞到與使用串行端口相對應的串行對象的指針。如果INV為true,則信號是標準倒置的SBU,否則它是無向後的SBU。
void begin()初始化sbus通信。
sbus.Begin();void write()寫一個sbus包。數據包立即編寫,您應該調節將數據包發送到伺服器的時間安排,以保持大約100 Hz或50 Hz的頻率,具體取決於SBUS系統的設置。
sbus.Write();void Data(const sbusdata&Data)設置了SBU數據,該數據將在下一個寫入方法上傳輸。
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SBUSDATA DATA()返回SBUS數據緩沖在SBUSTX對像中的SBU數據,該數據將在下一個寫入方法上傳輸。
bfs::SbusData data = sbus.data();