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

בקר טמפרטורת PID: 7 שלבים
בקר טמפרטורת PID: 7 שלבים

וִידֵאוֹ: בקר טמפרטורת PID: 7 שלבים

וִידֵאוֹ: בקר טמפרטורת PID: 7 שלבים
וִידֵאוֹ: ארדואינו למתחילים 7: בו-זמניות 2024, יולי
Anonim
בקר טמפרטורת PID
בקר טמפרטורת PID

חבר שלי בונה מכבש פלסטיק למחזור פלסטיק (https://preciousplastic.com). הוא צריך לשלוט בטמפרטורת החול. לשם כך הוא משתמש ברצועת חימום זרבובית. בזרבובית זו, קיימת צמד תרמי ויחידת חימום המאפשרים לנו למדוד את הטמפרטורה ולבסוף להגיע לטמפרטורה הרצויה (לעשות לולאת רטרואקציה).

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

שלב 1: כלים וחומרים

כלים

  • מלחם, חוט הלחמה ושטף
  • פינצטה
  • מכונת כרסום (תחריט כימי אפשרי גם לאב טיפוס של PCB) (ניתן להזמין את הלוח עם קובץ הנשר שלי)
  • מדחום (לכיול)
  • arduino (כל סוג) או מתכנת AVR
  • כבל USB סדרתי TTL-232 FTDI
  • חותך לייזר (אופציונלי)
  • מולטימטר (ohmmeter ו- voltmeter)

חוֹמֶר

  • צלחת נחושת צדדית אחת בבקלייט (מינימום 60*35 מ"מ) (הרסתי את המסור שלי בקניית הפיברגלס אז היזהרו: בקליט)
  • בקר מיקרו Attiny45
  • ווסת מתח LM2940IMP-5
  • מגבר תפעולי AD8605
  • טרנזיסטור NDS356AP
  • חבורה של נגדים וקבלים (יש לי את הספר SMT 0603 adafruit)
  • שנאי AC-DC 230V-9V
  • דיודות 1N4004
  • ממסר מצב מוצק
  • לק (לא חובה)

שלב 2: חרוט את ה- PCB

חרוט את ה- PCB
חרוט את ה- PCB
חרוט את ה- PCB
חרוט את ה- PCB
חרוט את ה- PCB
חרוט את ה- PCB

השתמשתי ב- Proxxon MF70 CNC שהפך ובסיומת סיום חרוטית כדי לטחון את הלוח המודרני. אני חושב שכל סיום חריטה יעבוד. קובץ ה- Gcode נוצר ישירות על ידי נשר והתוסף pcb-gcode. רק שלושה מעברים נעשו על מנת להבטיח הפרדת מסלולים טובה אך מבלי להשקיע שעות בטחינת כל הנחושת. כאשר הלוח הלוח יצא ממכונת ה- CNC, ניקיתי את המסלולים בעזרת חותכן ובדקתי אותם בעזרת מולטימטר.

פרמטרים: קצב הזנה 150mm/min, עומק 0.2mm, מהירות סיבוב 20'000 t/min

שלב 3: הלחמה של הרכיבים

הלחם את הרכיבים
הלחם את הרכיבים

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

אתה יכול לבחור את רווח המגבר על ידי בחירת הנגד שאתה רוצה (רווח = (R3+R4)/R4). לקחתי 1M ו 2.7k אז במקרה שלי הרווח שווה בערך 371. אני לא יכול לדעת את הערך המדויק כי אני משתמש בנגד סובלנות של 5%.

הצמד התרמי שלי הוא מסוג J. זה אומר שהוא נותן 0.05mV לכל תואר. עם הרווח של 371, אני משיג 18.5mV לתואר מפלט המגבר (0.05*371). אני רוצה למדוד סביב 200 ° C כך שפלט המגבר צריך להיות סביב 3.7V (0.0185*200). התוצאה לא תעלה על 5V מכיוון שאני משתמש במתח ההתייחסות של 5V (חיצוני).

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

שלב 4: תכנות את המיקרו -בקר

תכנות את הבקר
תכנות את הבקר

שימוש בארדואינו כמו במדריך זה: https://www.instructables.com/id/How-to-Program-a… אתה יכול לטעון את הקוד.

השתמשתי בתכשיט מקצועי עם כבל FTDI-USB לתכנת ה- Attiny 45 אך שיטה זו מקבילה. לאחר מכן חיברתי את הפין PB1 וה- GDN ישירות ל- RX ו- GND של כבל ה- FTDI-USB כדי לקבל את הנתונים הטוריים ולהיות מסוגלים לאתר באגים.

עליך לשים את כל הפרמטרים לאפס (P = 0, I = 0, D = 0, K = 0) במערכון הארדואינו. הם יוגדרו במהלך שלב הכוונון.

אם אינך רואה עשן או ריח שרוף, תוכל לעבור לשלב הבא!

שלב 5: הרכבה וכיול

הרכבה וכיול
הרכבה וכיול
הרכבה וכיול
הרכבה וכיול

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

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

כיצד לקרוא ערכים אלה? פשוט חבר את הפינים PB1 ו- GDN ישירות ל- RX ו- GND של כבל FTDI-USB ופתח את הצג הטורי של הארדואינו.

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

לפני חיבור ממסר המצב המוצק, ודא שפלט המתח נמצא בטווח הנתמך על ידי הממסר שלך (3V עד 25V במקרה שלי, המעגל מייצר בסביבות 11V). (לכבד את הקוטביות)

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

שלב 6: כוונון PID

כוונון PID
כוונון PID

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

קודם כל, אני חייב להסביר מה התוכנית עושה. יישמתי מעין תוכנת PWM: מונה עולה בכל איטרציה עד שהוא מגיע ל -20,000 (במקרה זה מתאפס ל- 0). עיכוב מאט את הלולאה לאלפית השנייה. הבוחנים מבינינו יבחינו שתקופת הבקרה היא בסביבות 20 שניות. כל לולאה מתחילה בהשוואה בין המונה לסף. אם המונה נמוך מהסף, אז אני מכבה את הממסר. אם הוא גדול יותר, אני מדליק אותו. אז אני מסדיר את הכוח על ידי הגדרת הסף. חישוב הסף קורה כל שנייה.

מהו בקר PID?

כאשר אתה רוצה לשלוט בתהליך, יש לך את הערך שאתה מודד (analogData), הערך שאליו אתה רוצה להגיע (tempCommand) ודרך לשנות את מצב התהליך (seuil). במקרה שלי זה נעשה עם הסף ("seuil" בצרפתית אבל הרבה יותר קל לכתוב ולבטא (מבטאים "sey")) שקובע כמה זמן המתג יהיה מופעל וכיבוי (מחזור העבודה) ובכך כמות האנרגיה להכניס למערכת.

כולם מסכימים שאם אתה רחוק מהנקודה שאליה אתה רוצה להגיע, אתה יכול לבצע תיקון גדול ואם אתה קרוב, יש צורך בתיקון קטן. המשמעות היא שהתיקון הוא פונקציה של השגיאה (error = analogData-tempComand). כן אבל כמה? נניח שנכפיל את השגיאה בגורם (P). זהו בקר פרופורציונלי. מבחינה מכנית קפיץ מבצע תיקון פרופורציונלי מכיוון שכוח האביב פרופורציונלי לדחיסת האביב.

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

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

כל זה מסוכם בנוסחה: תיקון = P*e (t)+I*(de (t)/dt)+D*אינטגרל (e (t) dt), P, I ו- D הם שלושה פרמטרים שיש להם להיות מכוון.

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

כיצד למצוא את הפרמטרים הללו?

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

השיטה שלי

ראשית יש לשים את P, I, D לאפס ולשים "K" ו- "tempCommand" לערכים קטנים (למשל K = 1 ו- tempCommand = 100). הפעל את המערכת והמתן, המתן, המתן עד שהטמפרטורה תתייצב. בשלב זה אתה יודע שעם "מחוון" של 1*100 = 100, הטמפרטורה נוטה ל- X. אז אתה יודע שעם פקודה 100/20000 = 5% אתה יכול להגיע ל- X. אבל המטרה היא להגיע ל -100. מכיוון שהוא "זמני פיקוד". באמצעות פרופורציה אתה יכול לחשב K על מנת להגיע ל- 100 (tempCommand). ליתר זהירות השתמשתי בערך קטן יותר מהמחושב. אכן קל יותר לחמם מאשר להתקרר. אז סוף סוף

Kfinal = K*tempCommand*0.9/X

כעת, כאשר אתה מפעיל את הבקר, הוא אמור לטפל בטמפרטורה הרצויה לך אך זהו תהליך איטי מאוד מכיוון שאתה מפצה רק את הפסדי החימום. אם אתה רוצה לעבור מטמפרטורה אחת לאחרת, יש להוסיף כמות של אנרגיה תרמית במערכת. P קובע באיזה קצב אתה מכניס את האנרגיה למערכת. הגדר P לערך קטן (לדוגמא P = 10). נסה התחלה קרה (כמעט). אם אין לך overhoot גדול, נסה עם הכפיל (P = 20) אם עכשיו יש לך נסה משהו באמצע. אם יש לך 5% חריגה, זה טוב.

כעת הגדל את D עד שלא תהיה לך דריסת יתר. (תמיד ניסיונות, אני יודע שזה לא מדע) (לקחתי D = 100)

לאחר מכן הוסף I = P^2/(4*D) (היא מבוססת על שיטת זיגלר-ניקולץ, היא אמורה להבטיח יציבות) (בשבילי I = 1)

למה כל הניסויים האלה, למה לא המדע?

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

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

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

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

שלב 7: ארוז אותו

ארוז אותו
ארוז אותו
ארוז אותו
ארוז אותו
ארוז אותו
ארוז אותו
ארוז אותו
ארוז אותו

הייתה לי גישה ל- fablab במוסקבה (fablab77.ru) ולחותך הלייזר שלהם ואני אסיר תודה. ההזדמנות הזו אפשרה לי להכין חבילה נחמדה שנוצרה בלחיצה אחת על ידי תוסף שמייצר קופסאות במידות המבוקשות (h = 69 l = 66 d = 42 mm). ישנם שני חורים (קוטר = 5 מ מ) בחלק העליון של הלד והמתג וחריץ אחד בצד לסיכות התכנות. אבטחתי את השנאי בשתי חתיכות עץ ואת הלוח המודפס בשני ברגים. הלחמתי את בלוק הטרמינל לחוטים וללוח ה- PCB, הוספתי את המתג בין השנאי לכניסת החשמל של ה- PCB, חיברתי את ה- LED ל- PBO עם נגד (300 אוהם) בסדרה. השתמשתי גם בלק לבידוד חשמלי. לאחר הבדיקה האחרונה הדבקתי את הקופסה. זהו זה.

מוּמלָץ: