class Encoder – Quadraturdecoder¶
Die Klasse Encoder kapselt den i.MX RT QENC-Hardwareblock, der als Quadraturdecoder konfiguriert ist. Sie verfolgt ein Zweiphasensignal (phase_a / phase_b), das von einem Drehgeber kommt, erhöht oder verringert einen 32-Bit-Positionszähler entsprechend dem Phasenverhältnis und kann mit optionalen index / reset-Eingängen für eine absolute Referenzierung kombiniert werden.
Nur auf der OpenMV Cam RT1062 (mimxrt-Port) verfügbar. Verwenden Sie auf den STM32-basierten OpenMV Cams stattdessen pyb.Timer, der für den Encoder-Modus (Timer.ENC_AB) konfiguriert ist. Auf der OpenMV Cam AE3 (alif-Port) nicht verfügbar.
Anwendungsbeispiel:
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())
Konstruktoren¶
- 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)¶
Konstruiert (oder ruft das Singleton ab für) den QENC-Encoderblock, der durch
ididentifiziert wird. Dieselben Argumente werden auch voninit()akzeptiert, um eine bestehende Instanz neu zu konfigurieren.phase_a/phase_bsind die beiden Quadratur-Eingangs-Pins.phases(nur als Schlüsselwort) wählt die Decodierungsgranularität aus. Der QENC unterstützt1(zählt eine Flanke pro Impulspaar),2(beide Flanken von Phase A) oder4(„4x-Decodierung“ – jede Flanke beider Phasen wird gezählt). Standard1.filter_ns(nur als Schlüsselwort) – minimale Eingangs-Stabilitätszeit in Nanosekunden. Der Treiber verwendet den längsten Hardwarefilter, der kleiner oder gleich diesem Wert ist.0(der Standardwert) deaktiviert die Filterung.max/min(nur als Schlüsselwort) – Modulo-Bereich des Positionszählers. Wenn der Zähler übermaxhinausläuft, springt er aufminzurück und der Zyklenzähler wird erhöht (in der anderen Richtung verringert). Werden beide als0übergeben, wird der Bereich deaktiviert.index(nur als Schlüsselwort) – einPin, dessen steigende Flanke den Positionszähler aufminzurücksetzt und den Zyklenzähler entsprechend der Richtung aktualisiert; typischer Einsatz ist eine Z-Kanal-Marke an einem Drehgeber.reset(nur als Schlüsselwort) – einPin, dessen steigende Flanke den Positionszähler auf den Startwert zurücksetzt (ohne den Zyklenzähler zu verändern).match(nur als Schlüsselwort) – Positionswert, bei dem einIRQ_MATCH-Interrupt ausgelöst wird. Übergeben SieNone, um dies zu deaktivieren.match_pin(nur als Schlüsselwort) – einPin, der auf high getrieben wird, solange der Positionszähler gleichmatchist, und ansonsten auf low.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¶
Initialisiert den Encoder mit den angegebenen Parametern neu und setzt seinen Positions- und Zyklenzähler zurück. Akzeptiert dieselben Schlüsselwortargumente wie der Konstruktor.
- deinit() None¶
Stoppt den Encoder, deaktiviert alle ausstehenden Interrupts und gibt die QENC-Hardwareressourcen frei. Ein Soft-Reset deinitialisiert automatisch alle
Encoder-Instanzen.
- value() int¶
- value(value: int, /) int
Liest oder setzt den vorzeichenbehafteten Positionszähler.
Ohne Argument wird die aktuelle Position zurückgegeben.
Mit einem einzelnen Argument
valuewird der Positionszähler atomar aufvaluegesetzt und der vorherige Zählerstand zurückgegeben. Die übliche Redewendungenc.value(0)setzt den Zähler zu Beginn eines Messfensters zurück.
- cycles() int¶
- cycles(value: int, /) int
Liest oder setzt den Zyklenzähler, eine vorzeichenbehaftete 16-Bit-Ganzzahl, die nachverfolgt, wie oft der Positionszähler über
max/minhinausgelaufen ist.Ohne Argument wird der aktuelle Zyklenstand zurückgegeben.
Mit einem einzelnen Argument
valuewird der Zyklenzähler aufvaluegesetzt (ohne den Positionszähler zu verändern) und der vorherige Zählerstand zurückgegeben.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Registriert einen Callback, der aufgerufen wird, wenn eines der unterstützten QENC-Ereignisse ausgelöst wird. Der Handler erhält das
Encoder-Objekt als einziges Argument; das konkrete Ereignis kann innerhalb des Handlers überirq.flags()identifiziert werden.triggerist eine Bitmaske aus einer oder mehrerenIRQ_*-Konstanten:IRQ_RESET– derreset-Pin wurde aktiviert.IRQ_INDEX– derindex-Pin wurde aktiviert.IRQ_MATCH– der Positionszähler hatmatcherreicht. Match ist einmalig (One-Shot) und muss durch erneutes Installieren des IRQ wieder scharfgeschaltet werden.IRQ_ROLL_OVER– der Positionszähler ist vonmaxaufminübergesprungen.IRQ_ROLL_UNDER– der Positionszähler ist vonminaufmaxübergesprungen.
hard=Trueregistriert einen Hard-Interrupt-Handler (geringere Latenz, aber der Handler darf nicht allokieren). Der Standard ist ein geplanter Callback. Übergeben Siehandler=None, um den Interrupt zu deaktivieren.
Konstanten¶