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 (idselecteert er een); dezelfde argumenten worden ook geaccepteerd doorinit()om een bestaande instantie opnieuw te configureren.src– de invoerpin waarvan de stijgende flanken worden geteld.direction(alleen als trefwoord) – ofwelUP/DOWNom een vaste richting in te stellen, ofwel eenPinwaarvan 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 voorbijmaxrolt, slaat hij om naarminen wordt de cyclusteller verhoogd (verlaagd bij aftellen). Door zowelmaxalsminop0te zetten wordt het bereik uitgeschakeld.reset(alleen als trefwoord) – eenPinwaarvan de stijgende flank de positieteller terugzet op de startwaarde (zonder de cyclusteller te wijzigen).match(alleen als trefwoord) – tellerwaarde 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(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 opvalueen wordt de vorige telling geretourneerd. Het gangbare idioomcounter.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[[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 viairq.flags().triggeris een bitmasker van een of meerIRQ_*-constanten:IRQ_RESET– dereset-pin werd geactiveerd.IRQ_INDEX– een overgang op deindex-lijn.IRQ_MATCH– de positieteller heeftmatchbereikt. Match wordt automatisch uitgeschakeld na activering 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¶