kelas Encoder -- dekoder kuadratif

Kelas Encoder membungkus blok perangkat keras i.MX RT QENC yang dikonfigurasi sebagai dekoder kuadratif. Ia melacak sinyal dua fasa (phase_a / phase_b) yang berasal dari encoder rotari, menginkrementasi atau mendekrementasi penghitung posisi 32-bit sesuai hubungan fasa, dan dapat dikombinasikan dengan input opsional index / reset untuk referensi absolut.

Tersedia hanya pada OpenMV Cam RT1062 (port mimxrt). Pada OpenMV Cam berbasis STM32, gunakan pyb.Timer yang dikonfigurasi untuk mode encoder (Timer.ENC_AB). Tidak tersedia pada OpenMV Cam AE3 (port alif).

Contoh penggunaan:

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

Konstruktor

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)

Buat (atau ambil singleton untuk) blok encoder QENC yang diidentifikasi oleh id. Argumen yang sama juga diterima oleh init() untuk mengkonfigurasi ulang instance yang sudah ada.

phase_a / phase_b adalah dua pin input kuadratif.

phases (hanya keyword) memilih granularitas dekoding. QENC mendukung 1 (hitung satu tepi per pasang pulsa), 2 (kedua tepi phase A) atau 4 ("4x decoding" -- setiap tepi dari kedua fasa dihitung). Default 1.

filter_ns (hanya keyword) -- waktu stabil input minimum dalam nanodetik. Driver menggunakan filter perangkat keras terpanjang yang kurang dari atau sama dengan nilai ini. 0 (default) menonaktifkan pemfilteran.

max / min (hanya keyword) -- rentang modulo dari penghitung posisi. Saat penghitung melewati max, ia kembali ke min dan penghitung siklus bertambah (berkurang saat bergerak ke arah lain). Mengoper keduanya sebagai 0 menonaktifkan rentang.

index (hanya keyword) -- sebuah Pin yang tepi naiknya memuat ulang penghitung posisi ke min dan memperbarui penghitung siklus sesuai arah; penggunaan tipikal adalah tanda saluran-Z pada encoder rotari.

reset (hanya keyword) -- sebuah Pin yang tepi naiknya memuat ulang penghitung posisi ke nilai awal (tanpa mengubah penghitung siklus).

match (hanya keyword) -- nilai posisi di mana interupsi IRQ_MATCH dipicu. Oper None untuk menonaktifkan.

match_pin (hanya keyword) -- sebuah Pin yang didorong tinggi selama penghitung posisi sama dengan match dan rendah sebaliknya.

Metode

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

Inisialisasi ulang encoder dengan parameter yang diberikan dan reset posisi serta penghitung siklusnya. Menerima argumen keyword yang sama seperti konstruktor.

deinit() None

Hentikan encoder, nonaktifkan interupsi yang tertunda, dan lepaskan sumber daya perangkat keras QENC. Soft reset akan menginisialisasi ulang semua instance Encoder secara otomatis.

value() int
value(value: int, /) int

Dapatkan atau tetapkan penghitung posisi bertanda.

Tanpa argumen, kembalikan posisi saat ini.

Dengan satu argumen value, atur penghitung posisi ke value secara atomik dan kembalikan hitungan sebelumnya. Idiom umum enc.value(0) mereset penghitung di awal jendela pengukuran.

cycles() int
cycles(value: int, /) int

Dapatkan atau tetapkan penghitung siklus, sebuah integer 16-bit bertanda yang melacak berapa kali penghitung posisi telah melewati max / min.

Tanpa argumen, kembalikan hitungan siklus saat ini.

Dengan satu argumen value, atur penghitung siklus ke value (tanpa menyentuh penghitung posisi) dan kembalikan hitungan sebelumnya.

irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None

Daftarkan callback yang dipanggil saat salah satu event QENC yang didukung terpicu. Handler menerima objek Encoder sebagai satu-satunya argumen; event spesifik dapat diidentifikasi di dalam handler melalui irq.flags().

trigger adalah bitmask dari satu atau lebih konstanta IRQ_*:

  • IRQ_RESET -- pin reset diaktifkan.

  • IRQ_INDEX -- pin index diaktifkan.

  • IRQ_MATCH -- penghitung posisi mencapai match. Match bersifat one-shot dan harus diaktifkan ulang dengan memasang ulang IRQ.

  • IRQ_ROLL_OVER -- penghitung posisi kembali dari max ke min.

  • IRQ_ROLL_UNDER -- penghitung posisi kembali dari min ke max.

hard=True mendaftarkan handler interupsi keras (latensi lebih rendah, tetapi handler tidak boleh mengalokasikan). Default adalah callback terjadwal. Oper handler=None untuk menonaktifkan interupsi.

Konstanta

IRQ_RESET: int

Flag trigger irq() untuk event pin reset.

IRQ_INDEX: int

Flag trigger irq() untuk event pin index.

IRQ_MATCH: int

Flag trigger irq() untuk event pencocokan posisi.

IRQ_ROLL_OVER: int

Flag trigger irq() untuk counter roll-over (max -> min).

IRQ_ROLL_UNDER: int

Flag trigger irq() untuk counter roll-under (min -> max).