

Esta biblioteca se comunica con receptores SBUS y servos y es compatible con los sistemas de construcción de Arduino y CMake.
SBUS es un protocolo de autobús para que los receptores envíen comandos a servos. A diferencia de PWM, SBUS utiliza una arquitectura de bus donde una sola línea de serie se puede conectar con hasta 16 servos, cada uno recibe un comando único.
El protocolo SBUS utiliza una lógica en serie invertida con una velocidad de baudios de 100000, 8 bits de datos, incluso paridad y 2 bits de parada. El paquete SBUS tiene 25 bytes que consiste en:
Tenga en cuenta que el marco perdido se indica cuando se pierde un marco entre el transmisor y el receptor. La activación a prueba de fallas generalmente requiere que muchos cuadros se pierdan en una fila e indica que el receptor se ha movido al modo a prueba de fallas. Los paquetes se envían aproximadamente cada 10 ms o 20 ms, dependiendo de la configuración del sistema.
Se ha comenzado a usarse una variación de las SBU llamada "SBU FAST SBU". Esto utiliza una bandeja de 200000 y una tasa de actualización más rápida.
Nota sobre CH17 y CH18: el canal 17 y el canal 18 son canales de encendido/apagado digital. Estos no están disponibles universalmente en todos los receptores y servos de SBUS.
Los receptores de Frsky generarán un rango de 172 - 1811 con canales establecidos en un rango de -100% a +100%. El uso de límites extendidos de -150% a +150% genera un rango de 0 a 2047, que es el rango máximo acertable con 11 bits de datos.
Debido a que SBUS es un formato de bus digital, es un excelente medio para recibir comandos piloto de un transmisor y un receptor capaz de SBUS. Si se usan SBUS Servos en la aeronave, SBUS también es un excelente medio para enviar comandos de actuador: los comandos de servo a menudo se pueden enviar con menor latencia y, solo usando un solo PIN para comandar hasta 16 servos, se liberan pasadores de microcontrolador adicionales para otros usos.
SBUS utiliza un protocolo serial invertido, que no se respalda comúnmente en Arduino. Esta biblioteca puede usar una serie invertida para los siguientes microcontroladores:
Para todos los demás microcontroladores, debe usar un inversor en serie. Si ha modificado esta biblioteca para trabajar con otros microcontroladores, envíe una solicitud de extracción.
Simplemente clone o descargue y extraiga la biblioteca con cremallera en su carpeta Arduino/Bibliotecas. La biblioteca se agrega como:
# include " sbus.h "Un ejemplo se encuentra en ejemplos/arduino/sbus_example/sbus_example.ino . Esta biblioteca se prueba con dispositivos Teensy 3.x, 4.x y LC y debe funcionar con otros dispositivos Arduino.
CMake se utiliza para construir esta biblioteca, que se exporta como un objetivo de biblioteca llamado SBUS . El encabezado se agrega como:
# include " sbus.h "La biblioteca también se puede compilar independientemente utilizando el idioma Cmake de crear un directorio de compilación y luego, desde dentro de ese directorio, emitir:
cmake .. -DMCU=MK66FX1M0
make
Esto construirá la biblioteca y el ejecutable de ejemplo llamado sbus_example . El archivo fuente ejecutable de ejemplo se encuentra en ejemplos/cmake/sbus_example.cc . Observe que el comando Cmake incluye una definición de especificación del microcontrolador para el que se está compilando el código. Esto se requiere para configurar correctamente el código, la frecuencia de la CPU y las opciones de compilar/enlazador. Los MCU disponibles son:
Se sabe que funcionan con los mismos paquetes utilizados en productos adolescentes. También se sabe que cambiar paquetes funciona bien, siempre y cuando sea solo un cambio de paquete.
El objetivo sbus_example crea un ejecutable para comunicarse con receptores SBUS y servos. Este objetivo también tiene un _hex para crear el archivo hex y un _upload para usar el cargador CLI adolescente para flashear la adolescencia. Las instrucciones para configurar su entorno de compilación se pueden encontrar en nuestro repositorio de herramientas de construcción.
Esta biblioteca está dentro del espacio de nombres BFS .
Esta estructura define los datos SBUS que pueden ser leídos y devueltos por el objeto SBUSRX y el conjunto y enviado por el objeto SBUSTX .
Bool Lost_frame si se ha perdido un marco.
BOOL FailsAs a prueba de si el receptor ha ingresado el modo FakeSafe o para ordenar servos para ingresar al modo FakeSafe.
Bool CH17, CH18 Estado del Canal 17 y el Canal 18.
estatic constexpr int8_t num_ch = 16 El número de canales SBUS.
int16_t ch [num_ch] Una matriz de datos del canal SBUS.
Esta clase se utiliza para recibir datos SBUS de un receptor capaz de SBUS.
SBUSRX (HardWareserial *Bus) crea un objeto SBUSRX . Se pasa un puntero al objeto en serie correspondiente al puerto serie utilizado. El pin RX del puerto serie recibirá paquetes SBUS.
bfs::SbusRx sbus (&Serial1);SBUSRX (HardWareserial *Bus, Const Bool Inv) crea un objeto SBUSRX . Un puntero al objeto en serie correspondiente al puerto serie utilizado se pasa junto con un segundo parámetro, Inv , que establece si se usa serial invertida. Si INV es verdadero, la señal es la SBU invertida estándar, de lo contrario, es SBU no invertido.
bfs::SbusRx sbus (&Serial1, false );SBUSRX (HardWareserial *Bus, Const Bool Inv, Const Bool Fast) igual que el constructor anterior, pero permite seleccionar el SBUS Baudrate rápido (200000) si es rápido es verdadero.
(Solo ESP32) SBUSRX (HardWareserial *bus, const int8_t rxpin, const int8_t txpin, const bool inv) crea un objeto sbusrx . Un puntero al objeto serie correspondiente al puerto serie utilizado se pasa junto con el número de pin RX ( RXPIN ), el número de pin TX ( TXPIN ) y si se usa serial invertida ( inv ). Si INV es verdadero, la señal es la SBU invertida estándar, de lo contrario, es SBU no invertido.
(Solo ESP32) SBUSRX (HardWareserial *bus, const int8_t rxpin, const int8_t txpin, const bool inv, const bool rápido) igual que el constructor anterior, pero permite seleccionar el sbus baudrate rápido (200000) si es rápido es cierto.
Void Begin () inicializa la comunicación SBUS.
sbus.Begin();BOOL Read () Parses SBUS PACKETS, devuelve verdadero a recibir con éxito un paquete SBUS.
if (sbus.Read()) {
// Do something with the received data
}SBUSDATA DATA () Devuelve la estructura SBUSDATA , poblada con datos del último paquete recibido.
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}Esta clase se utiliza para transmitir datos SBUS a servos capaces de SBUS.
SBUSTX (HardWareserial *Bus) crea un objeto SBUSTX . Se pasa un puntero al objeto en serie correspondiente al puerto serie utilizado. El pin TX del puerto serie recibirá paquetes SBUS.
bfs::SbusTx sbus (&Serial1);SBUSTX (HardWareserial *Bus, Const Bool Inv) crea un objeto SBUSTX . Un puntero al objeto en serie correspondiente al puerto serie utilizado se pasa junto con un segundo parámetro, Inv , que establece si se usa serial invertida. Si INV es verdadero, la señal es la SBU invertida estándar, de lo contrario, es SBU no invertido.
bfs::SbusTx sbus (&Serial1, false );(Solo ESP32) SBUSTX (HardWareserial *bus, const int8_t rxpin, const int8_t txpin, const bool inv) crea un objeto sbustx . Un puntero al objeto serie correspondiente al puerto serie utilizado se pasa junto con el número de pin RX ( RXPIN ), el número de pin TX ( TXPIN ) y si se usa serial invertida ( inv ). Si INV es verdadero, la señal es la SBU invertida estándar, de lo contrario, es SBU no invertido.
Void Begin () inicializa la comunicación SBUS.
sbus.Begin();Void Write () escribe un paquete SBUS. El paquete se escribe de inmediato, debe regular el momento de enviar paquetes a servos para mantener una frecuencia de aproximadamente 100 Hz o 50 Hz, dependiendo de la configuración del sistema SBUS.
sbus.Write();Los datos vacíos (const sbusdata & data) establecen los datos SBUS, que se transmitirán en el siguiente método de escritura .
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SBUSData Data () Devuelve los datos SBUS almacenados en el objeto SBUSTX , que se transmitirá en el siguiente método de escritura .
bfs::SbusData data = sbus.data();