

Esta biblioteca se comunica com receptores e servos da SBUS e é compatível com os sistemas de construção do Arduino e CMake.
O SBUS é um protocolo de barramento para os receptores enviarem comandos para servos. Ao contrário do PWM, o SBUS usa uma arquitetura de barramento, onde uma única linha serial pode ser conectada com até 16 servos, com cada um recebendo um comando exclusivo.
O protocolo SBUS usa uma lógica serial invertida com uma taxa de transmissão de 100000, 8 bits de dados, paridade e 2 bits de parada. O pacote SBUS tem 25 bytes, consistindo em:
Observe que o quadro perdido é indicado quando um quadro é perdido entre o transmissor e o receptor. A ativação do FailSafe normalmente exige que muitos quadros sejam perdidos em uma linha e indique que o receptor mudou para o modo Failsafe. Os pacotes são enviados aproximadamente a cada 10 ms ou 20 ms, dependendo da configuração do sistema.
Uma variação nas SBUs chamada "Fast SBUS" começou a ser usada. Isso usa um Baudrate de 200000 e uma taxa de atualização mais rápida.
Nota nos canais CH17 e CH18: Channel 17 e Channel 18 são canais digitais On/Off. Estes não estão disponíveis universalmente em todos os receptores e servos da SBUS.
Os receptores FRSKY gerarão um intervalo de 172 a 1811 com canais definidos para um intervalo de -100% a +100%. Usando limites estendidos de -150% a +150% emite um intervalo de 0 a 2047, que é o alcance máximo acalivável com 11 bits de dados.
Como o SBUS é um formato de barramento digital, é um excelente meio de receber comandos piloto de um transmissor e um receptor capaz de SBUS. Se os servos SBUS forem usados na aeronave, a SBUS também é um excelente meio de enviar comandos de atuadores - os comandos servo podem ser enviados com menor latência e, usando apenas um único pino para comandar até 16 servos, pinos de microcontrolador adicionais são libertados para outros usos.
O SBUS usa um protocolo serial invertido, que não é comumente suportado em Arduino. Esta biblioteca é capaz de usar a série invertida para os seguintes microcontroladores:
Para todos os outros microcontroladores, você deve usar um inversor serial. Se você modificou esta biblioteca para trabalhar com outros microcontroladores, envie uma solicitação de tração.
Simplesmente clone ou faça o download e extraia a biblioteca com zíper para sua pasta Arduino/Bibliotecas. A biblioteca é adicionada como:
# include " sbus.h "Um exemplo está localizado em exemplos/arduino/sbus_example/sbus_example.ino . Esta biblioteca é testada com dispositivos Teensy 3.x, 4.x e LC e deve trabalhar com outros dispositivos Arduino.
O CMake é usado para construir esta biblioteca, que é exportada como um alvo da biblioteca chamado SBUS . O cabeçalho é adicionado como:
# include " sbus.h "A biblioteca também pode ser compilada independente usando o idioma cmake de criar um diretório de compilação e, em seguida, dentro desse diretório emitindo:
cmake .. -DMCU=MK66FX1M0
make
Isso criará a biblioteca e o exemplo executável chamado sbus_example . O arquivo de origem executável exemplo está localizado em exemplos/cmake/sbus_example.cc . Observe que o comando cmake inclui uma definição especificando o microcontrolador para o qual o código está sendo compilado. Isso é necessário para configurar corretamente o código, a frequência da CPU e as opções de compilação/ligante. Os MCUs disponíveis são:
Sabe -se que eles funcionam com os mesmos pacotes usados em produtos adolescentes. Sabe -se que os pacotes de comutação funcionam bem, desde que seja apenas uma mudança de pacote.
O alvo SBUS_Example cria um executável para se comunicar com receptores e servos da SBUS. Esse destino também possui um _hex para criar o arquivo hexadecimal e um _UPLOAD para usar o uploader da CLI adolescente para piscar a adolescência. As instruções para configurar seu ambiente de compilação podem ser encontradas em nosso repositório de ferramentas de construção.
Esta biblioteca está dentro do espaço de nome BFS .
Esta estrutura define dados SBUS que podem ser lidos e retornados pelo objeto SBUSRX ou definido e enviado pelo objeto Sbustx .
bool perdido_frame se um quadro foi perdido.
O BOOL falha se o receptor entrou no modo FailSafe ou para comandar servos para inserir o modo FailSafe.
BOOL CH17, CH18 Estado do Canal 17 e Canal 18.
estático constexpr int8_t num_ch = 16 o número de canais SBUS.
INT16_T CH [NUM_CH] Uma matriz de dados do canal SBUS.
Esta classe é usada para receber dados da SBUS de um receptor capaz de SBUS.
SBUSRX (Hardwareserial Bus) cria um objeto SBUSRX . Um ponteiro para o objeto serial correspondente à porta serial utilizado é passado. O pino RX da porta serial receberá pacotes SBUS.
bfs::SbusRx sbus (&Serial1);SBUSRX (HardwareSerial *BUS, const bool Inv) cria um objeto SBUSRX . Um ponteiro para o objeto serial correspondente à porta serial utilizado é passada junto com um segundo parâmetro, Inv , que define se a série invertida é usada. Se o Inv for verdadeiro, o sinal é o SBUS invertido padrão, caso contrário, é SBUS não invertido.
bfs::SbusRx sbus (&Serial1, false );Sbusrx (Hardwareserial Bus, const bool Inv, const bool rápido) o mesmo que o construtor acima, mas permite a seleção do rápido sbus baudrate (200000) se rápido for verdadeiro.
(Somente ESP32) SBUSRX (Hardwareserial *barramento, const int8_t rxpin, const int8_t txpin, const bool inv) cria um objeto sbusrx . Um ponteiro para o objeto serial correspondente à porta serial utilizado é passada junto com o número do pino RX ( rxpin ), o número do pino TX ( TXPIN ) e se a série invertida é usada ( inv ). Se o Inv for verdadeiro, o sinal é o SBUS invertido padrão, caso contrário, é SBUS não invertido.
(Somente ESP32) SBUSRX (Hardwareserial BUS, const Int8_T rxpin, const Int8_T txpin, const bool Inv, const bool rápido) o mesmo que o construtor acima, mas permite a seleção do rápido sbus baudrate (200000) se o rápido for verdadeiro.
void BEGIN () Inicializa a comunicação SBUS.
sbus.Begin();Bool Read () analisa pacotes SBUS, retorna true ao receber com sucesso um pacote SBUS.
if (sbus.Read()) {
// Do something with the received data
}O sbusdata data () retorna a estrutura sbusdata , preenchida com dados do último pacote recebido.
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}Esta classe é usada para transmitir dados SBUS para servos capazes de SBUs.
O barramento Sbustx (Hardwareserial *) cria um objeto Sbustx . Um ponteiro para o objeto serial correspondente à porta serial utilizado é passado. O pino TX da porta serial receberá pacotes SBUS.
bfs::SbusTx sbus (&Serial1);Sbustx (Hardwareserial *barramento, const bool Inv) cria um objeto Sbustx . Um ponteiro para o objeto serial correspondente à porta serial utilizado é passada junto com um segundo parâmetro, Inv , que define se a série invertida é usada. Se o Inv for verdadeiro, o sinal é o SBUS invertido padrão, caso contrário, é SBUS não invertido.
bfs::SbusTx sbus (&Serial1, false );(Somente ESP32) Sbustx (Hardwareserial *barramento, const int8_t rxpin, const int8_t txpin, const bool inv) cria um objeto sbustx . Um ponteiro para o objeto serial correspondente à porta serial utilizado é passada junto com o número do pino RX ( rxpin ), o número do pino TX ( TXPIN ) e se a série invertida é usada ( inv ). Se o Inv for verdadeiro, o sinal é o SBUS invertido padrão, caso contrário, é SBUS não invertido.
void BEGIN () Inicializa a comunicação SBUS.
sbus.Begin();void write () escreve um pacote SBUS. O pacote é escrito imediatamente, você deve regular o tempo do envio de pacotes para servos para manter uma frequência de aproximadamente 100 Hz ou 50 Hz, dependendo da configuração do sistema SBUS.
sbus.Write();Dados void (const sbusdata & dados) define os dados do SBUS, que serão transmitidos no próximo método de gravação .
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);O SBUSDATA Data () retorna os dados do SBUS em buffer no objeto Sbustx , que será transmitido no próximo método de gravação .
bfs::SbusData data = sbus.data();