classe Counter – contador de impulsos¶
A classe Counter encapsula o bloco de hardware i.MX RT QENC (codificador em quadratura / contador) configurado como contador de impulsos de entrada única. Cada flanco ascendente no pino de origem incrementa (ou decrementa) um contador de posição por hardware; é possível associar callbacks de software a eventos ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.
Disponível apenas na OpenMV Cam RT1062 (porta mimxrt). Nas câmaras OpenMV baseadas em STM32, utilize pyb.Timer configurado para captura de entrada. Não está disponível na OpenMV Cam AE3 (porta alif).
Exemplo de utilização:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Construtores¶
- 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)¶
Constrói (ou obtém o singleton de) o bloco de contador QENC identificado por
id. O RT1062 possui múltiplos blocos QENC (idseleciona um); os mesmos argumentos são também aceites porinit()para reconfigurar uma instância existente.src– o pino de entrada cujos flancos ascendentes são contados.direction(apenas por palavra-chave) –UP/DOWNpara definir uma direção fixa, ou umPincujo nível lógico seleciona a direção em tempo de execução (baixo = contar para cima, alto = contar para baixo).filter_ns(apenas por palavra-chave) – tempo mínimo de estabilidade do sinal de entrada em nanossegundos para que um impulso seja contado. O controlador utiliza o filtro de hardware mais longo que seja menor ou igual a este valor.0(o valor predefinido) desativa a filtragem.max/min(apenas por palavra-chave) – intervalo módulo do contador de posição. Quando o contador ultrapassamaxregressa amine o contador de ciclos incrementa (decrementa ao contar para baixo). Passarmaxeminambos como0desativa o intervalo.reset(apenas por palavra-chave) – umPincujo flanco ascendente recarrega o contador de posição para o valor inicial (sem alterar o contador de ciclos).match(apenas por palavra-chave) – valor do contador em que é gerada uma interrupçãoIRQ_MATCH. PasseNonepara desativar.match_pin(apenas por palavra-chave) – umPinmantido a alto enquanto o contador de posição é igual amatche a baixo caso contrário.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 o contador com os parâmetros indicados e repõe os contadores de posição e de ciclos. Aceita os mesmos argumentos por palavra-chave que o construtor.
- deinit() None¶
Para o contador, desativa quaisquer interrupções pendentes e liberta os recursos de hardware QENC. Um reset por software desinicializa automaticamente todas as instâncias de
Counter.
- value() int¶
- value(value: int, /) int
Obtém ou define o contador de posição com sinal.
Sem argumento, devolve a contagem atual.
Com um único argumento
value, define atomicamente o contador de posição paravaluee devolve a contagem anterior. O idioma comumcounter.value(0)repõe o contador no início de uma janela de medição.
- cycles() int¶
- cycles(value: int, /) int
Obtém ou define o contador de ciclos, um inteiro de 16 bits com sinal que regista quantas vezes o contador de posição ultrapassou
max/min.Sem argumento, devolve a contagem de ciclos atual.
Com um único argumento
value, define o contador de ciclos paravalue(sem alterar o contador de posição) e devolve a contagem anterior.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Regista um callback a invocar quando um dos eventos QENC suportados ocorre. O handler recebe o objeto
Countercomo único argumento; o evento específico pode ser identificado dentro do handler através deirq.flags().triggeré uma máscara de bits de uma ou mais constantesIRQ_*:IRQ_RESET– o pinoresetfoi ativado.IRQ_INDEX– uma transição na linhaindex.IRQ_MATCH– o contador de posição atingiumatch. O Match é desativado automaticamente após disparar e deve ser rearmado reinstalando o IRQ.IRQ_ROLL_OVER– o contador de posição passou demaxparamin.IRQ_ROLL_UNDER– o contador de posição passou deminparamax.
hard=Trueregista um handler de interrupção por hardware (menor latência, mas o handler não deve alocar memória). A predefinição é um callback agendado. Passehandler=Nonepara desativar a interrupção.
Constantes¶