Autor Tema: Programa para mover un Servo indefinidamente  (Leído 4263 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Celacanto

  • PIC10
  • *
  • Mensajes: 6
Programa para mover un Servo indefinidamente
« en: 08 de Abril de 2014, 14:42:15 »
Hola a todos los foreros!

Soy bastante nuevo en este mundo de la electrónica, y la verdad es que me apasiona, porque la combino con otra de mis grandes pasiones... la Magia!
Pues sí, como veis, la electrónica y la magia se llevan bastante bien en los tiempos que corren, y por ello me he embarcado en un proyecto que me está quemando las neuronas... ya que, como os acabo de comentar, soy bastante nuevo en el mundo de la programación en C.

Al lío:
He hecho un programita en CCS con el objetivo de hacer que un servo se mueva indefinidamente de 0º a 90º y a 180º, y vuelta a empezar... Para ello lo que he hecho ha sido modificar un programa del gran REDPic (gracias por tus artículos!!!), añadiendo un switch que lo que hace es cambiar automáticamente, cada 50 pulsos, la duración de los pulsos generados que llegan al servo.

Sin embargo, aunque esta mañana me funcionaba a la perfección, hace un rato que el servo sólo se movía en dos direcciones (como si omitiera uno de los casos del switch). No sé si se ha quemado el servo, porque ahora resulta que ni hace el amago de moverse  :shock:  :shock: :shock: Aquí os dejo el programa:


#include <16f628A.h>                  
#fuses INTRC_IO,NOWDT,NOPROTECT,PUT      //ordenes para el programador
#use delay (clock=4000000)               //Fosc=4Mhz
#use standard_io(A)

#define PIN_SERVO1 PIN_A2

const int AJUSTE_FINO_DE_RTCC = 30;     //cada pulso tiene una duración de
const int ticks_PULSO_MINIMO = 44;      //4/4000000 = 1 us * 16 (preescaler) = 16 us
const int ticks_PULSO_MEDIO = 112;
const int ticks_PULSO_MAXIMO = 169;


///////////////TIEMPOS DE LOS PULSOS/////////////
//const int ticks_PULSO_MINIMO = 44;  Son 0.7 ms
//const int ticks_PULSO_MEDIO = 112;   Son 1.8 ms
//const int ticks_PULSO_MAXIMO = 169; Son 2.7 ms
/////////////////////////////////////////////////

int1 flagRTCC = 0;
int contRTCC = 0;
int1 flagSERVO1 = 0;
int tSERVO1 = ticks_PULSO_MEDIO;


#int_RTCC
RTCC_isr(){
  ++contRTCC;
  if(contRTCC==4){
    set_TIMER0(AJUSTE_FINO_DE_RTCC);
  }
  if(contRTCC==5){
    flagRTCC=1;
    contRTCC=0x00;
    }
}

void main() {

int valTIMER0;
int pulsos=0;

  setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
  enable_interrupts(global);
  set_TIMER0(0);
  enable_interrupts(INT_RTCC);

while (1)
{

do {
   if(flagRTCC==1)
     {
      flagRTCC=0;
      output_high(PIN_SERVO1);
      flagSERVO1=1;
     }
 // CONTROL DE ANCHO DEL PULSO PWM
   if(flagSERVO1==1)
     {
      valTIMER0 = get_TIMER0();
      if(valTIMER0>tSERVO1)
       {
        flagSERVO1=0;
        output_low(PIN_SERVO1);
        pulsos++;
       }
     }
  }while (pulsos<50);            //El parámetro pulsos controla el tiempo
                 //que mantiene el servo la posición.
pulsos=0;

switch(tSERVO1){

case ticks_PULSO_MINIMO:
tSERVO1 = ticks_PULSO_MEDIO;
break;

case ticks_PULSO_MEDIO:
tSERVO1 = ticks_PULSO_MAXIMO;
break;

case ticks_PULSO_MAXIMO:
tSERVO1 = ticks_PULSO_MINIMO;
break;
}

}
}


Os pediría un poco de ayuda, a ver si me podéis decir en qué está fallando el programa.

Muchas gracias de antemano.

Un mágico saludo!


« Última modificación: 08 de Abril de 2014, 14:48:07 por Celacanto »

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Programa para mover un Servo indefinidamente
« Respuesta #1 en: 08 de Abril de 2014, 17:16:40 »
Hola Celacanto, despues de revisar el codigo posteado el cual me parece correcto y comentar que antes te funcionaba me decantaria por un fallo en el hardware, revisa las soldaduras y conexiones.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Celacanto

  • PIC10
  • *
  • Mensajes: 6
Re: Programa para mover un Servo indefinidamente
« Respuesta #2 en: 08 de Abril de 2014, 18:48:30 »
Ante todo muchas gracias por responder Miguel!

Me alegra lo que me comentas, pues con eso ya se que no es cosa del programa... Antes de que dejara de funcionar me empezó a hacer cosas raras el servo, así que me dio por tocar el regulador de tensión (un L7805CV) y me quemé el dedo!!! ¿Qué pasó?

Después de aquello, he comprobado que el regulador sigue dándome 5V en la patilla de salida, por lo que no se ha dañado.
El sobrecalentamiento habrá sido por un corto supongo, ¿no?.
Por otra parte, el pic lo he vuelto a programar para que haga parpadear un led y parece que funciona con normalidad.
Sin embargo, el servo... ¿se ha podido quemar? Porque no da señales de vida...

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Programa para mover un Servo indefinidamente
« Respuesta #3 en: 09 de Abril de 2014, 14:40:29 »
... REDPic (gracias por tus artículos!!!)

De nada Celacanto, a mandar que para eso estamos.  :mrgreen:

El Servo ¿no hace nada de nada? ¿no vibra? ¿no tiembla? Normalmente cuando el servo está bien pero es la señal la que le llega mal algo hace, generalmente se va a un extremo y ahí se queda temblando ... si no hace nada podrías olerlo a ver si huele a quemado  :shock:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Celacanto

  • PIC10
  • *
  • Mensajes: 6
Re: Programa para mover un Servo indefinidamente
« Respuesta #4 en: 09 de Abril de 2014, 19:16:26 »
Hola RedPic!!!

En primer lugar, tengo que decirte que para mí es todo un honor que hayas respondido!!!  ((:-)).

Corrígeme si me equivoco, pero creo que acabo de descubrir por qué se ha quemado el servo... El que estaba utilizando era un "Microservo Turnigy Tg9 comp. Futaba, Hitec", y parece ser que este tipo de servos funciona a un voltaje de 4,8 V. El PIC lo estaba alimentando a 5V, a través de un regulador de tensión, pero el servo... lo estaba alimentando directamente con una pila de 9V  :5]. Claro, en cuanto el circuito estuvo funcionando durante más de 10-15 segundos, se quemó el potenciómetro del servo y se produjo un corto, lo que provocó el sobrecalentamiento del regulador. Ay, he pagado la novatada!!!

A comprar otro servo!

Por cierto, por su parte, el pic (un 16F628A) en el pin RA4 sólo funciona como entrada, pero no como salida. He hecho la prueba para que parpadee, poniéndolo en high y low indefinidamente y no responde... ¿Se habrá estropeado como consecuencia del corto provocado por el servo? El pin que mandaba señales al servo era otro diferente (el RA2)

Muchas gracias de nuevo y un saludo!!! ;-)


Desconectado Celacanto

  • PIC10
  • *
  • Mensajes: 6
Re: Programa para mover un Servo indefinidamente
« Respuesta #5 en: 09 de Abril de 2014, 20:26:22 »
No he dicho nada... acabo de encontrarme con tu artículo titulado "El PORTA de los PIC's y una de sus particularidades : RA4".

Pues no queda nada más que decir... me quito la chistera  :oops:

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Programa para mover un Servo indefinidamente
« Respuesta #6 en: 10 de Abril de 2014, 07:52:21 »
esas cosas pasan en las mejores familias, bienvenido al club ja, ja, ja  :D :D :D

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Celacanto

  • PIC10
  • *
  • Mensajes: 6
Re: Programa para mover un Servo indefinidamente
« Respuesta #7 en: 10 de Abril de 2014, 08:09:50 »
Una última pregunta, RED!

Quiero que tanto el pic como el servo funcionen con la misma batería, pero el consumo en ambos casos es muy distinto... he visto que hay placas de iniciación como la que tiene la BasicStamp de Parallax, donde con una misma batería son alimentados ambos elementos... ¿qué tengo que hacer para que el amperaje del servo no afecte al pic?

Gracias de nuevo!!! :-/

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Programa para mover un Servo indefinidamente
« Respuesta #8 en: 11 de Abril de 2014, 13:15:33 »
Hola Celacanto, puedes alimentar tu pic y tu servo con la misma fuente, solo que la corriente que consume el motor puede generar oscilaciones en la fuente y resetear tu pic, por lo que es recomendable que le pongas capacitores a la alimentación para evitar estos inconvenientes
"Nada es imposible, no si puedes imaginarlo"

Desconectado Celacanto

  • PIC10
  • *
  • Mensajes: 6
Re: Programa para mover un Servo indefinidamente
« Respuesta #9 en: 12 de Abril de 2014, 13:16:27 »
Hola Rivale!

Eso era lo que necesitaba, porque tras empezar a moverse, la estrella del servo volvía a la posición inicial del programa y empezaba desde cero. Le acabo de poner un condensador y va de lujo.

Muchísimas gracias por tu ayuda Rivale!!!

Un saludo.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Programa para mover un Servo indefinidamente
« Respuesta #10 en: 13 de Abril de 2014, 16:35:42 »
por nada, que bueno que funcionó
"Nada es imposible, no si puedes imaginarlo"


 

anything