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 (idmemilih salah satunya); argumen yang sama juga diterima olehinit()untuk mengkonfigurasi ulang instance yang sudah ada.src-- pin input yang tepi naiknya dihitung.direction(hanya keyword) -- baikUP/DOWNuntuk menetapkan arah tetap, atau sebuahPinyang 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 melewatimax, ia kembali kemindan penghitung siklus bertambah (berkurang saat menghitung turun). Mengoper keduanyamaxdanminsebagai0menonaktifkan rentang.reset(hanya keyword) -- sebuahPinyang tepi naiknya memuat ulang penghitung posisi ke nilai awal (tanpa mengubah penghitung siklus).match(hanya keyword) -- nilai penghitung di mana interupsiIRQ_MATCHdipicu. OperNoneuntuk menonaktifkan.match_pin(hanya keyword) -- sebuahPinyang didorong tinggi selama penghitung posisi sama denganmatchdan 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
Countersecara 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 kevaluesecara atomik dan kembalikan hitungan sebelumnya. Idiom umumcounter.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[[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
Countersebagai satu-satunya argumen; event spesifik dapat diidentifikasi di dalam handler melaluiirq.flags().triggeradalah bitmask dari satu atau lebih konstantaIRQ_*:IRQ_RESET-- pinresetdiaktifkan.IRQ_INDEX-- terjadi transisi pada jalurindex.IRQ_MATCH-- penghitung posisi mencapaimatch. Match dinonaktifkan otomatis setelah dipicu 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¶