Linux Droids Blog

Experiencias y Proyectors robóticos de Sphinx

Probador de Servos con el integrado 555 8 febrero, 2009

Filed under: Electrónica — Sphinx @ 19:23

boton_electronica.pngExisten otras formas de pilotar un servo, además de la conocida por los aficionados a la robótica de hacerlo utilizando un microcontrolador. En este artículo pretendo explicar como hacer un circuito para pilotar un servo utilizando el archiconocido timer 555. En internet puedes encontrar múltiples referencias a circuitos como este. Este pretende ser uno más.

Lo básico sobre los Servos

Como ya conocemos, un servo necesita una señal de onda cuadrada de una frecuencia de entre 50 a 60 Hz (es decir, un periodo o duración de ciclo de entre 20 a 16,66 milisegundos respectivamente) , donde el pulso alto de la señal tenga una duración de entre 1 a 2 milisegundos:

  • Cuando el pulso tiene una duración de 1,5 ms el servo se situará en su posición central.
  • Cuando el pulso es de 1ms, el servo girando en un sentido (p.ej. antihorario) situándose 90º de la posición central .
  • Cuando el pulso es de 2ms, el servo girando en otro sentido (p.ej. sentido horario) situándose 90º de la posición central.

En la imagen encontrarás la misma descripción visual de lo que acabo de escribir. Es lo que necesitamos conocer de momento para crear este circuito. En cualquier caso, la datasheet de cada servo mostrará la información adecuada respecto a cual es el valor en milisegundos que necesita para llegar a cada extremo, es decir a 0 y 180 grados.

grafico-servos.gif

Si quieres más saber como funciona un servo por dentro te recomiendo este enlace.

Objetivos

Bien, en este punto ya sabemos lo que queremos. Ahora, hay que hacer lo siguiente:

  1. Diseñar un circuito que nos permita generar esa señal, y …
  2. por supuesto hacerlo para que podamos controlar la duración de los pulsos altos.

Lo básico sobre multivibradores astables con el C.I. 555

Para generar una señal de onda cuadrada, nos vamos a basar en el C.I. 555. Este circuito integrado lo podemos utilizar como multivibrador astable.

Nada más sencillo que ir a la “hoja técnica” de los fabricantes (p. ej. STMicroelectronics, Texas Instruments o Fairchild) para encontrar los datos de como configurar el C.I. como astable, con sus ecuaciones correspondientes. Los datos son básicamente los siguientes:

Donde la forma de onda que se genera a la salida del pin 3 del integrado es la siguiente:

Y las ecuaciones asociadas a los tiempos que encontramos en esas mismas hojas son :

[PULSO NIVEL ALTO] > t1= 0,693 * (RA+RB) * C1

[PULSO NIVEL BAJO] > t2 = 0,693 * RB * C1

por tanto:

T = t1 + t2 = 0,693 * ( RA + 2RB ) * C1

f = 1 / T = 1,44 / (RA + 2RB ) * C1

Aplicando estos cálculos, y jugando con los valores de los periodos que queremos obtener, es muy sencillo obtener los valores de los componentes: resistencias y condensador.

¡¡¡ OJO !!! Si te fijas bien, t1 siempre va a ser mayor que t2. Esto lo muestra también el dibujo de la forma de onda, y se traduce en que el periodo más corto corresponde al pulso de nivel bajo, y el más largo al del pulso alto. Si comparas esta forma de onda con la que se muestra en el apartado anterior donde describimos los servos, vemos que es inversa. Para solucionar esto, tendremos que poner un inversor a la salida del 555.Como consecuencia de todo esto, tenemos que centrarnos en el tiempo t2, que es el que vamos a controlar.

Dado que tenemos 3 variables (RA, RB y C1) y 2 ecuaciones (las de arriba [PULSO NIVEL ALTO] y [PULSO NIVEL BAJO]), fijemos C1 a un valor entorno a 0,1 µF, y veamos los valores de las resistencias para RA y RB en el caso de t2 = 1ms :

RB = t2 / (0,693 * C1 ) = 1,44 * t2 / C1 = 1,44 * 0,001 / 0,0000001 = 14400 Ohms

RA = (t1 / (0,693 * C1 ) ) – RB , esta la resolveremos conociendo t1. Dado que queremos que la forma de onda sea de 50 Hz, el periodo total T = 20 ms , luego:

t1 = T – t2 = 20 – 1 = 19 milisegundos. Luego aplicando este valor:

RA = (0,019 * 1,44 / 0,0000001 ) – 14400 = 259200 Ohms.

Estos valores de RA y RB son para generar un pulso con t2 = 1 ms.

Podemos volver a repetir los cálculos para ver cuales son los valores si t2 = 2 ms. De este modo, nos hacemos una idea de como deben variar los valores de RA y RB para que obtengamos un circuito que genere esa variación de t2.

Esto solo ha sido un ejemplo de como hacer los cálculos básicos de un astable con el 555. En internet se pueden encontrar muchísimas páginas con programas calculadora de astables con el 555 que ahorran hacer estos pasos. Puedes hacer click aquí para ver en Google todas las paginas referentes a calculadoras para el 555 , o simplemente utiliza esta calculadora de astable con 555.

La razón de mostrarlos es para justificar lo fácil que resulta pasarlos a una hoja de cálculo, como la que muestro en el siguiente apartado, y jugar con los valores, ajustándolos para obtener el rango de ancho de pulsos deseados.

Diseño de nuestro circuito controlador de servos

Para crear un generador de pulsos para el servo como el que necesitamos, existen varias configuraciones que también podéis encontrar en internet. Todas parten del diagrama que muestran los fabricantes en los datasheet del 555.

Yo he revisado, ajustado y probado esta:

astable555paraservo.gif

A la derecha se encuentra un transistor NPN y 2 resistencias. Este es el que vamos a usar como inversor de la señal generada por el 555. La señal invertida se obtiene del colector del transistor.

A la izquierda se muestran dos resistencias y un potenciómetro para poder regular el ancho del pulso.

Ahora, con esta configuración de resistencias y potenciómetro, tenemos que los valores que tendrían las R1 y R2 son:

RA = R1 + RPot( entre 1A y 1S en el diagrama)

RB = R1 + RPot( entre 1S y 1E en el diagrama)

Tomando como referencia los valores obtenidos en el ejemplo del apartado anterior, he ido jugando con ellos, modificandolos ligeramente, hasta llegar a unos valores de potenciómetro y resistencias R1 y R2, que me proporcionasen algo menos de 1 ms cuando el potenciómetro se encuentre en un extremo, y algo mas de 2 ms cuando lo movamos al extremo contrario. Para ello he puesto las ecuaciones en una hoja de cálculo, y estos son los valores más adecuados :

  • R1 = 270 K Ohms
  • R2 = 16,2 K Ohms
  • Rpot = 0 – 22 K Ohms (Lineal)
  • C1 = 80 nF

El resultado de la hoja de cálculos con estos valores es el siguiente:

La primera columna muestra el porcentaje del valor del potenciómetro, que es la que se adicionaría a R2 para llegar al valor de RB que es el que nos interesa para calcular t2. En la segunda se muestra ese valor real en Kilo Ohms.

Como se puede ver en la tabla, en los extremos el potenciómetro sitúa los valores de la duración del pulso en aproximadamente 0,9 ms y 2,1 ms. Perfecto para probar casi todos los servos del mercado.

NOTA respecto a la frecuencia: Evidentemente con este diseño, la frecuencia no es fija. Varía entre 52 Hz y 55,5 Hz. Esto no debe de ser ningún problema, puesto que como hemos mencionado anteriormente la mayoría de los servos comerciales admiten trenes de pulsos de frecuencias entre 50 y 60 Hz.

Los valores seleccionados de los componentes son fáciles de conseguir con valores de los componentes comerciales:

  • R1 = 270 KOhms
  • R2 = 16,2 KOhms = 15 KOhms + 1,2 KOhms (resistencias en serie)
  • C1 = 80 nF = 47 nF + 33 nF (condensadores en paralelo)
  • El potenciómetro de 22KOhms es un valor comercial. Debe de ser lineal, para que sea proporcional la posición del potenciómetro y la posición del servo.
  • Para el transistor es valido cualquiera NPN de propósito general : SC107B, BR337,…
  • Y para las resistencias del mismo, RT1 y RT2 es suficiente dos resistencias de 10KOhms.

Estas imágenes muestran la forma de onda en los distintos puntos del circuito. La primera, en la parte superior muestra la forma de onda en la patilla 6 del 555, es decir, la carga del condensador, y en la parte inferior la señal en la patilla 3 del 555, es decir, la señal generada:

pwm555_cond_y_salida555.jpg

Y esta segunda imagen, muestra en la parte superior la misma señal que antes, es decir, la carga del condensador (patilla 6 del 555), y en la parte inferior la señal en el colector del transistor, es decir, la señal ya invertida:

pwm555_cond_y_salidainvertida.jpg

En mi area de descargas podréis bajar la hoja de calculo para el calculo de los valores del circuito y el esquema del circuito.

Circuito final

Para crear el circuito yo he utilizado una placa de topos. En un espacio reducido puedes incluir todos los componentes y encapsularlos en una caja apropiada para ello. Yo he utilizado una caja de punto telefónico.

Probador de Servos Terminado 02

He soldado una placa pequeña en perpendicular a la que lleva los componentes, ayudándome de pines. En ella he puesto 2 grupos de 3 pines (cada 3 pines para un servo) Así tengo un par de conectores y puedo pilotar hasta 2 servos a la vez.

Probador de Servos Terminado 03

Como se pueden ver en las imágenes, he sacado el potenciometro por la parte superior de la caja.

Probador de Servos Terminado 01

Para la alimentación, he acodado 4 pines por el lado opuesto a por donde he sacado los pines para los servos. Estos 4 pines está en una posición tal que me permiten usar un conector de alimentación de disquetera utilizando mi fuente de alimentación de laboratorio (que es básicamente una fuente de alimentación de un PC, adaptada, de la que he conservado un cable con un conector tipo disco duro y otro de disquetera).

Esta última imagen muestra la caja cerrada, con el lateral donde van los pines para conectar los servos; a falta de serigrafiar el exterior para la graduación del potenciometro y las etiquetas de los conectores.

Probador de Servos Terminado 04


Anuncios
 

16 Responses to “Probador de Servos con el integrado 555”

  1. victor Says:

    Muy bueno!

    Muchas gracias, me vino de 10

    Me gusta

  2. Ruben Says:

    genialisimo, el controlar un servo mediante un timer, me puede servir para hacer un brazo robot?
    por q aun no nos dejan usar PIC

    Me gusta

    • Sphinx Says:

      Hola Ruben, este circuito te permite mover los servos con ese potenciometro. Si lo mueves manualmente, puedes mover cada articulación con un potenciometro y jugar con ello. Sin embargo, si quieres que el brazo haga una tarea programada, necesitas conectarlo o a un PIC o a un ordenador que secuencie las ordenes de movimiento del servo.

      Me gusta

      • Ruben Says:

        okk muchas gracias, impletmente tu diagrama en un servo MG995, se mueve pero cada que quiere, y como q se vuelve loco, tendras algun otro circuito para este servo? u otros valores?
        este maneja lo estandar 1ms 1.5ms y 2ms

        Me gusta

  3. Ruben Says:

    lo intente simular en livewire pero no me viene ninguno de los transistores que mostraste, cual puedo ponerle?
    una pregunta, los capacitores son ceramicos o electroliticos?

    Me gusta

    • Sphinx Says:

      Hola Ruben,
      Los condensadores, el C1 deberia ser ceramico. El otro puede ser de poliester.
      En cuanto a los transistores, cualquiera de los que menciono es generico: SC107B, BR337. Puedes buscar otros genericos equivalentes. En internet he encontrado que estos son equivalentes: BC 160…161, BC 303…304, 2N2303.
      Un saludo.
      Ya me cuentas.
      Sphinx.

      Me gusta

      • Ruben Says:

        oko gracias
        pero aun no logro mover el servo XD
        este se pone loco, no ce decide a q lado girar :S

        Me gusta

      • Sphinx Says:

        En la asociación de robotica tenemos una wiki, donde hemos guardado alguna información tambien sobre servos:
        http://wiki.webdearde.com/index.php?title=Actuadores_II#Servomotores
        Ahí verás una tabla con los datos de los fabricantes de servos. EL MG-995 tiene su centro a 1500 milisegundos de ancho de pulso. Yo intentaría implementar el circuito tal cual está en el articulo. Con los mismo valores. Si se te vuelve loco, quiere decir que le estás enviando un ancho de pulso variable. Estás generando una señal inestable, y no sé porqué. Te recomiendo que si tienes un osciloscopio a mano lo pruebes con él. Intenta no alterar ninguno de los valores de condensadores y resistencias. Ponlos tal cual los describo. Te deberían funcionar. Yo lo probé tambien con un MG995, y va bien.

        Me gusta

  4. Jeanne Says:

    Many thanks for taking some time to compose “Probador de Servos con el integrado 555 Linux
    Droids Blog”. Thanks yet again -Connor

    Me gusta

  5. Buenas, tengo curiosidad sobre cuantos servos puedo manejar por cada circuito para 555,solo se puede manejar un servo?, si voy hacer un brazo con 3 servos debo hacer 3 circuitos para cada servo?

    Me gusta

    • Sphinx Says:

      Hola Juan Alberto,
      Cada servo necesita una señal que le diga en que posición debe de estar. Y para que siga en esta posición la señal tiene que llegarle continuamente. Dado que el 555 está dedicado a la generación de esta señal continuamente, efectivamente esta señal servirá para poner a un servo en una posición en concreto. Es decir, un 555 para cada servo es lo adecuado.
      Ahora, si lo que quieres es que 2 servos estén exactamente en la misma posición, pues conecta ambos a la misma señal, que perfectamente puede venir de la misma fuente (ya sea un 555 u otro medio) que genere este tipo de señal.

      Por otro lado, respecto a la cuestión de hacer un brazo robótico de tres servos, no sé si utilizar un 555 es la mejor opción. Como ves en este artículo, el circuito propone controlar la posición del servo con un mando giratorio (potenciómetro). Entonces, si tu brazo consta de tres servos, por ejemplo, hombro, codo y pinza, ¿ qué es lo que vas a hacer ? ¿ tener un potenciómetro para cada servo ? Tu verás, puede ser una opción. Pero lo más lógico es que el brazo sea controlado desde algún sistema que le envíe los datos de posición (como por ejemplo un PC), para que el brazo se posicione, o se mueva de acuerdo a alguna tarea para la que se le quiera programar. La opción de potenciómetros (circuitos con 555 como este), a nivel didáctico está bien. Así se puede aprender las nociones básicas para trabajar con servos. Pero como te comento, el siguiente paso, es aconsejable que tu brazo reciba las señales desde otro sistema, como por ejemplo un microcontrolador, que esté conectado a un PC. En mis articulos de la controladora de 12 servos con un 16F84A ( https://linuxdroids.wordpress.com/2010/06/18/controladora-de-12-servos-con-pic-16f84a/ ) muestro un circuito con un microcontrolador, que genera pulsos hasta para 12 servos a la vez (a cada uno le da un pulso distinto, de manera independiente del resto), y que posee un puerto serie, para conectarlo a un PC. La idea de este circuito, así como algunas otras que iré escribiendo en este blog a continuación van destinadas a eso. A controlar servos desde un ordenador, siendo que un circuito microcontrolador haga de interfaz, hacia el ordenador por un lado, y hacia un conjunto de servos por otro.

      Dime si tienes más dudas.

      Un saludo,
      Sphnx.

      Me gusta

  6. Rolando Says:

    hola!!! 😀
    pues primero que nada muchas gracias, buen post me complemento lo visto en clase y lo estudiado en un libro solo una duda. cuando despejas el t2 en base a la formula de pulso a nivel bajo le agregas un 1,44.. combinas la formula de la frecuencia o porque hay que multiplicar por 1,44??? de ante mano gracias 🙂

    Me gusta

    • Sphinx Says:

      Hola Rolando, 1,44 es el inverso de 0,693. Este 0,693 aparece en las fórmulas de tiempo de carga del condensador en las datasheet del 555. Mira en cualquiera de ellas: ST, Fairchild…. ahí lo encontrarás.

      Me gusta

  7. Camilo. Says:

    Excelente post.
    Amigo te hago una pregunta, si quiero controlar dos servos como lo hago?. Conecto ambos de la salida del transistor o tengo que hacer otras cosas mas?

    Me gusta

    • Sphinx Says:

      Hola Camilo,
      Puedes conectar 2 servos a la salida del transistor sin problemas. Lo he probado yo.
      Lo que no te sé decir es hasta cuantos puedes conectar a la misma salida del transistor. No he hecho el calculo… Si lo consigues averiguar, compartelo en esta lista de respuestas.
      Gracias !!

      Me gusta


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s