třída Encoder – kvadraturní dekodér¶
Třída Encoder obaluje hardwarový blok i.MX RT QENC nakonfigurovaný jako kvadraturní dekodér. Sleduje dvoufázový signál (phase_a / phase_b) přicházející z rotačního enkodéru, inkrementuje nebo dekrementuje 32bitový čítač pozice podle fázového vztahu a lze jej kombinovat s volitelnými vstupy index / reset pro absolutní referencování.
Dostupné pouze na OpenMV Cam RT1062 (port mimxrt). Na kamerách OpenMV založených na STM32 použijte místo toho pyb.Timer nakonfigurovaný pro režim enkodéru (Timer.ENC_AB). Není k dispozici na OpenMV Cam AE3 (port alif).
Příklad použití:
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())
Konstruktory¶
- 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)¶
Vytvoří (nebo získá singleton pro) blok enkodéru QENC identifikovaný pomocí
id. Stejné argumenty přijímá takéinit()pro rekonfiguraci existující instance.phase_a/phase_bjsou dva kvadraturní vstupní piny.phases(pouze jako klíčové slovo) vybírá granularitu dekódování. QENC podporuje1(počítat jednu hranu na pár pulzů),2(obě hrany fáze A) nebo4(„4x dekódování“ – počítá se každá hrana obou fází). Výchozí1.filter_ns(pouze jako klíčové slovo) – minimální doba stability vstupu v nanosekundách. Ovladač použije nejdelší hardwarový filtr menší nebo roven této hodnotě.0(výchozí) filtrování vypne.max/min(pouze jako klíčové slovo) – modulo rozsah čítače pozice. Když čítač překročímax, přetočí se namina čítač cyklů se inkrementuje (při pohybu opačným směrem dekrementuje). Předání obou jako0rozsah vypne.index(pouze jako klíčové slovo) –Pin, jehož náběžná hrana znovu načte čítač pozice namina aktualizuje čítač cyklů podle směru; typickým použitím je značka Z-kanálu na rotačním enkodéru.reset(pouze jako klíčové slovo) –Pin, jehož náběžná hrana znovu načte čítač pozice na počáteční hodnotu (bez změny čítače cyklů).match(pouze jako klíčové slovo) – hodnota pozice, při níž se vyvolá přerušeníIRQ_MATCH. PředánímNonejej vypnete.match_pin(pouze jako klíčové slovo) –Pin, který je nastaven na vysokou úroveň, dokud se čítač pozice rovnámatch, jinak na nízkou.Metody¶
- 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¶
Znovu inicializuje enkodér se zadanými parametry a vynuluje jeho čítače pozice a cyklů. Přijímá stejné klíčové argumenty jako konstruktor.
- deinit() None¶
Zastaví enkodér, vypne všechna čekající přerušení a uvolní hardwarové prostředky QENC. Soft reset automaticky deinicializuje všechny instance
Encoder.
- value() int¶
- value(value: int, /) int
Získá nebo nastaví znaménkový čítač pozice.
Bez argumentu vrátí aktuální pozici.
S jediným argumentem
valueatomicky nastaví čítač pozice navaluea vrátí předchozí počet. Běžný idiomenc.value(0)vynuluje čítač na začátku měřicího okna.
- cycles() int¶
- cycles(value: int, /) int
Získá nebo nastaví čítač cyklů, znaménkové 16bitové celé číslo, které sleduje, kolikrát čítač pozice překročil
max/min.Bez argumentu vrátí aktuální počet cyklů.
S jediným argumentem
valuenastaví čítač cyklů navalue(bez ovlivnění čítače pozice) a vrátí předchozí počet.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Zaregistruje callback, který se vyvolá při výskytu jedné z podporovaných událostí QENC. Obsluha obdrží jako svůj jediný argument objekt
Encoder; konkrétní událost lze uvnitř obsluhy zjistit pomocíirq.flags().triggerje bitová maska jedné nebo více konstantIRQ_*:IRQ_RESET– pinresetbyl aktivován.IRQ_INDEX– pinindexbyl aktivován.IRQ_MATCH– čítač pozice dosáhlmatch. Match je jednorázový a musí být znovu aktivován opětovnou instalací IRQ.IRQ_ROLL_OVER– čítač pozice se přetočil zmaxnamin.IRQ_ROLL_UNDER– čítač pozice se přetočil zminnamax.
hard=Trueregistruje obsluhu tvrdého přerušení (nižší latence, ale obsluha nesmí alokovat). Výchozí je naplánovaný callback. Předánímhandler=Nonepřerušení vypnete.
Konstanty¶