Control Design Using MATLAB: Keeping Everything Under Control
בתור מהנדס בקרה, קורה לי הרבה שאנשים שאינם מהתחום (וגם מעטים שכן) שואלים אותי: "אז מה בעצם אתה עושה?", ואז אני תמיד נזכר במשפט של אחד המרצים שלי: "אם אתה לא יודע להסביר משהו כך שכל אחד יבין אותו, אתה לא מבין אותו מספיק טוב". בנקודה הזאת אני אוהב לציין שבקרה זה נושא מאוד רחב, אפשר לדבר על ניווט ושיערוך, עיבוד מידע מחיישנים, סימולציות ו-V&V, ייצור קוד אוטומטי, עבודה עם חומרה ועוד הרבה. בפוסט הזה, בחרתי להתמקד רק בנושאי הבקרה באמצעות הכלים של MATLAB & Simulink.
בנקודה הזאת אני אוהב לציין שבקרה זה נושא מאוד רחב, אפשר לדבר על ניווט ושיערוך, עיבוד מידע מחיישנים, סימולציות ו-V&V, ייצור קוד אוטומטי, עבודה עם חומרה ועוד הרבה…
בפוסט הזה, בחרתי להתמקד רק בנושא הבקרה.
בתוך הדיאגרמה הנ"ל נתמקד בבלוק אחד, הרי הוא בלוק הבקר (Control Elements), ופה נשאלות מספר שאלות:
- כמה כניסות ויציאות יש לי במערכת?
- האם המערכת קונטרולבילית? (ניתן לבקר אותה?)
- איך אני מנתח את המערכת?
- איזה בקר אני צריך?
- האם הבקר שלי ייתן ביצועים טובים על חומרה?
זה נראה כמו הרבה דברים, שעל כל אחד מהם אפשר גם להרחיב המון, אבל, אם לחזור לציטוט מקודם, אני ארצה לפשט את זה בשביל שההסברים יהיו ברורים ומובנים לכל קורא.
לכן, אתמקד בניתוח המערכת ובבחירת הבקר.
לגבי הטמעה על גבי חומרה, ניתן לקרוא עוד בקישור הזה.
אנליזה של המערכת
בשביל לתכנן בקר מתאים למערכת שלנו, אנחנו צריכים להבין אותה:
- האם היא יציבה? אם כן, מה הן נקודות היציבות?
- מה תחום התדרים בו המערכת פועלת?
- כיצד נרצה להפעיל אותה?
- ועוד…
בדרך כלל, אנו נרצה לבדוק את המערכת שלנו במישור הזמן ובמישור התדר, ובחוג פתוח אל מול חוג סגור.
תחילה, נניח שיש לנו מערכת שמיוצגת כפונקציית תמסורת/מרחב מצב/מודל Simulink.
MathWorks מספקת כלים נוחים לנתח את המערכת בכל אחד מהמצבים האלה, גם ב-Simulink וגם ב-MATLAB.
פונקציות MATLAB לניתוח המערכת בצורה גרפית או בשורות פקודה (command line)
כשאנו מדברים על ניתוח גרפי של המערכת בזמן או בתדר, נוכל להשתמש בפקודות הנ"ל בשביל לשרטט גרפים של המערכת ב-MATLAB (כמובן, בהנחה שהמערכת מיוצגת ב-MATLAB). בנוסף, נוכל להשתמש בפקודות הנ"ל בשביל לקבל מידע טקסטואלי על המערכת, ולבצע אנליזות גם באופן אוטומטי באמצעות סקריפט.
ב-Simulink, נוכל להשתמש באפליקציות מובנות בשביל לנתח את המערכת, למשל אנליזה לינארית, אשר עושה עבורנו את הלינאריזציה בצורה ישירה. שם נוכל להסתכל גם על תחומי היציבות, ולבחור אם אנחנו מסתכלים על חוג פתוח או חוג סגור.
בחירת הבקר
לאחר שננתח את המערכת, נרצה לבחור בקר מתאים שייצב את המערכת. נוכל לבחור PID, MPC או בקר כללי כלשהו.
בקר PID
בקר זה מורכב מרכיב אינטגרלי, דיפרנציאלי והגבר.
ב-Simulink יש בלוק מוכן לבקר PID, אשר מאפשר לנו לכוונן באופן אוטומטי את הבקר, להגדיר אותו כרציף או בדיד, ולהכין אותו ישירות לצריבה על החומרה.
זוהי אפשרות ידידותית לבקר מערכת, בהנחה שבקר PID לרוב עוזר לנו עם מערכות פשוטות. כמובן שאפשר גם לבחור כל קונפיגורציה של הבקר.
אפשרות פחות מוכרת היא להשתמש בבלוק closed loop PID auto tuner, בשביל לבצע fine tuning להגברי הבקר, או כיוונון מחדש.
זהו בלוק שמקבל את הכניסה מהבקר, ואת הערכים הנמדדים מהתהליך, ומבצע אופטימיזציה בשביל להתכנס לדרישות מוגדרות. נקודה מאוד חשובה היא שהבלוק הזה נתמך לייצור קוד אוטומטי, שמאפשר למערכת לבצע כיול אוטומטי אצל הלקוח (במקום לשלוח מהנדס שיעשה את הכוונון).
בקר כללי
דרך נוספת לתכנן בקר היא להשתמש בכלי Control System Designer.
Control System Designer מאפשר לנו לתכנן בקרים למערכת הלינארית, באמצעים גרפיים ולקבל משוב מיידי.
האפליקציה מבצעת לינאריזציה למודל ה-Simulink, ומאפשרת לנו לשנות את פרמטרי הבקר (הגבר/קטבים/אפסים) ולהגיע לתוצאות רצויות. כמובן שאפשר גם להשתמש בתהליכים אוטומטיים בשביל לתכנן בקרים.
Model Predictive Control
עבור מערכות מורכבות יותר, הרבה פעמים בקרים פשוטים לא יספיקו לנו, ונרצה אלגוריתם בקרה מתוחכם יותר. פה נכנס הרעיון של MPC.
אלגוריתם זה מקבל מודל של המערכת הפיזיקלית, ומשתמש בה בשביל לחזות את התנהגות המערכת בעתיד. למעשה, הוא משתמש באלגוריתם אופטימיזציה בשביל למצוא את פקודת הבקרה האופטימלית.
בנושא הזה פעמים רבות עולה האתגר של ריצה בזמן אמת (real time) על גבי חומרה, ולאחרונה נוספו מספר חידושים שנועדו לייעל את זמן הריצה ולהקל על הסיבוכיות. למשל, להשתמש ברשת נוירונים בשביל לחשב את מצב המערכת (ניתן לקרוא עוד בקישור הזה).
חידוש נוסף הוא הרצת MPC רב-שלבי, שלמעשה עושה אופטימיזציה רב-שלבית ומקבילית, וכך מייעל את זמן החישוב. אפשר לחשוב על זה כעל הרבה בקרים קטנים שעובדים ביחד במקום בקר אחד גדול.
כמובן שיש עוד הרבה שיטות לנתח את המערכת, לתאר אותה ולבקר אותה, אבל בפוסט זה הוצגו רק כמה רעיונות שיעזרו לכם להתחיל.
בשלב הבא, תצטרכו לייצר קוד אוטומטי ולעבוד עם החומרה – אבל זה, ידידותיי וידידיי (ברוח התקופה), סיפור לפוסט אחר.