Probador de Servos con el integrado 555

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 transistor R3 y R4, 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


Autor: Sphinx

Robotics enthusiast

38 opiniones en “Probador de Servos con el integrado 555”

  1. Bueno, siento haber redundado en informacion que me diste…tampoco quiero pierdas tiempo conmigo por culpa de mi atascamiento…pues soy nuevo en el tema de los servos y aunque tienes enlaces con mucha informacion todo esto se me hace duro de roer. Ahora quiza tenga todo un poco mas claro, en mucha parte gracias a ti.
    Pero tengo una cuestion muy concreta…
    Si deseara usar este circuito para controlar un servo seria posible de alguna manera no demasiado complicada visualizar la posicion del servo de alguna forma? si fuera con numeros mejor….
    Gracias

    Me gusta

  2. Respecto a la primera pregunta que te hice de alimentarlo independiente…si el servo trabajara a 5 voltios pero consumiera hasta 3 amperios (torque de 12 kg/cm) podria usar este circuito tal cual? (Perdona si esto esta contestado en el texto que no lei entero, o es pregunta de despistado, pero estoy aun indagando en como lo voy a hacer)

    Me gusta

    1. Al servo, mientras que lo alimentes a la tensión que admite el fabricante, todo irá correctamente. Si consume mucho el servo, pues ponle una fuente de alimentación que lo alimente correctamente para los picos de consumo que pueda llegar a tener. Tan solo, como te decía, conectale las masas a ambas fuentes de alimentación.
      Por otro lado, mira las especificaciones del servo para ver qué voltaje debe de tener la señal de control, es decir, el pulso que le llega. Si le vale con 5 Voltios, pues ponle 5 Voltios. No he probado a ponerle más tensión, pero no debería de ser un problema subirle algo más, hasta 7 V. quizá. Lo único, que te cambien las duraciones de los pulsos… es cuestión de probar directamente y chequear con un osciloscopio.

      También es interesante separar la alimentación del servo de la del circuito generador de pulsos, porque a veces los picos de consumo del motor del servo (que no deberían de ser mucho), podrían influir en la señal del generador del pulsos.

      Me gusta

      1. Si…estoy pensando en alimentar este circuito con un USB y el servo con una fuente independiente…deberia funcionar no?

        Me gusta

      2. Funcionaría. El 555 admite voltajes de 4,5. Mira en cualquier caso la datasheet del fabricante del integrado 555 que vayas a comprar, por si acaso.
        Por otro lado, insisto, mira la datasheet del fabricante del servo para asegurarte de que admite pulsos de 4,5 voltios también.

        Me gusta

  3. Bueno el tema es que necesito un circuito lo mas sencillo posible para hacer girar 2 servos (con movimientos independientes). Este probador solo mueve el servo a 0, 90 y 180 grados o obtiene con el potenciometro posiciones independientes? Si fuera asi quiza me serviria, pero que precision tendria? Se puede controlar eso o de alguna manera?
    Gracias por su ayuda.

    Me gusta

    1. Hola Tano,
      Este circuito probador, mueve el servo a cualquiera de los angulos posibles que pueda adoptar. El pulso que se envía, como puedes ver en la tabla del artículo tiene una duración mínima de 0,89 milisegundos hasta 2,11 milisegundos. El potenciómetro permite que el ancho de ese pulso tenga cualquier valor entre estos mencionados, lo que se traduce en cualquier angulo entre 0º y 180º para la mayoría de los servos.
      Para saber qué anchos de pulso admite cada servo, mira las especificaciones del mismo.
      Te recomiendo que leas el artículo a fondo.

      Por otro lado, hablas de 2 servos independientes… Entiendo que tendrás que hacer dos circuitos iguales. Uno para cada servo.

      En cualquiera de los casos, habría que saber para qué quieres controlar esos servos. Ten en cuenta que el control que le vas a dar con este circuito es con un potenciómetro….. piensalo. A lo mejor quieres hacer un control remoto de los mismos, en cuyo caso seguramente tengas que contar con un microprocesador para generar los pulsos…. Eso va en función de tu diseño, como digo.

      Me gusta

      1. Bueno es para un soporte para una antena direccional wifi… creo que con 2 grados de precision ya me bastaria…ya que mis puntos de acceso apenas estan a 20 m y eso me daria posiciones de 40 en 40 cm que creo son suficientes para orientarme hacia estos puntos de acceso. Quiza tambien mejore la precision metiendo unas rueda dentada en el medio, asi cada movimiento que le envie el servo al soporte se podria dividir entre 2 o mas…al colocar una rueda de diametro 2 al servo engranada con otra de diametro 4 por ejemplo.
        De todas maneras y que no te resulte ofensivo, estuve viendo probadores en amazon, imagino seran algo parecido a lo que tu aqui realizas…como tengo mucho lio por la electronica y la mecanica quiza ahorre esfuerzos y me decida por comprar alguno de estos…te dejo los enlaces para que los veas.
        https://www.amazon.es/TOOGOO-Probador-Consistencia-Verificador-4-8-6V/dp/B00HE5BYXQ/ref=sr_1_1?ie=UTF8&qid=1516962861&sr=8-1&keywords=probador+servos
        https://www.amazon.es/GoolRC-Probador-Dominar-Consistencia-Helic%C3%B3ptero/dp/B01CRT6X5C/ref=sr_1_3?ie=UTF8&qid=1516962861&sr=8-3&keywords=probador+servos
        Espero no te ofenda por la filosofia del “hazlo tu mismo” y te agradezco mucho que respondas mis preguntas y seas tan atento, gracias de veras. Salud.

        Me gusta

      2. No, no, en absoluto. Cada uno puede optar por la opción que prefiera. El “hazlo tu mismo” a mi me trae satisfacciones, por el hecho de que lo he estudiado, planificado, calculado y desarrollado yo mismo, y después a otros les puede servir tal cuál, e incluso lo pueden mejorar o adaptar a sus proyectos. Pero la contrapartida es que te quita tiempo. Si no puedes disponer del tiempo para hacer todos esos pasos, o sencillamente, se prefiere una solución hecha, pues ahí están soluciones fabricadas. 😉
        Sobre tu proyecto:
        – Si vas a manejar el potenciómetro con la mano tú mismo, pues puedes buscar un potenciómetro con mucha resolución. El circuito es analógico. El potenciómetro dará un valor de resistencia, y en función de ese valor, van los cálculos del ancho del pulso. De modo, que pueden ser tan precisos, como valores puedas obtener del mismo.
        – Además de la resolución del potenciómetro, efectivamente, si utilizas engranajes, vas a ganar en resolución, pero ten en cuenta que si tu servo es de 0 a 180 grados, y tus engranajes tienen una relación de 2 a 1 , vas a obtener un rango en el movimiento del objeto de sólo 90° máximo. Si fuese de 3 a 1, de tan solo 60° máximo. Y así sucesivamente…

        Me gusta

  4. Tambien queria saber si, en caso de que la alimentacion del servo fuera independiente con otra fuente de alimentacion, si podria ser o como seria el circuito.

    Me gusta

    1. Hola de nuevo Tano,
      Perfectamente. Puedes alimentar el servo con otra fuente distinta de la que alimenta este circuito. Pero para que el servo reciba la señal correctamente, debes conectar la tierra o masa de la batería o fuente de alimentación que alimente al servo, a la masa de este circuito.

      Saludos

      Me gusta

    2. Bueno entonces decidi coger la alimentacion del probador del USB de mi ordenador…me surgen preguntas:

      Como me comentaste… entonces debere conectar desde el negativo de la salida del probador de servos (1 ) un cable hacia el negativo de USB y otro hacia el negativo de la fuente de alimentacion que alimenta el servo.
      Por otro lado mandare la señal al servo (desde 3) quedando 2 libre en el probador.

      Alguna proteccion para el negativo que va hacia el USB? Me da un poco de miedo que algo que suceda en el servo pueda repercutir en mi USB…Recomendado poner algun tipo de proteccion para el USB?

      Por otro lado al elegir un servo digital (debido al precio) no se si el consumo de un servo de 20kg/cm digital podria llegar a 6A con 5V…los cables de señal y alimentacion del servo llegarian alos 4 metros de longitud….Podra repercutir esto en el funcionamiento? Que seccion de cable deberia poner en ambos casos?

      Bueno espero agradecido tu respuesta, y perdona sea tan simple y tenga que preguntarte asi muy basico, pero la electronica fue solo un hobby hace decadas para mi.

      Me gusta

      1. Bueno imagino el circuito por lo poco que lei no servira…debido a que trabajan a distintas frecuencias y diferentes pulsos? Es asi o me equivoco?

        Me gusta

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

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

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

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

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

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

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

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

      2. Hola Wicho, sí, por supuesto. Esos transistores que mencionan, también son válidos para sustituir al transistor T1 del diagrama, puesto que también NPN.
        Saludos!

        Me gusta

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

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

Deja un comentario