3ª aula de MCU: Usando um Encoder

Depois de muito tempo em SLEEP, meu blog sofreu um Wake-up event e voltou a funcionar. Não entendeu nada né? É coisa de microcontrolador (: Mas agora, venho publicar uma aula muito esperada por alguns: como usar encoders? Já antecipado na última aula, ajudarei vocês a construirem o DERI (Decoficador de Encoder rotatório incremental). Segue uma imagem do DERI:


Diferente das outras postagens, não irei me ater ao esquema, pois o mesmo já está em um post anterior. Então vamos ao que interessa:

A teoria por trás de tudo:

Se vocês leram o post sobre como montar seu encoder vocês lembrarão dessa imagem:






Esse desenho mostra o forma de onda obtida ao se analisar ambas as saídas do Encoder [A (azul) e B (roxa)]. Se você observar, no sentido horário a onda Roxa sobe primeiro que a Azul, e no Antihorário, o oposto. Então, para conseguir definir a direção da rotação, usaremos uma das saídas como gatilho (trigger) e outra para obter a direção (direction).

A teoria no programa e na prática:

Assim que você abrir o programa, que pode ser baixado aqui, você verá que no topo no programa são declarados 4 simbolos: trg (trigger), dirc (direction), esqr (esquerda) e drta (direita). em seguida vem o de praxe: Configura as saídas (TRISIO), desliga os comparadores, desliga o ADC e ativa os resistores de pull-up, economizando espaço na PCI.  
Note que agora as saídas são configuradas com TRISIO e não TRISB, TRISA e etc pois nos PICs da família 12 as portas são denominadas GPIO. Logo as portas são referidas como GPIO.0, GPIO.1 e etc.
O próximo passo é criar um pequeno testador de saídas, onde eu faço o PIC ligar e desligar ambas as saídas (direita e esquerda) 6 vezes.
Depois do teste, entramos em um loop eterno, analisando se o trg é maior que o dirc ou vice-versa, e gera um pulso de duração igual ao do encoder na respectiva saída da direção do movimento.

OBS: Observar-se-a um delay comentado (ignorado pelo programa) pois este seria usado como tolerância do Debouncing (ruído) gerado pela comutação das chaves internas, mas como o ruído foi insuficiente para afetar o programa, o deixei comentado (').

De teste, pode-se ligar um LED em cada saída, mas se for usar a Placa fornecida no post sobre tal, atente que a saída do eixo gera um pulso negativo quando acionado!!! Esse vídeo no meu canal mostra um teste dele.


O programa é simples, e acredito que tenha dado para entender a teoria por trás de tudo. Deixo um desafio: o que seria necessário fazer para se quissémos aumentar ou diminuir o valor do PWM usando um encoder? Quem acerta? :D

Abração galera e espero ter sido útil mais uma vez.

Comentários