Página 1 de 1

Converter sinal de Radio RC para controlar motor de passo

MensagemEnviado: 12 Nov 2007 08:44
por clayton braga
Bom Galera estou com um problemão e não sei como fazer, estou iniciando em programação de pic e preciso converter o sinal de um receptor desses de aeromodelismo em um sinal de pulso e direção para controlar um drive de motor de passo.

Ja procurei alguns circuitos pra fazer isso mas não achei nada então acho que vou ter que fazer isso com um pic. Para quem não conhece esse tipo de controle remoto, o sinal que o receptor envia é um pwm com o pulso variando de 1 a 2 ms ou seja 1ms o motor estaria todo para esquerda, 1,5ms ele posiciona no meio e 2ms ele gira todo para a direita. ou seja tenho que ler esse sinal e gerar um sinal de pulso e direção proporcional para posicionar o motor de passo.

Vou ficar muito grato se alguem puder me ajudar.

Re: Converter sinal de Radio RC para controlar motor de pass

MensagemEnviado: 12 Nov 2007 08:57
por phophollety
clayton braga escreveu:Bom Galera estou com um problemão e não sei como fazer, estou iniciando em programação de pic e preciso converter o sinal de um receptor desses de aeromodelismo em um sinal de pulso e direção para controlar um drive de motor de passo.

Ja procurei alguns circuitos pra fazer isso mas não achei nada então acho que vou ter que fazer isso com um pic. Para quem não conhece esse tipo de controle remoto, o sinal que o receptor envia é um pwm com o pulso variando de 1 a 2 ms ou seja 1ms o motor estaria todo para esquerda, 1,5ms ele posiciona no meio e 2ms ele gira todo para a direita. ou seja tenho que ler esse sinal e gerar um sinal de pulso e direção proporcional para posicionar o motor de passo.

Vou ficar muito grato se alguem puder me ajudar.


Imagem

Legal, o pulso varia conforme a posição.

Imaginenos que usaremos pic rodando a 1mip

Pode fazer desta maneira:

Usando interrupção, sempre na borda de subida inicie um contador por sofware (16 bits) que incrementa por um loop (isto é ruim, trava o processamento)

Ou:

No vetor de interrupção, zere um timer (8 bits com preescaler 1:8 deve bastar) bem na borda de subida, altera a interrupção para a borda de descida e espere a interrupção ocorrer novamente (faça outra coisa se puder, controlar o motor por exemplo) quando ocorrer você vai lá e captura o valor do TMR que vai ser proporcional a largura de pulso do servo.

Há outros modos,

[]s

MensagemEnviado: 12 Nov 2007 10:40
por clayton braga
Obrigado phophollety pela ajuda, mas será que eu estaria pedindo demais se voce ou alguém pudesse me enviar um exemplo de código? (de preferencia em C) como disse estou começando a programar pic e ainda e estou meio cru nisso, se não, não tem problema ja tenho pelo menos um ponto de partida pra pesquisar a respeito.

obrigado pela ajuda.

MensagemEnviado: 12 Nov 2007 21:03
por phophollety
clayton braga escreveu:Obrigado phophollety pela ajuda, mas será que eu estaria pedindo demais se voce ou alguém pudesse me enviar um exemplo de código? (de preferencia em C) como disse estou começando a programar pic e ainda e estou meio cru nisso, se não, não tem problema ja tenho pelo menos um ponto de partida pra pesquisar a respeito.

obrigado pela ajuda.



Divirta-se!

(Se está aprendendo a programar PIC aprende do jeito certo, ASM!)

http://www.infolaser.net/franpr/tecnica ... sckit.html

[]s

MensagemEnviado: 13 Nov 2007 07:03
por ze
vendo os pulsos do fofo, me veio à mente:
RB3=entrada do pulso (enrtada de captura do timer1)
unsigned int med_larg_pulso()
{
unsigned int larg=0;
while(!RB3);while(RB3);while(!RB3);//desconsidera 1º pulso
while(RB3) larg++;
return larg;
}
Obs: função teórica digitada no local. Falha, avise.
Vai retornar um valor proporcional à largura. Se faltar pulso vai travar na função. (tem como colocar timeout)
Uma solução mais elegante seria usar captura do timer1. Requer leitura do data sheet. Fá-lo-ei eventualmente em momentos futuros.
Se já está no C, siga em frente!!
Abraço.

MensagemEnviado: 13 Nov 2007 08:38
por phophollety
lellis escreveu:vendo os pulsos do fofo, me veio à mente:
RB3=entrada do pulso (enrtada de captura do timer1)
unsigned int med_larg_pulso()
{
unsigned int larg=0;
while(!RB3);while(RB3);while(!RB3);//desconsidera 1º pulso
while(RB3) larg++;
return larg;
}
Obs: função teórica digitada no local. Falha, avise.
Vai retornar um valor proporcional à largura. Se faltar pulso vai travar na função. (tem como colocar timeout)
Uma solução mais elegante seria usar captura do timer1. Requer leitura do data sheet. Fá-lo-ei eventualmente em momentos futuros.
Se já está no C, siga em frente!!
Abraço.



Aaaa isso não vale!!! Tem que ser em ASM! ehehhehehe

(sadismo :twisted: :twisted: )

MensagemEnviado: 13 Nov 2007 10:03
por ze
já que é pra sofrer, faça em código hex direto no buffer do programador.

Por incrível que pareça, conheço alguem que o fez!! Isto foi há muitos anos nos primórdios da internet. Era um PIC16C_algumacoisa com eeprom. Havia tempo e paciência. Haviam clientes compreensivos.

Para aumentar o desafio:
Faça em binário. Sem olhar no set de instruções. Com uma luva de boxe. Com venda nos olhos. Comece pelo final. Passe pelo começo. Finalize pelo meio.
:evil: :twisted: :evil: :twisted: :evil: :twisted: :evil: :twisted: :evil: :twisted: :evil: :twisted: :evil: :twisted: :evil: :twisted:

MensagemEnviado: 13 Nov 2007 10:48
por clayton braga
hehehehehe em binário é F*** imagina o tamanho do programa??? ia até dar calo nos dedos hehehehehe e depois que eu terminasse eu podia aposentar ja porque ia ta velhinho.

vou tentar mesmo no C porque é mais facil de aprender e depois quando precisar de alguma função muito especifica ai eu tento fazer em ASM eu tenho um livro de programação em pic com assempler mas é muito sofrido fazer assim pra quem ta começando heheheh na minha opniao é melhor aprender em c pra familiarizar com o pic e depois aprofundar no assembler.

MensagemEnviado: 13 Nov 2007 11:29
por phophollety
clayton braga escreveu:hehehehehe em binário é F*** imagina o tamanho do programa??? ia até dar calo nos dedos hehehehehe e depois que eu terminasse eu podia aposentar ja porque ia ta velhinho.

vou tentar mesmo no C porque é mais facil de aprender e depois quando precisar de alguma função muito especifica ai eu tento fazer em ASM eu tenho um livro de programação em pic com assempler mas é muito sofrido fazer assim pra quem ta começando heheheh na minha opniao é melhor aprender em c pra familiarizar com o pic e depois aprofundar no assembler.


iiii, esse tópico é velho, tem longas discussões disto por aqui, o fato é, depois que estiver beleza em C nunca mais vai querer tocar em ASM hehehe

MensagemEnviado: 13 Nov 2007 15:15
por RobL
Só para aproveitar a corona mas sem discutir:
C e ASM são inseparáveis, ou seja, formam o casal ideal.

MensagemEnviado: 13 Nov 2007 19:45
por phophollety
RobL escreveu:Só para aproveitar a corona mas sem discutir:
C e ASM são inseparáveis, ou seja, formam o casal ideal.


Taí!

Dessa eu gostei! uahuahuhau

Mas nossa, esse tópico desvirtuou total o assunto!

Daqui a pouco um modera da um jeito...