كيفية كتابة برنامج وحدة التحكم في الطيران – الجزء 3

حلقة PID

في الجزء الأول من سلسلتنا تحدثنا عن حلقة التحكم في الطيران PID Loop. يجدر التنويه بأنه لا يوجد (انظر الشكل 1). تحدثنا في الأجزاء السابقة عن كيفية فك شفرة إدخال وحدة التحكم عن بعد ، r (t) ، وكيف نولد تحكمنا في PWM لـ ESC ، u (t). في الجزء 3 ، سنلقي نظرة على مدخلات التدحرج والخطوة والانعراج من وحدة التحكم في الحركة IMU ودمجها مع r (t) للحصول على إشارة الخطأ ، e (t) ، والتي يتم إدخالها في حلقة PID الخاصة بنا. سنخرج نقطة الضبط المطلوبة وإخراج حلقة PID إلى Nexgen Configurator للمساعدة في الضبط.

سيحدد تصميم حلقة وحدة التحكم في الطيران مدى جودة تحليق الطائرات بدون طيار ومدى قوة تحويل مدخلات التحكم إلى مخرجات المحرك. من خلال تعديل معلمات حلقة PID الخاصة بنا ، سنكون قادرين على إنتاج نموذج طيران بطيء وفخم أو سريع وخفيف. ما هو مناسب يعتمد على الغرض من مهمة الطائرة بدون طيار. إذا كنت تقوم بالتصوير السينمائي ، فأنت لا تريد الكثير من التغييرات المفاجئة ، ولكن إذا كنت تقوم بألعاب بهلوانية ، فأنت تريد ذلك.

بالإضافة إلى تعديل ثوابت الكسب في وحدة التحكم PID الخاصة بنا ، يمكننا ضبط استجابة نموذج الطيران لدينا من خلال وجود أوضاع مختلفة. على سبيل المثال:

بعض النظريات

الهدف هو نظام تحكم يقوم بضبط الإخراج لتلبية الحالة المرغوبة ، والتي تسمى غالبًا نقطة الضبط. جهاز التحكم PID هو نظام حلقة مغلقة. هذا يعني أنه يستخدم التغذية المرتدة من المستشعر الخاص به لمعرفة ما إذا كان الإخراج هو نفس نقطة الضبط. على عكس خوارزميات التحكم البسيطة ، فإن وحدة التحكم PID قادرة على معالجة مدخلات العملية بناءً على تاريخ ومعدل تغيير الإشارة. وهذا يعطي طريقة تحكم أكثر دقة وثباتًا.

كما هو موضح في الشكل 1 ، يحدد مراقب الطيران لدينا حالة طائرتنا بدون طيار باستخدام IMU. على سبيل المثال ، سيخبرنا الجيروسكوب مقدار اللفة. تتم مقارنة ذلك بالإدخال من جهاز التحكم عن بعد الخاص بنا ، في هذا المثال مقدار الضغط على العصا اليمنى (بافتراض إعداد الوضع 2 على جهاز الإرسال الخاص بنا). الفرق بين هذين المدخلين هو إشارة الخطأ e (t). سيتم إدارة الخطأ بثلاث طرق ؛ للتعامل مع الحاضر من خلال المصطلح النسبي ، والتعافي من الماضي باستخدام المصطلح المتكامل ، وتوقع المستقبل من خلال مصطلح الاشتقاق.

يتم تحديد مقدار كل مكون (P و I و D) مستخدم من خلال الزيادة أو الترجيح على كل عنصر. تم تعيين هذا كـ Kp و Ki و Kd.

من خلال الضبط الصحيح للوزن في دائرة PID ، يمكنك تحقيق استجابة سريعة نسبيًا مع أدنى حد من التجاوز (تمرير قيمة نقطة التحديد) والرنين (التذبذب حول قيمة النقطة المحددة).

المدة النسبية

كما يوحي الاسم ، يعطي المصطلح النسبي (P) إدخال تحكم في النظام يتناسب مع الخطأ (الشكل 2). نتائج الكسب النسبي الأكبر هي تغييرات أكبر استجابةً للخطأ ، وبالتالي تؤثر على السرعة التي يمكن أن تستجيب بها وحدة التحكم للتغييرات في النظام.

في حين أن الكسب النسبي المرتفع يمكن أن يتسبب في استجابة الدائرة بسرعة ، فإن القيمة العالية جدًا يمكن أن تسبب تذبذبات حول قيمة النقطة المحددة. ربح منخفض جدًا ولا يمكن للدائرة الاستجابة بكفاءة للتغيرات في النظام. إذا كان الترجيح P مرتفعًا جدًا فسوف تحصل على نظام غير مستقر.

كما هو موضح في الشكل 2 ، فإن استخدام التحكم النسبي فقط سيترك إزاحة ثابتة من نقطة التحديد. وبالتالي نحن بحاجة إلى إضافة مصطلح جديد لتصحيح ذلك.

المصطلح المتكامل

يضيف المصطلح المتكامل (I) مجموع الأخطاء السابقة إلى إدخال التحكم. سيستمر جمع الأخطاء حتى يتساوى مخرجات النظام مع نقطة التحديد ، وينتج عن ذلك عدم وجود خطأ تعويض عندما يكون المرجع مستقرًا (الشكل 2 – pi). ومع ذلك ، نظرًا للاستجابة السريعة للتحكم المتكامل ، يمكن أن تتسبب قيم الكسب العالية في تجاوز كبير لنقطة التحديد وتؤدي إلى التذبذب وعدم الاستقرار. ربح منخفض جدًا ، وستكون الدائرة أبطأ بشكل ملحوظ في الاستجابة للتغيرات في النظام.

المصطلح الاشتقاقي

يحاول التحكم المشتق تقليل التجاوز والرنين الناتج من التحكم النسبي والمتكامل. يحدد مدى سرعة تغير الدائرة بمرور الوقت (من خلال النظر إلى مشتق إشارة الخطأ) ويضربها في Kd لإنتاج استجابة مشتقة. سيعطي التغيير السريع في الخطأ إضافة إلى إدخال التحكم. هذا يحسن الاستجابة للتغيير المفاجئ في نقطة التحديد والمصطلح المشتق هو في الأساس مرشح تمرير عالي.

على عكس التحكم النسبي والمتكامل ، فإن التحكم المشتق سيبطئ استجابة الدائرة. عند القيام بذلك ، فإنه قادر على التعويض جزئيًا عن التجاوز بالإضافة إلى التذبذبات الرطبة الناتجة عن التحكم المتكامل والتناسب. يمكن أن تتسبب قيم الكسب العالية لـ Kd في استجابة الدائرة ببطء شديد وتتركها عرضة للضوضاء والتذبذب عالي التردد (حيث تصبح الدائرة بطيئة جدًا في الاستجابة بسرعة). منخفض للغاية Kd والدائرة عرضة لتجاوز نقطة التحديد. ومع ذلك ، في بعض الحالات ، يجب تجنب تجاوز نقطة التحديد بأي مبلغ كبير ، وبالتالي يمكن استخدام مكاسب مشتقة أعلى (إلى جانب ربح نسبي أقل).

يوضح الشكل 3 تأثير زيادة كسب أي من المعلمات بشكل مستقل.

عادةً ما ينتج عن الجمع بين المصطلحات كوحدة تحكم PID أفضل أداء. يلخص الشكل 2 إخراج وحدات التحكم P و PI و PID. PI أفضل من P لأنه لا يوجد خطأ إزاحة ، و PID أفضل من PI بسبب استجابة أسرع وعدم وجود تجاوز.

تنفيذ حلقة PID

نظرًا للجاذبية العالمية لوحدة التحكم PID ، فليس من المستغرب أن تكون مكتبات Arduino موجودة بالفعل والتي تنفذ الاستراتيجيات الموضحة أعلاه. هذا يسمح لنا بالتركيز على ضبط حلقة PID لتصميم كوادكوبتر الخاص بنا. سنستخدم Nexgen Configurator ، المكتوب بلغة المعالجة / Java ، لمساعدتنا في تصور المدخلات والمخرجات والخطأ لوحدة تحكم PID الخاصة بنا.

إنشاء إدخال الخطأ

يوضح الشكل 1 كيف أن إشارة الخطأ ، e (t) ، هي المدخلات في حلقة PID الخاصة بنا. كيف نولد إشارة الخطأ هذه نظرًا لأن IMU الخاص بنا يعطي ردود فعل الميل واللف والانعراج في الانحطاط ومدخلات التحكم عن بعد هي عدد صحيح يتناسب مع حركة العصا على جهاز الإرسال لدينا؟ من أجل مقارنة هذين المُدخلين ، يجب أن يكون كلاهما يستخدم نفس الوحدات. بمعنى آخر ، نحتاج إلى تعيين مدخلات وحدة التحكم عن بعد SBUS إلى درجات.

إذا نظرت إلى مكتبة SBUS التي تعد جزءًا من برنامج Flight Controller الثابت الذي يتم تشغيله على Arduino Nano 33 ، فسترى الكود التالي في ملف الرأس.

هذا هو الحد الأدنى والحد الأقصى من الأرقام التي سيتم إرجاعها كنتيجة لإدخال تحكم من جهاز إرسال Taranis (على سبيل المثال ، إذا كان الخانق = 0 ، فسيرسل جهاز الإرسال 172 وإذا كان الخانق 100٪ سيرسل 1811). تعتمد الأرقام المرسلة فيما بين على منحنى الاستجابة المبرمج في جهاز الإرسال لكل قناة.

يوضح الشكل 4 منحنى استجابة دواسة الوقود الذي قمنا ببرمجته في جهاز التحكم عن بُعد. كل قناة لديها واحدة من هؤلاء. يمكنك أن ترى أنه في هذه الحالة يكون المنحنى خطيًا من -100 إلى 100 ، مع إنتاج 0 عند توسيط العصا. يتم تحويل هذا إلى 172-1811 بواسطة بروتوكول SBUS ، وهي الإعدادات الافتراضية لـ FrSKY. في الجزء الثاني من هذه السلسلة ، رأينا أن حمولة SBUS عبارة عن رقم ثنائي 11 بت. النقطة المهمة هي أن هناك تخطيطًا خطيًا بين إدخال العصا وقيمة SBUS.

يمكننا التحقق من ذلك باستخدام Nexgen Configurator (الشكل 5) والنظر في قيم SBUS على كل قناة لمدخلات التحكم. تم العثور على هذا في شاشة التحكم اللاسلكي.

في الوضع المستقر ، سنفرض حدًا أقصى لزوايا الانحناء والميل بمقدار 60 درجة ، لجعل الطائرة أكثر صعوبة في تحطمها عن طريق الخطأ. لمعرفة ما إذا كانت الضفة اليسرى أو اليمنى والأمام أو الخلفية إيجابية أم سلبية ، سنستخدم Nexgen Configurator لمعرفة النظام الذي تستخدمه وحدة IMU. سوف نستخدم نفس النظام لمدخلات سلطة التحكم.

كما هو موضح في الشكل 6 ، لدى IMU:

عندما تكون الطائرة بدون طيار موازية للأرض ، يكون التدحرج والميل درجة صفر. وبالتالي نحن بحاجة إلى تعيين مدخلات التحكم SBUS من 172-1811 إلى -60 درجة إلى + 60 درجة. إذا تجاوزت IMU 90 درجة ، فسيتم الخلط بينها ، لذلك حتى في الوضع البهلواني سنحد من إدخال التحكم إلى 80 درجة.

الآن بعد أن قمنا بتطبيع IMU ومدخلات التحكم ، فإن حساب إشارة الخطأ هو ببساطة مسألة طرح واحدة من الأخرى. على سبيل المثال ، سيتم حساب خطأ لفة باستخدام:

في الجزء 4 ، سوف نتخيل إشارة الخطأ باستخدام Nexgen Configurator ، ونقوم بإدخالها في حلقة PID الخاصة بنا وتحويل الإخراج إلى دورة عمل PWM.