Autor Tema: Servo Futaba  (Leído 4781 veces)

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

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Servo Futaba
« en: 22 de Enero de 2007, 00:27:51 »
Hola a todos:

Otra vez molestando.
Estoy tratando de mover un servo futaba "fp-s128 indirect driver" eso es lo que dice, lei por ahi que hay que mandar pulsos con un retardo de cada pulso de 20ms. y hay que enviar entre 1 y 2 ms segun el sentido que quiera dar.
Lo que hice es este ejemplo que puse abajo.
Puse 2ms en 1 y para completar los 20 puse 18ms en 0. El servo se mueve hasta que encuentra el final pero cuando le pongo un poco de resistencia con los dedos no gira.
Tenia entendido que tiene un torque de 3.5kg por cm. Puede ser que este haciendo algo mal o estos servos no tienen furza?
Conecte los tres cables de esta manera.
Negro a masa
Rojo a 5v
Blanco a pata B6 que es la de control.
Espero puedan ayudarme

Desde ya muchas gracias

#include <18F452.h>

#use delay (clock=4000000)
#fuses XT, NOPROTECT, PUT, WDT, BROWNOUT, NOLVP, NOCPD, NOWRT

void main(void) {
   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
   enable_interrupts(INT_RTCC);
   enable_interrupts(global);
   while(true) {
      output_bit(PIN_D6,1);
      delay_ms(2);
      output_bit(PIN_D6,0);
      delay_ms(18);
  }
}

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Servo Futaba
« Respuesta #1 en: 22 de Enero de 2007, 01:30:41 »
No entiendo nada de C, pero si se mueve, el codigo esta bien. La mayoria de los servos tienen una fuerza que depende de la tension de alimentacion, dentro de cierto rango. ¿No probaste de alimentarlos con 6V? ¿?La fuente es capaz de entregar unos 200mA?

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Servo Futaba
« Respuesta #2 en: 22 de Enero de 2007, 01:36:16 »
Ok, pruebo con 6v y te digo, pero deberia tener fuerza no?
Te pregunto porque nunca los use

Saludos.
Pablo

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Servo Futaba
« Respuesta #3 en: 22 de Enero de 2007, 01:41:02 »
Yo he usado los HITEC ( fijate el hexapodo en www.ucontrol.com.ar ) y aun a 5V tienen mucha fuerza, de hecho, si los agarras del eje con los dedos es muy dificil tenerlo y que no se muevan.
Eso si...en esas condiciones de frenado le exigen a la fuente casi 200mA. No se que pasaria si la fuente es muy chica.....  :shock: Supongo que bajaria la tension, y el servo perderia fuerza. Podes medir eso para asegurarte...
Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Servo Futaba
« Respuesta #4 en: 22 de Enero de 2007, 02:01:00 »
Perdoname pero no se electronica solo voy copiando y armando cosas con pics que puedo programar. Por lo que veo tienen una fuente de 12+12 de 1.5A y lo que hice es armar con un 7805 un a fuente regulada. Asi que supongo que soporta mas de 200ma. Es asi no?

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Servo Futaba
« Respuesta #5 en: 22 de Enero de 2007, 02:28:44 »
Si, el 7805 entrega unos 500mA sin disipador, y con un buen disipador segun la hoja de datos llega a 1A.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Servo Futaba
« Respuesta #6 en: 22 de Enero de 2007, 12:41:33 »
Ok, gracias.
La coneccion al cable blanco va directo a la pata o necesita una resistencia?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Servo Futaba
« Respuesta #7 en: 22 de Enero de 2007, 18:58:42 »
Si te refieres al cable que recibirá los pulsos PWM puede ir directo, sin resistencia, aunque supongo que si le pones una no muy alta también irá bien.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Servo Futaba
« Respuesta #8 en: 22 de Enero de 2007, 20:27:37 »
No hay caso muchachos, tengo en este momento 2 problemas.
1. no gira hasta el final, pienso que los tiempos no estan bien.
2. Sigue sin tener fuerza, pero cuando hablo de fuerza es nula, no podria mover nada.

Yo pienso que es la programacion, no podrian darme una mano y mirar el codigo para ver si esta bien, por ahora solo necesito que gire en un solo lado 360º, vi que hay que abrirlo y sacarle un tope.

Espero su ayuda gracias por las respuestas.
Pablo

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Servo Futaba
« Respuesta #9 en: 23 de Enero de 2007, 00:19:46 »
Aitopes era como decias gracias probe con 6v y funciono pero este ejemplo que puse no me va a funcionar muy bien porque tengo que manejar 2 motores y un display de 7seg, por eso estuve buscando por la web hasta que encontre un ejemplo.
Cuando lo pruebo en el proteus con el 16f874 funciona pero cuando lo hago con el que estoy usando 18f452 no hace nada, es mas cuando lo grabo y lo pruebo fisicamente tampoco hace nada.

Pongo el ejemplo http://picmania.garcia-cuervo.com/PICC2.htm esta en el rincon de C
Esta muy bien explicado pero con este pic no me funciona.

Hay algo de configuracion o electronico distinto?

    // Titulo     
     // servo_pwm_232

// Ejemplo con un servo FUTABA S3003
// Alimentación y pulsos a 5V
// Cuadro de Tiempos :
// Periodo 20 ms (Frecuencia 50 Hz)
// Ancho Pulso minimo 0.5 ms
// Ancho pulso medio 1.5 ms
// Ancho pulso maximo 2.5 ms
// TMR0 a 1:16 -> 1 RTCC cada 4.096 ms
// -> 1 Tick cada 0.096 / 256 = 0.016 ms
// -> 20 ms = (4 x RTCC completas) + (1 * RTCC - 30 ticks)
// Ancho Pulso minimo 0.5 ms -> 31 ticks de TMR0
// Ancho pulso medio 1.5 ms -> 93 ticks de TMR0
// Ancho pulso maximo 2.5 ms -> 155 ticks de TMR0

#include <18f452.h>

#use delay (clock=4000000)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use standard_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#define PIN_SERVO1 PIN_D6

const int AJUSTE_FINO_DE_RTCC = 30;
const int ticks_PULSO_MINIMO = 31;
const int ticks_PULSO_MEDIO = 93;
const int ticks_PULSO_MAXIMO = 155;

int1 flagRTCC = 0;
int contRTCC = 0;
int1 flagSERVO1 = 0;
int tSERVO1 = ticks_PULSO_MINIMO;
char Keypress =0x00;

void eco_servos(void);
void ajusta_servo(void);

#int_rda
void rda_isr() {
  Keypress=0x00;
  if(kbhit()){
    Keypress=getc();
  }
}

#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;

  setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
  enable_interrupts(int_rda);
  enable_interrupts(global);
  printf("\r\n\SERVO Commander\r\n\r\n" );
  eco_servos();
  set_TIMER0(0);
  enable_interrupts(INT_RTCC);
  do {
    // DISPARO DEL PULSO PWM
    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);
      }
    }
    // CONTROL DESDE LA RS-232
    if(Keypress!=0x00){
      ajusta_servo();
      Keypress=0x00;
    }
  } while (TRUE);
}

void ajusta_servo(void){

  switch(Keypress){
    // Periodos Prefijados
    case '1': tSERVO1=ticks_PULSO_MINIMO;
              break;
    case '2': tSERVO1=ticks_PULSO_MEDIO;
              break;
    case '3': tSERVO1=ticks_PULSO_MAXIMO;
              break;
    // Inc Dec Periodo
    case '+': if(++tSERVO1>ticks_PULSO_MAXIMO){
                tSERVO1=ticks_PULSO_MAXIMO;
              }
              break;
    case '-': if(--tSERVO1<ticks_PULSO_MINIMO){
                tSERVO1=ticks_PULSO_MINIMO;
              }
              break;
    // Dame Periodo actual
    case 'r': eco_servos();
              break;
  }
}

void eco_servos(void){
  printf("S=%u\r\n",tSERVO1);
}


Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Servo Futaba
« Respuesta #10 en: 23 de Enero de 2007, 06:21:13 »
Me alegro que haya funcionado. Respecto del resto, no conozco el C, asi que no te puedo ayudar...
¿Las definicion del micro empleado en el compilador C es correcta? ¿El micro es compatible pin a pin con el otro? ¿El pin de reset funciona igual? Esas son algunas de las cosas que deberias mirar...
Seguramente algun otro forista te va a dar mas presiciones.

Suerte! :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Servo Futaba
« Respuesta #11 en: 26 de Enero de 2007, 20:11:05 »
Hola:

Bueno lo primero, cuando te refieres a motores...te refieres a servos o a motores de corriente continua, porque de ser motores VDC sólo te hace falta usar el PWM y un puente en H, con lo que la cosa cambia respecto a los servos.

Respecto al Display, yo te recomiendo que te hagas una librería propia para el manejo del display que es muy facil de hacer.

Olvidate del programa de arriba que es muy complejo para manejar dos motores y un diplay...va a ser automático o lo vas a manejar desde el PC enviando cadenas de datos.

Mi consejo es que empieces con los display, luego con los motores y luego con la comunicación serie.

Nus vemos

Desconectado zerovlc

  • PIC10
  • *
  • Mensajes: 28
Re: Servo Futaba
« Respuesta #12 en: 24 de Noviembre de 2010, 05:54:56 »
Haber si te puedo ser de ayuda pablo, yo he emepzado ahora con los servos, en principio he revisado tu programa y la programacion esta bien, en cuanto a que utilices un regulador 7805 para obtener la tension necesaria, has de saber que esos reguladores dan como maximo 1 amperio y disipan apenas 1 watio de potencia y por lo que he leido y calculado estas intentando que con un 7805 regule y disipe 1.4W con lo que o fundiras en integrado o se te pondra al rojo vivo y no te entregara la corriente necesaria ya que el transistor conforme se vaya calentando, dejara de funcionar en estado optivo y notaras una perdida de potencia en este caso fuerza en tu motor, yo te recomiendo que si tienes 12 voltios utilizar una conmutada con el lm2576, y podras alimentar sin problemas los servos, eso si maximo 3 amperios de consumo, y si no puedes hacerte una conmutada tulizar 2 integrados 7805 en paralelo por cada servo, espero que con algunas de las opciones se te solucione si no es asi mandame un privado con tu mail y lo miramos