kelas Counter -- penghitung pulsa

Kelas Counter membungkus blok perangkat keras i.MX RT QENC (encoder kuadratif / penghitung) yang dikonfigurasi sebagai penghitung pulsa satu input. Setiap tepi naik pada pin sumber menginkrementasi (atau mendekrementasi) penghitung posisi perangkat keras; callback perangkat lunak dapat dilampirkan pada event ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.

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

Contoh penggunaan:

from machine import Pin, Counter

counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())

Konstruktor

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)

Buat (atau ambil singleton untuk) blok penghitung QENC yang diidentifikasi oleh id. RT1062 memiliki beberapa blok QENC (id memilih salah satunya); argumen yang sama juga diterima oleh init() untuk mengkonfigurasi ulang instance yang sudah ada.

src -- pin input yang tepi naiknya dihitung.

direction (hanya keyword) -- baik UP / DOWN untuk menetapkan arah tetap, atau sebuah Pin yang level logikanya memilih arah saat runtime (rendah = hitung naik, tinggi = hitung turun).

filter_ns (hanya keyword) -- waktu stabil input minimum dalam nanodetik agar pulsa dapat dihitung. 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 menghitung turun). Mengoper keduanya max dan min sebagai 0 menonaktifkan rentang.

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

match (hanya keyword) -- nilai penghitung 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(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

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

deinit() None

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

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

Dapatkan atau tetapkan penghitung posisi bertanda.

Tanpa argumen, kembalikan hitungan saat ini.

Dengan satu argumen value, atur penghitung posisi ke value secara atomik dan kembalikan hitungan sebelumnya. Idiom umum counter.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[[Counter], 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 Counter 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 -- terjadi transisi pada jalur index.

  • IRQ_MATCH -- penghitung posisi mencapai match. Match dinonaktifkan otomatis setelah dipicu 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

UP: int

Oper ke direction untuk menghitung tepi naik sebagai positif.

DOWN: int

Oper ke direction untuk menghitung tepi naik sebagai negatif.

IRQ_RESET: int

Flag trigger irq() untuk event pin reset.

IRQ_INDEX: int

Flag trigger irq() untuk event input 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).