

이 라이브러리는 SBUS 수신기 및 서보와 통신하며 Arduino 및 Cmake 빌드 시스템과 호환됩니다.
SBU는 수신자가 서보에 명령을 보낼 수있는 버스 프로토콜입니다. PWM과 달리 SBU는 단일 직렬 라인을 고유 한 명령을받을 때 최대 16 서보에 연결할 수있는 버스 아키텍처를 사용합니다.
SBUS 프로토콜은 100000, 8 개의 데이터 비트, 심지어 패리티 및 2 개의 정지 비트의 전환 속도를 가진 역 직렬 로직을 사용합니다. SBUS 패킷은 다음으로 구성된 25 바이트 길이입니다.
송신기와 수신기 사이에서 프레임이 손실 될 때 손실 프레임이 표시됩니다. FAINSAFE 활성화는 일반적으로 많은 프레임이 연속으로 손실되도록 요구하며 수신기가 안전 모드로 이동했음을 나타냅니다. 패킷은 시스템 구성에 따라 약 10ms 또는 20ms마다 전송됩니다.
"빠른 SBU"라는 SBU의 변형이 사용되기 시작했습니다. 이것은 200000의 보드 레이트와 더 빠른 업데이트 속도를 사용합니다.
CH17 및 CH18 : 채널 17 및 채널 18은 디지털 온/오프 채널입니다. 이들은 모든 SBUS 수신기 및 서보에서 보편적으로 사용할 수있는 것은 아닙니다.
Frsky 수신기는 채널이 -100% ~ +100%로 설정된 172-1811의 범위를 출력합니다. -150% ~ +150%의 연장 된 한계를 사용하면 0에서 2047의 범위를 출력합니다. 이는 11 비트의 데이터로 달성 할 수있는 최대 범위입니다.
SBU는 디지털 버스 형식이므로 송신기와 SBUS 유능한 수신기로부터 파일럿 명령을 수신하는 훌륭한 수단입니다. SBUS 서보가 항공기에서 사용되는 경우 SBUS는 액추에이터 명령을 전송하는 훌륭한 수단이기도합니다. 서보 명령은 종종 더 낮은 대기 시간으로 전송 될 수 있으며, 단일 핀을 사용하여 최대 16 개의 서보를 명령하면 다른 마이크로 컨트롤러 핀을 다른 용도로 사용할 수 있습니다.
SBUS는 Arduino에서 일반적으로 지원되지 않는 역 직렬 프로토콜을 사용합니다. 이 라이브러리는 다음 마이크로 컨트롤러에 거꾸로 된 직렬을 사용할 수 있습니다.
다른 모든 마이크로 컨트롤러의 경우 직렬 인버터를 사용해야 합니다 . 다른 마이크로 컨트롤러와 함께 작동하도록이 라이브러리를 수정 한 경우 풀 요청을 제출하십시오.
Zipple Library를 Arduino/Libraries 폴더로 복제하거나 다운로드하여 추출하기 만하면됩니다. 라이브러리는 다음과 같이 추가됩니다.
# include " sbus.h "예는 예/Arduino/sbus_example/sbus_example.ino 에 있습니다. 이 라이브러리는 Temensy 3.X, 4.X 및 LC 장치로 테스트되며 다른 Arduino 장치와 함께 작동해야합니다.
CMAKE는이 라이브러리를 구축하는 데 사용되며 SBUS 라는 라이브러리 대상으로 내보내십시오. 헤더는 다음과 같이 추가됩니다.
# include " sbus.h "라이브러리는 빌드 디렉토리를 작성하는 CMAKE 관용구를 사용하여 독립형으로 편집 한 다음 해당 디렉토리 내에서 다음을 발행 할 수 있습니다.
cmake .. -DMCU=MK66FX1M0
make
이렇게하면 SBUS_Example 이라는 라이브러리 및 예제 실행 파일이 구축됩니다. 예제 실행 소스 파일은 examples/cmake/sbus_example.cc 에 있습니다. CMAKE 명령에는 코드가 컴파일되는 마이크로 컨트롤러 지정 정의가 포함되어 있습니다. 코드, CPU 주파수 및 컴파일/링커 옵션을 올바르게 구성해야합니다. 사용 가능한 MCU는 다음과 같습니다.
이들은 십대 제품에 사용되는 것과 동일한 패키지와 함께 작동하는 것으로 알려져 있습니다. 패키지가 패키지 변경 일뿐 만 아니라 패키지 스위칭 패키지도 잘 작동하는 것으로 알려져 있습니다.
SBUS_EXALLE 대상은 SBUS 수신기 및 서보와 통신하기위한 실행 파일을 만듭니다. 이 대상은 또한 16 진 파일을 만들기위한 _hex 와 Temensy CLI 업로더를 사용하여 Teensy를 플래시하기위한 _upload 가 있습니다. 빌드 환경 설정을위한 지침은 Build-Tools Repo에서 찾을 수 있습니다.
이 라이브러리는 네임 스페이스 BFS 내에 있습니다.
이 구조물은 SBUSRX 객체에 의해 읽고 반환 할 수있는 SBUS 데이터를 정의하거나 SBUSTX 객체에서 세트하고 보낸 SBUS 데이터를 정의합니다.
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 유능한 수신기로부터 SBUS 데이터를 수신하는 데 사용됩니다.
sbusrx (Hardwareserial *버스)는 sbusrx 객체를 만듭니다. 사용 된 직렬 포트에 해당하는 직렬 객체에 대한 포인터가 전달됩니다. 직렬 포트의 RX 핀은 SBUS 패킷을받습니다.
bfs::SbusRx sbus (&Serial1);sbusrx (Hardwareserial *버스, Const Bool Inv)는 sbusrx 객체를 만듭니다. 사용 된 직렬 포트에 해당하는 직렬 객체에 대한 포인터는 두 번째 매개 변수 인 Inv 와 함께 전달되며, 이는 반전 직렬 사용 여부를 설정합니다. INV가 참이면 신호는 표준 역전 SBU이며, 그렇지 않으면 비 반전 SBU입니다.
bfs::SbusRx sbus (&Serial1, false );SBUSRX (Hardwareserial *Bus, Const Bool Inv, Const Bool Fast) 위의 생성자와 동일하지만 빠른 SBUS Baudrate (200000)를 선택할 수 있습니다.
(ESP32 만 해당) sbusrx (Hardwareserial *버스, const int8_t rxpin, const int8_t txpin, const bool inv)는 sbusrx 객체를 만듭니다. 사용 된 직렬 포트에 해당하는 직렬 객체에 대한 포인터는 RX PIN 번호 ( RXPIN ), TX PIN 번호 ( TXPIN ) 및 반전 직렬 사용 여부 ( INV )와 함께 전달됩니다. INV가 참이면 신호는 표준 역전 SBU이며, 그렇지 않으면 비 반전 SBU입니다.
(ESP32 만 해당) SBUSRX (Hardwareserial *버스, Const INT8_T RXPIN, CONST INT8_T TXPIN, CONST BOOL Inv, CONST BOOL FAST) 위의 생성자와 동일하지만 빠른 SBUS Baudrate (2000)를 선택할 수 있습니다.
void begin ()은 SBUS 통신을 초기화합니다.
sbus.Begin();BOOL Read () Parses SBUS 패킷은 SBUS 패킷을 성공적으로 수신 할 때 True를 반환합니다.
if (sbus.Read()) {
// Do something with the received data
}sbusdata data ()는 마지막 수신 패킷의 데이터로 채워진 sbusdata 구조를 반환합니다.
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}이 클래스는 SBUS 데이터를 SBU 유능한 서보로 전송하는 데 사용됩니다.
sbustx (Hardwareserial *버스)는 sbustx 객체를 만듭니다. 사용 된 직렬 포트에 해당하는 직렬 객체에 대한 포인터가 전달됩니다. 직렬 포트의 TX 핀은 SBUS 패킷을받습니다.
bfs::SbusTx sbus (&Serial1);SBUSTX (Hardwareserial *Bus, Const Bool Inv)는 SBUSTX 객체를 만듭니다. 사용 된 직렬 포트에 해당하는 직렬 객체에 대한 포인터는 두 번째 매개 변수 인 Inv 와 함께 전달되며, 이는 반전 직렬 사용 여부를 설정합니다. INV가 참이면 신호는 표준 역전 SBU이며, 그렇지 않으면 비 반전 SBU입니다.
bfs::SbusTx sbus (&Serial1, false );(ESP32 만 해당) SBUSTX (Hardwareserial *버스, const int8_t rxpin, const int8_t txpin, const bool inv)는 sbustx 객체를 만듭니다. 사용 된 직렬 포트에 해당하는 직렬 객체에 대한 포인터는 RX PIN 번호 ( RXPIN ), TX PIN 번호 ( TXPIN ) 및 반전 직렬 사용 여부 ( INV )와 함께 전달됩니다. INV가 참이면 신호는 표준 역전 SBU이며, 그렇지 않으면 비 반전 SBU입니다.
void begin ()은 SBUS 통신을 초기화합니다.
sbus.Begin();void write ()는 SBUS 패킷을 씁니다. 패킷은 즉시 작성되며 SBUS 시스템의 설정에 따라 약 100Hz 또는 50Hz의 주파수를 유지하기 위해 패킷을 서보로 보내는 타이밍을 서보로 보내야합니다.
sbus.Write();void data (const sbusdata & data)는 다음 쓰기 방법에서 전송 될 SBUS 데이터를 설정합니다.
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SBUSDATA DATA ()는 SBUSTX 객체에 버퍼링 된 SBUS 데이터를 반환하며, 이는 다음 쓰기 방법에서 전송됩니다.
bfs::SbusData data = sbus.data();