

ห้องสมุดนี้สื่อสารกับเครื่องรับ SBUS และเซอร์โวและเข้ากันได้กับระบบสร้าง Arduino และ CMake
SBUS เป็นโปรโตคอลบัสสำหรับผู้รับส่งคำสั่งไปยังเซอร์โว ซึ่งแตกต่างจาก PWM, SBUs ใช้สถาปัตยกรรมบัสที่สามารถเชื่อมต่อสายอนุกรมเดียวกับเซอร์โวได้มากถึง 16 เซอร์โวโดยแต่ละคำสั่งที่ได้รับ
โปรโตคอล SBUS ใช้ตรรกะอนุกรมคว่ำด้วยอัตราการรับส่งข้อมูล 100000, 8 บิตข้อมูล, แม้แต่ความเท่าเทียมกันและ 2 บิตหยุด แพ็คเก็ต SBUS ยาว 25 ไบต์ประกอบด้วย:
โปรดทราบว่าเฟรมที่หายไปจะถูกระบุเมื่อเฟรมหายระหว่างเครื่องส่งสัญญาณและตัวรับสัญญาณ โดยทั่วไปแล้วการเปิดใช้งาน FailSafe ต้องการให้เฟรมจำนวนมากหายไปในแถวและระบุว่าตัวรับสัญญาณได้ย้ายเข้าสู่โหมด FailSafe แพ็คเก็ตจะถูกส่งประมาณ 10 ms หรือ 20 ms ขึ้นอยู่กับการกำหนดค่าระบบ
การเปลี่ยนแปลงของ SBUs ที่เรียกว่า "Fast SBUS" ได้เริ่มใช้แล้ว สิ่งนี้ใช้ baudrate ของ 200000 และอัตราการอัปเดตที่เร็วขึ้น
หมายเหตุเกี่ยวกับ CH17 และ CH18: Channel 17 และ Channel 18 เป็นช่องเปิด/ปิดดิจิตอล สิ่งเหล่านี้ไม่สามารถใช้งานได้ในระดับสากลในเครื่องรับ SBUS และเซอร์โวทั้งหมด
ตัวรับสัญญาณ Frsky จะส่งออกช่วง 172 - 1811 โดยมีช่องทางตั้งค่าเป็นช่วง -100% ถึง +100% การใช้ขีด จำกัด ที่ขยายออกไปที่ -150% ถึง +150% ส่งออกช่วง 0 ถึง 2047 ซึ่งเป็นช่วงสูงสุดที่สามารถทำได้ด้วยข้อมูล 11 บิต
เนื่องจาก SBUS เป็นรูปแบบบัสดิจิตอลจึงเป็นวิธีที่ยอดเยี่ยมในการรับคำสั่งนักบินจากเครื่องส่งสัญญาณและตัวรับสัญญาณที่มีความสามารถของ SBUS หากใช้เซอร์โว SBUS ในเครื่องบิน SBUS ยังเป็นวิธีที่ยอดเยี่ยมในการส่งคำสั่งแอคทูเอเตอร์ - คำสั่งเซอร์โวสามารถส่งได้ด้วยเวลาแฝงที่ต่ำกว่าและใช้พินเดียวเพื่อสั่งเซิร์ฟเวอร์สูงสุด 16 เซอร์โวพินไมโครคอนโทรลเลอร์เพิ่มเติม
SBUS ใช้โปรโตคอลอนุกรมคว่ำซึ่งไม่ได้รับการสนับสนุนโดยทั่วไปใน Arduino ห้องสมุดนี้สามารถใช้อนุกรมกลับด้านสำหรับไมโครคอนโทรลเลอร์ต่อไปนี้:
สำหรับไมโครคอนโทรลเลอร์อื่น ๆ ทั้งหมดคุณ ต้อง ใช้อินเวอร์เตอร์อนุกรม หากคุณได้แก้ไขห้องสมุดนี้เพื่อทำงานกับไมโครคอนโทรลเลอร์อื่น ๆ โปรดส่งคำขอดึง
เพียงแค่โคลนหรือดาวน์โหลดและแยกไลบรารีซิปลงในโฟลเดอร์ Arduino/Libraries ของคุณ ห้องสมุดถูกเพิ่มเป็น:
# include " sbus.h "ตัวอย่างอยู่ใน ตัวอย่าง/arduino/sbus_example/sbus_example.ino ห้องสมุดนี้ได้รับการทดสอบด้วยอุปกรณ์ Teensy 3.x, 4.x และ LC และควรทำงานกับอุปกรณ์ Arduino อื่น ๆ
CMAKE ใช้เพื่อสร้างไลบรารีนี้ซึ่งส่งออกเป็นเป้าหมายห้องสมุดที่เรียกว่า SBUS ส่วนหัวจะถูกเพิ่มเป็น:
# include " sbus.h "ห้องสมุดสามารถรวบรวมแบบสแตนด์อโลนโดยใช้สำนวน CMake ของการสร้างไดเรกทอรีบิล ด์ และจากภายในไดเรกทอรีที่ออก:
cmake .. -DMCU=MK66FX1M0
make
สิ่งนี้จะสร้างไลบรารีและตัวอย่างที่เรียกว่า SBUS_EXAMPLE ตัวอย่างไฟล์แหล่งข้อมูลที่เรียกใช้งานได้อยู่ที่ ตัวอย่าง/cmake/sbus_example.cc ขอให้สังเกตว่าคำสั่ง CMAKE รวมถึงการกำหนดที่ระบุไมโครคอนโทรลเลอร์รหัสกำลังถูกรวบรวมสำหรับ สิ่งนี้จำเป็นต้องกำหนดค่าโค้ดความถี่ CPU และตัวเลือกคอมไพล์/ลิงเกอร์อย่างถูกต้อง MCU ที่มีอยู่คือ:
สิ่งเหล่านี้เป็นที่รู้จักกันว่าทำงานกับแพ็คเกจเดียวกับที่ใช้ในผลิตภัณฑ์วัยรุ่น การสลับแพ็คเกจยังเป็นที่รู้จักกันว่าทำงานได้ดีตราบใดที่มันมีการเปลี่ยนแปลงแพ็คเกจเท่านั้น
เป้าหมาย SBUS_EXAMPLE สร้างการปฏิบัติการสำหรับการสื่อสารกับตัวรับสัญญาณ SBUS และเซอร์โว เป้าหมายนี้ยังมี _hex สำหรับการสร้างไฟล์ hex และ _upload สำหรับการใช้ uploader Teensy CLI เพื่อแฟลช Teensy คำแนะนำสำหรับการตั้งค่าสภาพแวดล้อมการสร้างของคุณสามารถพบได้ใน repo build-tools ของเรา
ห้องสมุดนี้อยู่ใน Namespace BFS
โครงสร้างนี้กำหนดข้อมูล SBUS ที่สามารถอ่านและส่งคืนโดยวัตถุ SBUSRX หรือตั้งค่าและส่งโดยวัตถุ SBUSTX
bool lost_frame ว่าเฟรมหายไปหรือไม่
Bool Failsafe ไม่ว่าตัวรับสัญญาณจะเข้าสู่โหมด FailSafe หรือคำสั่ง servos เพื่อเข้าสู่โหมด FailSafe
BOOL CH17, CH18 สถานะของช่อง 17 และช่อง 18
Static constexpr int8_t num_ch = 16 จำนวนช่องสัญญาณ SBUS
int16_t ch [num_ch] อาร์เรย์ของข้อมูลช่องสัญญาณ SBUS
คลาสนี้ใช้สำหรับการรับข้อมูล SBUS จากตัวรับสัญญาณ 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 *บัส, const bool inv, const bool เร็ว) เหมือนกับตัวสร้างด้านบน แต่เปิดใช้งานการเลือก SBUS Baudrate ที่รวดเร็ว (200000) หาก เร็ว เป็นจริง
(ESP32 เท่านั้น) SBUSRX (Hardwareserial *บัส, const int8_t rxpin, const int8_t txpin, const bool inv) สร้างวัตถุ SBUSRX ตัวชี้ไปยังวัตถุ อนุกรม ที่สอดคล้องกับพอร์ตอนุกรมที่ใช้จะถูกส่งผ่านไปพร้อมกับหมายเลขพิน Rx ( RXPIN ), หมายเลขพิน TX ( TXPIN ) และไม่ว่าจะใช้อนุกรมแบบกลับด้าน ( Inv ) หรือไม่ หาก INV เป็นจริงสัญญาณเป็น SBU แบบกลับด้านมาตรฐานมิฉะนั้นจะเป็น SBU ที่ไม่กลับด้าน
(ESP32 เท่านั้น) SBUSRX (Hardwareserial *บัส, const int8_t rxpin, const int8_t txpin, const bool inv, const bool เร็ว) เหมือนกับตัวสร้างด้านบน แต่เปิดใช้งานการเลือก SBUs Baudrate (200000) ที่ รวดเร็ว
เป็นโมฆะเริ่มต้น () เริ่มต้นการสื่อสาร SBUS
sbus.Begin();BOOL Read () Parses SBUS Packets ส่งคืนจริงเมื่อได้รับแพ็คเก็ต SBUS สำเร็จ
if (sbus.Read()) {
// Do something with the received data
}SBUSDATA DATA () ส่งคืนโครงสร้าง SBUSDATA ซึ่งมีข้อมูลจากแพ็กเก็ตที่ได้รับล่าสุด
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}คลาสนี้ใช้สำหรับการส่งข้อมูล SBUS ไปยังเซอร์โวที่มีความสามารถ SBUS
Sbustx (Hardwareserial *บัส) สร้างวัตถุ Sbustx ตัวชี้ไปยังวัตถุ อนุกรม ที่สอดคล้องกับพอร์ตอนุกรมที่ใช้จะถูกส่งผ่าน พิน TX ของพอร์ตอนุกรมจะได้รับแพ็คเก็ต SBUS
bfs::SbusTx sbus (&Serial1);Sbustx (Hardwareserial *บัส, 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 ( RXPIN ), หมายเลขพิน TX ( TXPIN ) และไม่ว่าจะใช้อนุกรมแบบกลับด้าน ( Inv ) หรือไม่ หาก INV เป็นจริงสัญญาณเป็น SBU แบบกลับด้านมาตรฐานมิฉะนั้นจะเป็น SBU ที่ไม่กลับด้าน
เป็นโมฆะเริ่มต้น () เริ่มต้นการสื่อสาร SBUS
sbus.Begin();เป็นโมฆะเขียน () เขียนแพ็คเก็ต SBUS แพ็คเก็ตถูกเขียนทันทีคุณควรควบคุมเวลาในการส่งแพ็กเก็ตไปยังเซอร์โวเพื่อรักษาความถี่ประมาณ 100 Hz หรือ 50 Hz ขึ้นอยู่กับการตั้งค่าของระบบ SBUS
sbus.Write();Data Void (Const SBUSDATA & DATA) ตั้งค่าข้อมูล SBUS ซึ่งจะถูกส่งในวิธี การเขียน ถัดไป
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);ข้อมูล SBUSDATA () ส่งคืนข้อมูล SBUS บัฟเฟอร์ในวัตถุ SBUSTX ซึ่งจะถูกส่งในวิธี การเขียน ถัดไป
bfs::SbusData data = sbus.data();