الفصل الحادي عشر

PID: إصلاح كل شيء

كيف نقتل الانخفاض المستمر ونوقف التمايل؟

الفصل 11: PID: إصلاح كل شيء ↗

الانخفاض المستمر الذي لا يموت

ثيو: هل تتذكر الفصل 2؟ ترك متحكمنا P الطائرة المسيّرة معلقة تحت 2 متر، ولم يستطع أي KpK_p إصلاح ذلك. حان الوقت لمعرفة ما الذي يستطيع.

لإبقاء الطائرة المسيّرة في الهواء، يجب أن تدفع المحركات mg≈4.9mg \approx 4.9 نيوتن، إلى الأبد. لكن المتحكم P لا يدفع إلا عندما يوجد خطأ: T=Kp e\eff{T} = K_p\,\err{e}. إذن لكي يدفع 4.9 نيوتن يحتاج إلى خطأ قدره e=mg/Kp\err{e} = mg/K_p. مع KpK_p = 20 نيوتن/م يصبح ذلك e\err e = 4.9/20 ≈ 24.5 سم، إلى الأبد. الانخفاض المستمر ليس عيبًا في ضبطنا. إنه الثمن الذي يتقاضاه P مقابل حمل أي شيء.

جون: لذا نحتاج جزءًا من المتحكم يمكنه الدفع بقوة 4.9 نيوتن مع صفر خطأ. شيء لديه ذاكرة.

I: كومة من الخطأ الماضي

ها هي الفكرة. احتفظ بمجموع متراكم للخطأ، أي المساحة تحت منحنى الخطأ، وهي بالضبط «المساحة المتراكمة» من الفصل 3. ادفع بنسبة إلى تلك الكومة:

TI=Ki∫0te dt\eff{T_I} = K_i \int_0^t \err{e}\,dt

طالما كانت الطائرة المسيّرة تحت 2 متر، يكون الخطأ موجبًا وتستمر الكومة في النمو، فيستمر الدفع في الازدياد. لا تتوقف الكومة عن النمو إلا عندما يكون الخطأ صفرًا تمامًا. عند هذه النقطة تبقى ببساطة، ممسكة بأي دفع تكون قد بنته. هذه هي الذاكرة التي أرادتها جون.

ثيو: أوه، هذا ماكر. لا يمكن للطائرة المسيّرة أن تستقر في أي مكان إلا عند 2 متر، لأنه في أي مكان آخر ستظل الكومة تتغير.

الفصل 11: PID: إصلاح كل شيء ↗

توقّع أولًا! تريد ميكا أن يختفي الانخفاض المستمر بسرعة، لذا تخطط لرفع KiK_i كثيرًا. ماذا سيحدث؟

تبدأ الأداة عند KiK_i = 10 نيوتن/(م·ث). راقب ثلاثة أشياء: المساحة المظللة بالأحمر (الخطأ الذي يتكوّم)، والجزء التكاملي من الدفع البرتقالي المتقطع وهو يصعد حتى خط الجاذبية البنفسجي، وقراءة الانخفاض المستمر. اسحب KiK_i إلى 0 لتستعيد انخفاض الفصل 2، ثم جرّب قيمًا أكبر. KpK_p ثابت عند 20 نيوتن/م.

الفصل 11: PID: إصلاح كل شيء ↗

الفصل 11: PID: إصلاح كل شيء ↗

ميكا: ارفعها! Ki=50K_i = 50! اقتلها بالنار!

ميكا: …لماذا لا تتوقف؟ لقد كبرت الارتدادات أكثر فأكثر، والآن تتأرجح صعودًا وهبوطًا بمقدار نصف متر، إلى الأبد!

ثيو: عند 50 تجاوزتَ حافةً ما. جرّبت بضع قيم: تحت 40 تقريبًا تستقر، وفوقها لا تستقر (وكل أرجحة من أرجحات اليويو تستغرق نحو ثانية). سنرى السبب بعد قليل. الكومة متأخرة دائمًا قليلًا: تظل تدفع للأعلى بعد أن تتجاوز الطائرة 2 م.

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

D: ممتص صدمات افتراضي

جون: في الفصل السابع، كان المخمّد هو ما هدّأ النابض. ماذا لو أن المتحكم يتظاهر بأنه مخمّد؟

المخمّد يدفع عكس السرعة. لذا أضف حدًا يدفع عكس سرعة حركة الطائرة المسيّرة:

TD=−Kd dhdt\eff{T_D} = -K_d\,\frac{d\out{h}}{dt}

انظر إلى معادلة الطائرة المسيّرة: مقاومة الهواء تعطي بالفعل −c h˙-c\,\dot h. يضيف حد D فوق ذلك −Kd h˙-K_d\,\dot h، فتصبح الطائرة تتصرف وكأن مقاومة الهواء لديها c+Kdc + K_d. نحن نضيف مقاومة هواء في البرمجيات.

الفصل 11: PID: إصلاح كل شيء ↗

الفصل 11: PID: إصلاح كل شيء ↗

شغّل كسب I الكبير لميكا ثم أضف تخميدًا. حتى Kd=0.5K_d = 0.5 نيوتن·ث/م يعيدها إلى الاستقرار (ينقل الحافة إلى Ki=60K_i = 60): يصبح اليويو اللانهائي ارتدادًا يخمد. لكنها تتجاوز الهدف بربع على الأقل، مهما أضفت من D. تلك الكومة الضخمة تتذكر أكثر من اللازم ببساطة. الآن أطفئ KiK_i الخاص بميكا (عودة إلى 10) وجرّب Kd≈3K_d \approx 3–5: هدوء. I و D يتبادلان: D يمنحك مجالًا لـ I، لكنه ليس مجالًا بلا حدود.

جون: إن كان 4 جيدًا، فلا بد أن 10 أفضل. أقصى ممتص صدمات!

ميكا: تزحف للأعلى ببطء شديد… ثم تتجاوز 2 م مع ذلك؟ متأخرة؟

ثيو: جون، هذه طائرة العسل خاصتك من الفصل 7 مرة أخرى! بعد Kd≈5.3K_d \approx 5.3 يصبح الزوج السريع فوق التخميد. لكن الآن توجد كومة أيضًا، والطائرة البطيئة تمنح الكومة وقتًا لتفيض.

التخميد الحرج هو حيث ζ = 1: Kd=2mKp−c≈5.3K_d = 2\sqrt{m K_p} - c \approx 5.3 نيوتن·ث/م عند KpK_p = 20. مع KiK_i = 10، الانتقال من KdK_d = 4 إلى 10 يرفع التجاوز من 0 إلى نحو 8%، وزمن الاستقرار من أقل من ثانية إلى نحو 5 ث. المزيد من D ليس أفضل دائمًا؛ والأداة الآن تخبرك حين تبالغ.

ميكا: إذن D يتنبأ بالمستقبل! يرى إلى أين تتجه الطائرة المسيّرة ويصل إلى هناك أولًا.

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

ماذا تفعل كل مقبض بالأقطاب

حان وقت استخدام خريطة الفصل العاشر. اكتب الحلقة كاملة، مع e=r−h\err{e} = \sp{r} - \out{h}:

mh¨+ch˙=Kp e+Ki ⁣∫ ⁣e dt−Kd h˙⏟T−mgm\ddot{\out h} + c\dot{\out h} = \underbrace{K_p\,\err e + K_i\!\int\!\err e\,dt - K_d\,\dot{\out h}}_{\eff{T}} - \dis{mg}

التكامل مزعج، فلنأخذ ميل الطرفين. الميل والمساحة يلغي أحدهما الآخر (الفصل 3)، لذا ميل ∫e dt\int \err e\,dt هو ببساطة e\err e. الجاذبية ثابتة، فميلها صفر: تختفي ببساطة. ومع قيمة مرجعية ثابتة، e˙=−h˙\dot{\err e} = -\dot{\out h}. حدًّا حدًّا:

ddt(Kp e)=−Kp h˙ddt(Ki ⁣∫ ⁣e dt)=Ki (r−h)ddt(−Kd h˙)=−Kd h¨\begin{aligned} \tfrac{d}{dt}\big(K_p\,\err e\big) &= -K_p\,\dot{\out h} \\ \tfrac{d}{dt}\Big(K_i\!\int\!\err e\,dt\Big) &= K_i\,(\sp r - \out h) \\ \tfrac{d}{dt}\big(-K_d\,\dot{\out h}\big) &= -K_d\,\ddot{\out h} \end{aligned}

أعد جمعها وانقل كل ما فيه h\out h إلى اليسار. النقاط الثلاث فوق h...\dddot{\out h} تعني ميل ميل الميل:

mh...+(c+Kd) h¨+Kp h˙+Ki h=Ki r\begin{aligned} m\dddot{\out h} + (c + K_d)\,\ddot{\out h} &+ K_p\,\dot{\out h} + K_i\,\out h \\ &= K_i\,\sp r \end{aligned}

ثيو: لقد اختفت الجاذبية من المعادلة. هذا هو قاتل الانخفاض المستمر في صورة جبرية: الارتفاع النهائي لا يهتم بـ mgmg على الإطلاق. هذا إن استقرت أصلًا. طائرة ميكا ذات Ki=50K_i = 50 لم تستقر قط.

خمّن este^{st} مرة أخرى. حين يكون I فعّالًا، تكون المعادلة تكعيبية، فهناك ثلاثة أقطاب. إذا كان Ki=0K_i=0 فلا يوجد تكامل: أخذ الميل أضاف جذرًا زائفًا عند s=0s = 0، والعامل المشترك ss يُختصر، فيكون لطائرة PD قطبان.

ms3+(c+Kd) s2+Kp s+Ki=0m s^3 + (c + K_d)\,s^2 + K_p\,s + K_i = 0

بالنسبة لمعادلة تكعيبية ذات معاملات كلها موجبة a3s3+a2s2+a1s+a0a_3 s^3 + a_2 s^2 + a_1 s + a_0، يوجد اختبار كلاسيكي (معيار روث–هورويتز) يقول إن الأقطاب الثلاثة تقع في النصف الأيسر بالضبط عندما a2a1>a3a0a_2 a_1 > a_3 a_0. بالنسبة لطائرتنا المسيّرة، تلك هي حافة الهاوية:

(c+Kd) Kp>m Ki⟺Ki<(c+Kd) Kpm(c + K_d)\,K_p > m\,K_i \quad\Longleftrightarrow\quad K_i < \frac{(c+K_d)\,K_p}{m}

ميكا: قاعدة عليها اسما شخصين. هل علينا أن نصدّقها فحسب؟

ثيو: لا. يمكننا أن نجد الحافة بأنفسنا.

في اللحظة التي يصل فيها زوج متذبذب إلى المحور الرأسي، يكون جزؤه الحقيقي صفرًا، فجرّب s=iωs=i\omega في المعادلة التكعيبية. بما أن i2=−1i^2 = -1 و i3=−ii^3 = -i، يجب أن تساوي الأجزاء الحقيقية مجتمعةً صفرًا، وكذلك الأجزاء الجانبية:

Ki−(c+Kd) ω2=0,ω (Kp−m ω2)=0K_i - (c+K_d)\,\omega^2 = 0, \qquad \omega\,\big(K_p - m\,\omega^2\big) = 0

الثانية تقول ω2=Kp/m\omega^2 = K_p/m. عوّض بها في الأولى:

ω2=Kpm,Ki=(c+Kd)ω2=(c+Kd)Kpm\omega^2=\frac{K_p}{m},\qquad K_i=(c+K_d)\omega^2=\frac{(c+K_d)K_p}{m}

الفصل 11: PID: إصلاح كل شيء ↗

عند قيم البداية (KpK_p = 20، بلا D) تكون الحافة 40. هذا بالضبط حيث جُنّت طائرة ميكا، وكانت كل أرجحة من أرجحات اليويو تستغرق نحو ثانية: 6.32 راديان/ث هو ωn لطائرة P نفسها من الفصل 7. إضافة Kd=4K_d = 4 تنقل الحافة إلى 200. لا تثق بكلامنا: غيّر الأرقام أعلاه، أو المنزلقات أدناه، وراقب الأقطاب والخريطة المصغّرة واستجابة الخطوة.

الفصل 11: PID: إصلاح كل شيء ↗

  • مقبض I (KiK_i) يُدخل قطبًا ثالثًا إلى الحلقة ويمكنه دفع زوج نحو اليمين. إذا زاد أكثر من اللازم، يتجاوز الخط.
  • مقبض D (KdK_d) يرفع حد استقرار كسب I بإضافة التخميد. يمكن أن تنعطف مسارات الأقطاب: المزيد من D لا يحرّك كل قطب إلى اليسار.
  • مقبض P (KpK_p) يباعد في الغالب الزوج المتذبذب صعودًا وهبوطًا: أسرع، لكن مع مزيد من التذبذب، ما لم يواكب D.

ملعب الضبط

الآن الاختبار الحقيقي: أقلع من الأرض إلى ارتفاع 2 متر بمحركات حقيقية (0–20 نيوتن). اجمع النجوم الأربعة كلها. في كل مرة تغيّر فيها كسبًا، تبقى الرحلة الأخيرة كشبح باهت.

الفصل 11: PID: إصلاح كل شيء ↗

جون: أطفأتُ مانع تراكم التكامل، وضبطت KpK_p = 30 و KiK_i = 60 و KdK_d = 2… فانطلقت الطائرة إلى 4 م، وخرجت من صورتها تمامًا!

ثيو: ظلت الكومة تكبر طوال الوقت الذي كانت فيه المحركات في أقصاها. مع تشغيل مانع التراكم، تبلغ المكاسب نفسها ذروتها عند 2.8 م. المقابض نفسها، وذاكرة مختلفة تمامًا.

تحذيران حول D

التحذير الأول: ركلة المشتقة

تحوم الطائرة عند 1 م. عند t=1t = 1 ث ننقل القيمة المرجعية إلى 1.5 م. إذا استخدم D ميل الخطأ، فإن الخطأ يقفز نصف متر في لحظة. ميله هائل، وكذلك الدفعة.

الفصل 11: PID: إصلاح كل شيء ↗

الفصل 11: PID: إصلاح كل شيء ↗

ميكا: مع الخطأ يطلب أكثر من 200 نيوتن؟ من محركات أقصاها 20؟

جون: ولا تستطيع أن ترفض بلطف. تندفع إلى أقصاها للحظة، وتتلقى الطائرة ركلة مفاجئة.

أخذ ميل الارتفاع المقاس بدلاً من ذلك يحل المشكلة: الطائرة المسيّرة لا يمكنها الانتقال فورياً، لذا لا توجد قفزات في ارتفاعها. نفس التخميد، بدون ركلة. تقريباً كل متحكم PID حقيقي يفعل ذلك.

التحذير الثاني: الضوضاء

مستشعرات الارتفاع الحقيقية تهتز ببضعة سنتيمترات. بضعة سنتيمترات من الاهتزاز، ألف مرة في الثانية، لها ميل هائل. D يضخمها مباشرة إلى المحركات. الحل هو تنعيم القياس قبل أخذ ميله (مرشح بثابت زمني τf\tau_f)، على حساب الاستجابة متأخراً قليلاً.

الفصل 11: PID: إصلاح كل شيء ↗

الفصل 11: PID: إصلاح كل شيء ↗

ميكا: حسناً، D لا يتنبأ بالمستقبل. إنه يتنبأ بما كانت عليه الضوضاء قبل ميلي ثانية.

ما أصلحناه

ما توصلنا إليه

  • P يدفع بما يتناسب مع الخطأ، لكن يجب أن يترك انخفاضاً مستمراً لإبقاء الطائرة المسيّرة في الهواء.
  • I يكوّم الخطأ الماضي؛ نقطة السكون الوحيدة هي خطأ صفري، فيقضي على الانخفاض المستمر، الذي يتلاشى بثابت زمني نحو Kp/KiK_p/K_i. يضيف تأخرًا، فإذا زاد عن حده جعل الأشياء تتأرجح.
  • D يدفع عكس السرعة: مخمّد افتراضي يُضاف إلى المقاومة cc، فتكون ζ=(c+Kd)/(2mKp)\zeta = (c+K_d)/(2\sqrt{mK_p}). المزيد من D ليس أفضل دائمًا: فوق التخميد، تزحف الطائرة وتفيض الكومة.
  • الحلقة المغلقة هي ms3+(c+Kd)s2+Kps+Kim s^3 + (c + K_d)s^2 + K_p s + K_i؛ وتكون مستقرة تمامًا عندما (c+Kd)Kp>mKi(c+K_d)K_p > mK_i.
  • خذ D من القياس (بدون ركلة) ورشِّحه (ضوضاء أقل).

جرّبت جون أسلوب PID الخاص بالطائرة المسيّرة على الدشّ… وتذبذب تمامًا كما فعلنا في الفصل 0. ما المشكلة في التأخير؟

الفصل 11: PID: إصلاح كل شيء ↗