בית החינוך המשותף חוף השרון | ההנדסייה - סדנה מייקרית בבית הספר
בקר מנועים מדגם: L298N
עורך: ליאור האזה
מטרת הרכיב:
מטרת בקר המנועים L298N היא לשמש כמגבר לשליטה במהירות וכיוון הסיבוב של מנוע DC או שני מנועי DC בו זמנית, וכן מנועי סטפר.
הרכיב עונה על הצורך שלנו לשלוט במהירות של שני מנועים הפועלים עם מתחים של בין 5 ל-35 וולט, בו זמנית. הרכיב עונה גם על צורך שליטה בכיוון תנועת המנועים, פונקציה זו אינה קיימת בבקר ארדואינו סטנדרטי ולכן כדי לאפשר אותה אנו משתמשים ברכיב זה. נוסף על כך ארדואינו רגיל לא יכול לספק דרכו מתח גדול מ-12 וולט, וזו סיבה נוספת שבגללה אנו משתמשים בבקר זה.
אופן פעולת הרכיב (פשוט):
הבקר יכול לשמש מנועים עם מנעד מתחים של בין 5 ל-35 וולט, בזרמים של עד 2 אמפר.
לרכיב שתי יציאות מתח להפעלה של שני מנועי DC. הרכיב נשלט על ידי בקר חיצוני (אצלנו בסדנה בקר זה יהיה בעיקר ארדואינו). כל יציאת מתח למנוע DC אחד נשלטת על ידי 3 פינים על גוף הבקר. פין אחד המשמש לשליטה במהירות המנוע, והשניים האחרים משמשים לקביעת כיוון הסיבוב של המנוע בכל רגע נתון, כלומר קביעת כיוון הזרם שזורם לתוך המנוע.
לבקר שתי פעולות עיקריות שהוא מבצע:
הפעולה הראשונה: שליטה במהירות המנוע, נעשית בעזרת הארדואינו, על ידי טכניקת ה- Pulse Width Modulation, או בקיצור P.W.M.
הבקר משמש כמגבר למתח הPWM שהארדואינו מספק, כדי לאפשר שליטה במהירות של מנועים עם מנעד מתחים הגבוה מ-5 וולט.
הפעולה השנייה היא פעולת השליטה בכיוון הסיבוב של המנועים הנעשית על ידי שימוש בגשר "H", שמטרתו להחליף את כיוון זרימת הזרם המגיע למנוע וכך להפוך את כיוון תנועת המנוע בעת הצורך.
אופן פעולת הרכיב – הסבר פנימי:
לרכיב שתי תתי מערכות ראשיות: האחת מספקת שליטה
על מהירות המנועים. השנייה מספקת שליטה על כיוון התנועה שלהם.
מערכת שליטה על מהירות: נעשית על ידי טכניקת ה- Pulse Width Modulation, או בקיצור P.W.M. טכניקה זו מזרימה פולסים של זרמים במתח מסויים וקבוע שהוא בעצם המתח המקסימלי אותו אנו בוחרים להזרים למנוע, ויכול להיקבע לפי צרכינו או לפי צרכי המנוע, כלומר- למנוע עליו נכתב כי יכול לקבל זרמים של עד 12 וולט, ניתן מתח מקסימלי של עד 12 וולט, אך למנוע שנכתב עליו כי יכול לקבל מתחים של עד 24 וולט נוכל לתת מתח מקסימלי של עד 24 וולט. פונקצית הPWM היא פונקציה דיגיטלית, זאת מאחר שהפעולה היחידה הנדרשת בפונקציה זו היא הזרמה באופן של ON/OFF של זרמים במתחים קבועים.
הזרמים מוזרמים לתוך הבקר המנועים דרך הפינים הדיגיטליים שעל הארדואינו שמספק פולסים של PWM במתח מקסימלי של 5 וולט, פולסים אלו מתורגמים בתוך בקר המנועים לפולסים במתח החיצוני המסופק לכל מנוע. בקר המנועים בעצם משמש כמגבר למתח הPWM שהארדואינו פולט. הפולסים שהארדואינו פולט מוזרמים בתדירות גבוהה מאוד(תדירות היא מילה המתארת קצב של משהו, ונמדדת ביחידות של הרץ Hz) בסדרי גודל של קילו הרצים, כך שהפסקת הזרם בין פולסים לא מתבטאת בעצירת המנוע ופעולת הPWM מתפרשת במנוע כתנועה מתמדת. במצב בו התדירות גבוהה מאוד בסדרי גודל של כמה קילו הרצים(קילו זה אלף בשפה מדעית), ניתן לשלוט במתח הממוצע שנכנס למנוע, שנקבע לפי היחס בין הזמן הלקוח מתוך יחידת זמן גדולה יותר- בו זורם זרם למנוע לעומת הזמן מתוך אותה יחידת זמן שבו לא זורם זרם למנוע. כלומר ככל שבתוך אותה יחידת זמן מסוימת מגיע יותר זרם מאשר "לא זרם", נוצר מצב בו המתח הממוצע הנכנס למנוע גדול יותר, והוא בעצם זה שקובע את מהירות המנוע וניתן לשינוי ושליטה על ידי משחק עם היחס בין הפעמים שזורם זרם לבין הפעמים שלא ביחידת זמן מסוימת. הנה תמונות הממחישות את פעולה זו:
הסבר התמונה:
באיור העליון מצד ימין ניתן לראות שרשום Duty Cycle 25%, נתון זה אומר כי הזרם עובר במערכת ב25% מזמן פעולתה, וניתן לראות זאת בגרף- בו המלבנים הכחולים מתארים את החלק בו כן זורם זרם במעגל לעומת החלקים הרקים אשר הם גדולים יותר, מה שאומר שברוב הזמן- 75% ממנו לא זורם זרם במעגל, וב25% כן זורם. דבר זה יוצר מצב בו המתח הממוצע הזורם במעגל הוא בעצם 25% מהמתח המקסימלי. המתח המקסימלי הוא בעצם גודל המתח שזורם במעגל בכל פולס של המערכת, ובתמונה ניתן לראות כי מתח זה הוא 12 וולט. לכן המתח הממוצע באיור העליון הוא 3 וולט והוא בעצם קובע את מהירות המנוע.
בתמונות הנוספות ניתן לראות כי הזרם זורם במעגל יותר זמן(לפי המלבנים הכחולים), ולכן גם המתחים הממוצעים גדולים יותר, והיחס בינהם לבין המתח המקסימלי נקבע לפי אחוז ה-Duty Cycle, הרשום עליהם.
תת מערכת שניה היא מערכת השליטה בכיוון הסיבוב של המנוע ועובדת על עיקרון פעולה של גשר "H". זהו מעגל חשמלי המזכיר את האות האנגלית "H", ומכיל שני מפסקים אשר פתיחתם וסגירתם ניתנת לשליטה בעזרת בקר ומטרתם היא להחליף לפי פקודה את כיוון הזרם שזורם במעגל שאחד הרכיבים שמכיל הוא המנוע עצמו. כאשר המנוע מקבל זרמים בכיוונים שונים, הוא מחליף את כיוון סיבובו:
כפי שניתן לראות באיורים הללו, הזרם העובר דרכו ניתן לשינוי דרך פתיחת וסגירת המתגים הנמצאים במעגל, כל פעם מתג אחד פתוח והשני סגור לשם השגת כיווני זרמים שונים. מצב בו שני המתגים פתוחים הוא מצב בו המנוע בעצירה.
PINOUT:
בדיאגרמה זו ניתן לראות כי הארדואינו מחובר לבקר המנועים דרך הפין הדיגיטלי, וחשוב לציין שלמרות שהמהירות של המנועים משתנה בצורה אנלוגית, כניסת המתח היא דיגיטלית, ומצב זה מתאפשר עקב מנגנון ה-P.W.M עליו פירטתי קודם לכן. בדיאגרמה זו מחובר לבקר רק מנוע אחד ומהירותו נשלטת בעזרת פוטנציומטר ומפסק המחוברים לארדואינו. באיור זה מוצג מקור מתח שגודלו 12 וולט, המתאים למנוע המוצג באיור שהמתח שלו הוא גם 12 וולט. לבקר עצמו ניתן להזין מתחים של עד 36 וולט, וכדי להזרים מתחים גבוהים מ12 וולט יש להסיר את הג'אמפר שיושב ליד יציאת המתח והGROUND של המנוע השמאלי, שמוקף בעיגול באיור העליון.
קוד לדוגמא:
-
/* Arduino DC Motor Control - PWM | H-Bridge | L298N - Example 01
-
-
by Dejan Nedelkovski, www.HowToMechatronics.com
-
*/
-
-
#define enA 9
-
#define in1 6
-
#define in2 7
-
#define button 4
-
-
int rotDirection = 0;
-
int pressed = false;
-
-
void setup() {
-
pinMode(enA, OUTPUT);
-
pinMode(in1, OUTPUT);
-
pinMode(in2, OUTPUT);
-
pinMode(button, INPUT);
-
// Set initial rotation direction
-
digitalWrite(in1, LOW);
-
digitalWrite(in2, HIGH);
-
}
-
-
void loop() {
-
int potValue = analogRead(A0); // Read potentiometer value
-
int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the potentiometer value from 0 to 255
-
analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin
-
-
// Read button - Debounce
-
if (digitalRead(button) == true) {
-
pressed = !pressed;
-
}
-
while (digitalRead(button) == true);
-
delay(20);
-
-
// If button is pressed - change rotation direction
-
if (pressed == true & rotDirection == 0) {
-
digitalWrite(in1, HIGH);
-
digitalWrite(in2, LOW);
-
rotDirection = 1;
-
delay(20);
-
}
-
// If button is pressed - change rotation direction
-
if (pressed == false & rotDirection == 1) {
-
digitalWrite(in1, LOW);
-
digitalWrite(in2, HIGH);
-
rotDirection = 0;
-
delay(20);
-
}
-
}
תיאור קוד לדוגמה:
זהו קוד בסיסי לארדואינו המאפשר שליטה במהירות של מנוע DC יחיד בעזרת פוטנציומטר.
תחילה מגדירים את הכניסות והיציאות של הבקר בsetup, מתאימים את בקר המנועים לארדואינו דרך הפינים הדיגיטליים של הארדואינו, In1, In2, ו-enA. דבר נוסף שנגדיר הוא לחצן ההפעלה שמתואר בשם: BUTTON.
לאחר מכן מגדירים את כיוון הסיבוב של המנוע: הפינים In1 וIn2 הם הקובעים את כיוון תנועת המנוע, כך שכדי לקבוע את הסיבוב לכיוון מסויים צריך להגדיר בכל פעם אחד מהם כ-High וכ-Low.
ב-Loop, אנחנו קוראים את הקריאה של הפוטנציומטר, המחובר לפין האנלוגי A0(פוטנציומטר הוא חיישן אנלוגי).
לאחר מכן אנו ממפים את הערכים של הפוטנציומטר מטווח הערכים 0-1023 שזהו טווח הערכים בו בקר הארדואינו מפרש את קריאת הפוטנציומטר בכניסה האנלוגית, לטווח ערכים בין 0-255, שהם טווח הערכים של היציאה האנלוגית בארדואינו, ואותם המנוע מקבל, כך שתהיה לנו שליטה מלאה בעזרת הפוטנציומטר על מהירות המנוע.
הערכים שנקלטים בחיישן הפוטנציומטר, מתורגמים בקוד לפונקציית הPWM אשר שולטת במהירות המנועים. סיבוב הפוטנציומטר בעצם שולט ב- DUTY CYCLE של הPWM בארדואינו.
חלק נוסף של הקוד שולט בעזרת הכפתור בכיוון התנועה של המנועים כך שלחיצה על הכפתור משנה את כיוון התנועה, כלומר משנה את האות שנכנס ל In1 וIn2, בין HIGH ל-LOW. בקוד מתואר כי כאשר הכפתור נלחץ, המערכת בודקת את כיוון הסיבוב באותו הרגע, והופכת אותו מצד אחד לצד אחר, דרך שינוי הפקודות HIGH ו-LOW, בין In1 וIn2.
רכיבים אלטרנטיביים:
אחד היתרונות הבולטים של בקר המנועים L298N הוא שהוא מאוד קל ונוח לשימוש במיוחד לכאלו שפחות מנוסים אך היו רוצים לעסוק בעולם הרובוטיקה- בו הבקר משמש. הוא מאוד קל לחיווט והחיבורים מוסברים בצורה טובה ומסודרת.
יתרון נוסף הוא שהבקר מאפשר הזרמה של מתחים יחסית גבוהים של עד 36 וולט, מה שלא ניתן לעשות בעזרת בקר ארדואינו רגיל. הבקר מרכז בתוכו 2 פעולות, ומפשט אותן. פעולה כמו שליטה בכיוון תנועה של מנוע לא יכולה להיעשות על ידי בקר ארדואינו רגיל מאחר שלא תוכנן לכך.
רכיב נוסף הקיים בשוק המשמש למטרה דומה הוא קומת המנועים L293D המאפשרת הזרמת מתחים של בין 4.5 ל-36 וולט.
יתרונותיה הם שהיא יכולה לשלוט במהירויות ובכיווני הסיבוב של עד 4 מנועים בו זמנית בשונה מבקר המנועים שיכול לשלוט רק בשניים, ומתממשקת\מתיישבת על בקר הארדואינו ללא צורך בחיווט נוסף בשביל המנועים עצמם, בניגוד לבקר המנועים. החיסרון של בקר זה הוא שהוא עלול להתחמם מהר מאוד אם מעמיסים עליו הרבה עבודה, וזה מקשה על התפקוד שלו.
רכיב נוסף הוא ה-BTS 7960. זהו בקר מנועים המתאים למנועים עוצמתיים וגדולים עוד יותר עם הספק גבוה יותר, וזאת מאחר שהבקר הנ"ל מתאים לזרמים של עד 43 אמפר. בעוד בקר זה יכול לקבל מתחים של עד 24 וולט- בניגוד לבקר L298N שיכול לקבל מתחים של עד 36 וולט, העובדה כי הוא יכול לעבוד עם הספקים גבוהים במיוחד, מקנה לו אפשרות לעבוד עם מנועים חזקים יותר ועוצמתיים יותר ממה ש-L298N מאפשר.
בקר זה יכול לשלוט רק במנוע אחד וזהו חיסרון לעומת שני הבקרים האחרים שיכולים לשלוט ביותר; זאת מאחר שלא יהיה ניתן לבצע איתו משימות מסוימות הדורשות פעולה של שני מנועים בו זמנית.
שגיאות שכדאי להימנע מהן וטיפים מועילים:
במצב בו רוצים להזרים 12 וולט למנועים ומחברים מקור מתח לבקר שגודלו 12 וולט, המתח הנכנס למנועים עצמו קטן יותר עקב ההתנגדות הפנימית של הבקר והוא בערך בין 10 ל-11 וולט, לכן אם רוצים שלמנוע ייכנסו 12 וולט צריך להשתמש בספק מתח לא קבוע שיהיה ניתן לשלוט ולבדוק שלמנוע באמת נכנס המתח הרצוי.
שגיאה נוספת שכדאי להימנע ממנה היא במצב בו רוצים להזרים דרך הבקר מתחים הגדולים מ-12 וולט: יש ג'אמפר (סיכה המקצרת בין שני פינים על הבקר) שיש להסיר אם רוצים לעבוד עם מתחים גבוהים מ12 וולט.
אחת השגיאות שהייתה לנו במהלך העבודה הייתה שניסינו להשתמש בפונקציית הPWM של הבקר וחיברנו חוטים לבקר, על הג'אמפר היושב בשורה על הפינים של ה-enA. לאחר מכן גילינו כי כשהג'אמפרים הללו מונחים במקומם הם מקצרים את פונקציית הPWM שבבקר. כשניסינו להפעיל את המנועים בעזרת הבקר ולשלוט במהירותם, לא הצלחנו לעשות זאת והבנו שכדי שנוכל להשתמש בפונקציה זו, עלינו להסירם ולחבר מחדש את החוטים לפין המסתתר מתחתיהם. חשוב גם לציין שלג'אמפר הזה יש משמעות והוא שמיש בעיקר במצבים בהם אין לנו צורך לשלוט במהירות המנוע, ואנחנו יכולים פשוט לתת לו לרוץ במתח המקסימלי הרצוי.