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 (az id választja ki az egyiket); ugyanezeket az argumentumokat a init() 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) – vagy UP / DOWN rögzített irány beállításához, vagy egy Pin, 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. A 0 (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 a max értéket, a min értékre fordul át, és a ciklusszámláló növekszik (lefelé számolásnál csökken). Ha mind a max, mind a min értéke 0, a tartomány kikapcsol.

reset (csak kulcsszóként) – egy Pin, 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 egy IRQ_MATCH megszakítás kiváltódik. A None átadásával kikapcsolható.

match_pin (csak kulcsszóként) – egy Pin, amelyet magas szintre hajt, amíg a pozíciószámláló egyenlő a match é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 Counter pé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 value argumentummal atomikusan a value értékre állítja a pozíciószámlálót, és visszaadja az előző számértéket. A gyakori counter.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 value argumentummal a ciklusszámlálót a value é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 Counter objektumot kapja meg; a konkrét esemény a kezelőn belül az irq.flags() segítségével azonosítható.

A trigger egy vagy több IRQ_* konstans bitmaszkja:

  • IRQ_RESET – a reset láb aktiválódott.

  • IRQ_INDEX – átmenet az index vonalon.

  • IRQ_MATCH – a pozíciószámláló elérte a match é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ó a max értékről a min értékre fordult át.

  • IRQ_ROLL_UNDER – a pozíciószámláló a min értékről a max értékre fordult át.

A hard=True kemé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. A handler=None átadásával a megszakítás letiltható.

Konstansok

UP: int

A direction paraméternek átadva a felfutó éleket pozitívként számolja.

DOWN: int

A direction paraméternek átadva a felfutó éleket negatívként számolja.

IRQ_RESET: int

irq() kiváltási jelző a reset láb eseményéhez.

IRQ_INDEX: int

irq() kiváltási jelző az index-bemenet eseményéhez.

IRQ_MATCH: int

irq() kiváltási jelző a pozícióegyezés eseményéhez.

IRQ_ROLL_OVER: int

irq() kiváltási jelző a számláló átfordulásához (max -> min).

IRQ_ROLL_UNDER: int

irq() kiváltási jelző a számláló alulfordulásához (min -> max).