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

מד מהירות מכונית RC: 4 שלבים (עם תמונות)
מד מהירות מכונית RC: 4 שלבים (עם תמונות)

וִידֵאוֹ: מד מהירות מכונית RC: 4 שלבים (עם תמונות)

וִידֵאוֹ: מד מהירות מכונית RC: 4 שלבים (עם תמונות)
וִידֵאוֹ: Lesson 102: Using ZK-5AD 4A Dual DC Motor Driver TA6586 4A 14V The best Motor Driver (new product) 2024, נוֹבֶמבֶּר
Anonim
מד מהירות לרכב RC
מד מהירות לרכב RC

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

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

רשימת חלקים:

מיקרו -בקר: השתמשתי בשבב ATTiny85, שעלותו כ -1 ליש ט כל אחד.

מתכנת מיקרו -בקר: על מנת להעלות את הקוד לשבב, אתה צריך דרך לתכנת אותו. עם ארדואינו רגיל זהו רק כבל USB, אך עבור שבב ATTiny, אתה צריך משהו נוסף. אתה יכול להשתמש בארדואינו אחר כדי לעשות זאת או, כמוני, אתה יכול להשתמש במתכנת AVR זעיר מבית Sparkfun.

learn.sparkfun.com/tutorials/tiny-avr-prog…

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

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

קבלים: נעשה שימוש בקבל ניתוק של 100nF (קוד 104). אני לא מבין למה, אבל קראתי שקשרים לניתוק חשובים באינטרנט, אז זה חייב להיות נכון …

הנגד: נגד 10kΩ משמש כדי להוריד את הקו לתוך הארדואינו. שוב, עוד תעלומה של האלקטרוניקה.

Perfboard/Stripboard: לוח כלשהו שעליו ניתן להרכיב את המעגל שלך.

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

חוט סרוו: סרט בעל שלושה חוטים המסתיים בתקע נקבה JR בעל 3 פינים. קיבלתי את שלי מסרוו שרוף ש'שיניתי '.

מנוע צעד: השתמשתי במנוע צעד Nidec דו קוטבי 6 מ מ. כל צעד קטן צריך לעבוד, אם כי לשמור אותו קטן, שכן המדרגה מונעת ישירות מהארדואינו.

סיכות כותרת: לא חיוני, אבל אם אתה מחבר את המדרגה שלך ל -4 סיכות כותרת ושם שקע במעגל שלך, תוכל לנתק בקלות את לוח המחוונים כדי להקל על ההתקנה.

מחשב: כדי לתכנת את הלוח, תזדקק למחשב. אולי עם ה- IDE של Arduino. ואולי כבל USB. אם יש לו גם כבל חשמל, אז אפילו טוב יותר.

שלב 1: המערכת

המתווה הבסיסי של המערכת שיצרתי היה שיטה לפיה אות ה- Pulse Width Modulation (PWM) שמגיע ממקלט ה- RC הופך לטאטא של מנוע צעד באמצעות מיקרו -בקר ATTiny 85 (uC).

להלן משאב על אותות PWM ו- RC, אך כדי לשכפל זאת אין צורך להבין אותו באופן קפדני.

en.wikipedia.org/wiki/Servo_control

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

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

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

שלב 2: התוכנה

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

אז תודתי הלב מגיעה לדואן ב ', שיצר את הקוד לפרש אותות RC:

rcarduino.blogspot.com/

ולארדונאוט, שעשה את הקוד להפעלת צעד כמדד אנלוגי:

arduining.com/2012/04/22/arduino-driving-a…

ולשניהם, התנצלותי הכנה ביותר על מה שעשיתי לקוד שלך.

עכשיו זה לא מהדרך, הנה מה להעלות ל- ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - השתמש במספר ההפרעה ב- attachInterrupt #הגדר THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - השתמש במספר PIN ב- DigitalRead #define NEUTRAL_THROTTLE 1500 של מצערת ניטראלית על מכונית RC חשמלית #הגדר UPPER_THROTTLE 2000 // זהו משך המיקרו שניות של מצערת מקסימלית על מכונית RC חשמלית #הגדר LOWER_THROTTLE 1000 // זהו משך המיקרו שניות של מצערת מינימלית במכונית RC חשמלית #הגדרה DEADZONE 50 // זהו אזור מצערת המצערת. אזור המוות הכולל כפול מזה. #include #define STEPS 21 // צעדים לכל סיבוב (מוגבל ל- 315 °) שנה זאת כדי להתאים את הנסיעה המרבית של מד המהירות. #define COIL1 3 // סיכות סלילים. ה- ATTiny משתמש בסיכות 0, 1, 3, 4 עבור המדרגה. סיכה 2 היא הסיכה היחידה שיכולה להתמודד עם הפרעות ולכן היא צריכה להיות הקלט. #define COIL2 4 // נסה לשנות את אלה אם מנוע הצעד אינו פועל כראוי. #define COIL3 0 #define COIL4 1 // ליצור מופע של מחלקת stepper: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // מיקום בשלבים (0-630) = (0 ° -315 °) int SPEED = 0; מצוף ThrottleInAvg = 0; int MeasurementsToAverage = 60; צף איפוס = 10; // זמן לאיפוס בזמן מצערת סרק Int Resvalval = 0; volatile int ThrottleIn = LOWER_THROTTLE; StartPeriod ארוך נדיף ללא חתימה = 0; // מוגדר בפסיקה // נוכל להשתמש ב- nThrottleIn = 0 בלולאה במקום במשתנה נפרד, אך באמצעות bNewThrottleSignal כדי לציין שיש לנו אות חדש // הוא ברור יותר עבור דוגמה ראשונה זו של התקנת חלל () {// ספר ל- Arduino אנו רוצים שהפונקציה calcInput תקרא בכל פעם ש INT0 (סיכה דיגיטלית 2) משתנה מ- HIGH ל- LOW או LOW ל- HIGH // לתפוס שינויים אלה יאפשרו לנו לחשב כמה זמן הדופק של הקלט מצרף AttachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // הגדר את מהירות המנוע ל -30 סל"ד (360 PPS בערך). stepper.step (STEPS * 2); // איפוס מיקום (X צעדים נגד כיוון השעון). } לולאת חלל () {איפוס = מיליס; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); איפוס = 0; } // מיפוי הפוך אחר אם (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); איפוס = 0; } // מחוץ לטווח עליון אם (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; איפוס = 0; } // מחוץ לטווח נמוך יותר אם (ThrottleInAvg Resetcounter) {stepper.step (4); // אני מנסה להגיד לסטפר לאפס את עצמו מחדש אם האות RC נמצא באזור המוות במשך זמן רב. לא בטוח אם החלק הזה של הקוד אכן עובד. }} int val = SPEED; // לקבל את ערך הפוטנציומטר (טווח 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // טווח סירים במפה בטווח המדרגות. if (abs (val - pos)> 2) {// אם ההבדל גדול משני שלבים. אם ((val - pos)> 0) {stepper.step (-1); // הזז צעד אחד שמאלה. pos ++; } אם ((val - pos) <0) {stepper.step (1); // לעבור צעד אחד ימינה. pos--; }}} // עיכוב (10); } void calcInput () {// אם הסיכה גבוהה, תחילתה של הפרעה אם (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// קבל את הזמן באמצעות מיקרו - כשהקוד שלנו יתעסק באמת זה יהפוך למדוייק, אבל עבור היישום הנוכחי שלה // קל להבנה ועובד טוב מאוד StartPeriod = micros (); } אחרת {// אם הסיכה נמוכה, היא הקצה הנופל של הדופק, כך שעכשיו נוכל לחשב את משך הדופק על ידי הפחתת // התחלת זמן ulStartPeriod מהזמן הנוכחי המוחזר על ידי מיקרו () if (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

עיין בזה למידע נוסף על תכנות ATTiny85:

learn.sparkfun.com/tutorials/tiny-avr-prog…

שלב 3: החומרה

החומרה
החומרה
החומרה
החומרה
החומרה
החומרה

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

C1 = 100nF

R1 = 10kΩ

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

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

אם אתה יוצר את מחבר סיכת הכותרת, ומגדיר את הפינים כך: [Ca1, Cb1, Ca2, Cb2] כאשר Ca1 עומד על סליל A, חוט 1 וכו '. זה מאפשר לך לשנות את כיוון הסיבוב של המד על ידי החלפת התקע סְבִיב.

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

שלב 4: אפילוג

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

בהצלחה!

מוּמלָץ: