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 ainit()is elfogadja egy meglévő példány újrakonfigurálásához.A
phase_a/phase_ba 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 az1(impulzuspáronként egy él számolása), a2(az A fázis mindkét éle) és a4(„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. 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 (ellenkező irányba mozgásnál csökken). Ha mindkettő értéke0, a tartomány kikapcsol.index(csak kulcsszóként) – egyPin, amelynek felfutó éle aminé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) – 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 pozícióé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(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
Encoderpé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
valueargumentummal atomikusan avalueértékre állítja a pozíciószámlálót, és visszaadja az előző számértéket. A gyakorienc.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[[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
Encoderobjektumot 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– azindexláb aktiválódott.IRQ_MATCH– a pozíciószámláló elérte amatché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ó 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¶