clase Encoder – decodificador de cuadratura¶
La clase Encoder envuelve el bloque de hardware QENC del i.MX RT configurado como decodificador de cuadratura. Rastrea una señal de dos fases (phase_a / phase_b) procedente de un codificador rotatorio, incrementa o decrementa un contador de posición de 32 bits según la relación de fase, y se puede combinar con entradas opcionales index / reset para el referenciado absoluto.
Disponible únicamente en la OpenMV Cam RT1062 (puerto mimxrt). En las OpenMV cams basadas en STM32, utilice pyb.Timer configurado para el modo codificador (Timer.ENC_AB) en su lugar. No está expuesto en la OpenMV Cam AE3 (puerto alif).
Ejemplo de uso:
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())
Constructores¶
- 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)¶
Construye (u obtiene el singleton para) el bloque codificador QENC identificado por
id. Los mismos argumentos también son aceptados porinit()para reconfigurar una instancia existente.phase_a/phase_bson los dos pines de entrada de cuadratura.phases(solo por palabra clave) selecciona la granularidad de la decodificación. El QENC admite1(cuenta un flanco por par de pulsos),2(ambos flancos de la fase A) o4(«decodificación 4x» – se cuenta cada flanco de ambas fases). El valor predeterminado es1.filter_ns(solo por palabra clave) – tiempo mínimo de estabilidad de la entrada en nanosegundos. El controlador utiliza el filtro de hardware más largo que sea menor o igual a este valor.0(el valor predeterminado) deshabilita el filtrado.max/min(solo por palabra clave) – rango de módulo del contador de posición. Cuando el contador superamaxda la vuelta aminy el contador de ciclos se incrementa (se decrementa al moverse en el otro sentido). Pasar ambos como0deshabilita el rango.index(solo por palabra clave) – unPincuyo flanco de subida recarga el contador de posición aminy actualiza el contador de ciclos según la dirección; su uso típico es una marca de canal Z en un codificador rotatorio.reset(solo por palabra clave) – unPincuyo flanco de subida recarga el contador de posición al valor inicial (sin cambiar el contador de ciclos).match(solo por palabra clave) – valor de posición en el que se dispara una interrupciónIRQ_MATCH. PaseNonepara deshabilitarla.match_pin(solo por palabra clave) – unPinque se pone en alto mientras el contador de posición es igual amatchy en bajo en caso contrario.Métodos¶
- 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¶
Reinicializa el codificador con los parámetros dados y restablece sus contadores de posición y de ciclos. Acepta los mismos argumentos por palabra clave que el constructor.
- deinit() None¶
Detiene el codificador, deshabilita cualquier interrupción pendiente y libera los recursos de hardware QENC. Un reinicio por software desinicializa automáticamente todas las instancias de
Encoder.
- value() int¶
- value(value: int, /) int
Obtiene o establece el contador de posición con signo.
Sin argumento, devuelve la posición actual.
Con un único argumento
value, establece de forma atómica el contador de posición avaluey devuelve el conteo anterior. El uso habitualenc.value(0)restablece el contador al inicio de una ventana de medición.
- cycles() int¶
- cycles(value: int, /) int
Obtiene o establece el contador de ciclos, un entero con signo de 16 bits que registra cuántas veces el contador de posición ha superado
max/min.Sin argumento, devuelve el conteo de ciclos actual.
Con un único argumento
value, establece el contador de ciclos avalue(sin tocar el contador de posición) y devuelve el conteo anterior.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Registra una función de retorno (callback) que se invocará cuando se dispare uno de los eventos QENC admitidos. El manejador recibe el objeto
Encodercomo su único argumento; el evento específico se puede identificar dentro del manejador medianteirq.flags().triggeres una máscara de bits de una o más constantesIRQ_*:IRQ_RESET– el pinresetse activó.IRQ_INDEX– el pinindexse activó.IRQ_MATCH– el contador de posición alcanzómatch. La coincidencia es de un solo disparo y debe rearmarse reinstalando la IRQ.IRQ_ROLL_OVER– el contador de posición dio la vuelta demaxamin.IRQ_ROLL_UNDER– el contador de posición dio la vuelta deminamax.
hard=Trueregistra un manejador de interrupción duro (menor latencia, pero el manejador no debe asignar memoria). El valor predeterminado es una función de retorno (callback) programada. Pasehandler=Nonepara deshabilitar la interrupción.
Constantes¶