class Encoder – מפענח מרובע¶
המחלקה Encoder עוטפת את בלוק החומרה QENC של ה-i.MX RT כשהוא מוגדר כמפענח מרובע. הוא עוקב אחרי אות דו-פאזי (phase_a / phase_b) המגיע ממקודד סיבובי, מגדיל או מקטין מונה מיקום ברוחב 32 ביט בהתאם ליחס הפאזות, וניתן לשלבו עם כניסות index / reset אופציונליות לצורך התייחסות מוחלטת.
זמין על OpenMV Cam RT1062 (פורט mimxrt) בלבד. במצלמות OpenMV מבוססות STM32 השתמשו במקום זאת ב-pyb.Timer שמוגדר למצב מקודד (Timer.ENC_AB). אינו זמין על OpenMV Cam AE3 (פורט alif).
דוגמת שימוש:
from machine import Pin, Encoder
enc = Encoder(0, Pin("P0", Pin.IN), Pin("P1", Pin.IN), phases=4)
enc.value(0)
# ... rotate the encoder ...
print("position:", enc.value())
Constructors¶
- class machine.Encoder(id: int, phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
בנו (או קבלו את ה-singleton עבור) בלוק מקודד QENC המזוהה על ידי
id. אותם ארגומנטים מתקבלים גם על ידיinit()כדי להגדיר מחדש מופע קיים.phase_a/phase_bהם שני פיני הכניסה המרובעים.phases(מילת מפתח בלבד) בוחר את רזולוציית הפענוח. ה-QENC תומך ב-1(ספירת קצה אחד לכל זוג פולסים),2(שני הקצוות של פאזה A) או4(”פענוח 4x“ – כל קצה של שתי הפאזות נספר). ברירת המחדל1.filter_ns(מילת מפתח בלבד) – זמן ייצוב הכניסה המינימלי בננו-שניות. הדרייבר משתמש בפילטר החומרתי הארוך ביותר שקטן או שווה לערך זה. הערך0(ברירת המחדל) משבית סינון.max/min(מילת מפתח בלבד) – טווח המודולו של מונה המיקום. כאשר המונה מתגלגל מעבר ל-maxהוא חוזר ל-minומונה המחזורים מתגדל (ומתקטן בעת תנועה בכיוון ההפוך). העברת שניהם כ-0משביתה את הטווח.index(מילת מפתח בלבד) –Pinשהקצה העולה שלו טוען מחדש את מונה המיקום ל-minומעדכן את מונה המחזורים בהתאם לכיוון; השימוש האופייני הוא סימן ערוץ-Z במקודד סיבובי.reset(מילת מפתח בלבד) –Pinשהקצה העולה שלו טוען מחדש את מונה המיקום לערך ההתחלה (ללא שינוי מונה המחזורים).match(מילת מפתח בלבד) – ערך המיקום שבו נורית פסיקתIRQ_MATCH. העבירוNoneכדי להשבית.match_pin(מילת מפתח בלבד) –Pinהמונע גבוה כאשר מונה המיקום שווה ל-matchונמוך אחרת.Methods¶
- init(phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
אתחלו מחדש את המקודד עם הפרמטרים הנתונים ואפסו את מוני המיקום והמחזורים שלו. מקבל את אותם ארגומנטים בעלי שם כמו ה-constructor.
- deinit() None¶
עצרו את המקודד, השביתו פסיקות ממתינות ושחררו את משאבי חומרת ה-QENC. איתחול רך (soft reset) מבטל אוטומטית את האתחול של כל מופעי
Encoder.
- value() int¶
- value(value: int, /) int
קבלו או הגדירו את מונה המיקום בעל הסימן.
ללא ארגומנט, מחזיר את המיקום הנוכחי.
עם ארגומנט
valueיחיד, מגדיר אטומית את מונה המיקום ל-valueומחזיר את הספירה הקודמת. הניב הנפוץenc.value(0)מאפס את המונה בתחילת חלון מדידה.
- cycles() int¶
- cycles(value: int, /) int
קבלו או הגדירו את מונה המחזורים, מספר שלם בעל סימן ברוחב 16 ביט העוקב אחרי כמה פעמים מונה המיקום התגלגל מעבר ל-
max/min.ללא ארגומנט, מחזיר את ספירת המחזורים הנוכחית.
עם ארגומנט
valueיחיד, מגדיר את מונה המחזורים ל-value(ללא נגיעה במונה המיקום) ומחזיר את הספירה הקודמת.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
רשמו פונקציית callback שתופעל כאשר אחד מאירועי ה-QENC הנתמכים נורה. המטפל מקבל את אובייקט ה-
Encoderכארגומנט היחיד שלו; ניתן לזהות את האירוע הספציפי בתוך המטפל באמצעותirq.flags().triggerהוא מסכת ביטים של קבועIRQ_*אחד או יותר:IRQ_RESET– פין ה-resetהופעל.IRQ_INDEX– פין ה-indexהופעל.IRQ_MATCH– מונה המיקום הגיע ל-match. ההתאמה היא חד-פעמית ויש לחמש אותה מחדש על ידי התקנה מחדש של ה-IRQ.IRQ_ROLL_OVER– מונה המיקום התגלגל מ-maxל-min.IRQ_ROLL_UNDER– מונה המיקום התגלגל מ-minל-max.
hard=Trueרושם מטפל פסיקה קשיח (השהיה נמוכה יותר, אך אסור שהמטפל יבצע הקצאת זיכרון). ברירת המחדל היא פונקציית callback מתוזמנת. העבירוhandler=Noneכדי להשבית את הפסיקה.
Constants¶