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لتعطيل المقاطعة.
الثوابت¶