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

الثوابت

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