באלקטרוניקה, מנועי סרוו משמשים בעיקר בפרויקטים של רובוטיקה בגלל הדיוק והטיפול הקל שלהם. מנועי סרוו קטנים יותר בגודלם והם יעילים מאוד וחסכוניים באנרגיה. הם מספקים מומנט גבוה וניתן להשתמש בהם כדי להרים או לדחוף משקולות על פי מפרט המנועים. במדריך זה נלמד על סרוו מנוע וכיצד ניתן לממשק סרוו עם לוח STM32F103C8. פוטנציומטר מממשק גם כדי לשנות את מיקום הפיר של מנוע הסרוו, ו- LCD כדי להציג את ערך הזווית.
רכיבים נדרשים
- לוח STM32F103C8 (גלולה כחולה)
- מנוע סרוו (SG90)
- LCD (16x2)
- פוטנציומטר
- קרש לחם
- חוטי מגשר
תרשים מעגלים וחיבורים
SMT32F103C8 פרטי פין
ב- STM32F103C8, יש לנו 10 סיכות ADC (PA0-PB1), וכאן אנו משתמשים בסיכה אחת בלבד (PA3) לצורך קריאה אנלוגית () לקביעת מיקום פיר המנוע באמצעות פוטנציומטר. גם בין 15 סיכות PWM של STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), סיכה אחת תשמש למתן פולסים לסרוו סיכת PWM של המנוע (בדרך כלל היא בצבע כתום).
תוכל ללמוד עוד על PWM ו- ADC על ידי קריאה למטה למאמרים מפורטים:
- כיצד להשתמש ב- ADC ב- STM32F103C8
- אפנון רוחב הדופק (PWM) ב- STM32F103C8
חיבור בין STM32F103C8 ו- LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5 וולט | VDD |
ל- PIN של מרכז הפוטנציומטר | V0 |
PB0 | RS |
GND | RW |
PB1 | ה |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5 וולט | א |
GND | ק |
חיבור בין מנוע סרוו ל- STM32F103C8
STM32F103C8 |
SERVO |
+ 5 וולט |
אדום (+ 5 וולט) |
PA0 |
כתום (סיכת PWM) |
GND |
חום (GND) |
חיבורי פוטנציומטרים
השתמשנו כאן בשני פוטנציומטרים
1. הפוטנציומטר מימין משמש לשינוי ניגודיות ה- LCD. יש לו שלושה פינים, הסיכה השמאלית מיועדת ל- + 5 V והימנית מיועדת ל- GND והסיכה המרכזית מחוברת ל- V0 של ה- LCD.
2. הפוטנציומטר משמאל משמש לשינוי מיקום הפיר של מנוע סרוו על ידי שליטה על מתח הכניסה האנלוגי, לסיכה השמאלית יש קלט 3.3V ולימין יש GND ויציאת המרכז מחוברת ל- (PA3) של STM32
תכנות STM32 למנוע סרוו
כמו ההדרכה הקודמת שלנו, תיכנתנו את ה- STM32F103C8 עם Arduino IDE דרך יציאת USB ללא שימוש במתכנת FTDI. אנחנו יכולים להמשיך לתכנת אותו כמו ארדואינו. הקוד השלם ניתן להלן בסוף הפרויקט.
ראשית כללנו קבצי ספרייה לפונקציות סרוו ו- LCD:
#לִכלוֹל
ואז הכריזו על סיכות לתצוגת LCD ואותחלו אותו. הוכרז גם על כמה משתנים אחרים עבור PWM ופוטנציומטר:
const int rs = PB0, en = PB1, d4 = PB10, d5 = PB11, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); int servoPin = PA0; int potPin = PA3;
כאן יצרנו סרוו משתנה עם סרגל סוג זה וצירפנו אותו לסיכת PWM שהוכרז בעבר.
סרוו סרוו; servo.attach (servoPin);
לאחר מכן קרא את הערך האנלוגי מסיכה PA3 מכיוון שהוא סיכת ADC, הוא ממיר מתח אנלוגי (0-3.3) לצורה דיגיטלית (0-4095)
analogRead (potPin);
מכיוון שהפלט הדיגיטלי הוא ברזולוציה של 12 סיביות, עלינו לקבל ערכים בטווח המידות (0-170), והוא מחלק את ערך ה- ADC (0-4096) לפי זווית מקסימלית של 170 מעלות ולכן אנו מתחלקים עם 24.
זווית = (קריאה / 24);
ההצהרה הבאה גורמת למנוע הסרוב לסובב את הפיר בזווית הנתונה.
servo.write (זווית);
הקוד השלם ניתן להלן ומוסבר היטב על ידי הערות.