class Counter – contatore di impulsi¶
La classe Counter incapsula il blocco hardware QENC (quadrature encoder / counter) dell’i.MX RT configurato come contatore di impulsi a ingresso singolo. Ogni fronte di salita sul pin sorgente incrementa (o decrementa) un contatore di posizione hardware; e” possibile associare callback software agli eventi ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.
Disponibile solo sulla OpenMV Cam RT1062 (porta mimxrt). Sulle OpenMV cam basate su STM32, usare pyb.Timer configurato per la cattura in ingresso (input-capture). Non esposto sulla OpenMV Cam AE3 (porta alif).
Esempio di utilizzo:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Costruttori¶
- 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)¶
Costruisce (o recupera il singleton per) il blocco contatore QENC identificato da
id. L’RT1062 dispone di piu” blocchi QENC (idne seleziona uno); gli stessi argomenti sono accettati anche dainit()per riconfigurare un’istanza esistente.src– il pin di ingresso i cui fronti di salita vengono contati.direction(solo keyword) – puo” essereUP/DOWNper impostare una direzione fissa, oppure unPinil cui livello logico seleziona la direzione a runtime (basso = conta in avanti, alto = conta all’indietro).filter_ns(solo keyword) – tempo minimo di stabilita” dell’ingresso in nanosecondi affinche” un impulso venga contato. Il driver usa il filtro hardware piu” lungo che sia minore o uguale a questo valore.0(il valore predefinito) disabilita il filtraggio.max/min(solo keyword) – intervallo modulo del contatore di posizione. Quando il contatore superamaxtorna amine il contatore di cicli viene incrementato (decrementato quando si conta all’indietro). Passare siamaxchemina0disabilita l’intervallo.reset(solo keyword) – unPinil cui fronte di salita ricarica il contatore di posizione al valore iniziale (senza modificare il contatore di cicli).match(solo keyword) – valore del contatore in corrispondenza del quale scatta un interruptIRQ_MATCH. PassareNoneper disabilitare.match_pin(solo keyword) – unPinportato a livello alto mentre il contatore di posizione e” uguale amatche basso altrimenti.Metodi¶
- 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¶
Re-inizializza il contatore con i parametri indicati e azzera i suoi contatori di posizione e di cicli. Accetta gli stessi argomenti keyword del costruttore.
- deinit() None¶
Ferma il contatore, disabilita eventuali interrupt in sospeso e rilascia le risorse hardware QENC. Un soft reset deinizializza automaticamente tutte le istanze di
Counter.
- value() int¶
- value(value: int, /) int
Legge o imposta il contatore di posizione con segno.
Senza argomenti, restituisce il conteggio corrente.
Con un singolo argomento
value, imposta atomicamente il contatore di posizione avaluee restituisce il conteggio precedente. L’idioma comunecounter.value(0)azzera il contatore all’inizio di una finestra di misura.
- cycles() int¶
- cycles(value: int, /) int
Legge o imposta il contatore di cicli, un intero con segno a 16 bit che tiene traccia di quante volte il contatore di posizione ha superato
max/min.Senza argomenti, restituisce il conteggio di cicli corrente.
Con un singolo argomento
value, imposta il contatore di cicli avalue(senza toccare il contatore di posizione) e restituisce il conteggio precedente.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Registra un callback da invocare quando si verifica uno degli eventi QENC supportati. L’handler riceve l’oggetto
Countercome unico argomento; l’evento specifico puo” essere identificato all’interno dell’handler tramiteirq.flags().triggere” una maschera di bit di una o piu” costantiIRQ_*:IRQ_RESET– il pinresete” stato asserito.IRQ_INDEX– una transizione sulla lineaindex.IRQ_MATCH– il contatore di posizione ha raggiuntomatch. Il match viene disabilitato automaticamente dopo lo scatto e deve essere riarmato reinstallando l’IRQ.IRQ_ROLL_OVER– il contatore di posizione e” passato damaxamin.IRQ_ROLL_UNDER– il contatore di posizione e” passato daminamax.
hard=Trueregistra un gestore di interrupt hardware (latenza inferiore, ma il gestore non deve allocare memoria). Il valore predefinito e” un callback schedulato. Passarehandler=Noneper disabilitare l’interrupt.
Costanti¶