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¶