שְׁאֵלָה:
עד כמה אני יכול לקבל ארדואינו מדויק באמצעות מקודדים סיבוביים?
Anonymous Penguin
2014-03-04 08:50:55 UTC
view on stackexchange narkive permalink

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

הערה: זה כנראה לא יעלה על 4 סיבובים בשנייה ... (זה יכול להיות הרבה אבל אם אתה עושה מנגנון מסוג בורג עופרת שיהיה 24 אינץ 'לדקה רק אם יש 10 סיבובים לאינץ' של תנועה ליניארית.)

השתמשתי בקודנים סיבוביים שסירבו לעבוד כראוי כשסובבו אותם במהירות. אני מניח שזה משתנה עם המחיר.
שתיים תשובות:
#1
+10
Matt Clark
2014-03-04 09:26:24 UTC
view on stackexchange narkive permalink

הפרעות זה מה שתשתמש במצב זה.

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

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

קיימת פונקציה בשם attachInterrupt () שתיקח שלושה ארגומנטים.

  1. סיכה להפסיק
  2. שגרת שירות להפסיק
  3. מצב

להלן דוגמה לספירת הפרעה

  נדיף int myCounter = 0; הגדרת חלל () {attachInterrupt (0, count, RISING);} ספירת חלל () {myCounter ++;}  

המצבים הם כדלקמן:

LOW, CHANGE, RISING, FALLING

מידע נוסף אודות שימוש בהפרעות ניתן למצוא כאן.

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

ערוך הנה כמה קוד לדוגמא מארגז החול של Arduino לשימוש במקודד סיבובי.

גלאי קצה מונע הפרעה בדואימילאנוב מטפל בקלות ב 100 קצוות לשנייה (6500 סל"ד על מנוע).
@WayfaringStranger אז אז אין שום בעיה ב- Uno, אז. תודה!
@AnnonomusPerson - כמה עבודה אתה מוכן להשקיע? אם אתה הולך עירום ('ISR_NAKED ()'), אתה יכול לדלג על שמירת ההקשר האוטומטית של C, ולהוריד את שיעורי ההפרעה של 100-500 קילו-הרץ ללא בעיה, אבל אתה בעצם כותב הרכבה ב- C בשלב זה.
אם אתה רוצה מסמך בננות לחלוטין לגבי אופטימיזציה של הזבל המוחלט מתוך תגובת הפסיקה, חפש [כאן] (http://raphnet.net/programmation/snes2md/index_en.php). הצבת קוד ישירות בטבלת הפסקות כדי להפחית עוד יותר את חביון ההפרעה!
כמו כן, שים לב שאם אתה הולך על הפרעות בהשהיה נמוכה, פונקציית attachInterrupt של arduino מזריקה תקורה נוספת של שיחת פונקציה לעומת שימוש בהפרעה ISR () ישירות.
אבל באמת, אם אתה רוצה משהו בעל זמן אחזור נמוך, אתה לא צריך להשתמש בכל מקרה בארדואינו.
#2
+3
gwideman
2014-04-09 08:22:53 UTC
view on stackexchange narkive permalink

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

קריאת מקודדים סיבוביים: http: // מגרש משחקים .arduino.cc / Main / RotaryEncoders

מקודד ריבועי מהיר מדי עבור Arduino (עם פתרון): http://www.hessmer.org/blog/2011/01/30 / quadrature-encoder-too-fast-for-arduino /

Teensy Encoder Encoder: https://www.pjrc.com/teensy/td_libs_Encoder.html

קריאת מקודד סיבובי בארדואינו: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...