classe Encoder – descodificador em quadratura¶
A classe Encoder encapsula o bloco de hardware i.MX RT QENC configurado como descodificador em quadratura. Rastreia um sinal de duas fases (phase_a / phase_b) proveniente de um encoder rotativo, incrementa ou decrementa um contador de posição de 32 bits de acordo com a relação de fase, e pode ser combinado com entradas opcionais index / reset para referenciação absoluta.
Disponível apenas na OpenMV Cam RT1062 (porta mimxrt). Nas câmaras OpenMV baseadas em STM32, utilize pyb.Timer configurado para modo de encoder (Timer.ENC_AB). Não está disponível na OpenMV Cam AE3 (porta alif).
Exemplo de utilização:
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())
Construtores¶
- 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)¶
Constrói (ou obtém o singleton de) o bloco de encoder QENC identificado por
id. Os mesmos argumentos são também aceites porinit()para reconfigurar uma instância existente.phase_a/phase_bsão os dois pinos de entrada em quadratura.phases(apenas por palavra-chave) seleciona a granularidade de descodificação. O QENC suporta1(conta uma aresta por par de impulsos),2(ambos os flancos da fase A) ou4(«descodificação 4x» – cada aresta de ambas as fases é contada). Predefinição1.filter_ns(apenas por palavra-chave) – tempo mínimo de estabilidade do sinal de entrada em nanossegundos. 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 mover-se na direção oposta). Passar ambos como0desativa o intervalo.index(apenas por palavra-chave) – umPincujo flanco ascendente recarrega o contador de posição paramine atualiza o contador de ciclos de acordo com a direção; uso típico como marca de canal Z num encoder rotativo.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 de posição 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(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 o encoder 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 encoder, desativa quaisquer interrupções pendentes e liberta os recursos de hardware QENC. Um reset por software desinicializa automaticamente todas as instâncias de
Encoder.
- value() int¶
- value(value: int, /) int
Obtém ou define o contador de posição com sinal.
Sem argumento, devolve a posição atual.
Com um único argumento
value, define atomicamente o contador de posição paravaluee devolve a contagem anterior. O idioma comumenc.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[[Encoder], 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
Encodercomo ú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– o pinoindexfoi ativado.IRQ_MATCH– o contador de posição atingiumatch. O Match é de disparo único 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¶