תוכן עניינים:

בקר PID VHDL: 10 שלבים
בקר PID VHDL: 10 שלבים

וִידֵאוֹ: בקר PID VHDL: 10 שלבים

וִידֵאוֹ: בקר PID VHDL: 10 שלבים
וִידֵאוֹ: Новинка Политех - PID регулятор с подключением через Modbus (RS-485) #умныйдом #modbus #контроллер 2024, יולי
Anonim
בקר PHD VHDL
בקר PHD VHDL
בקר PHD VHDL
בקר PHD VHDL

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

אספקה

סימולציה

סוויטת עיצוב Vivado

יישום (בסוגריים הוא מה ששימש לפרויקט שלי)

  • לוח FPGA שיכול להזין ולפלט אותות דיגיטליים/אנלוגיים (Basys 3)
  • מערכת ניתנת לשליטה עם מקור משוב יחיד (פינג פונג כדור ריחוף)

לבוש

  • צינור פוליקרבונט
  • מאוורר 5V
  • חיישן IR
  • בסיס מודפס בתלת -ממד (הדרכה זו מתעדת את בניית האסדה החיישן נוסף כדי לספק משוב אך המתקן בדרך כלל היה זהה)
  • נגדים 1k
  • לוח לחם עם מסילה 5V ו- GND

שלב 1: תורת הבקרה הבסיסית

תורת הבקרה הבסיסית
תורת הבקרה הבסיסית

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

התרשים המצורף הוא הפריסה של בקר לולאה יחיד.

r- האם ההתייחסות. זה קובע לאן רצונו של הבקר.

e-האם השגיאה. זהו ההבדל בין הערך בחיישן שלך לבין ההפניה שלך. לְמָשָׁל e = r- (d+פלט של חיישן).

K- זהו הבקר. בקר יכול להיות מורכב משלושה מונחים. מונחים אלה הם P, I ו- D. בכל שלושת המונחים יש מכפילים הנקראים Kp, Ki ו- Kd. ערכים אלה קובעים את תגובת הבקר.

  • P-Proportional. לבקר P בלבד יהיה פלט ביחס לשגיאה הנוכחית. בקר P פשוט ליישום ועבודה מהירה אך לעולם לא יגיע לערך שהגדרת (הפניה).
  • I-Integral. בקר אינטגרלי למהדרין יסכם את השגיאה הקודמת שתגיע בסופו של דבר לפנייה הרצויה. בקר זה בדרך כלל איטי מדי ליישום. הוספת מונח P תקטין את הזמן הנדרש להגעת ההפניה. יש לקחת בחשבון את הזמן בו נמדדת הקלט, המונח האינטגרלי משולב ביחס לזמן.
  • נגזרת D. למונח הנגזרת יהיה פלט התלוי בשיעור שינוי הטעות. מונח זה משמש בדרך כלל עם מונח P או עם מונח PI. מכיוון שזה פרופורציונאלי לשיעור השגיאה של השגיאה, אז הסינגל הרועש יגביר את הרעש שלו שיכול לגרום למערכת להיות לא יציבה. יש לקחת בחשבון גם את הזמן כפי שמונח הנגזרת הוא גם ביחס לזמן.

U- זהו אות הבקרה. אות זה מהווה כניסה לאסדה. במקרה של פרויקט זה u הוא כניסת אות PWM למאוורר כדי לשנות את המהירות.

G- זוהי המערכת הנשלטת. ניתן לעצב מערכת זו באופן מתמטי בתחום ה- S או ה- Z. המערכות יכולות להיות בסדר העשירי, אך עבור מישהו שמתחיל עם שליטה יש כנראה להניח מערכת מסדר ראשון מכיוון שזה הרבה יותר קל לחישוב. יש שפע של מידע על מערכת דוגמנות שניתן למצוא באינטרנט. בהתאם לזמן הדגימה של החיישן דגם המערכת הוא דיסקרטי או רציף. יש לכך השפעה דרסטית על הבקר ולכן מומלץ לחקור את שניהם.

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

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

דוגמנות מערכת היא בדרך כלל החלק החשוב ביותר ללא מודל מדויק הבקר שתוכנן לא יגיב כרצונך.

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

שלב 2: כתיבת קוד PID

כתיבת קוד PID
כתיבת קוד PID

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

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

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

שלב 3: כיצד לשנות עבור המערכת שלך

ראשית, לא כל המערכות זהות יש לנתח את התשומות והתפוקות של המערכת. במקרה שלי הפלט של המתקן שלי שנתן לי ערך לתפקיד היה אות אנלוגי והקלט מהמערכת היה אות PWM. כלומר, היה צורך בהמרת ADC. למרבה המזל ל- Basys 3 יש ADC מובנה כך שזו לא הייתה בעיה יש להוריד את תפוקת חיישן ה- IR ל 0V-1V מכיוון שזהו הטווח המרבי של ה- ADC המשולב. זה נעשה באמצעות מעגל מחלק מתח אשר היה עשוי מנגדים 1k שהוגדרו כנגד 3k בסדרה עם נגד 1k. האות האנלוגי היה כעת בטווח ה- ADC. קלט ה- PWM למאוורר מסוגל להניע ישירות על ידי הפלט של יציאת PMOD ב- Basys 3.

שלב 4: ניצול קלט/פלט ב- Basys 3

יש מספר קלט/פלט ב- Basys 3 שאפשר ניפוי באגים קל יותר כאשר הקוד היה פועל. הקלט/פלט הוגדר כדלקמן.

  • תצוגת שבעה קטעים - זה שימש להצגת ערך ההפניה והערך על ה- ADC ב וולט. שתי הספרות הראשונות בתצוגת שבעה הקטעים מציגות את שתי הספרות אחרי המקום העשרוני של ערך ה- ADC מכיוון שהערך הוא בין 0-1V. הספרות שלוש וארבע בתצוגת שבעה הקטעים מציגות את ערך ההתייחסות בוולט. זה גם מציג את שתי הספרות הראשונות אחרי המקום העשרוני מכיוון שהטווח הוא גם בין 0-1V.
  • 16 נוריות LED - הנורות שימשו להראות את ערך הפלט כדי להבטיח שהפלט היה רווי והפלט משתנה כראוי.

שלב 5: רעש על פלט חיישן ה- IR

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

שלב 6: פריסת קוד כוללת

פריסת קוד כוללת
פריסת קוד כוללת

יש פיסת קוד אחת שעוד לא דיברו עליה. קוד זה הוא מחלק שעונים הנקרא טריגר. ביט קוד זה מפעיל את קוד ה- ADC לדוגמא. קוד ADC לוקח מקסימום 2us להשלים אז אז הקלט הנוכחי והקלט הקודם ממוצעים. 1us לאחר ממוצע זה הבקר מחשב את מונחי P, I ו- D. כל פריסת הקוד והממשק מוצגים בתרשים החיבור המאולתר.

שלב 7: בדיקה

בדיקה
בדיקה

הקוד נפרס ב- Basys 3 והתגובה הבאה נרשמה. ההפניה השתנתה בין 2 ערכים. מה שקורה בקוד הפרויקט שהושלם המצורף. הסרטון המצורף מציג תגובה זו בזמן אמת. התנודות מתפרקות מהר יותר בחלקו העליון של הצינור שכן הבקר תוכנן לאזור זה אך הבקר אינו פועל טוב יותר בהמשך הצינור מכיוון שהמערכת אינה לינארית.

שלב 8: שינויים לשיפור הפרויקט

הפרויקט עבד כמתוכנן אך היו כמה שינויים שהייתי עושה אילו ניתן היה להאריך את הפרויקט.

  • הטמעת פילטר דיגיטלי כדי להחליש לחלוטין את הרעש
  • הגדר את קוד ה- ADC, הקוד הממוצע וקוד האינטגרציה להפעלה ברצף.
  • השתמש בחיישן אחר למשוב מכיוון שהתגובה הלא לינארית של חיישן זה גרמה למגוון רחב של בעיות בפרויקט זה אך זה יותר בצד הבקרה ולא בצד הקידוד.

שלב 9: עבודה נוספת

במהלך הקיץ כתבתי קוד לבקר מפל ויישמתי את השינויים שהמלצתי עבור בקר ה- PID בלולאה אחת.

בוצעו שינויים בבקר ה- PID הרגיל

· תבנית מסנן FIR המיושמת יש לשנות את המקדמים כדי להשיג את תדירות הניתוק הרצויה. היישום הנוכחי הוא מסנן אשוח בעל 5 ברזים.

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

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

בדיקה

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

למה להשתמש בבקר מפל

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

כיצד עובד בקר המפלים?

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

יישום שינויים במתקן

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

בדיקה

לא הצלחתי לבדוק את הבקר מכיוון שהיה קשה לדמות שני מקורות קלט. הבעיה היחידה שאני יכול לראות עם בקר המפל היא שככל שהלולאה החיצונית מנסה להגדיל את נקודת ההגדרה המסופקת ללולאה הפנימית, נקודת הגדרה גדולה יותר היא למעשה RPS נמוך יותר עבור המאוורר, אך ניתן לתקן זאת בקלות. קח את נקודת הערך מהערך המקסימלי של אות נקודת ההגדרה (4095 - נקודת ערך - tacho_result).

שלב 10: סיכום

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

מוּמלָץ: