

تتواصل هذه المكتبة مع مستقبلات SBUS و Servos وهي متوافقة مع أنظمة بناء Arduino و Cmake.
SBUS هو بروتوكول ناقل للمستقبلات لإرسال أوامر إلى الماكينات. على عكس PWM ، تستخدم SBUS بنية الحافلة حيث يمكن توصيل خط تسلسلي واحد مع ما يصل إلى 16 مؤازرة مع كل من مستقبل أمر فريد.
يستخدم بروتوكول SBUS منطقًا متسلسلًا مقلوبًا بمعدل باود قدره 100000 و 8 بت بيانات ، وحتى تكافؤ ، و 2 توقف. حزمة SBUS هي 25 بايت تتكون طويلة من:
لاحظ أنه يشار إلى الإطار المفقود عند فقدان إطار بين جهاز الإرسال والمستقبل. يتطلب تنشيط Failsafe عادةً فقدان العديد من الإطارات على التوالي ويشير إلى أن المتلقي قد انتقل إلى وضع Failsafe. يتم إرسال الحزم تقريبًا كل 10 مللي ثانية أو 20 مللي ثانية ، اعتمادًا على تكوين النظام.
بدأ استخدام تباين في SBUS يسمى "Fast SBUS". هذا يستخدم بادرات 200000 ومعدل تحديث أسرع.
ملاحظة على CH17 و CH18: القناة 17 والقناة 18 هي قنوات رقمية/إيقاف. هذه ليست متاحة عالميا على جميع مستقبلات SBUS و Servos.
ستخرج مستقبلات Frsky بمجموعة من 172 - 1811 مع القنوات التي يتم تعيينها على نطاق يتراوح بين 100 ٪ إلى +100 ٪. باستخدام حدود ممتدة من -150 ٪ إلى +150 ٪ يخرج نطاق من 0 إلى 2047 ، وهو الحد الأقصى للمدى مع 11 بت من البيانات.
نظرًا لأن SBUS عبارة عن تنسيق للحافلات الرقمية ، فهو وسيلة ممتازة لتلقي أوامر تجريبية من جهاز إرسال ومستقبل قادر على SBUS. إذا تم استخدام SBUS Servos في الطائرة ، فإن 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 يتضمن تحديدًا لتحديد متحكم يتم تجميع الكود لـ. هذا مطلوب لتكوين رمز وتردد وحدة المعالجة المركزية وخيارات التجميع/الرابط بشكل صحيح. MCU المتاحة هي:
من المعروف أن هذه تعمل مع نفس الحزم المستخدمة في منتجات Teensy. من المعروف أيضًا أن تبديل الحزم تعمل بشكل جيد ، طالما أنها تغيير الحزمة فقط.
يقوم هدف SBUS_EXAMPLE بإنشاء قابلة للتنفيذ للتواصل مع مستقبلات SBUS و SERVOs. يحتوي هذا الهدف أيضًا على _HEX لإنشاء ملف Hex و _upload لاستخدام Teensy CLI Uploader لفلاش Teensy. يمكن العثور على تعليمات لإعداد بيئة البناء في ريبو الأدوات الخاصة بنا.
هذه المكتبة داخل مساحة الاسم BFS .
يحدد هذا الهيكل بيانات SBUS التي يمكن قراءتها وإعادتها بواسطة كائن SBUSRX أو تعيينها وإرسالها بواسطة كائن SBUSTX .
Bool Lost_frame ما إذا كان قد تم فقد الإطار.
فشل Bool في ما إذا كان جهاز الاستقبال قد دخل في وضع Failsafe أو إلى قيادة Servos للدخول إلى وضع Failsafe.
Bool CH17 ، CH18 State of Channel 17 and Channel 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 *BUS ، CONST BOOL INV) ينشئ كائن SBUSRX . يتم تمرير مؤشر إلى الكائن التسلسلي المقابل للمنفذ التسلسلي المستخدم مع معلمة ثانية ، Inv ، والتي تحدد ما إذا كان يتم استخدام المسلسل المقلوب. إذا كانت INV صحيحة ، فإن الإشارة هي SBUS القياسية المقلوبة ، وإلا فإنها SBUs غير مثبتة.
bfs::SbusRx sbus (&Serial1, false );SBUSRX (حافلة *hardwareserial ، const bool inv ، const bool fast) مثل المنشئ أعلاه ، ولكنه يتيح اختيار sbus baudrate السريع (200000) إذا كان الصيام صحيحًا.
(ESP32 فقط) SBUSRX (HARDWARESERIAL *BUS ، const int8_t rxpin ، const int8_t txpin ، const bool inv) ينشئ كائن SBUSRX . يتم تمرير مؤشر إلى الكائن التسلسلي المقابل للمنفذ التسلسلي المستخدم مع رقم دبوس RX ( RXPIN ) ، ورقم دبوس TX ( TXPIN ) ، وما إذا كان يتم استخدام المسلسل المقلوب ( Inv ). إذا كانت INV صحيحة ، فإن الإشارة هي SBUS القياسية المقلوبة ، وإلا فإنها SBUs غير مثبتة.
(ESP32 فقط) SBUSRX (HARDWARESERIAL *BUS ، const int8_t rxpin ، const int8_t txpin ، const bool inv ، const bool fast) مثل المُنشئ أعلاه ، ولكنه يتيح اختيار sbus baudrate السريع (200000) إذا كان سريعًا .
باطل البداية () تهيئة اتصال SBUS.
sbus.Begin();Bool Read () تقوم بتوصيف حزم SBUS ، ويعيد صحيحًا على تلقي حزمة 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 *BUS ، CONST BOOL INV) ينشئ كائن SBUSTX . يتم تمرير مؤشر إلى الكائن التسلسلي المقابل للمنفذ التسلسلي المستخدم مع معلمة ثانية ، Inv ، والتي تحدد ما إذا كان يتم استخدام المسلسل المقلوب. إذا كانت INV صحيحة ، فإن الإشارة هي SBUS القياسية المقلوبة ، وإلا فإنها SBUs غير مثبتة.
bfs::SbusTx sbus (&Serial1, false );(ESP32 فقط) Sbustx (Hardwareserial *Bus ، const int8_t rxpin ، const int8_t txpin ، const bool inv) ينشئ كائن sbustx . يتم تمرير مؤشر إلى الكائن التسلسلي المقابل للمنفذ التسلسلي المستخدم مع رقم دبوس RX ( RXPIN ) ، ورقم دبوس TX ( TXPIN ) ، وما إذا كان يتم استخدام المسلسل المقلوب ( Inv ). إذا كانت INV صحيحة ، فإن الإشارة هي SBUS القياسية المقلوبة ، وإلا فإنها SBUs غير مثبتة.
باطل البداية () تهيئة اتصال SBUS.
sbus.Begin();باطل الكتابة () يكتب حزمة SBUS. تتم كتابة الحزمة على الفور ، يجب عليك تنظيم توقيت إرسال الحزم إلى الماكينات للحفاظ على تردد حوالي 100 هرتز أو 50 هرتز ، اعتمادًا على إعداد نظام SBUS.
sbus.Write();تقوم بيانات void (const sbusdata & data) بتعيين بيانات SBUS ، والتي سيتم إرسالها على طريقة الكتابة التالية.
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);تقوم بيانات SBUSDATA () بإرجاع بيانات SBUS المخزنة في كائن SBUSTX ، والتي سيتم إرسالها على طريقة الكتابة التالية.
bfs::SbusData data = sbus.data();