klassen Encoder – kvadraturavkodare

Klassen Encoder kapslar in i.MX RT QENC-hårdvarublocket konfigurerat som en kvadraturavkodare. Den följer en tvåfassignal (phase_a / phase_b) från en roterande kodare, ökar eller minskar en 32-bitars positionsräknare enligt fasrelationen, och kan kombineras med valfria index / reset-ingångar för absolut referens.

Endast tillgänglig på OpenMV Cam RT1062 (mimxrt-porten). På de STM32-baserade OpenMV-kamerorna använder du i stället pyb.Timer konfigurerad för kodarläge (Timer.ENC_AB). Exponeras inte på OpenMV Cam AE3 (alif-porten).

Exempel på användning:

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

Konstruktorer

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)

Konstruera (eller hämta singletonen för) QENC-kodarblocket som identifieras av id. Samma argument accepteras även av init() för att omkonfigurera en befintlig instans.

phase_a / phase_b är de två kvadraturingångsstiften.

phases (endast nyckelord) väljer avkodningsupplösningen. QENC stöder 1 (räknar en flank per pulspar), 2 (båda flankerna på fas A) eller 4 (”4x-avkodning” – varje flank på båda faserna räknas). Standard 1.

filter_ns (endast nyckelord) – minsta tid i nanosekunder som insignalen måste vara stabil. Drivrutinen använder det längsta hårdvarufiltret som är mindre än eller lika med detta värde. 0 (standard) inaktiverar filtreringen.

max / min (endast nyckelord) – modulo-intervall för positionsräknaren. När räknaren rullar förbi max slår den runt till min och cykelräknaren ökar (minskar vid rörelse åt andra hållet). Om båda anges som 0 inaktiveras intervallet.

index (endast nyckelord) – ett Pin vars stigande flank laddar om positionsräknaren till min och uppdaterar cykelräknaren enligt riktningen; typisk användning är ett Z-kanalsmärke på en roterande kodare.

reset (endast nyckelord) – ett Pin vars stigande flank laddar om positionsräknaren till startvärdet (utan att ändra cykelräknaren).

match (endast nyckelord) – positionsvärdet vid vilket ett IRQ_MATCH-avbrott utlöses. Ange None för att inaktivera.

match_pin (endast nyckelord) – ett Pin som drivs högt medan positionsräknaren är lika med match och lågt annars.

Metoder

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

Initiera om kodaren med de angivna parametrarna och nollställ dess positions- och cykelräknare. Accepterar samma nyckelordsargument som konstruktorn.

deinit() None

Stoppa kodaren, inaktivera eventuella väntande avbrott och frigör QENC-hårdvaruresurserna. En mjuk återställning avinitierar automatiskt alla Encoder-instanser.

value() int
value(value: int, /) int

Hämta eller ange den teckenförsedda positionsräknaren.

Utan argument returneras den aktuella positionen.

Med ett enda value-argument ställs positionsräknaren atomärt till value och det föregående värdet returneras. Det vanliga uttrycket enc.value(0) nollställer räknaren i början av ett mätfönster.

cycles() int
cycles(value: int, /) int

Hämta eller ange cykelräknaren, ett teckenförsett 16-bitars heltal som håller reda på hur många gånger positionsräknaren har rullat förbi max / min.

Utan argument returneras det aktuella cykelvärdet.

Med ett enda value-argument ställs cykelräknaren till value (utan att röra positionsräknaren) och det föregående värdet returneras.

irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None

Registrera ett återanrop som anropas när någon av de QENC-händelser som stöds utlöses. Hanteraren får Encoder-objektet som sitt enda argument; den specifika händelsen kan identifieras inuti hanteraren via irq.flags().

trigger är en bitmask med en eller flera IRQ_*-konstanter:

  • IRQ_RESETreset-stiftet aktiverades.

  • IRQ_INDEXindex-stiftet aktiverades.

  • IRQ_MATCH – positionsräknaren nådde match. Match är engångsutlösande och måste återaktiveras genom att IRQ:n installeras om.

  • IRQ_ROLL_OVER – positionsräknaren slog runt från max till min.

  • IRQ_ROLL_UNDER – positionsräknaren slog runt från min till max.

hard=True registrerar en hård avbrottshanterare (lägre latens, men hanteraren får inte allokera minne). Standard är ett schemalagt återanrop. Ange handler=None för att inaktivera avbrottet.

Konstanter

IRQ_RESET: int

Utlösningsflagga för irq() vid reset-stiftshändelsen.

IRQ_INDEX: int

Utlösningsflagga för irq() vid index-stiftshändelsen.

IRQ_MATCH: int

Utlösningsflagga för irq() vid positionsmatchningshändelsen.

IRQ_ROLL_OVER: int

Utlösningsflagga för irq() vid att räknaren slår runt uppåt (max -> min).

IRQ_ROLL_UNDER: int

Utlösningsflagga för irq() vid att räknaren slår runt nedåt (min -> max).