Neste tutorial, faremos a interface de um codificador rotativo com o microcontrolador ATmega8. ATmega8 é a série de microcontroladores da Atmel projetada para aplicações embarcadas. O codificador rotativo é usado para saber a posição de movimento e o movimento angular de um motor ou eixo. Geralmente é um dispositivo de três terminais, com contagem de pinos de alimentação e aterramento até cinco. Um módulo codificador rotativo é mostrado abaixo.
Os pinos de um codificador rotativo são:
- Terra.
- Positivo conectado a + 5V
- Sinal de saída A pin
- Pino B do sinal de saída
- Pino do relógio ou pino comum.
O ENCODER fornece pulsos que representam a mudança na posição do eixo para que os sistemas entendam. Considere que um CODIFICADOR ROTATIVO está ligado e o eixo é movido.
Conforme mostrado na tabela acima, considere que o eixo é movido no sentido horário. Com isso, haverá Falling Edge no terminal A e depois no terminal B.
Considere que o eixo é movido no sentido anti-horário. Com isso, haverá Falling Edge no terminal B e depois no terminal A.
Esta borda ocorrerá uma vez para 360/20 = 18 graus (isto é para um codificador com 20 posições, isto muda de tipo para tipo, quanto maior a contagem maior a precisão).
Com as duas condições acima, podemos obter a direção e o grau de rotação. Assim, obtemos os parâmetros necessários para obter a posição de um eixo.
Componentes
Hardware: ATMEGA8, pinos de conexão, AVR-ISP PROGRAMMER, resistor 220Ω, LED (oito peças), resistor 1KΩ, resistor 220Ω (2 peças), capacitor 100nF (2 peças), placa de pão.
Software: Atmel studio 6.1, progisp ou flash magic.
Diagrama de circuito e explicação de trabalho
Os capacitores aqui são para neutralizar o efeito de salto do contato no ENCODER. Sem esses capacitores, haverá alguns problemas sérios na leitura de posição.
Quando o eixo é movido, haverá uma diferença de tempo entre a saída de dois pinos de saída. O ATMEGA8 reconhecerá esta diferença de tempo para a rotação no sentido horário ou anti-horário.
Se a rotação for no sentido horário, a contagem binária é incrementada em um e essa contagem é mostrada na porta do LED conforme mostrado na figura.
Se a rotação for anti-horária, a contagem binária diminui em um e a contagem binária é mostrada no byte do LED.
Lembre-se de que não estamos definindo nenhum bit de fusível de atmega8, então o controlador funcionará no cristal interno padrão de 1Mhz.
O trabalho de interface do codificador rotativo com o microcontrolador ATmega8 é explicado no código a seguir.