Donaciones

¿Te ha gustado la página? Si es así, por favor considera hacer una donación para contribuir a su continuidad y mantenimiento. Gracias!

domingo, febrero 19, 2006

Manejando un Servo: Conocimientos previos.

Como se citó en el post previo los motores del tipo SERVO se manejan mediante un pulso.
En este hilo intentaré describir este pulso y proponer un esquema para generarlo.

Como el servo que usaremos será un Futaba s3003 trucado, tendremos que generar un pulso cuadrado de 50 Hz.
Como el periodo es la inversa de la frecuencia tendremos 1 / 50 s = 0.02 s = 20 ms.
Esto quiere decir que el pulso tendrá una periocidad de 20 ms. Este servo específico tiene un control mínimo de pulso de 0.5 ms y un máximo de 2.5 ms. Entonces si queremos que gire hacia la izquierda tendremos que mantener durante 0.5 ms un nivel lógico alto y durante 19.5ms un nivel lógico bajo. El razonamiento es el mismo para la derecha exceptuando que serían 2.5 y 17.5ms respectivamente. Para que el motor se mantenga quieto se usará el valor intermedio, que en este caso es: (2.5 - 0.5) / 2 = 1 ms. A continuación adjunto unas gráficas explicativas:

Movimiento izquierda:
Descripción del pulso: Thigh = 0.5ms, Tlow = 19.5 ms
Movimiento derecha:
Descripción del pulso: Thigh = 2.5ms, Tlow = 17.5 ms
Movimiento centrado:
Descripción del pulso: Thigh = 1.5ms, Tlow = 18.5 ms

Con esto el servo funcionaría correctamente.
Ahora la cuestión se centra en generar este pulso mediante un microcontrolador.
Los microcontroladores suelen tener una serie de puertos de Entrada / Salida, a través de los cuales podemos "leer o escribir" señales lógicas. Estos puertos están compuestos por Pines o patitas agrupadas de ocho en ocho. Para generar este pulso tan sólo tendremos que subir y bajar en el momento adecuado el nivel lógico de uno de los pines de un puerto.
Cuando trabajamos con microcontroladores hay varias formas de tener constancia del tiempo transcurrido, pero por norma general se usarán los Timers o contadores intentando evitar en todo momento la cuenta activa de instrucciones / ciclos. En el próximo hilo trataré al detalle esta cuestión.

11 comentarios:

Burzredion dijo...

Hola Javier:
respecto a los servomotores tengo algunas dudas, primero q nada, con los PIC digamos q un 16F876A se puede generar facilmente señales PWM. Mi problema es como elegir un servo y no tengo muy claro lo del trucaje y si logro hacer q giren 360º funcionará como un motor DC? osea, mientras mande el pulso adecuado para q gire 360º, lo hará constantemente y producira el respectivo movimiento del móvil? o mejor uso un motor DC. Podrías ayudarme? Lo que quiero hacer es un robot seguidor de linea pequeño, solo q me interesa experimentar con los servos. Gracias.

Javier Quevedo dijo...

La elección del motor es una cuestión mecánica más que electrónica. Para ese propósito puedes usar tanto motores de continua como servos trucados. El de continua es un poco más sencillo de manejar pero requiere bastante circuitería adicioal. Lo bueno del servo es que lleva empaquetado tanto la electrónica (tan solo tienes que molestarte en enchufarle la alimentación y una sóla señal de datos) como la reductora para que tenga fuerza.
La mayoría de los servos usan el mismo tipo de pulso pero lo ideal es que sea cual sea el que compres sepas bien que puedes trucarlo y los parámetros de su pulso.
Una elección aconsejada son los servos futaba , por ejempo el s3003, ya que son baratos, buenos y las especificaciones son ámpliamente conocidas.

PD: Efectivamente puedes usar un servo para que gire 360 constantemente como un motor DC.

Anónimo dijo...

Hola, que tal, desde hace tiempo vengo trabajando con un servo futaba s3003, pero al contrario que ustedes a mi no me resulta tan facil. Me explico:
1/Lo de crear el software del micro, para el control de pulsos de periodo 20ms y con duty de entre 1ms y 2ms no tengo problema, o al menos eso me muestra como ustedes sabran el proteus en el osciloscopio.
2/Proteus = bonito; pero a la hora de quemar el pic y probar nanay, ni funciona y aun por encima ya me baje dos servos.
Si tienen algun codigo por ahi en c preferiblemente con el compilador de ccs les estaria agradecido ya que no tengo ni idea por que me gusta romper todos los servos que manejo.
LES DEJO MI MAIL-> alberto__pa@hotmail.com
PD -> Gracias por su tiempo y la barra baja del mail son dos no una.

Javier Quevedo dijo...

El problema de grabarlo tiene fácil solución. Lo más barato es hacerse o comprar un T-20. Luego puedes usar el programa gratuito ic-prog que conectando al puerto serie de la computadora el T-20, te permite grabar la memoria del pic con el fichero .hex que haya generado tu compilador (en este caso ccs).

El asunto del código es aun más sencillo de solucionar.
Con este código ya debería de funcionar en al menos una dirección:
while (TRUE) {
delay_ms (300);
output_high (PIN_B0);
delay_ms (1700);
output_low(PIN_B0);
}
Prueba a intercambiar esos valores en "ms" para ir alterando el funcionamiento.
Una vez que esto te funcione, te recomiendo que hagas una implementación por interupciones.
Si sigues interesado puedo enviarte un programa que realicé hace unos meses para controlar 8 servos simultaneamente con cualquier pic 16F.

Un saludo.

Anjaneya dijo...

hola a mi si me gustaria que mandases el programa de interrupciones para contoloas los servos.

te comento mi proyecto estoy intentando hacer un dimmer para unas bombillas inc. tenia pensado controlarlo con PWM, pero me he dado cuenta que solo puedo controlar el ciclo el ancho del pulso positivo y ya... bueno la cuestion es que pensaba utilizar un triacentonces para controlar la intensidad de la luz tengo que controlar el angulo de disparo y el momento en que pasa por 0 la onda de CA.... bien he visto en la pagina de microchip un dimmer, ellos utilizan un I/O del uC para detectar el paso por 0, no se muy bien como haran esto, pero bueno seguir mirando.
bueno con el rollo se me ha olbidado la pregunta... ahh si crees que pueda controla con PWM el encendido de una lamp inc. sin tener que identificar el paso por 0, deduzco que se puede pero tambien creo que sera poco preciso el control de luz ademas cndo programe los diferentes PWM lo que tendre que variar sera el perior (me equivoco), aun que pensandolo bien, si logro detectar el paso por 0 puede utilizar un simple dalay, no???
muchas gracias

Javier Quevedo dijo...

Anjaneya con motivo de tu comentario he iniciado una serie de hilos para resolver tu problema. Espero que te esa de utilidad.

Como hacer un Dimmer con un Triac y un Microcontrolador. Primera parte

Anónimo dijo...

Hola a todos
Javier me seria de mucha utilidad que enviaras el codigo ya que yo estoy tratando de controlar 5 servos mediante la interrupcion timer 2 y aun no lo logro te agradeceria mucho enviaras el codigo
Pia

Javier Quevedo dijo...

Lo he subido a esta dirección:
Controlador de servos.
Recuerda que para compilarlo necesitas el compilador (original a ser posible) CCS Pic C compiler.

Pondré un post explicando como funciona y como manejarlo.
Espero que te sirva de ayuda.

Anónimo dijo...

espero tu post con ansias
muchas gracias
Pia

Anónimo dijo...

Hola a todos, mi nombre es Jesús:
He visto que javier y anjaneya estais haciendo el mismo proyecto que yo. El dimmer controlado con PIC. Si podeis ayudarme en como programar el PIC os lo agradeceria muchisimo xk no tengo mucha idea de como hacerlo, solo lo que he ido leyendo, y no sé si es mejor programarlo en ensamblador o en C. Veo que ustedes lo haceis en C, yo pienso que será mas fácil en C.
Mi correo es enchaeou@hotmail.com, por favor si son tan amables ayúdenme con esto. Muchas gracias. Saludos. Jesús.

Javier Quevedo dijo...
Este comentario ha sido eliminado por el autor.