clase Counter – contador de pulsos¶
La clase Counter envuelve el bloque de hardware QENC (codificador de cuadratura / contador) del i.MX RT configurado como un contador de pulsos de una sola entrada. Cada flanco de subida en el pin de origen incrementa (o decrementa) un contador de posición por hardware; se pueden adjuntar funciones de retorno (callbacks) de software a los eventos ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.
Disponible únicamente en la OpenMV Cam RT1062 (puerto mimxrt). En las OpenMV cams basadas en STM32, utilice pyb.Timer configurado para captura de entrada en su lugar. No está expuesto en la OpenMV Cam AE3 (puerto alif).
Ejemplo de uso:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Constructores¶
- 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)¶
Construye (u obtiene el singleton para) el bloque contador QENC identificado por
id. La RT1062 tiene varios bloques QENC (idselecciona uno); los mismos argumentos también son aceptados porinit()para reconfigurar una instancia existente.src– el pin de entrada cuyos flancos de subida se cuentan.direction(solo por palabra clave) – ya seaUP/DOWNpara establecer una dirección fija, o unPincuyo nivel lógico selecciona la dirección en tiempo de ejecución (bajo = contar hacia arriba, alto = contar hacia abajo).filter_ns(solo por palabra clave) – tiempo mínimo de estabilidad de la entrada en nanosegundos para que un pulso se cuente. 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 contar hacia abajo). Pasar tantomaxcomomincomo0deshabilita el rango.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 del contador 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(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¶
Reinicializa el contador 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 contador, deshabilita cualquier interrupción pendiente y libera los recursos de hardware QENC. Un reinicio por software desinicializa automáticamente todas las instancias de
Counter.
- value() int¶
- value(value: int, /) int
Obtiene o establece el contador de posición con signo.
Sin argumento, devuelve el conteo actual.
Con un único argumento
value, establece de forma atómica el contador de posición avaluey devuelve el conteo anterior. El uso habitualcounter.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[[Counter], 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
Countercomo 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– una transición en la líneaindex.IRQ_MATCH– el contador de posición alcanzómatch. La coincidencia se deshabilita automáticamente tras dispararse 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¶