class Encoder -- مُرمِّز تربيعي¶
تُغلّف الفئة Encoder كتلة العتاد i.MX RT QENC المُهيّأة كمُرمِّز تربيعي. تتتبّع إشارة ثنائية الطور (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())
المُنشئات¶
- 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)¶
يُنشئ (أو يجلب النسخة الوحيدة لـ) كتلة مُرمِّز 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ومنخفض خلاف ذلك.الطرق¶
- 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¶
يعيد تهيئة المُرمِّز بالمعاملات المعطاة ويعيد ضبط عدّادي الموضع والدورات. يقبل نفس الوسائط المفتاحية التي يقبلها المُنشئ.
- deinit() None¶
يوقف المُرمِّز، ويعطّل أي مقاطعات معلّقة، ويحرر موارد عتاد QENC. تؤدي إعادة الضبط الناعمة إلى إلغاء تهيئة جميع نسخ
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¶
يسجّل دالة رد نداء لاستدعائها عند إطلاق أحد أحداث QENC المدعومة. يتلقى المعالج كائن
Encoderكوسيطه الوحيد؛ ويمكن تحديد الحدث المحدد داخل المعالج عبر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لتعطيل المقاطعة.
الثوابت¶