TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: franda en 16 de Julio de 2004, 09:56:00

Título: Control de un SERVO
Publicado por: franda en 16 de Julio de 2004, 09:56:00
Necesito un programa en C para controlar un SERVO, me vale cualquier intervalo para el pulso.

Gracias.
Título: RE: Control de un SERVO
Publicado por: odukec en 16 de Julio de 2004, 11:36:00
Hola..

Creo que deberias por lo menos intentar hacer algo, y mostrar algo de lo que haces para que los demas te ayuden..

Para controlar un servo solo necesitas generar en el pic una señal cuadrada con un ancho de pulso que depende del angulo al que quieres mover el servo.. es muy sencillo, esto depende del modelo del servo y sus caracteristicas.

Saludos
Título: RE: Control de un SERVO
Publicado por: franda en 19 de Julio de 2004, 00:32:00
Esto es lo que he hecho, a ver que os parece

Codigo:
/************************************************************************
*                                                                       *
*                        SERVO                              *
*                                                      *
*         Si RA0=1 --- > SERVO EN POSICION 0º                     *
*         Si RA0=0 --- > SERVO EN POSICION 180º                  *
*                                                           *
*                                                                       *
************************************************************************/

#include <16F876.h>

#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT

#use delay (clock=4000000)

#use fast_io(A)
#use fast_io(B)

main()
{
   short I1;
   set_tris_a(0x1F);
   set_tris_b(0x00);   

     while (1)                    
     {
      I1=input(PIN_A0);      
      
      if(I1==1)               // Posición 0º      
      {
         output_bit(pin_b0,1);
         delay_us(200);
         output_bit(pin_b0,0);                  
         delay_us(19800);               
      }         
      else                  // Posición 180º      
      {
         output_bit(pin_b0,1);
         delay_us(2200);            
         output_bit(pin_b0,0);
         delay_us(17800);                                 
      }   
     }
}  

Título: RE: Control de un SERVO
Publicado por: pocher en 23 de Julio de 2004, 10:28:00
Nadie le va a decir nada a este hombre, si lo ha hecho bien o si lo ha hecho mal ?
Título: RE: Control de un SERVO
Publicado por: YF-21 en 13 de Enero de 2005, 14:46:00
Lo siento, apenas estoy investigando lo de los servos. Asi que yo no te puedo ayudar Enfurruñado
Título: RE: Control de un SERVO
Publicado por: Lager. en 13 de Enero de 2005, 16:02:00
Le acabo de dar un ejemplo muy sencillo a el pana Modulay para servos, reviza en su sitio web haber si esta disponible, si no puedes pedirselo, realmente manejar un servo es de lo mas sencillo, pero como en todos estos bichos mientras mas precision(usando asm,el pwm,timer..etc) mejores resultados, pero la idea de este ejemplo fue hacerlo sin asm ni modulos hardware(por tanto es inpreciso en 1%)

Salu2
Título: RE: Control de un SERVO
Publicado por: mandoa en 17 de Enero de 2005, 04:44:00
Hace algún tiempo hice un programilla similar a este; con el protoboard me funciona correctamente; solo hay que tener en cuenta que al alimentar el circuito, debes de utilizar 2 alimentaciones distintas, una para el pic y otro circuito para los servos.
Espero que te sea de ayuda.Sonrisa
Título: RE: Control de un SERVO
Publicado por: odukec en 18 de Enero de 2005, 06:44:00
Hola..

No es más fácil usando el PWM..?, bueno.. lo unico que no se es a que frecuencia deberia trabajar, creo que depende del servo, pero variando el duty se lograria conseguir cualquier ángulo en el servo. RollEyes

Saludos
Título: RE: Control de un SERVO
Publicado por: pocher en 18 de Enero de 2005, 12:22:00
A ver si digo una burrada. Voy a mojarme.

La frecuencia de funcionamiento de los servos suele estar comprendida entre 50Hz (T=20ms) y 100Hz (T=10ms), por lo tanto con el PWM hardware no se puede ya que el Tmax que se puede obtener con PWM hardware es Tmax=4,096 ms.

Un saludo