classe Counter – contador de pulsos¶
A classe Counter encapsula o bloco de hardware QENC (codificador de quadratura / contador) do i.MX RT configurado como um contador de pulsos de entrada única. Cada borda de subida no pino de origem incrementa (ou decrementa) um contador de posição em hardware; callbacks de software podem ser associados aos eventos ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.
Disponível apenas na OpenMV Cam RT1062 (porta mimxrt). Nas OpenMV cams baseadas em STM32, use pyb.Timer configurado para captura de entrada (input-capture). Não exposto na OpenMV Cam AE3 (porta alif).
Exemplo de uso:
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 a instância singleton de) o bloco contador QENC identificado por
id. A RT1062 possui múltiplos blocos QENC (idseleciona um); os mesmos argumentos também são aceitos porinit()para reconfigurar uma instância existente.src– o pino de entrada cujas bordas de subida são contadas.direction(somente por palavra-chave) – ouUP/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(somente por palavra-chave) – tempo mínimo de estabilidade da entrada em nanossegundos para que um pulso seja contado. O driver usa o filtro de hardware mais longo que seja menor ou igual a esse valor.0(o padrão) desativa a filtragem.max/min(somente por palavra-chave) – faixa de módulo do contador de posição. Quando o contador ultrapassamaxele retorna amine o contador de ciclos é incrementado (decrementado ao contar para baixo). Passar tantomaxquantomincomo0desativa a faixa.reset(somente por palavra-chave) – umPincuja borda de subida recarrega o contador de posição para o valor inicial (sem alterar o contador de ciclos).match(somente por palavra-chave) – valor do contador no qual uma interrupçãoIRQ_MATCHé disparada. PasseNonepara desativar.match_pin(somente por palavra-chave) – umPinmantido em nível alto enquanto o contador de posição é igual amatche em nível 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 fornecidos e zera seus 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 libera os recursos de hardware QENC. Um soft reset 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, retorna a contagem atual.
Com um único argumento
value, define atomicamente o contador de posição comovaluee retorna a contagem anterior. O idioma comumcounter.value(0)zera 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 rastreia quantas vezes o contador de posição ultrapassou
max/min.Sem argumento, retorna a contagem de ciclos atual.
Com um único argumento
value, define o contador de ciclos comovalue(sem alterar o contador de posição) e retorna a contagem anterior.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Registra um callback a ser invocado quando um dos eventos QENC suportados é disparado. O handler recebe o objeto
Countercomo seu único argumento; o evento específico pode ser identificado dentro do handler viairq.flags().triggeré uma máscara de bits de uma ou mais constantesIRQ_*:IRQ_RESET– o pinoresetfoi acionado.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 a IRQ.IRQ_ROLL_OVER– o contador de posição retornou demaxparamin.IRQ_ROLL_UNDER– o contador de posição retornou deminparamax.
hard=Trueregistra um handler de interrupção em hardware (menor latência, mas o handler não pode alocar memória). O padrão é um callback agendado. Passehandler=Nonepara desativar a interrupção.
Constantes¶