דילוג לתוכן
כל ההסברים

בקר PID, הסבר מלא

באנגלית: PID controller

בקר PID קובע את הפלט שלו לפי השגיאה בין איפה שהמערכת נמצאת לאיפה שהיא צריכה להיות: חלק יחסי לשגיאה, חלק לסכום המצטבר שלה, וחלק לקצב שבו היא משתנה. כיוונון הבקר הוא בחירה של שלושת ההגברים.

מחשבון בקר PID

ממולא מראש בדוגמה הפתורה שלמטה. אפשר לשנות כל ערך.

הגבר יחסי K_p
4.8
זמן אינטגרלי T_i
1s
זמן נגזרת T_d
0.25s
הגבר אינטגרלי K_i
4.81/s
הגבר נגזרת K_d
1.2s

הטמעת המחשבון

חופשי לשימוש באתר קורס, בבלוג או בעמוד של כיתה. מדביקים את הקוד הזה במקום שבו רוצים אותו.

<iframe src="https://carnot.taueng.com/embed/he/pid-control" width="100%" height="560" style="border:0" loading="lazy" title="CARNOT calculator"></iframe>
<p>מחשבון של <a href="https://carnot.taueng.com/learn/pid-control">CARNOT</a></p>

שלושת האיברים

האיבר היחסי, K_p כפול e, מגיב לשגיאה עכשיו. יותר הגבר פירושו תגובה מהירה וחזקה יותר, ובסוף גם חריגה ותנודות. לבדו הוא משאיר הרבה פעמים שגיאה קבועה, למשל כשצריך להחזיק מול עומס קבוע.

האיבר האינטגרלי סוכם את השגיאה לאורך זמן וממשיך לדחוף עד שהיא נעלמת. כך הוא מעלים את השגיאה הקבועה. יותר מדי ממנו גורם לחריגה ולתנודות איטיות. כשהמפעיל ברוויה, האינטגרל ממשיך לגדול בכל זאת, והמערכת חורגת חזק כשהיא משתחררת. זה נקרא integral windup, ובקרים אמיתיים מגבילים אותו.

האיבר הנגזר מגיב לקצב השינוי של השגיאה. הוא צופה קדימה ומרסן את החריגה ששני האחרים גורמים. הוא גם מגביר רעש מדידה, ולכן בפועל מסננים אותו, והרבה פעמים מפעילים אותו על המדידה במקום על השגיאה, כדי שקפיצה בנקודת הייחוס לא תייצר קוצים בפלט.

כיוונון בשיטת זיגלר־ניקולס

נקודת ההתחלה הקלאסית היא שיטת ההגבר הקריטי של זיגלר־ניקולס. מריצים את הלולאה עם בקרה יחסית בלבד ומעלים את K_p עד שהפלט מתנודד באופן יציב, לא גדל ולא דועך. ההגבר הזה הוא K_u וזמן המחזור של התנודה הוא T_u. אז קובעים K_p שווה 0.6 כפול K_u, T_i שווה T_u חלקי 2, ו־T_d שווה T_u חלקי 8.

התוצאה אגרסיבית, עם הרבה חריגה. התייחסו אליה כניחוש ראשון וכווננו ידנית משם: בדרך כלל פחות הגבר יחסי, יותר זמן אינטגרלי.

דוגמה עם מספרים

לולאה מתחילה להתנודד באופן יציב ב־K_u של 8, עם זמן מחזור T_u של 2 שניות. זיגלר־ניקולס נותן K_p שווה 0.6 כפול 8, כלומר 4.8, T_i של שנייה אחת ו־T_d של 0.25 שנייה.

בצורה המקבילית שהרבה ספריות תוכנה משתמשות בה, K_i שווה K_p חלקי T_i, כלומר 4.8 לשנייה, ו־K_d שווה K_p כפול T_d, כלומר 1.2 שניות.

טעויות נפוצות

  • להכניס T_i ו־T_d במקום שבו הבקר מצפה ל־K_i ול־K_d, או להפך. יצרנים משתמשים בשתי הצורות, והמספרים שונים מאוד.
  • לוותר על הגנה מפני windup בלולאה שהמפעיל שלה יכול להגיע לרוויה.
  • להפעיל את הנגזרת על אות גולמי ורועש, מה שגורם לפלט לרטוט.