classe Encoder – decodificador de quadratura¶
A classe Encoder encapsula o bloco de hardware QENC do i.MX RT configurado como um decodificador de quadratura. Ela rastreia um sinal de duas fases (phase_a / phase_b) proveniente de um codificador rotativo, incrementa ou decrementa um contador de posição de 32 bits de acordo com a relação de fase, e pode ser combinada com entradas opcionais index / reset para referenciamento absoluto.
Disponível apenas na OpenMV Cam RT1062 (porta mimxrt). Nas OpenMV cams baseadas em STM32, use pyb.Timer configurado para o modo de codificador (Timer.ENC_AB). Não exposto na OpenMV Cam AE3 (porta alif).
Exemplo 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())
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 a instância singleton de) o bloco codificador QENC identificado por
id. Os mesmos argumentos também são aceitos porinit()para reconfigurar uma instância existente.phase_a/phase_bsão os dois pinos de entrada de quadratura.phases(somente por palavra-chave) seleciona a granularidade de decodificação. O QENC suporta1(conta uma borda por par de pulsos),2(ambas as bordas da fase A) ou4(“decodificação 4x” – toda borda de ambas as fases é contada). Padrão1.filter_ns(somente por palavra-chave) – tempo mínimo de estabilidade da entrada em nanossegundos. 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 mover-se na outra direção). Passar ambos como0desativa a faixa.index(somente por palavra-chave) – umPincuja borda de subida recarrega o contador de posição paramine atualiza o contador de ciclos de acordo com a direção; o uso típico é uma marca de canal Z em um codificador rotativo.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 de posição 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(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 codificador 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 codificador, desativa quaisquer interrupções pendentes e libera os recursos de hardware QENC. Um soft reset 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, retorna a posição atual.
Com um único argumento
value, define atomicamente o contador de posição comovaluee retorna a contagem anterior. O idioma comumenc.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[[Encoder], 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
Encodercomo 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– o pinoindexfoi acionado.IRQ_MATCH– o contador de posição atingiumatch. O match é de disparo único (one-shot) 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¶