

Diese Bibliothek kommuniziert mit SBUS -Empfängern und Servos und ist mit Arduino- und CMake -Build -Systemen kompatibel.
SBUS ist ein Bus -Protokoll für Empfänger, um Befehle an Servos zu senden. Im Gegensatz zu PWM verwendet SBUS eine Busarchitektur, bei der eine einzelne Serienneile mit bis zu 16 Servos verbunden werden kann, wobei jeder einen eindeutigen Befehl empfängt.
Das SBUS -Protokoll verwendet eine invertierte serielle Logik mit einer Baudrate von 100000, 8 Datenbits, sogar Parität und 2 Stoppbits. Das SBUS -Paket besteht aus 25 Bytes, die lange bestehen aus:
Beachten Sie, dass der verlorene Rahmen angezeigt wird, wenn ein Rahmen zwischen Sender und Empfänger verloren geht. Die Aktivierung der Fehlersicherheit erfordert typischerweise, dass viele Frames in einer Zeile verloren gehen und angibt, dass der Empfänger in den Failsafe -Modus gewechselt ist. Die Pakete werden je nach Systemkonfiguration ungefähr alle 10 ms oder 20 ms gesendet.
Eine Variation von SBUs namens "Fast SBUS" wurde verwendet. Dadurch wird ein Baudrate von 200000 und eine schnellere Aktualisierungsrate verwendet.
Hinweis auf CH17 und CH18: Channel 17 und Channel 18 sind digitale Ein/Aus -Kanäle. Diese sind bei allen SBUS -Empfängern und Servos nicht allgemein verfügbar.
FRSKY -Empfänger geben einen Bereich von 172 - 1811 aus, wobei die Kanäle auf einen Bereich von -100% bis +100% eingestellt sind. Unter Verwendung erweiterter Grenzen von -150% bis +150% gibt einen Bereich von 0 bis 2047 aus, was mit 11 Datenbits den maximalen Bereich ist.
Da SBUS ein digitales Busformat ist, ist es ein hervorragendes Mittel, um Pilotbefehle von einem Sender und einem SBUs -fähigen Empfänger zu empfangen. Wenn SBUS -Servos im Flugzeug verwendet werden, ist SBUs auch ein hervorragendes Mittel zum Senden von Antriebsantriebsbefehlen - Servo -Befehle können häufig mit niedrigerer Latenz gesendet werden. Wenn Sie nur einen einzelnen Befehl bis zu 16 Servos verwenden, werden zusätzliche Mikrocontroller -Stifte für andere Verwendungen befreit.
SBUS verwendet ein umgekehrtes serielles Protokoll, das in Arduino nicht häufig unterstützt wird. Diese Bibliothek kann invertierte Serien für die folgenden Mikrocontroller verwenden:
Für alle anderen Mikrocontroller müssen Sie einen seriellen Wechselrichter verwenden. Wenn Sie diese Bibliothek so geändert haben, dass sie mit anderen Mikrocontrollern zusammenarbeiten, senden Sie bitte eine Pull -Anfrage.
Klonen Sie einfach oder laden Sie die Reißverschlussbibliothek in Ihren Arduino/Libraries -Ordner herunter und extrahieren Sie sie. Die Bibliothek wird hinzugefügt als:
# include " sbus.h "Ein Beispiel befindet sich in Beispielen/Arduino/sbus_example/sbus_example.ino . Diese Bibliothek wird mit Teensy 3.x, 4.x und LC -Geräten getestet und sollte mit anderen Arduino -Geräten zusammenarbeiten.
CMake wird verwendet, um diese Bibliothek zu erstellen, die als Bibliotheksziel namens SBUS exportiert wird. Der Header wird hinzugefügt als:
# include " sbus.h "Die Bibliothek kann auch mit dem CMAKE-Idiom zur Erstellung eines Build- Verzeichnisses und anschließend aus diesem Verzeichnis aus dem Ausgeben eingestuft werden:
cmake .. -DMCU=MK66FX1M0
make
Dadurch wird die Bibliothek und die Beispiele für die ausführbare Datei als SBUS_EXPAM erstellt. Die Beispiele für ausführbare Quelldatei befindet sich unter Beispielen/cmake/sbus_example.cc . Beachten Sie, dass der CMAKE -Befehl eine Definierung des Mikrocontroller enthält, für das der Code zusammengestellt wird. Dies ist erforderlich, um die Code, die CPU -Frequenz und die Kompilier-/Linkeroptionen korrekt zu konfigurieren. Die verfügbaren MCUs sind:
Es ist bekannt, dass diese mit den gleichen Paketen arbeiten, die in Teensy -Produkten verwendet werden. Es ist auch bekannt, dass das Wechseln von Paketen gut funktioniert, solange es sich nur um eine Paketänderung handelt.
Das Ziel sbus_example erstellt eine ausführbare Datei für die Kommunikation mit SBUS -Empfängern und Servos. Dieses Ziel hat auch einen _hex zum Erstellen der HEX -Datei und eine _Upload für die Verwendung des Teensy CLI -Uploaders, um den Teensy zu blinken. Anweisungen zum Einrichten Ihrer Build-Umgebung finden Sie in unserem Build-Tools-Repo.
Diese Bibliothek befindet sich im Namespace BFS .
Diese Struktur definiert SBUS -Daten, die vom SBUSRX -Objekt gelesen und zurückgegeben werden können oder vom SBUSTX -Objekt gesetzt und gesendet werden können.
Bool Lost_frame , ob ein Rahmen verloren gegangen ist.
Bool failsafe , ob der Empfänger eingetragen hat, fehlschlägensicher oder in Befehlsdienste zum Eingeben von FailSafe -Modus.
Bool CH17, CH18 Bundesstaat Channel 17 und Channel 18.
statische Konsequenzen int8_t num_ch = 16 Die Anzahl der SBUS -Kanäle.
INT16_T CH [num_ch] Ein Array von SBUS -Kanaldaten.
Diese Klasse wird zum Empfangen von SBUS -Daten von einem SBUs -fähigen Empfänger verwendet.
Sbusrx (hardwareserial *bus) erstellt ein Sbusrx -Objekt. Ein Zeiger auf das serielle Objekt, das dem verwendeten seriellen Anschluss entspricht, wird übergeben. Der RX -Pin des seriellen Anschlusses empfängt SBUS -Pakete.
bfs::SbusRx sbus (&Serial1);Sbusrx (hardwareserial *bus, const bool inv) erstellt ein sbusrx -Objekt. Ein Zeiger auf das serielle Objekt, das dem verwendeten seriellen Anschluss entspricht, wird zusammen mit einem zweiten Parameter inv übergeben, der feststellt, ob invertierte Serien verwendet werden. Wenn inv true ist, ist das Signal der invertierte Standard-SBUs, andernfalls ist es nicht invertierter SBUs.
bfs::SbusRx sbus (&Serial1, false );Sbusrx (hardwareserial *bus, const bool inv, const bool schnell) wie der Konstruktor oben, ermöglicht es jedoch, das schnelle sbus Baudrate (200000) auszuwählen, wenn schnell wahr ist.
(Nur ESP32) SBUSRX (Hardwareserial *Bus, const int8_t rxpin, const int8_t txpin, const bool inv) erstellt ein SBUSRX -Objekt. Ein Zeiger auf das serielle Objekt, das dem verwendeten seriellen Anschluss entspricht, wird zusammen mit der RX -Pin -Nummer ( RXPIN ), der TX -Pin -Nummer ( TXPIN ) und der Frage, ob invertierte Seriennummer (inv) (inv) ( inv ) übergeben wird. Wenn inv true ist, ist das Signal der invertierte Standard-SBUs, andernfalls ist es nicht invertierter SBUs.
(Nur ESP32) SBUSRX (Hardwareserial *Bus, const int8_t rxpin, const int8_t txpin, const bool inv, const bool schnell) Wie der Konstruktor oben, ermöglicht es jedoch, das schnelle Sbus -Baudrat (200000) auszuwählen, wenn Fast richtig ist.
void begin () initialisiert die SBUS -Kommunikation.
sbus.Begin();bool read () spricht SBUS -Pakete an und kehrt true zurück, um ein SBUS -Paket erfolgreich zu erhalten.
if (sbus.Read()) {
// Do something with the received data
}Sbusdata data () gibt die SbusData -Struktur zurück, die mit Daten aus dem zuletzt empfangenen Paket besiedelt ist.
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}Diese Klasse wird zur Übertragung von SBUS -Daten an SBUS -fähige Servos verwendet.
Sbustx (Hardwareserial *Bus) erstellt ein Sbustx -Objekt. Ein Zeiger auf das serielle Objekt, das dem verwendeten seriellen Anschluss entspricht, wird übergeben. Der TX -Pin des seriellen Anschlusses empfängt SBUS -Pakete.
bfs::SbusTx sbus (&Serial1);Sbustx (Hardwareserial *Bus, const bool inv) erstellt ein Sbustx -Objekt. Ein Zeiger auf das serielle Objekt, das dem verwendeten seriellen Anschluss entspricht, wird zusammen mit einem zweiten Parameter inv übergeben, der feststellt, ob invertierte Serien verwendet werden. Wenn inv true ist, ist das Signal der invertierte Standard-SBUs, andernfalls ist es nicht invertierter SBUs.
bfs::SbusTx sbus (&Serial1, false );(Nur ESP32) sbustx (Hardwareserial *Bus, const int8_t rxpin, const int8_t Txpin, const bool inv) erstellt ein Sbustx -Objekt. Ein Zeiger auf das serielle Objekt, das dem verwendeten seriellen Anschluss entspricht, wird zusammen mit der RX -Pin -Nummer ( RXPIN ), der TX -Pin -Nummer ( TXPIN ) und der Frage, ob invertierte Seriennummer (inv) (inv) ( inv ) übergeben wird. Wenn inv true ist, ist das Signal der invertierte Standard-SBUs, andernfalls ist es nicht invertierter SBUs.
void begin () initialisiert die SBUS -Kommunikation.
sbus.Begin();void write () schreibt ein SBUS -Paket. Das Paket ist sofort geschrieben. Sie sollten das Timing für das Senden von Paketen an Servos regulieren, um eine Häufigkeit von ca. 100 Hz oder 50 Hz abhängig von der Einrichtung des SBUS -Systems aufrechtzuerhalten.
sbus.Write();Hohlraumdaten (const sbusdata & data) legt die SBUS -Daten fest, die nach der nächsten Schreibmethode übertragen werden.
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SbusData data () gibt die im SBUSTX -Objekt gepufferten SBUS -Daten zurück, die nach der nächsten Schreibmethode übertragen wird.
bfs::SbusData data = sbus.data();