[בקרת מדחף תת-מימי] כיצד להשתמש ב-STM32 כדי לשלוט ב-ESC באמצעות PWM?

 פורסם על ידי Fengyukun בתאריך

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

אות PWM:
(1) בקרת גלי PWM (בדרך כלל esc משתמש בקרת גלי PWM 50Hz או 20ms);
(2) הפסקת ביניים (כאן מתייחס בדרך כלל למחזור עבודה ברמה גבוהה) 1.5ms, למעשה, זוהי הפסקת ביניים בין 1.475ms ל-1.525ms;
(3) טווח הבקרה הוא 1ms ~ 2ms;
(4) עבור קדימה 1.5ms עד 2ms, וחזור אחורה 1.5ms עד 1ms.


הנה הפניה פשוטה המבוססת על Arduino:


הערה: יש צורך לפתוח את ה-ESC כדי להשתמש בו! כאשר אתה מחבר את ה-ESC לחשמל, הוא יצפצף 3 פעמים, ולאחר מכן כאשר הוא יפתח בהצלחה, הוא יצפצף 2 פעמים, בסך הכל 5 פעמים. אם לא תבטל את הנעילה של ESC בהצלחה, לא תוכל להשתמש בו כדי לשלוט. לכן, בהתייחס לקוד לעיל, אנו יכולים להסיק שהדרך לפתיחת נעילת ESC היא להגדיר אותו לאות ניטרלי לאחר האתחול ולהמתין לקבלת האות (שני צפצופים) לפני תחילת בקרת המהירות.


שיטות בקרה ואיתור באגים


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

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


שנית, שימו לב לשימוש בעיכוב. בהתחלה לא השתמשתי בהשהיה, והתוצאה הייתה ש-ESC רק צפצף, ואז לא הגיב. ואז כשצפיתי בגל PWM עם אוסילוסקופ, גיליתי שה-PWM שאותחל מהבהב ישירות, והייתי צריך תן ל-ESC זמן לקבל את אות הנעילה. אבל כדאי לשים לב גם בזמן הזה. בהתחלה השתמשתי ב-delay_us() כדי להגדיר את זה, אבל לא ניתן היה לפתור את הבעיה. מאוחר יותר שיניתי את זה ל-delay_ms(1000), מה שאומר שהזמן המוגדר הוא 1s. יש עדיין בעיה. לאחר מכן כיוונתי את הזמן. לאחר שני צפצופים אחרונים, המנוע מתחיל להסתובב. לכן, חשוב מאוד לתפוס את זמן הקליטה של אות פתיחה זה.


שימו לב גם ללימוד השימוש באוסילוסקופ כדי לבדוק אם יש בעיות עם האותות שאתם מגדירים במהלך השימוש. להלן גל PWM עם מחזור עבודה של 1.5ms, תקופה של 20ms ואמפליטודה של 3.3V שאותחלתי בהתחלה.


לסיכום, כל התהליך צריך לשים לב ל:

(1) ESC נשלט בדרך כלל בתדר של 50Hz, וטווח הבקרה הוא בערך בין 1ms ל-2ms, כמובן, זה תלוי במצב.
(2) לאחר הפעלת החשמל, ESC יצפצף 3 פעמים. לאחר שהשחרור הצליח, ESC יצפצף 2 פעמים. עם זאת, אם ה-ESC מצפצף רק פעם אחת, ייתכן שה-ESC קיבל את האות שהגדרת אך לא פתח את נעילת המכשיר בהצלחה, לכן עליך לבדוק שוב את קוד הנעילה כדי לראות אם יש שגיאות. אם ה-ESC לא משמיע קול אז הוא אפילו לא מקבל אות, בדוק שוב את החיווט והקוד שלך.
(3) שימו לב לשימוש בפונקציית ההשהיה כדי לתת ל-ESC פרק זמן מסוים כדי לקבל את אות פתיחת הנעילה. כל ESC שונה, כך שתוכלו להתאים זאת בעצמכם.
(4) שימו לב להארקה, חבר את קו האות ESC ליציאת יציאת האות של לוח הבקרה, ולאחר מכן הארק את קו האות להארקת ה-GND של לוח הבקרה.
(5) למד להשתמש באוסילוסקופ כדי לבדוק אותות מוגדרים.
אל תחבר את הקו הלא נכון!


שתף את המאמר הזה



← פוסט ישן משרות מעודכנות →


נא להשאיר תגובה