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 olehinit()untuk mengkonfigurasi ulang instance yang sudah ada.phase_a/phase_badalah dua pin input kuadratif.phases(hanya keyword) memilih granularitas dekoding. QENC mendukung1(hitung satu tepi per pasang pulsa),2(kedua tepi phase A) atau4("4x decoding" -- setiap tepi dari kedua fasa dihitung). Default1.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 melewatimax, ia kembali kemindan penghitung siklus bertambah (berkurang saat bergerak ke arah lain). Mengoper keduanya sebagai0menonaktifkan rentang.index(hanya keyword) -- sebuahPinyang tepi naiknya memuat ulang penghitung posisi kemindan memperbarui penghitung siklus sesuai arah; penggunaan tipikal adalah tanda saluran-Z pada encoder rotari.reset(hanya keyword) -- sebuahPinyang tepi naiknya memuat ulang penghitung posisi ke nilai awal (tanpa mengubah penghitung siklus).match(hanya keyword) -- nilai posisi di mana interupsiIRQ_MATCHdipicu. OperNoneuntuk menonaktifkan.match_pin(hanya keyword) -- sebuahPinyang didorong tinggi selama penghitung posisi sama denganmatchdan 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
Encodersecara 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 kevaluesecara atomik dan kembalikan hitungan sebelumnya. Idiom umumenc.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 kevalue(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
Encodersebagai satu-satunya argumen; event spesifik dapat diidentifikasi di dalam handler melaluiirq.flags().triggeradalah bitmask dari satu atau lebih konstantaIRQ_*:IRQ_RESET-- pinresetdiaktifkan.IRQ_INDEX-- pinindexdiaktifkan.IRQ_MATCH-- penghitung posisi mencapaimatch. Match bersifat one-shot dan harus diaktifkan ulang dengan memasang ulang IRQ.IRQ_ROLL_OVER-- penghitung posisi kembali darimaxkemin.IRQ_ROLL_UNDER-- penghitung posisi kembali dariminkemax.
hard=Truemendaftarkan handler interupsi keras (latensi lebih rendah, tetapi handler tidak boleh mengalokasikan). Default adalah callback terjadwal. Operhandler=Noneuntuk menonaktifkan interupsi.
Konstanta¶