class Encoder – decodificatore in quadratura¶
La classe Encoder incapsula il blocco hardware QENC dell’i.MX RT configurato come decodificatore in quadratura. Tiene traccia di un segnale a due fasi (phase_a / phase_b) proveniente da un encoder rotativo, incrementa o decrementa un contatore di posizione a 32 bit in base alla relazione di fase e puo” essere combinato con ingressi opzionali index / reset per il riferimento assoluto.
Disponibile solo sulla OpenMV Cam RT1062 (porta mimxrt). Sulle OpenMV cam basate su STM32, usare pyb.Timer configurato in modalita” encoder (Timer.ENC_AB). Non esposto sulla OpenMV Cam AE3 (porta alif).
Esempio di utilizzo:
from machine import Pin, Encoder
enc = Encoder(0, Pin("P0", Pin.IN), Pin("P1", Pin.IN), phases=4)
enc.value(0)
# ... rotate the encoder ...
print("position:", enc.value())
Costruttori¶
- class machine.Encoder(id: int, phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
Costruisce (o recupera il singleton per) il blocco encoder QENC identificato da
id. Gli stessi argomenti sono accettati anche dainit()per riconfigurare un’istanza esistente.phase_a/phase_bsono i due pin di ingresso in quadratura.phases(solo keyword) seleziona la granularita” di decodifica. Il QENC supporta1(conta un fronte per coppia di impulsi),2(entrambi i fronti della fase A) o4(«decodifica 4x» – viene contato ogni fronte di entrambe le fasi). Predefinito1.filter_ns(solo keyword) – tempo minimo di stabilita” dell’ingresso in nanosecondi. 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 ci si muove nella direzione opposta). Passare entrambi a0disabilita l’intervallo.index(solo keyword) – unPinil cui fronte di salita ricarica il contatore di posizione amine aggiorna il contatore di cicli in base alla direzione; l’uso tipico e” un marcatore del canale Z su un encoder rotativo.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 di posizione 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(phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
Re-inizializza l’encoder con i parametri indicati e azzera i suoi contatori di posizione e di cicli. Accetta gli stessi argomenti keyword del costruttore.
- deinit() None¶
Ferma l’encoder, disabilita eventuali interrupt in sospeso e rilascia le risorse hardware QENC. Un soft reset deinizializza automaticamente tutte le istanze di
Encoder.
- value() int¶
- value(value: int, /) int
Legge o imposta il contatore di posizione con segno.
Senza argomenti, restituisce la posizione corrente.
Con un singolo argomento
value, imposta atomicamente il contatore di posizione avaluee restituisce il conteggio precedente. L’idioma comuneenc.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[[Encoder], 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
Encodercome 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– il pinindexe” stato asserito.IRQ_MATCH– il contatore di posizione ha raggiuntomatch. Il match e” a colpo singolo 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¶