Uso de encoder

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Uso de encoder

Mensagempor paulo_hod » 01 Fev 2007 15:44

Olá,

Sou novato no forum, trabalho com projetos eletrônicos e gostaria de receber uma ajuda em um projeto com PIC...

Como implementar um encoder para controle de um contador up-down? Este encoder é parecido com aquele que controla volume em aparelhos eletronicos, possui 3 terminais.

Ao girar no sentido horario, ele envia dois pulsos, sendo que um deles é defasado. Por exemplo, qdo o mesmo gira em sentido horário primeiro se tem um pulso negativo no terminal que é "up" depois outro no "down", invertendo se a situação quando giramos em sentido anti-horário.

O programa funcionou perfeito com chaves no UP e DOWN, mas agora é necessario colocar um encoder rotativo para esta função.

Abraços, agradeço desde já a ajuda 8)
paulo_hod
Bit
 
Mensagens: 5
Registrado em: 29 Jan 2007 08:25

Mensagempor proex » 01 Fev 2007 17:47

Como vc ja sabe como o encoder trabalha, qual é a duvida afinal?
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor eletroinf » 01 Fev 2007 19:26

Bueno... eu fiz essa implementação, só pra teste... na verdade meu maior problema foi conseguir esse bendito encoder.
Eu fiz assim: Liga um pino do encoder num pino que gere interrupção sensível à borda no mcu. Quando acontecer a interrupção, tu lê o outro pino, se tiver nível 0 tá girando pra um lado e se tiver nível 1 pro outro! Ah tem que botar um debounce senão fica doidão... O terceiro pino é o comum. Eu aterrei ele e pullupei os outros dois (os de sinal).
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Mensagempor paulo_hod » 02 Fev 2007 06:57

Bom... entendi a lógica, vou fazer uns ensaios por aqui.

É que o projeto original estava controlado por chavinhas, tive que adaptar o encoder.

Obrigado.

Abraços,
paulo_hod
Bit
 
Mensagens: 5
Registrado em: 29 Jan 2007 08:25

Mensagempor phophollety » 02 Fev 2007 08:03

Se estiver com dificuldades para obter o encoder no comércios, vão dicas:

Desmonte um mouse com scroll (rodinha) lá tem um...

Use esse link.. bem legal!

http://www.webx.dk/oz2cpu/20m/encoder.htm
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor guest2003 » 03 Fev 2007 04:25

Eletroinf, esta maneira que vc fez é bem pratica e simples.... porem voce perde resoluçao ( o q na maioria dos casos nao eh problema )

Outro metodo de fazer isso é verificando quando qquer uma das saidas mudar... ai voce olha isso como um conjunto de 2 bits, e verifica q numero era e pra qual foi, com isso sabe se esta girando no horario ou anti-horario...

canal A - 00110011
canal B - 01100110
sequen - 01320132

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor paulo_hod » 05 Fev 2007 09:13

guest2003 escreveu:Eletroinf, esta maneira que vc fez é bem pratica e simples.... porem voce perde resoluçao ( o q na maioria dos casos nao eh problema )

Outro metodo de fazer isso é verificando quando qquer uma das saidas mudar... ai voce olha isso como um conjunto de 2 bits, e verifica q numero era e pra qual foi, com isso sabe se esta girando no horario ou anti-horario...

canal A - 00110011
canal B - 01100110
sequen - 01320132

[]'s


Hum, tô começando a entender a lógica... montei o código e testei segundo a sugestão do eletroinf, mas estou tendo uns problemas pois em alguns pontos a contagem ocorre antes do "click" do encoder, ou seja, ao mínimo movimento do eixo.

Vou tentar mais, sugestões serão bem vindas.

Grato.
paulo_hod
Bit
 
Mensagens: 5
Registrado em: 29 Jan 2007 08:25

Mensagempor eagle_good » 04 Ago 2007 17:53

Pessoal .......montei o projeto baseado na tecnica de interrupção para ler 02 encoder (shaft encoder quadratura) qdo ocorre a interrupção cheque
outro pino para saber o sentido,.......mas como e 02 encoder e ocodigo e grande ........ele se perde sim ........nunca retorna exatamente no mesmo lugar......

Ou seja esta maneira nao e indicada ........ estou tentando usar os counter para isto mas nao tenho ideia.....

Alguem pode nos ajudar a ler encoder quadratura (A e B) usando os counter e claro o sentido ?????????
Ou seja como incrementar e decrementar o counter usando os canais a e b sem interromper o bichionho a cada clock do encoder ???
Sam eagle good
eagle_good
Bit
 
Mensagens: 32
Registrado em: 12 Out 2006 11:56
Localização: Americana - SP

Mensagempor eagle_good » 05 Ago 2007 17:29

LS7082/3/4 series quadrature converters. These 8 pin chips convert quadrature encoder inputs
to either pulse and direction, or up clock and down clock signals.
They are configurable to X1, X2, or X4 operation, and are very simple to use.
However, they have no internal counter,so the pulses must be processed immediately.
The only solution I have thought of, but not tested is to use a
PIC12C508 or 8051 (I have code for the PIC) to decode the
quadrature into count and direction. The outputs of this device
are up-clock/down-clock.

Pessoal e possivel configurar o microcontroller com:
01 input counter (uma entrada contador)
01 input up/down (e outra entrada como direção de contagem)

sem usar a interrupção e claro.
Sam eagle good
eagle_good
Bit
 
Mensagens: 32
Registrado em: 12 Out 2006 11:56
Localização: Americana - SP

Mensagempor RobL » 05 Ago 2007 18:13

Pessoal e possivel configurar o microcontroller com:
01 input counter (uma entrada contador)
01 input up/down (e outra entrada como direção de contagem)


Sem problemas.
Mas neste caso estará usando uma interface externa para o encoder.
Seu problema vai ser contar para baixo com um contador de 8 ou 16 bits que so conta para cima, no caso dos PICs. Com AVR dá para contar para cima e para baixo.
É possível fazer contar para baixo mesmo contando para cima.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor ze » 06 Ago 2007 08:01

coloque esta rotina no seu loop (ou int)

cpp code
//rotina para decodificação - código gray
//identifica direção e retorna 1 para a direita, 2 para a esquerda, 0 se parado
#define pa RA6
#define pb RA5
unsigned char ret,port,port0;
static bit a,b,a0,b0;
unsigned char decode()
{
a=pa;b=pb;
port=PORTA&0b1100000;
if (port^port0) //comparar leitura atual c/anterior
{
if (!a0 & a) { //bit A mudou de 0 para 1
if (!b) ret=1; //bit B = 0:direita
else ret=2; //bit B = 1:esquerda
}
if (a0 & !a) { //bit A: 1 para 0
if (b) ret=1; // B em 1:direita
else ret=2; // B em 0:esquerda
}
if (!b0 & b) { //bit B: 0 para 1
if (!a) ret=2; // A em 0:esquerda
else ret=1; // A em 1:direita
}
if (b0 & !b) { //bit B: 1 para 0
if (a) ret=2; // A em 1:esquerda
else ret=1; // A em 0:direita
}
}
else ret=0;
a0=pa;b0=pb;
port0=PORTA&0b1100000;
return ret;
}


não ensino a pescar, dou o peixe.
abraço...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor eagle_good » 06 Ago 2007 08:45

BLZ ...Pessoal
lellis... realmente a rotina acima funfa..... e eh sem a INT mas.....
fiquei na mesma.......porque.....precisaria ter processamento muito rapido para ler o encoder e executar o restante do codigo(58K ...ja bem otimizado) sem perder nehum pulso.

Mas o RobL coloca para nos que o AVR o qual numca trampei.... executa a
contagem em uma entrada obedecendo uma outra entrada UP/DOWN.

01 input counter (uma entrada contador)
01 input up/down (e outra entrada como direção de contagem)

Poderia nos exemplificar.......... e no pic nao e mesmo possivel:

Abraçosa a todos.....
Sam eagle good
eagle_good
Bit
 
Mensagens: 32
Registrado em: 12 Out 2006 11:56
Localização: Americana - SP

Mensagempor andre_luis » 06 Ago 2007 08:56

Se nao quizer fugir muto da tecnologia, vai de DSPIC que tem módulo de encoder. Voce só tem o trabalho de ler a posicao atual e pronto. Já usei pra um encoder de 1800 pulsos rodando à quaze 15Hz. É muito confiável. O mesmo gravador que voce usa pro PIC funciona no DSPIC.

Se for migrar pra alguma coisa decente, vá direto pro ARM7, que é produzido por vários fabricantes diferentes.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor eagle_good » 06 Ago 2007 09:18

Legal......nao conheco a tecnologia ARM7
A Analog device tambem tem um integrado com 01 interface de quadrature encoder e core arm7...enbora eu precise de 02 entradas de encoder.....mas
Iniciar o arm7 vale a pena mesmo...qual o compiler em C pro danadinho ........
Sam eagle good
eagle_good
Bit
 
Mensagens: 32
Registrado em: 12 Out 2006 11:56
Localização: Americana - SP

Mensagempor andre_luis » 06 Ago 2007 10:10

Vá pro tópico ARM que tem uma galera casca-grossa nessa área.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x