Counter osztály – impulzusszámláló¶
A Counter osztály az egyetlen bemenetű impulzusszámlálóként konfigurált i.MX RT QENC (kvadratúra-kódoló / számláló) hardveres blokkot fogja át. A forrásláb minden felfutó éle növeli (vagy csökkenti) a hardveres pozíciószámlálót; a ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH eseményekhez szoftveres visszahívások csatolhatók.
Csak az OpenMV Cam RT1062 (mimxrt port) esetén érhető el. Az STM32-alapú OpenMV kamerákon helyette használja a bemeneti rögzítésre konfigurált pyb.Timer osztályt. Az OpenMV Cam AE3 (alif port) esetén nem érhető el.
Példa használat:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Konstruktorok¶
- 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)¶
Az
idáltal azonosított QENC számlálóblokk létrehozása (vagy a hozzá tartozó singleton lekérése). Az RT1062 több QENC blokkot tartalmaz (azidválasztja ki az egyiket); ugyanezeket az argumentumokat ainit()is elfogadja egy meglévő példány újrakonfigurálásához.src– az a bemeneti láb, amelynek felfutó éleit számoljuk.direction(csak kulcsszóként) – vagyUP/DOWNrögzített irány beállításához, vagy egyPin, amelynek logikai szintje futásidőben választja meg az irányt (alacsony = felfelé számlál, magas = lefelé számlál).filter_ns(csak kulcsszóként) – a minimális bemeneti stabil idő nanoszekundumban ahhoz, hogy egy impulzus beszámításra kerüljön. A meghajtó a leghosszabb olyan hardveres szűrőt használja, amely kisebb vagy egyenlő ennél az értéknél. A0(az alapértelmezett) kikapcsolja a szűrést.max/min(csak kulcsszóként) – a pozíciószámláló moduló tartománya. Amikor a számláló átlépi amaxértéket, aminértékre fordul át, és a ciklusszámláló növekszik (lefelé számolásnál csökken). Ha mind amax, mind aminértéke0, a tartomány kikapcsol.reset(csak kulcsszóként) – egyPin, amelynek felfutó éle a kezdőértékre tölti vissza a pozíciószámlálót (a ciklusszámláló módosítása nélkül).match(csak kulcsszóként) – az a számlálóérték, amelynél egyIRQ_MATCHmegszakítás kiváltódik. ANoneátadásával kikapcsolható.match_pin(csak kulcsszóként) – egyPin, amelyet magas szintre hajt, amíg a pozíciószámláló egyenlő amatchértékkel, egyébként alacsony szintre.Metódusok¶
- 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¶
A számláló újrainicializálása a megadott paraméterekkel, valamint a pozíció- és ciklusszámlálók visszaállítása. Ugyanazokat a kulcsszavas argumentumokat fogadja el, mint a konstruktor.
- deinit() None¶
A számláló leállítása, a függőben lévő megszakítások letiltása és a QENC hardveres erőforrások felszabadítása. A szoftveres újraindítás automatikusan deinicializálja az összes
Counterpéldányt.
- value() int¶
- value(value: int, /) int
Az előjeles pozíciószámláló lekérése vagy beállítása.
Argumentum nélkül az aktuális számértéket adja vissza.
Egyetlen
valueargumentummal atomikusan avalueértékre állítja a pozíciószámlálót, és visszaadja az előző számértéket. A gyakoricounter.value(0)kifejezés egy mérési ablak elején nullázza a számlálót.
- cycles() int¶
- cycles(value: int, /) int
A ciklusszámláló lekérése vagy beállítása; ez egy előjeles 16 bites egész szám, amely azt követi nyomon, hányszor lépte át a pozíciószámláló a
max/minértéket.Argumentum nélkül az aktuális ciklusszámot adja vissza.
Egyetlen
valueargumentummal a ciklusszámlálót avalueértékre állítja (a pozíciószámláló érintése nélkül), és visszaadja az előző számértéket.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Visszahívás regisztrálása, amely akkor hívódik meg, amikor a támogatott QENC események egyike kiváltódik. A kezelő egyetlen argumentumként a
Counterobjektumot kapja meg; a konkrét esemény a kezelőn belül azirq.flags()segítségével azonosítható.A
triggeregy vagy többIRQ_*konstans bitmaszkja:IRQ_RESET– aresetláb aktiválódott.IRQ_INDEX– átmenet azindexvonalon.IRQ_MATCH– a pozíciószámláló elérte amatchértéket. A match kiváltás után automatikusan letiltódik, és az IRQ újratelepítésével kell újra élesíteni.IRQ_ROLL_OVER– a pozíciószámláló amaxértékről aminértékre fordult át.IRQ_ROLL_UNDER– a pozíciószámláló aminértékről amaxértékre fordult át.
A
hard=Truekemény megszakításkezelőt regisztrál (alacsonyabb késleltetés, de a kezelő nem foglalhat memóriát). Az alapértelmezett egy ütemezett visszahívás. Ahandler=Noneátadásával a megszakítás letiltható.
Konstansok¶