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 doorinit()om een bestaande instantie opnieuw te configureren.phase_a/phase_bzijn de twee quadrature-invoerpinnen.phases(alleen als trefwoord) selecteert de decodeergranulariteit. De QENC ondersteunt1(één flank per pulspaar tellen),2(beide flanken van fase A) of4(“4x-decodering” – elke flank van beide fasen wordt geteld). Standaard1.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 voorbijmaxrolt, slaat hij om naarminen wordt de cyclusteller verhoogd (verlaagd bij beweging in de andere richting). Door beide op0te zetten wordt het bereik uitgeschakeld.index(alleen als trefwoord) – eenPinwaarvan de stijgende flank de positieteller terugzet opminen de cyclusteller bijwerkt op basis van de richting; typisch gebruik is een Z-kanaalmarkering op een draaibare encoder.reset(alleen als trefwoord) – eenPinwaarvan de stijgende flank de positieteller terugzet op de startwaarde (zonder de cyclusteller te wijzigen).match(alleen als trefwoord) – positiewaarde waarbij eenIRQ_MATCH-interrupt wordt geactiveerd. GeefNoneop om dit uit te schakelen.match_pin(alleen als trefwoord) – eenPindie hoog wordt aangestuurd zolang de positieteller gelijk is aanmatchen 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 opvalueen wordt de vorige telling geretourneerd. Het gangbare idioomenc.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/minis gerold.Zonder argument wordt de huidige cyclustelling geretourneerd.
Met een enkel
value-argument wordt de cyclusteller ingesteld opvalue(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 viairq.flags().triggeris een bitmasker van een of meerIRQ_*-constanten:IRQ_RESET– dereset-pin werd geactiveerd.IRQ_INDEX– deindex-pin werd geactiveerd.IRQ_MATCH– de positieteller heeftmatchbereikt. Match is eenmalig en moet opnieuw worden scherpgesteld door de IRQ opnieuw te installeren.IRQ_ROLL_OVER– de positieteller is omgeslagen vanmaxnaarmin.IRQ_ROLL_UNDER– de positieteller is omgeslagen vanminnaarmax.
hard=Trueregistreert een harde interrupt-handler (lagere latentie, maar de handler mag geen geheugen alloceren). De standaard is een geplande callback. Geefhandler=Noneop om de interrupt uit te schakelen.
Constanten¶