class Counter – Impulszähler¶
Die Klasse Counter kapselt den i.MX RT QENC-Hardwareblock (Quadraturencoder/Zähler), der als Impulszähler mit einem einzigen Eingang konfiguriert ist. Jede steigende Flanke am Quell-Pin erhöht (oder verringert) einen Hardware-Positionszähler; Software-Callbacks können an die Ereignisse ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH angehängt 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 Input-Capture konfiguriert ist. Auf der OpenMV Cam AE3 (alif-Port) nicht verfügbar.
Anwendungsbeispiel:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Konstruktoren¶
- class machine.Counter(id: int, src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
Konstruiert (oder ruft das Singleton ab für) den QENC-Zählerblock, der durch
ididentifiziert wird. Der RT1062 verfügt über mehrere QENC-Blöcke (idwählt einen aus); dieselben Argumente werden auch voninit()akzeptiert, um eine bestehende Instanz neu zu konfigurieren.src– der Eingangs-Pin, dessen steigende Flanken gezählt werden.direction(nur als Schlüsselwort) – entwederUP/DOWN, um eine feste Richtung festzulegen, oder einPin, dessen Logikpegel die Richtung zur Laufzeit auswählt (low = aufwärts zählen, high = abwärts zählen).filter_ns(nur als Schlüsselwort) – minimale Eingangs-Stabilitätszeit in Nanosekunden, damit ein Impuls gezählt wird. 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 (beim Abwärtszählen verringert). Werden sowohlmaxals auchminals0übergeben, wird der Bereich deaktiviert.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) – Zählerwert, 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(src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
Initialisiert den Zähler 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 Zähler, deaktiviert alle ausstehenden Interrupts und gibt die QENC-Hardwareressourcen frei. Ein Soft-Reset deinitialisiert automatisch alle
Counter-Instanzen.
- value() int¶
- value(value: int, /) int
Liest oder setzt den vorzeichenbehafteten Positionszähler.
Ohne Argument wird der aktuelle Zählerstand zurückgegeben.
Mit einem einzelnen Argument
valuewird der Positionszähler atomar aufvaluegesetzt und der vorherige Zählerstand zurückgegeben. Die übliche Redewendungcounter.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[[Counter], 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
Counter-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– ein Übergang auf derindex-Leitung.IRQ_MATCH– der Positionszähler hatmatcherreicht. Match wird nach dem Auslösen automatisch deaktiviert 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¶