Página 1 de 1

quadrature encoder 18F4431

MensagemEnviado: 11 Ago 2012 01:40
por edusoppa
boanoite pessoal,

Estou querendo fazer um medir de velocidade e posição com o pic 18f4431 masestou com algumas dificuldades, será que poderiam me ajudar? estou usando o mcc18 e mplab.

Obrigado.

MensagemEnviado: 11 Ago 2012 12:00
por xultz
Podemos, se você disser qual é a dificuldade.

MensagemEnviado: 11 Ago 2012 18:29
por edusoppa
Então na verdade já fiz varios testes,mas cheguei a conclusão que ainda não entendi como o hardware irá funcionar de fato.
Para medir velocidade, entendi que preciso de um timer5 mas qual é o valordo timer5? e entendi também que a cada 4pulsos do encoder da um no "velcap" e ai o valor do TMR5 passa para o VELR, quando lei esse registrador ele me mostra uns valores doidos, e quando devo ler esse registrador? e por ai vai.
Estou testando no proteus, coloquei dois sinais de onda quadrado em QEA eQEB devados de 90graus. Não estou usando INDX.
Obrigado.

MensagemEnviado: 11 Ago 2012 22:00
por RobL
edusoppa escreveu:Então na verdade já fiz varios testes,mas cheguei a conclusão que ainda não entendi como o hardware irá funcionar de fato.
Para medir velocidade, entendi que preciso de um timer5 mas qual é o valordo timer5? e entendi também que a cada 4pulsos do encoder da um no "velcap" e ai o valor do TMR5 passa para o VELR, quando lei esse registrador ele me mostra uns valores doidos, e quando devo ler esse registrador? e por ai vai.
Estou testando no proteus, coloquei dois sinais de onda quadrado em QEA eQEB devados de 90graus. Não estou usando INDX.
Obrigado.


Vá por partes: Você quer medir velocidade.
Precisa de uma régua e um relógio.


Para medir velocidade, entendi que preciso de um timer5 mas qual é o valordo timer5?


O timer é seu relógio e você pergunta : Qual valor deve ter seu relógio?
Suponho que o Bolt quando ganhou o ouro, não colocou o tempo no relógio mas o relógio marcou o tempo que ele levou correndo.
Então, um pulso, dará a partida no seu relógio e outro pulso (a fita de chegada) dará o tempo final.
Se eu dividir a distância pelo tempo do relógio, tenho a velocidade.
Se o Bolt ficar dando voltas na pista, exatamente como seu motor, e se você tiver um pulso a cada volta e no seu relógio marcar 1 segundo, entre os pulsos, você tem Uma Volta por Segundo, ou 1 RPS.
Para medir posição, use somente uma régua. Veja quantos pulsos por determinado espaço angular tem seu encoder.
Agora sim, vamos para o micro e seus registros. Veja aí quem é seu relógio e sua régua.

MensagemEnviado: 12 Ago 2012 11:49
por edusoppa
Gostei da comparação, hahahah.

Então já tinha imaginado algo assim, vamos la. O meu encoder da 16 pulsos por volta, o fato é que não estou conseguindo ler o TMR5 após esses 16 pulsos, ou melhor quando leio o VELR eu só obtenho o valor 0, acredito que a interrupçao não esteja funcionando, ou eu não estou sabendo fazer.
Você poderia postar uma parte de código, um exemplo, dai acho que ficaria mais fácil.
Obrigado.

MensagemEnviado: 12 Ago 2012 11:49
por edusoppa
Gostei da comparação, hahahah.

Então já tinha imaginado algo assim, vamos la. O meu encoder da 16 pulsos por volta, o fato é que não estou conseguindo ler o TMR5 após esses 16 pulsos, ou melhor quando leio o VELR eu só obtenho o valor 0, acredito que a interrupçao não esteja funcionando, ou eu não estou sabendo fazer.
Você poderia postar uma parte de código, um exemplo, dai acho que ficaria mais fácil.
Obrigado.

MensagemEnviado: 12 Ago 2012 13:06
por Maffeis
soh po curiosidade quais sinais o pic recebe

A A/ B B/?

MensagemEnviado: 12 Ago 2012 20:50
por edusoppa
na verdade são dois sinais de onde quadrada defasadas de 90graus.
valew.

MensagemEnviado: 13 Ago 2012 20:34
por edusoppa
E ai pessoal alguem pode me ajudar?

Eu fiz essas configurações:

void main()
{

unsigned char num2char[5];
unsigned int x, x_ant=0;

TRISB = 0x00;
TRISC = 0x00;
TRISD = 0x03;
TRISE = 0x00; // SAIDA
TRISA = 0b11111111;
ANSEL0 = 0b11100111;
QEICON = 0x18;
POSCNTH=0x00;
POSCNTL=0x00;
MAXCNTH=0x00;
MAXCNTL=0xFF;
PIE3bits.IC2QEIE=1;
IPR3bits.IC2QEIP=1;
PIR3bits.IC2QEIF=0;
}

ai configurei a interrupção de alta prioridade do IC2DEIF mas ela nunca ocorre.
Poderiam me ajudar.
Obrigado.

MensagemEnviado: 14 Ago 2012 12:57
por ze
oi. nao conheço este mc. mas ele não tem algo equivalente a GIE? Geral interrupt enable? cadê a habilitação? estaria em qeicon? Otra cosa. Para ler contagens não precisa interrupt. Basta ligar a entrada de um contador qualquer num pino. Faça 1 teste p. vc entender. Depois vá além...numa interrupt por timer digamos 1 segundo, leia numa variável o valor do contador - o resultado vai ser em hz - zero-o para a próxima captura.

Também não sei se tem como ler sinal de encoder defasados direto no hw. Diga-se ler direção da rotação. Mas por sw me lembro de ter feito algo do genero há alguns anos num 8051 (em asm). Tenho que procurar... no momento estou sem motivação...

MensagemEnviado: 15 Ago 2012 13:30
por edusoppa
Fala Lellis,

Sim, preceisa habilitar a interrupção global e etc... é que fiz isso em uma função, ela não está ai porque só coloquei uma parte do código. Bom, já consegui fazer, fiz dessa forma que você falou e fiz de acordo com o QEI do microcontrolador. Esse hd deste uc tem como ver a velocidade, o sentido, já está pronto, só precisa acessar a interrupção correta. Eu não estava utilizando a interrupção correta por achar que o bloco de position era independente do bloco de velocity, mas agora já funcionou.
Valew galera, obrigado pela ajuda.

MensagemEnviado: 15 Ago 2012 14:04
por Maffeis
Qual a frequencia maxima que ele aguenta

hj agente usa encoder de 2048, mais tem concorrente usando 10.000

será que rola nesse cara

hoje acho está sendo usado o PIC18F2525

MensagemEnviado: 15 Ago 2012 21:04
por andre_luis
Se tratar Encorer por firmware, não sobra processamento para mais nada.
Tem de usar um uC que possua módulo de HW para isso.


+++

MensagemEnviado: 16 Ago 2012 19:49
por edusoppa
Cara não fiz o teste do minimo que ele suporta, mas eu to usando um cristal de 10MHz com PLL interno o que me da 40MHz de clock, então chego a a um TCY de 100ns, como ele conta a cada 3 pulsos, da para ter uma idéia da velocidade, pois é todo feito por hw. Vale a pena dar uma olhada.
Abraço.