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

IRQ_RESET: int

דגל הפעלה של irq() עבור אירוע פין ה-reset.

IRQ_INDEX: int

דגל הפעלה של irq() עבור אירוע פין ה-index.

IRQ_MATCH: int

דגל הפעלה של irq() עבור אירוע התאמת-המיקום.

IRQ_ROLL_OVER: int

דגל הפעלה של irq() עבור גלגול-מעבר של המונה (max -> min).

IRQ_ROLL_UNDER: int

דגל הפעלה של irq() עבור גלגול-מתחת של המונה (min -> max).