
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03



Este instrutível descreve um método simples de decodificar um codificador rotativo sequencial usando um Arduino Uno R3.
As rotinas de software compactas são usadas para contar o número de transições, eliminar o salto do contato e determinar a direção da rotação. Componentes adicionais e tabelas de pesquisa não são necessários.
Versões de interrupção e não interrupção do código são fornecidas.
A versão de interrupção do código requer apenas um único pino de interrupção.
Imagens:
- A foto de abertura mostra o codificador montado.
- A captura de tela mostra o código para a versão de interrupção e a contagem quando o eixo do codificador é girado no sentido horário e anti-horário.
- O vídeo mostra a contagem durante a rotação rápida.
Etapa 1: Diagrama de Circuito

O diagrama de fiação do codificador é mostrado na fig.1.
Os fios do jumper são soldados diretamente aos pinos do codificador.
Troque os dois fios azuis se a direção da contagem for invertida.
Etapa 2: Lista de peças
As seguintes partes foram obtidas em
- 1 apenas Arduino UNO R3 com cabo USB.
- 1 apenas codificador rotativo sequencial (EC11 ou equivalente) com interruptor.
- 1 botão apenas para se adequar ao eixo.
- 3 fios de jumper macho para macho Arduino apenas.
Etapa 3: Teoria

Os codificadores rotativos sequenciais geram duas ondas quadradas, cada uma delas deslocada em 90 graus, conforme mostrado na Fig.1.
Os padrões lógicos no contato A e no contato B são diferentes quando o eixo é girado no sentido horário (CW) e anti-horário (CCW) nas posições 1 a 6.
Métodos comuns para determinar a direção de rotação incluem:
- hardware
- interrupções gêmeas
- tabelas de pesquisa de padrões
Este projeto usa um método de software que não requer tabelas de pesquisa. [1]
Direção
Em vez de olhar para os padrões de saída do contato A e do contato B, vamos nos concentrar no contato A.
Se amostrarmos o Contato B após cada transição do Contato A, notaremos que:
- O contato A e o contato B têm estados lógicos opostos quando o encoder é girado no sentido horário
- O contato A e o contato B têm o mesmo estado lógico quando o encoder é girado no sentido anti-horário
Código real:
// ----- Transições de contagem
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Contagem ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Este método oferece as seguintes vantagens:
- tabelas de pesquisa não são necessárias
- apenas uma única linha de interrupção é necessária
Debounce
Todos os codificadores mecânicos sofrem de “ressalto de contato”.
Se um contato da chave não abrir / quebrar corretamente, seu estado lógico oscilará rapidamente de ALTO para BAIXO até que o contato da chave se estabilize. Isso resulta em contagens falsas.
Um método para suprimir o salto do contato é adicionar um pequeno capacitor em cada contato da chave. O capacitor e o resistor pull-up associado formam um integrador que efetivamente causa um curto-circuito nas altas frequências e permite que a tensão da chave aumente / diminua graciosamente.
A desvantagem dessa abordagem é que as transições podem ser perdidas se o eixo do codificador for girado rapidamente.
Debouncing de software
Este método usa dois contadores (aberto, fechado) que foram definidos como zero. [2]
Assim que uma transição for detectada no contato A:
- Pesquisar continuamente o contato A.
- Incremente o contador Aberto e zere o contador Fechado sempre que o Contato A estiver ALTO.
- Incremente o contador Fechado e zere o contador Aberto sempre que o Contato A estiver BAIXO.
- Saia do loop quando um dos contadores atingir uma contagem predeterminada. Estamos efetivamente procurando o período de estado estacionário após qualquer salto de contato.
Código real:
// ----- Debounce Contact A
while (1) {if (digitalRead (ContactA)) {// ----- ContactA está aberto Fechado = 0; // Integrador oposto vazio Open ++; // Integrar if (Abrir> MaxCount) return HIGH; } else {// ----- ContactA está fechado Open = 0; // Integrador oposto vazio Closed ++; // Integrar if (Fechado> MaxCount) return LOW; }}
Não há necessidade de eliminar o contato B, pois as transições do contato A e do contato B não coincidem.
Contando
Um “detentor” mecânico efetivamente duplica sua contagem, já que duas contagens são registradas entre os cliques (consulte a fig. 1).
O número de "detenções" pode ser determinado usando aritmética do módulo 2, conforme mostrado abaixo.
Código real:
// ----- Contar "detenções"
if (Contagem% 2 == 0) {Serial.print ("Contagem:"); Serial.println (contagem / 2); }
Referências
Mais informações podem ser encontradas em:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Etapa 4: Software
Este projeto requer uma versão recente do IDE Ardino Uno R3 (ambiente de desenvolvimento integrado) que está disponível em
Baixe cada um dos dois esboços do Arduino a seguir (em anexo)
- rotary_encoder_1.ino (versão de votação)
- rotary_encoder_2.no (versão de interrupção)
Clique duas vezes em sua versão preferida e siga as instruções na tela.
Aproveitar …
Clique aqui para ver meus outros instructables.
Recomendado:
LabDroid: codificador / decodificador de código Morse: 4 etapas

LabDroid: Codificador / Decodificador de Código Morse: Nota: Esta instrução não pode ser realizada 1: 1 na versão mais recente do LabDroid. Vou atualizá-lo em breve. Este projeto vai mostrar o que você pode fazer com o LabDroid. Como um Hello World normalmente é feito com base em texto, luz ou som, pensei no LabDr
Decodificador Morse de árvore binária: 7 etapas (com imagens)

Decodificador Morse de árvore binária: a.artículos {tamanho da fonte: 110,0%; intensidade da fonte: Negrito; estilo da fonte: itálico; decoração de texto: nenhum; background-color: red;} a.articles: hover {background-color: black;} Este instrutível explica como decodificar Código Morse usando um Arduino Uno R3.T
Como fazer um decodificador de linha telefônica DTMF (tom) simples: 3 etapas

Como fazer um decodificador simples de linha telefônica DTMF (tom): Este é um projeto simples que permite decodificar sinais DTMF em basicamente qualquer linha telefônica. Neste tutorial, estamos usando o decodificador MT8870D. Estamos usando um decodificador de tons pré-construído porque, acredite em mim, é um saco tentar fazer isso com
Decodificador de protocolo de controle remoto RC5 sem biblioteca: 4 etapas

Decodificador de protocolo de controle remoto RC5 sem biblioteca: antes de decodificar rc5, primeiro discutimos o que é o comando rc5 e qual é a sua estrutura. então, basicamente, o comando rc5 usado em controles remotos que são usados em televisores, reprodutores de cd, d2h, sistemas de home theater etc. ele tem 13 ou 14 bits dispostos em um
Como programar o decodificador IR para o controle de motor CA de múltiplas velocidades: 7 etapas

Como programar o decodificador IR para controle de motor CA de múltiplas velocidades: Os motores de corrente alternada monofásicos são normalmente encontrados em utensílios domésticos, como ventiladores, e sua velocidade pode ser facilmente controlada ao usar vários enrolamentos discretos para velocidades definidas. Neste Instructable, construímos um controlador digital que