Ir ao conteúdo

CI para contagem de pulsos do encoder


Crykix

Posts recomendados

Postado

Bom dia pessoal,

Estou com um pequeno problema: estou desenvolvendo um robô móvel controlado por Arduino. Esse robô possui 4 motores independentes, cada um acoplado ao seu encoder. Entretanto, a frequência de varredura do Arduino é menor que a frequência da saída do encoder, ou seja, estou perdendo pulsos! Já me disseram que existem alguns CI's capazes de armazenar os pulsos enviados pelo encoder e "repassá-los" para o Arduino em uma frequência mais baixa, de forma a possibilitar a leitura sem perdas. Alguém saberia me dizer quais CI's teriam tal característica?

Obrigado!

Postado

O gente boa, que Arduino você está usando ? Foi você que fez a programação ? você está controlando os motor de passo tambem pelo Arduino, é o mesmo programa ? Haja bateria heim brother...

Que enconder vosmecê está usando ? micro ? absoluto ? independentmente do tipo de enconder a ser utilizado, este deveria funcionar com arduino..

Arduino mesmo // ?

Postado

Bom, impossível a saída do encoder ser mais rápida do que o Arduíno.....

O que ocorre é que o programa não foi escrito para pegar isso. Basta refazer esse trecho, e usar interrupção para fazer a contagem.

Faça o seguinte , ligue cada saída do encoder a um pino de I/O do Arduíno.

Habilite a interrupção em cada pino, de acordo com o seu Encoder.

Lembro que quase todo pino de I/O pode gerar interrupção por mudança de nível, então é só dar uma "tratada", armazenando o estado anterior, para voce saber se foi uma subida de nível, ou se foi uma descida de nível que causou a interrupção.

Apenas dois pinos de I/O podem gerar direto uma interrupção de subida ou de descida, porisso que já me antecipei, pois serão 4 encoders....

Paulo

Postado
O gente boa, que Arduino você está usando ? Foi você que fez a programação ? você está controlando os motor de passo tambem pelo Arduino, é o mesmo programa ? Haja bateria heim brother...

Que enconder vosmecê está usando ? micro ? absoluto ? independentmente do tipo de enconder a ser utilizado, este deveria funcionar com arduino..

Arduino mesmo // ?

Opa, estou utilizando o Arduino Mega 2560, e eu mesmo fiz a programação. Não são motores de passo, são motores DC convencionais com encoders acoplados, e tudo está sendo controlado pelo Arduino. No caso estou com dois packs de bateria, um para o Arduino e outro para os motores. O motor é esse aqui: http://www.robotshop.com/en/pololu-12v-50-1-gear-motor-encoder.html

Você saberia como me ajudar?

Bom, impossível a saída do encoder ser mais rápida do que o Arduíno.....

O que ocorre é que o programa não foi escrito para pegar isso. Basta refazer esse trecho, e usar interrupção para fazer a contagem.

Faça o seguinte , ligue cada saída do encoder a um pino de I/O do Arduíno.

Habilite a interrupção em cada pino, de acordo com o seu Encoder.

Lembro que quase todo pino de I/O pode gerar interrupção por mudança de nível, então é só dar uma "tratada", armazenando o estado anterior, para voce saber se foi uma subida de nível, ou se foi uma descida de nível que causou a interrupção.

Apenas dois pinos de I/O podem gerar direto uma interrupção de subida ou de descida, porisso que já me antecipei, pois serão 4 encoders....

Paulo

Então, Paulo, já verifiquei o programa que está rodando no Arduino e ele executa tudo o que está na função "loop" em 1 ms, logo, eu consigo verificar 1000 sinais por segundo.

Entretanto, o encoder que eu estou utilizando possui uma resolução de 3200 pulsos para cada rotação do motor e esse pode chegar a velocidade de 200 rpm, logo, a saída do encoder pode gerar mais de 10000 pulsos por segundo.

Não coloquei os 4 motores na interrupção pois a diferença de frequência é tão grande que o Arduino acabaria ficando praticamente o tempo todo nas rotinas de interrupção e deixaria de executar o programa em si.

Ao que me parece, a utilização desse tipo de CI que citei é a melhor saída, mas aceito outras sugestões. Se souber de um CI desse tipo já me quebraria um galhão. Valeu!

Postado

É que voce está querendo utilizar as funções prontas da linguagem nativa do Arduíno.

Tem de implementar "na marra" , por interrupção mesmo. Eu mesmo já utilizei o hardware do Arduíno Uno a 16 Mhz e consegui capturar sem problemas 300.000 pulsos por segundo.

Dá uma olhada no arduino.cc mesmo, sempre tem exemplos de códigos que são modificados justamente para poder fugir das limitações da linguagem nativa.

Existe um truque de hardware simples e barato, eu utilizei em um frequêncimetro no meu tutorial, usei um contador tipo cd4024 para poder ler frequências até 50 Mhz, voce pode usar o mesmo princípio, ok ? Use o contador, leia a saída dele, e faça o Reset.

http://forum.clubedohardware.com.br/showpost.php?p=5553520&postcount=1

Paulo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!