class Counter – מונה פולסים

המחלקה Counter עוטפת את בלוק החומרה QENC (מקודד מרובע / מונה) של ה-i.MX RT כשהוא מוגדר כמונה פולסים בעל כניסה יחידה. כל קצה עולה בפין המקור מגדיל (או מקטין) מונה מיקום חומרתי; ניתן לחבר פונקציות callback תוכנתיות לאירועי ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.

זמין על OpenMV Cam RT1062 (פורט mimxrt) בלבד. במצלמות OpenMV מבוססות STM32 השתמשו במקום זאת ב-pyb.Timer שמוגדר ללכידת כניסה (input-capture). אינו זמין על OpenMV Cam AE3 (פורט alif).

דוגמת שימוש:

from machine import Pin, Counter

counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())

Constructors

class machine.Counter(id: int, src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)

בנו (או קבלו את ה-singleton עבור) בלוק מונה QENC המזוהה על ידי id. ל-RT1062 יש מספר בלוקי QENC (id בוחר אחד מהם); אותם ארגומנטים מתקבלים גם על ידי init() כדי להגדיר מחדש מופע קיים.

src – פין הכניסה שאת הקצוות העולים שלו סופרים.

direction (מילת מפתח בלבד) – או UP / DOWN לקביעת כיוון קבוע, או Pin שרמתו הלוגית בוחרת את הכיוון בזמן ריצה (נמוך = ספירה למעלה, גבוה = ספירה למטה).

filter_ns (מילת מפתח בלבד) – זמן ייצוב הכניסה המינימלי בננו-שניות כדי שפולס ייספר. הדרייבר משתמש בפילטר החומרתי הארוך ביותר שקטן או שווה לערך זה. הערך 0 (ברירת המחדל) משבית סינון.

max / min (מילת מפתח בלבד) – טווח המודולו של מונה המיקום. כאשר המונה מתגלגל מעבר ל-max הוא חוזר ל-min ומונה המחזורים מתגדל (ומתקטן בעת ספירה למטה). העברת max ו-min שניהם כ-0 משביתה את הטווח.

reset (מילת מפתח בלבד) – Pin שהקצה העולה שלו טוען מחדש את מונה המיקום לערך ההתחלה (ללא שינוי מונה המחזורים).

match (מילת מפתח בלבד) – ערך המונה שבו נורית פסיקת IRQ_MATCH. העבירו None כדי להשבית.

match_pin (מילת מפתח בלבד) – Pin המונע גבוה כאשר מונה המיקום שווה ל-match ונמוך אחרת.

Methods

init(src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None

אתחלו מחדש את המונה עם הפרמטרים הנתונים ואפסו את מוני המיקום והמחזורים שלו. מקבל את אותם ארגומנטים בעלי שם כמו ה-constructor.

deinit() None

עצרו את המונה, השביתו פסיקות ממתינות ושחררו את משאבי חומרת ה-QENC. איתחול רך (soft reset) מבטל אוטומטית את האתחול של כל מופעי Counter.

value() int
value(value: int, /) int

קבלו או הגדירו את מונה המיקום בעל הסימן.

ללא ארגומנט, מחזיר את הספירה הנוכחית.

עם ארגומנט value יחיד, מגדיר אטומית את מונה המיקום ל-value ומחזיר את הספירה הקודמת. הניב הנפוץ counter.value(0) מאפס את המונה בתחילת חלון מדידה.

cycles() int
cycles(value: int, /) int

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

ללא ארגומנט, מחזיר את ספירת המחזורים הנוכחית.

עם ארגומנט value יחיד, מגדיר את מונה המחזורים ל-value (ללא נגיעה במונה המיקום) ומחזיר את הספירה הקודמת.

irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None

רשמו פונקציית callback שתופעל כאשר אחד מאירועי ה-QENC הנתמכים נורה. המטפל מקבל את אובייקט ה-Counter כארגומנט היחיד שלו; ניתן לזהות את האירוע הספציפי בתוך המטפל באמצעות 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

UP: int

העבירו ל-direction כדי לספור קצוות עולים כחיוביים.

DOWN: int

העבירו ל-direction כדי לספור קצוות עולים כשליליים.

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).