Encoder osztály – kvadratúra-dekóder

Az Encoder osztály a kvadratúra-dekóderként konfigurált i.MX RT QENC hardveres blokkot fogja át. Egy forgó kódolóból érkező kétfázisú jelet (phase_a / phase_b) követ nyomon, a fáziskapcsolatnak megfelelően növeli vagy csökkenti egy 32 bites pozíciószámlálót, és kombinálható az opcionális index / reset bemenetekkel az abszolút referenciaképzéshez.

Csak az OpenMV Cam RT1062 (mimxrt port) esetén érhető el. Az STM32-alapú OpenMV kamerákon helyette használja a kódoló módra konfigurált pyb.Timer osztályt (Timer.ENC_AB). Az OpenMV Cam AE3 (alif port) esetén nem érhető el.

Példa használat:

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())

Konstruktorok

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)

Az id által azonosított QENC kódolóblokk létrehozása (vagy a hozzá tartozó singleton lekérése). Ugyanezeket az argumentumokat a init() is elfogadja egy meglévő példány újrakonfigurálásához.

A phase_a / phase_b a két kvadratúra-bemeneti láb.

A phases (csak kulcsszóként) a dekódolás finomságát választja meg. A QENC az 1 (impulzuspáronként egy él számolása), a 2 (az A fázis mindkét éle) és a 4 („4x dekódolás” – mindkét fázis minden éle számolásra kerül) értékeket támogatja. Alapértelmezett: 1.

filter_ns (csak kulcsszóként) – a minimális bemeneti stabil idő nanoszekundumban. 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 (ellenkező irányba mozgásnál csökken). Ha mindkettő értéke 0, a tartomány kikapcsol.

index (csak kulcsszóként) – egy Pin, amelynek felfutó éle a min értékre tölti vissza a pozíciószámlálót, és az iránynak megfelelően frissíti a ciklusszámlálót; tipikus felhasználása egy forgó kódoló Z-csatornás jelzése.

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 pozícióé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(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

A kódoló ú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 kódoló 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 Encoder 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 pozíciót 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 enc.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[[Encoder], 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 az Encoder 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 – az index láb aktiválódott.

  • IRQ_MATCH – a pozíciószámláló elérte a match értéket. A match egyszeri kiváltású, é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

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 láb 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).