Dúvida sobre servomotor.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Dúvida sobre servomotor.

Mensagempor diogomurrer » 20 Jul 2009 15:41

Olá, pessoal! Sou novo no fórum, não sei se já tem um tópico para este assunto, se já existe me desculpem por postar por aqui. Mas vamos lá.

Eu sou novo em pic, tenho um projeto e preciso do controle do servo, estou usando um servo Motorsat (creio ser um servo de antena), sei que o servo tem pulso mínimo de 1ms e máximo de 2ms, então só pra testar, fiz esse código:

Código: Selecionar todos
#include <16f84A.h>
#fuses XT,NOWDT,NOPROTECT,PUT
#use delay(clock=4000000)

main ()
{

   while (TRUE)
   {
      
      
      output_high(pin_b1); //Pulso
      delay_ms(1);         //de
      output_low(pin_b1);  //1 ms
      delay_ms(100);       //Uma pausa de 100 ms só pra eu ver o que acontece
      
      output_high(pin_b1); //Pulso
      delay_ms(1.5);         //de
      output_low(pin_b1);  //1.5 ms
      delay_ms(100);       //Uma pausa de 100 ms só pra eu ver o que acontece
      
      output_high(pin_b1); //Pulso
      delay_ms(2);         //de
      output_low(pin_b1);  //2 ms
      delay_ms(100);       //Uma pausa de 100 ms só pra eu ver o que acontece
      
      
   }

}


Então, no proteus eu fiz uma simulação, e ele só pára em 90º:

Imagem

Então, o que eu estou fazendo de errado? O código que tá errado? Tá faltando alguma coisa? Ou só no proteus que acontece isso e na realidade dá certo? ^^

Alguém pode me ajudar?
Grato!
diogomurrer
 
Mensagens: 2
Registrado em: 22 Jun 2009 15:00
Localização: Belo Horizonte, MG

Mensagempor fabim » 20 Jul 2009 16:36

Primo, servomotor trabalha com tempo de 20mS
ou seja uma resolução de frequencia minima de 50hz.
Sendo
1mS = 180°
1.5ms = 90°
2mS = 0°.

Mais observe, se a frequencia entre amostragens é de 20mS, como pode você dar um delay de 100mS ?

ou seja, Ttotal maximo = 20mS - Ton de controle.

Faz assim ó.


#include <16f84A.h>
#fuses XT,NOWDT,NOPROTECT,PUT
#use delay(clock=4000000)

main ()
{
short tempo
while (TRUE)
{

for(tempo=0; tempo == 100; tempo++){//0°
output_high(pin_b1); //Pulso
delay_ms(1); //de
output_low(pin_b1); //1 ms
delay_ms(10);
}

for(tempo=0; tempo == 170; tempo++){//45°
output_high(pin_b1); //Pulso
delay_ms(1); //de
delay_us(250);
output_low(pin_b1); //1 ms
delay_ms(10);
}


for(tempo=0; tempo == 100; tempo++){//90°
output_high(pin_b1); //Pulso
delay_ms(1.5); //de
output_low(pin_b1); //1.5 ms
delay_ms(10);
}

for(tempo=0; tempo == 110; tempo++){//135°
output_high(pin_b1); //Pulso
delay_ms(1); //de
delay_us(750);
output_low(pin_b1); //1 ms
delay_ms(10);
}


for(tempo=0; tempo == 100; tempo++){//180°
output_high(pin_b1); //Pulso
delay_ms(2); //de
output_low(pin_b1); //2 ms
delay_ms(10);
}


}

}

ispeguimenta, depois c diz o resultado.

Abraços

fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor diogomurrer » 23 Jul 2009 10:28

fabim, eu copiei e colei esse código que me enviou, mas ele contiuou indo até 90º e ficando parado. ¬¬
diogomurrer
 
Mensagens: 2
Registrado em: 22 Jun 2009 15:00
Localização: Belo Horizonte, MG

Mensagempor fabim » 23 Jul 2009 11:07

Sei mais você configurou o setup dele, para minimo angulo de 0.00 e máximo de 180.00 ?
Ou deixou por default ?
-90.0 e +90.0 ?

...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?


Voltar para PIC

Quem está online

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

x