Microcontroladores PIC > Lenguaje C para microcontroladores PIC

Problema con cotrol de servos y 16F84A (SOLUCIONADO)

<< < (2/7) > >>

c4_esp_VR:
Pues ocurren varias cosas, no le estas metiendo la señal al servo por la patilla adecuda, por norma el cable blanco y por supuesto tener la alimentación 5V al rojo y la masa al negro, además de tener conectadas entre sí las masas del pic y del servo sino vamos mal.

El servo esté roto, con lo que la única manera de asegurarte es con un osciloscopio para mirar si la señal es la adecuada, por otro lado mira el datasheet del servo a ver si va a tener un rango de tiempos distintos.

Vamos que no debería de darte tantos quebraderos de cabeza algo tan sencillo.

Ya me comentarás haciendo todo lo que te comento.

chacruna:
Los cables estan bien conectados (Naranja = Datos, Rojo = Vcc, Marron = Gnd)

Quizas los servos esten rotos, hoy voy a probar con un servo nuevo.




--- Citar ---"Tower Pro SG90 Micro Servo"

It fit for most brands of radio equipment including Hitec, Futaba, GWS, JR, Sanwa ….

Specification :

* Weight : 9 g

* Size : 22 x 11.5 x 27 mm

* Operating Speed (4.8V no load): 0.12sec/60 degrees
* Stall Torque (4.8V): 17.5oz/in (1.2 kg/cm)

* Temperature Range: -30 to +60 Degree C
* Dead Band Width: 7usec
Operating Voltage:3.0-7.2 Volts


--- Fin de la cita ---


Encontre estos "TowerPro SG90 Test Programs" y por lo que veo las señales son las correctas.



--- Código: ---*** Seeeduino & Towerpro SG90 Test Program - TL Fong 2009jan08

/******************************************************************************
* Hello Servo - Turn TowerPro SG90 servo to middle position
* Created - 2009jan07, Last update - 2008jan07
* Function - Turn servo to middle position
* MPU/Programming language - Seeeduino v1.1/Arduino v12.0
* Author - TL Fong (tlfong01, TaoBao)
* Copyright - Creative Commons Attribution - ShareAlike 3.0 Licence
*
* Test procedure
* (1) FIRST run the program,
* (2) Manually turn servo clockwise or counterclock to limit,
* (3) Connect 5V power and MPU signal to servo,
* (4) WARNING - Disconnect 5V power before stopping program,
*
* TowerPro SG90 Spec
* CCW end 900uS, CW end 2100uS, middle 1500uS, 3.0 to 6.0V,
* 9g, 22 * 11.5 * 27mm, 0.12sec/60 degrees (4.8V no load),
* stall torque 17.5ozin/1.2 kgcm) (4.8V), dead band 7usec,
* coreless motor, all nylon gear, RMB30 (TaoBao).
*
* Notes
* 1. To turn counter clockwise limit, change pulse width from 1500 to 900.
* 2. To turn clockwise limit, change pulse width from to 2100.
******************************************************************************/

int signalPin = 8; //servo signal pin

void setup()
{
 pinMode(signalPin, OUTPUT);
}

void loop()
{
   digitalWrite(signalPin, HIGH);  // control signal high
   delayMicroseconds(1500);        //   for 1500 uS
   digitalWrite(signalPin, LOW);   // control signal low
   delay(20);                      // wait 20mS
 }

/* End of program */

--- Fin del código ---



--- Código: ---
/******************************************************************************
* Hello Servo - v2.0
* Created - 2009jan07, Last update - 2008jan07
* Function - Repeatedly position servo to one end, middle, and the other end
* Servo - Towerpro SG90
* MPU/Programming language - Seeeduino v1.1/Arduino v12.0
* Author - TL Fong (tlfong01, TaoBao)
* Copyright - Creative Commons Attribution - ShareAlike 3.0 Licence
*
* Test procedure
* (1) FIRST run the program,
* (2) Manually turn servo clockwise or counterclock to limit,
* (3) Connect 5V power and MPU signal to servo,
* (4) WARNING - Disconnect 5V power before stopping program.
*
* TowerPro SG90 Spec
* CCW end 900uS, CW end 2100uS, middle 1500uS, 3.0 to 6.0V,
* 9g, 22 * 11.5 * 27mm, 0.12sec/60 degrees (4.8V no load),
* stall torque 17.5ozin/1.2 kgcm) (4.8V), dead band 7usec,
* coreless motor, all nylon gear, RMB30 (TaoBao).
*
* Notes
  * Hold time = 100 * 20mS = 2 seconds
*
* Disclaimer
* Use the program at your own risk.  This program is written by a servo newie.
* There is no guarantee that the program will not damage your servo.
******************************************************************************/

int signalPin = 8; //servo signal pin

void setup()
{
 pinMode(signalPin, OUTPUT);
}

void loop()
{
  for (int i=0; i <= 100; i++)     // turn to CCW end, hold 2 seconds
   {
   digitalWrite(signalPin, HIGH);  // control signal high
   delayMicroseconds(900);        //   for 900 uS
   digitalWrite(signalPin, LOW);   // control signal low
   delay(20);                      // wait 20mS
   }

  for (int i=0; i <= 100; i++)     // turn to middle, hold 2 seconds
   {
   digitalWrite(signalPin, HIGH);  // control signal high
   delayMicroseconds(1500);        //   for 1500 uS
   digitalWrite(signalPin, LOW);   // control signal low
   delay(20);                      // wait 20mS
   }

  for (int i=0; i <= 100; i++)     // turn to CW end, hold 2 seconds
   {
   digitalWrite(signalPin, HIGH);  // control signal high
   delayMicroseconds(2100);        //   for 1500 uS
   digitalWrite(signalPin, LOW);   // control signal low
   delay(20);                      // wait 20mS
   }
 
   for (int i=0; i <= 100; i++)     // turn to middle, hold 2 seconds
   {
   digitalWrite(signalPin, HIGH);  // control signal high
   delayMicroseconds(1500);        //   for 1500 uS
   digitalWrite(signalPin, LOW);   // control signal low
   delay(20);                      // wait 20mS
   }
 }

/* End of program */

[ENDS]
--- Fin del código ---

c4_esp_VR:
Emmm porqué tiene tanto cable en la foto....

En vez de ponerle un periodo de 20ms ponselo de 30ms y sino de 40 y sino de 50 y nada más porque de ahí nunca he visto que funcione bien ningún servo. Aunque arriba usa 20 ms.

Tambien prueba a poner delay_ms(20) en vez de delay_us(20000), por si acaso en us es mucho delay aunque he visto en el compilador que debería de funcionar pero nunca se sabe.

Un saludete.

chacruna:
Pfff tenes razon, no se porque tantos cables :S


Una foto mas acertada.



chacruna:
Acabo de probar con un servo nuevo, varios codigos diferentes, pero nada.

Cuando lo prendo el servo se va a una posicion determinada, si lo muevo (desenchufado) cuando lo vuelvo a conectar vuelve a la posicion anterior.

Pero todavia no responde a ninguna de las 3 señales.


Alguien alguna idea???

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa