class Counter – pulsteller

De Counter-klasse omhult het i.MX RT QENC-hardwareblok (quadrature encoder / counter) dat is geconfigureerd als pulsteller met een enkele ingang. Elke stijgende flank op de bronpin verhoogt (of verlaagt) een hardwarepositieteller; softwarecallbacks kunnen worden gekoppeld aan ROLL_OVER- / ROLL_UNDER- / RESET- / INDEX- / MATCH-gebeurtenissen.

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

Voorbeeldgebruik:

from machine import Pin, Counter

counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())

Constructors

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)

Construeert (of haalt de singleton op voor) het QENC-tellerblok dat wordt aangeduid met id. De RT1062 heeft meerdere QENC-blokken (id selecteert er een); dezelfde argumenten worden ook geaccepteerd door init() om een bestaande instantie opnieuw te configureren.

src – de invoerpin waarvan de stijgende flanken worden geteld.

direction (alleen als trefwoord) – ofwel UP / DOWN om een vaste richting in te stellen, ofwel een Pin waarvan het logische niveau de richting tijdens runtime selecteert (laag = optellen, hoog = aftellen).

filter_ns (alleen als trefwoord) – minimale invoerstabiele tijd in nanoseconden voordat een puls wordt geteld. 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 aftellen). Door zowel max als min op 0 te zetten wordt het bereik uitgeschakeld.

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

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

deinit() None

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

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

Haalt de signed positieteller op of stelt deze in.

Zonder argument wordt de huidige telling geretourneerd.

Met een enkel value-argument wordt de positieteller atomair ingesteld op value en wordt de vorige telling geretourneerd. Het gangbare idioom counter.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[[Counter], 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 Counter-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 – een overgang op de index-lijn.

  • IRQ_MATCH – de positieteller heeft match bereikt. Match wordt automatisch uitgeschakeld na activering 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

UP: int

Geef dit op aan direction om stijgende flanken positief te tellen.

DOWN: int

Geef dit op aan direction om stijgende flanken negatief te tellen.

IRQ_RESET: int

irq()-triggervlag voor de reset-pingebeurtenis.

IRQ_INDEX: int

irq()-triggervlag voor de index-invoergebeurtenis.

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