class Counter -- عدّاد النبضات

تُغلّف الفئة Counter كتلة العتاد i.MX RT QENC (مُرمِّز تربيعي / عدّاد) المُهيّأة كعدّاد نبضات بمدخل واحد. كل حافة صاعدة على دبوس المصدر تزيد (أو تنقص) عدّاد موضع عتادي؛ ويمكن إرفاق دوال رد نداء برمجية بأحداث ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.

متاح على OpenMV Cam RT1062 (منفذ mimxrt) فقط. على كاميرات OpenMV المبنية على STM32، استخدم pyb.Timer المُهيّأ لالتقاط المدخلات بدلاً من ذلك. غير متاح على 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())

المُنشئات

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)

يُنشئ (أو يجلب النسخة الوحيدة لـ) كتلة عدّاد 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 ومنخفض خلاف ذلك.

الطرق

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

يعيد تهيئة العدّاد بالمعاملات المعطاة ويعيد ضبط عدّادي الموضع والدورات. يقبل نفس الوسائط المفتاحية التي يقبلها المُنشئ.

deinit() None

يوقف العدّاد، ويعطّل أي مقاطعات معلّقة، ويحرر موارد عتاد QENC. تؤدي إعادة الضبط الناعمة إلى إلغاء تهيئة جميع نسخ 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

يسجّل دالة رد نداء لاستدعائها عند إطلاق أحد أحداث QENC المدعومة. يتلقى المعالج كائن Counter كوسيطه الوحيد؛ ويمكن تحديد الحدث المحدد داخل المعالج عبر irq.flags().

trigger هو قناع بتّي لواحد أو أكثر من ثوابت IRQ_*:

  • IRQ_RESET -- تم تأكيد دبوس reset.

  • IRQ_INDEX -- حدث انتقال على خط index.

  • IRQ_MATCH -- بلغ عدّاد الموضع قيمة match. يُعطَّل المطابقة تلقائياً بعد الإطلاق ويجب إعادة تسليحها بإعادة تثبيت المقاطعة.

  • IRQ_ROLL_OVER -- التف عدّاد الموضع من max إلى min.

  • IRQ_ROLL_UNDER -- التف عدّاد الموضع من min إلى max.

hard=True يسجّل معالج مقاطعة صلبة (زمن استجابة أقل، لكن يجب ألا يخصّص المعالج ذاكرة). الافتراضي هو دالة رد نداء مجدولة. مرّر handler=None لتعطيل المقاطعة.

الثوابت

UP: int

مرّر إلى direction لعدّ الحواف الصاعدة كموجبة.

DOWN: int

مرّر إلى direction لعدّ الحواف الصاعدة كسالبة.

IRQ_RESET: int

علم تشغيل irq() لحدث دبوس reset.

IRQ_INDEX: int

علم تشغيل irq() لحدث إدخال الفهرس.

IRQ_MATCH: int

علم تشغيل irq() لحدث مطابقة الموضع.

IRQ_ROLL_OVER: int

علم تشغيل irq() لالتفاف العدّاد للأعلى (max -> min).

IRQ_ROLL_UNDER: int

علم تشغيل irq() لالتفاف العدّاد للأسفل (min -> max).