class Encoder – quadrature-decoder#

De Encoder-klasse omhult het i.MX RT QENC-hardwareblok dat is geconfigureerd als quadrature-decoder. Het volgt een tweefasig signaal (phase_a / phase_b) afkomstig van een draaibare encoder, verhoogt of verlaagt een 32-bits positieteller op basis van de faserelatie, en kan worden gecombineerd met optionele index / reset-ingangen voor absolute referentie.

Alleen beschikbaar op de OpenMV Cam RT1062 (mimxrt-port). Gebruik op de STM32-gebaseerde OpenMV-cams in plaats daarvan pyb.Timer geconfigureerd voor encodermodus (Timer.ENC_AB). Niet beschikbaar op de OpenMV Cam AE3 (alif-port).

Voorbeeldgebruik:

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

Constructors#

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

Construeert (of haalt de singleton op voor) het QENC-encoderblok dat wordt aangeduid met id. Dezelfde argumenten worden ook geaccepteerd door init() om een bestaande instantie opnieuw te configureren.

phase_a / phase_b zijn de twee quadrature-invoerpinnen.

phases (alleen als trefwoord) selecteert de decodeergranulariteit. De QENC ondersteunt 1 (één flank per pulspaar tellen), 2 (beide flanken van fase A) of 4 (“4x-decodering” – elke flank van beide fasen wordt geteld). Standaard 1.

filter_ns (alleen als trefwoord) – minimale invoerstabiele tijd in nanoseconden. De driver gebruikt het langste hardwarefilter dat kleiner is dan of gelijk is aan deze waarde. 0 (de standaardwaarde) schakelt filtering uit.

max / min (alleen als trefwoord) – modulobereik van de positieteller. Wanneer de teller voorbij max rolt, slaat hij om naar min en wordt de cyclusteller verhoogd (verlaagd bij beweging in de andere richting). Door beide op 0 te zetten wordt het bereik uitgeschakeld.

index (alleen als trefwoord) – een Pin waarvan de stijgende flank de positieteller terugzet op min en de cyclusteller bijwerkt op basis van de richting; typisch gebruik is een Z-kanaalmarkering op een draaibare encoder.

reset (alleen als trefwoord) – een Pin waarvan de stijgende flank de positieteller terugzet op de startwaarde (zonder de cyclusteller te wijzigen).

match (alleen als trefwoord) – positiewaarde waarbij een IRQ_MATCH-interrupt wordt geactiveerd. Geef None op om dit uit te schakelen.

match_pin (alleen als trefwoord) – een Pin die hoog wordt aangestuurd zolang de positieteller gelijk is aan match en anders laag.

Methoden#

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#

Herinitialiseert de encoder met de opgegeven parameters en zet de positie- en cyclustellers terug. Accepteert dezelfde trefwoordargumenten als de constructor.

deinit() None#

Stopt de encoder, schakelt eventuele in behandeling zijnde interrupts uit en geeft de QENC-hardwarebronnen vrij. Een soft reset deinitialiseert automatisch alle Encoder-instanties.

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

Haalt de signed positieteller op of stelt deze in.

Zonder argument wordt de huidige positie geretourneerd.

Met een enkel value-argument wordt de positieteller atomair ingesteld op value en wordt de vorige telling geretourneerd. Het gangbare idioom enc.value(0) zet de teller terug aan het begin van een meetvenster.

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

Haalt de cyclusteller op of stelt deze in, een signed 16-bits geheel getal dat bijhoudt hoe vaak de positieteller voorbij max / min is gerold.

Zonder argument wordt de huidige cyclustelling geretourneerd.

Met een enkel value-argument wordt de cyclusteller ingesteld op value (zonder de positieteller aan te raken) en wordt de vorige telling geretourneerd.

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

Registreert een callback die wordt aangeroepen wanneer een van de ondersteunde QENC-gebeurtenissen optreedt. De handler ontvangt het Encoder-object als enige argument; de specifieke gebeurtenis kan binnen de handler worden geïdentificeerd via irq.flags().

trigger is een bitmasker van een of meer IRQ_*-constanten:

  • IRQ_RESET – de reset-pin werd geactiveerd.

  • IRQ_INDEX – de index-pin werd geactiveerd.

  • IRQ_MATCH – de positieteller heeft match bereikt. Match is eenmalig en moet opnieuw worden scherpgesteld door de IRQ opnieuw te installeren.

  • IRQ_ROLL_OVER – de positieteller is omgeslagen van max naar min.

  • IRQ_ROLL_UNDER – de positieteller is omgeslagen van min naar max.

hard=True registreert een harde interrupt-handler (lagere latentie, maar de handler mag geen geheugen alloceren). De standaard is een geplande callback. Geef handler=None op om de interrupt uit te schakelen.

Constanten#

IRQ_RESET: int#

irq()-triggervlag voor de reset-pingebeurtenis.

IRQ_INDEX: int#

irq()-triggervlag voor de index-pingebeurtenis.

IRQ_MATCH: int#

irq()-triggervlag voor de positie-matchgebeurtenis.

IRQ_ROLL_OVER: int#

irq()-triggervlag voor een roll-over van de teller (max -> min).

IRQ_ROLL_UNDER: int#

irq()-triggervlag voor een roll-under van de teller (min -> max).