

Cette bibliothèque communique avec les récepteurs et les servos SBUS et est compatible avec les systèmes de construction Arduino et CMake.
SBUS est un protocole de bus pour les récepteurs pour envoyer des commandes aux servos. Contrairement à PWM, SBUS utilise une architecture de bus où une seule ligne de série peut être connectée à jusqu'à 16 servos avec chacun recevant une commande unique.
Le protocole SBUS utilise une logique série inversée avec un taux de bauds de 100000, 8 bits de données, même la parité et 2 bits d'arrêt. Le paquet SBUS est de 25 octets de long comprenant:
Notez que le cadre perdu est indiqué lorsqu'un cadre est perdu entre l'émetteur et le récepteur. L'activation défaillante nécessite généralement que de nombreuses trames soient perdues dans une ligne et indique que le récepteur s'est déplacé en mode de sécurité. Les paquets sont envoyés environ tous les 10 ms ou 20 ms, selon la configuration du système.
Une variation des SBU appelée "Fast SBU" a commencé à être utilisée. Cela utilise un baudrate de 200000 et un taux de mise à jour plus rapide.
Remarque sur CH17 et CH18: Channel 17 et Channel 18 sont des canaux numériques sur / hors de la fin. Ceux-ci ne sont pas universellement disponibles sur tous les récepteurs et servos SBUS.
Les récepteurs FRSKY publieront une plage de 172 à 1811 avec des canaux réglés sur une plage de -100% à + 100%. L'utilisation de limites étendues de -150% à + 150% sortira une plage de 0 à 2047, ce qui est la plage maximale atteinte avec 11 bits de données.
Étant donné que SBUS est un format de bus numérique, c'est un excellent moyen de recevoir des commandes pilotes d'un émetteur et d'un récepteur capable SBUS. Si les servos SBUS sont utilisés dans l'avion, SBUS est également un excellent moyen d'envoyer des commandes d'actionneur - les commandes de servo peuvent souvent être envoyées avec une latence inférieure et, en utilisant uniquement une seule broche pour commander jusqu'à 16 servos, des épingles de microcontrôleur supplémentaires sont libérées pour d'autres utilisations.
SBUS utilise un protocole série inversé, qui n'est pas couramment pris en charge dans Arduino. Cette bibliothèque est capable d'utiliser une série inversée pour les microcontrôleurs suivants:
Pour tous les autres microcontrôleurs, vous devez utiliser un onduleur en série. Si vous avez modifié cette bibliothèque pour travailler avec d'autres microcontrôleurs, veuillez soumettre une demande de traction.
Clone ou téléchargez et extraire la bibliothèque zippée dans votre dossier Arduino / Libraries. La bibliothèque est ajoutée comme:
# include " sbus.h "Un exemple est situé dans des exemples / arduino / sbus_example / sbus_example.ino . Cette bibliothèque est testée avec des appareils Teensy 3.x, 4.x et LC et devrait fonctionner avec d'autres appareils Arduino.
CMake est utilisé pour créer cette bibliothèque, qui est exportée en tant que cible de bibliothèque appelée SBUS . L'en-tête est ajouté comme:
# include " sbus.h "La bibliothèque peut également être compilée autonome à l'aide de l'idiome CMake de la création d'un répertoire de build , puis, à partir de cette émission de répertoire:
cmake .. -DMCU=MK66FX1M0
make
Ceci créera la bibliothèque et l'exemple exécutable appelé sbus_example . L'exemple de fichier source exécutable est situé à des exemples / cmake / sbus_example.cc . Notez que la commande CMake comprend une définition spécifiant le microcontrôleur pour lequel le code est compilé. Ceci est nécessaire pour configurer correctement les options de code, de fréquence du CPU et de compilation / linker. Les MCU disponibles sont:
Ceux-ci sont connus pour fonctionner avec les mêmes packages utilisés dans les produits TEENSY. Le changement de packages est également connu pour bien fonctionner, tant qu'il ne s'agit que d'un changement de package.
La cible SBUS_Example crée un exécutable pour communiquer avec les récepteurs et les servos SBUS. Cette cible a également un _HEX pour créer le fichier hexadécimal et un _upload pour utiliser le téléchargeur CLI Teensy pour flasher le Teensy. Les instructions pour la configuration de votre environnement de construction peuvent être trouvées dans notre dépôt de build-tools.
Cette bibliothèque se trouve dans l'espace de noms BFS .
Cette structure définit les données SBUS qui peuvent être lues et renvoyées par l'objet SBUSRX ou définie et envoyée par l'objet SBUSTX .
Bool Lost_frame si un cadre a été perdu.
BOOL FAILSAFE SI le récepteur a entré le mode FAILSAFE ou pour commander des servos pour entrer en mode Failsafe.
Bool CH17, CH18 State of Channel 17 et Channel 18.
STATIC CONSEXPR INT8_T NUM_CH = 16 Le nombre de canaux SBUS.
INT16_T CH [NUM_CH] Un tableau de données de canal SBUS.
Cette classe est utilisée pour recevoir des données SBUS d'un récepteur capable SBUS.
SBUSRX (Bus HardwareSerial *) crée un objet SBUSRX . Un pointeur vers l'objet série correspondant au port série utilisé est passé. La broche RX du port série recevra des paquets SBUS.
bfs::SbusRx sbus (&Serial1);SBUSRX (Bus HardwareSerial *, const bool inv) crée un objet SBUSRX . Un pointeur vers l'objet série correspondant au port série utilisé est transmis avec un deuxième paramètre, Inv , qui définit si la série inversée est utilisée. Si Inv est vrai, le signal est le SBU inversé standard, sinon il s'agit de SBU non inversés.
bfs::SbusRx sbus (&Serial1, false );SBUSRX (Bus HardwareSerial *, const bool inv, const bool Fast) Identique au constructeur ci-dessus, mais permet de sélectionner le SBUS Baudrate rapide (200000) si rapide est vrai.
(ESP32 UNIQUEMENT) SBUSRX (HardWaSeRiaL * Bus, const int8_t rxpin, const int8_t txpin, const bool inv) crée un objet SBUSRX . Un pointeur vers l'objet série correspondant au port série utilisé est passé avec le numéro de broche RX ( RXPIN ), le numéro de broche TX ( TXPIN ), et si la série inversée est utilisée ( Inv ). Si Inv est vrai, le signal est le SBU inversé standard, sinon il s'agit de SBU non inversés.
(ESP32 UNIQUEMENT) SBUSRX (HardwaSerial * Bus, const int8_t rxpin, const int8_t txpin, const bool inv, const bool fast) identique que le constructeur ci-dessus, mais permet de sélectionner le SBUS Baudrate rapide (200000) si rapide est vrai.
void begin () initialise la communication SBUS.
sbus.Begin();Bool read () parses sbus paquets, renvoie vrai sur la réception avec succès d'un paquet SBUS.
if (sbus.Read()) {
// Do something with the received data
}SBUSDATA DATA () Renvoie la structure SBUSDATA , peuplée de données du dernier paquet reçu.
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}Cette classe est utilisée pour transmettre des données SBUS aux servos capables SBUS.
SBUSTX (Bus HardwareSerial *) crée un objet SBUSTX . Un pointeur vers l'objet série correspondant au port série utilisé est passé. La broche TX du port série recevra des paquets SBUS.
bfs::SbusTx sbus (&Serial1);SBUSTX (Bus HardwareSerial *, const bool inv) crée un objet SBUSTX . Un pointeur vers l'objet série correspondant au port série utilisé est transmis avec un deuxième paramètre, Inv , qui définit si la série inversée est utilisée. Si Inv est vrai, le signal est le SBU inversé standard, sinon il s'agit de SBU non inversés.
bfs::SbusTx sbus (&Serial1, false );(ESP32 UNIQUEMENT) SBUSTX (HardwareSerial * Bus, const int8_t rxpin, const int8_t txpin, const bool inv) crée un objet SBUSTX . Un pointeur vers l'objet série correspondant au port série utilisé est passé avec le numéro de broche RX ( RXPIN ), le numéro de broche TX ( TXPIN ), et si la série inversée est utilisée ( Inv ). Si Inv est vrai, le signal est le SBU inversé standard, sinon il s'agit de SBU non inversés.
void begin () initialise la communication SBUS.
sbus.Begin();Void Write () écrit un paquet SBUS. Le paquet est écrit immédiatement, vous devez réguler le calendrier des paquets d'envoi aux servos pour maintenir une fréquence d'environ 100 Hz ou 50 Hz, selon la configuration du système SBUS.
sbus.Write();VOID DATA (const Sbusdata & Data) définit les données SBUS, qui seront transmises sur la méthode d'écriture suivante.
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SBUSDATA DATA () Renvoie les données SBUS tamponnées dans l'objet SBUSTX , qui sera transmise sur la méthode d'écriture suivante.
bfs::SbusData data = sbus.data();