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