Existen 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.

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:
- Diseñar un circuito que nos permita generar esa señal, y …
- 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, National Semiconductor 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:

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:

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:

Descarga aquí la hoja de calculo (formato OpenOffice Calc) para el calculo de los valores 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.

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.

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

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.

Muy bueno!
Muchas gracias, me vino de 10
genialisimo, el controlar un servo mediante un timer, me puede servir para hacer un brazo robot?
por q aun no nos dejan usar PIC
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.
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
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?
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.
oko gracias
pero aun no logro mover el servo XD
este se pone loco, no ce decide a q lado girar :S
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.