ESTE BLOG COMENZÓ A PUBLICARSE EN 2008, POR LO TANTO MUCHOS DE LOS TEMAS HAN QUEDADO DESACTUALIZADOS U OBSOLETOS. LOS LECTORES QUE DESEEN UTILIZAR ALGUNO DE LOS ELEMENTOS AQUI DESCRITOS DEBERÏAN ASEGURARSE DE BUSCAR LAS REFERENCIAS MAS MODERNAS DE LOS TEMAS DE SU INTERÉS. EL BUSCADOR INCLUIDO SERÄ UNA AYUDA PARA ESA BÚSQUEDA

lunes, 15 de marzo de 2021

Más sobre servos (I)


Pulsar dos veces para arrancar el video

En dos artículos recientes (Motorizacion del paso a nivel fe FALLER 282730) y (DRSERVO), comentaba que, con motivo de la necesidad de aplicar un servo para mover las barreras del paso a nivel, había retomado un tema que ya traté hace unos cuantos años (2014) y me puse a trastear con los servos y sobre todo con los circuitos que sirven para controlarlos, los llamados drivers de servo, y al final diseñé un nuevo circuito capaz de manejar uno de estos servos, y lo apliqué en el paso a nivel de FALLER.

En los citados artículos, mencionaba que aunque la mayoría de los aficionados recurren a un Arduino como driver, a mi me parecía excesivo utilizar estos elementos que en definitiva actúan como un pequeño ordenador.

Parece que algún lector no está de acuerdo con mi opinión y me dice que para qué meterse a diseñar y montar un circuito especial, cuando el Arduino ya nos lo da resuelto.

Esa frase me ha recordado inmediatamente un artículo (Y.D.I.Y?) donde comentaba un artículo leído en un foro americano, donde su autor explicaba que cuando él hacía uno de sus desarrollos y funcionaba, siempre salía el compañero de turno con el comentario de porqué hacerlo cuando lo puedes comprar hecho. En su artículo este compañero de afición, comentaba la satisfacción nunca antes conocida que le proporcionaba diseñar y construir un dispositivo que funcionaba igual o mejor que el sistema comercial equivalente y que probablemente es incluso más barato.

Pero además en este caso, si he podido diseñar algo que permite manejar servos de un modo más sencillo, lo más probable es que acabe por poder ser adquirido, (aunque yo ya no vendo mis diseños, hay un compañero que los comercializa) por cualquier aficionado que no quiera verse en la necesidad de emplear un Arduino. No olvidemos que Arduino es un microordenador, que por lo tanto necesita ser programado, y aunque se diga que los programas para manejar servos están accesibles en Internet no se evita tener que bajarlos, cargarlos, etc. Y  si se quiere modificar algo, vuelta a tocar el programa (el que sepa hacerlo) a cargarlo, etc. Mi propuesta es un circuito analógico, que no hay más que conectarlo y empieza a funcionar. "Plug and Play" que se dice.

Supongo que se puede pensar que un circuito analógico que sustituye a un Arduino, debe ser algo muy complicado, porque no olvidemos que un ordenador, por sencillo y compacto que sea, es algo muy complejo. La respuesta a eso es que naturalmente depende de lo que queramos hacer con el servo, y que desde luego para una utilización sencilla el circuito es elemental, pero incluso para hacer algo que maneje todas las posibilidades de un servo solo se requiere añadir un poco más de electrónica. El que quiera convencerse no tiene más que seguir leyendo.

La imagen anterior muestra todo lo que se necesita para manejar un servo. Hay un circuito integrado, posiblemente el circuito integrado más popular, el NE555, cuatro resistencias, tres condensadores y dos diodos. Para controlar el servo añadimos el potenciómetro RV1 de 100K y vemos a la derecha el servo representado como un círculo que lleva en la parte inferior el indicador de su posición. Con este sencillo montaje alimentado por Vcc 5 Voltios, ya podemos hacer funcionar el servo de forma semejante a como lo haría un aeromodelo o un barco de radiocontrol.  Según la posición del cursor del potenciómetro el servo se pone en el ángulo que corresponde a esa posición.  De hecho este circuito le vale perfectamente a todo aquél que quiera un "probador de servos".



Por si a algún incrédulo le parece inverosímil, que solamente con ese circuito tan sencillo se pueda manejar eficazmente un servo, he incluido un vídeo que recoge la imagen de pantalla del programa Proteus mientras se hace funcionar en simulación el circuito anterior. La imagen incluye un osciloscopio virtual donde podemos ver la señal que llega al servo. Al funcionar vemos que según se mueve el cursor del potenciómetro arriba y abajo, el servo gira en un sentido o en otro, e incluso que si dejamos el cursor en puntos intermedios el servo se queda también en un giro intermedio. También vemos que la acción sobre el servo consiste en una señal de 27 o 28 Hz (se ve en el frecuencímetro bajo el osciloscopio) compuesta por pulsos cuya anchura varía de 1 ms a 2 ms y según sea esa anchura, así se ajusta la posición del servo.

Y en nuestra afición, ¿nos vale esto tan sencillo?  Lo habitual en modelismo ferroviario es utilizar los servos para mover los desvíos, y también se usan para mover las barreras de los pasos a nivel, las puertas de cocheras, para hacer girar grúas de carbón o grúas de agua, etc. Lo malo de este montaje es que para mover el servo tenemos que girar a mano el potenciómetro, y esto hará girar el servo, pero eso va muy bien por ejemplo para hacer girar una grúa , o incluso para cerrar o abrir puertas, pero no es práctico para mover desvíos o barreras. En estos casos se requiere que el servo adopte dos posiciones determinadas (desvio recto o desviado, barreras levantadas o bajadas etc) pero sin detenerse nunca en posiciones intermedias.

Bueno, si aceptamos que esas dos posiciones extremas deben coincidir con el equivalente a llevar el mando del potenciómetro a un extremo o a otro, podemos sustituir el potenciómetro por un conmutador de dos posiciones. Poniendo en lugar del potenciómetro una resistencia del mismo valor 100K el conmutador hace lo mismo que el giro del mando a un extremo y al otro. 


En realidad, es casi más sencillo así, y en principio es lo que necesitamos. Sólo con esto ya podemos utilizar este circuito para controlar un desvío, o las barreras de un paso a nivel. Con el conmutador SW1 en una posición, el servo estará completamente en un extremo y cambiando el conmutador a la otra posición, el servo se moverá hasta la posición opuesta. Nadie podrá decir que no es ésta una solución sencilla y barata.

Pero una cuestión interesante es esta: Con el mando del potenciómetro, cuando lo giramos más o menos deprisa, el servo sigue ese movimiento a la misma velocidad y si dejamos el mando en cualquier punto, el servo se quedará también en la correspondiente posición intermedia. Pero con el conmutador esto no ocurre, sino que estando en una posición, al accionar el conmutador el servo se encuentra con que la señal que le llega corresponde al extremo opuesto, sin pasos intermedios. En teoría debería cambiar instantáneamente. Sin embargo un servo tiene una velocidad limitada y lo que hace es moverse a esa velocidad, que es la mayor que puede alcanzar, hasta llegar al extremo opuesto. De hecho se considera que un servo es tanto mejor cuanto más deprisa es capaz de moverse, pero en todo caso es la velocidad de que es capaz el servo la que marca la velocidad a la que se mueve, y por lo tanto si estamos moviendo un desvío, poco podemos hacer para conseguir que se mueva más deprisa o más despacio.

En realidad los aficionados al modelismo ferroviario prefieren que sus desvíos se muevan con lentitud, y también las barreras y los demás elementos. Así que preferirían un movimiento lento de los servos, más lento que lo que se consigue con el montaje anterior.

Lo que realmente sería perfecto, es que el sistema permitiera hacer que el movimiento se pueda regular en dos aspectos: por un lado que se puedan marcar los extremos de desplazamiento del servo, de manera que no gire siempre 180º completos sino que podamos graduar el alcance del giro, y por otro lado que pudiéramos variar la velocidad de giro, para conseguir movimientos verdaderamente lentos de los desvíos.

Afortunadamente esto es perfectamente posible complicando un poco el circuito de control. El cambio más sencillo es el del alcance del ángulo de giro, ya que basta para conseguirlo modificar el valor de la resistencia R1  El valor de 71K que aparece en el esquema es un valor extraño, pero es el que produce exactamente el giro de 180º justos Un valor inferior haría que el servo tendiese a girar más, pero como no puede hacerlo, no pasa nunca de su tope. Sin embargo un valor superior, si que limita el giro, de modo que con 150K el servo no llega a moverse. Así que una solución facilísima es añadir un potenciómetro de 100K de ajuste, en serie con esa resistencia, y con ello la resistencia de esa rama se podrá ajustar entre los 71 K y los 171K lo que consigue desde un giro máximo, de 180 grados, hasta un mínimo prácticamente nulo.  Conseguir tener este ajuste es muy importante porque cuando se ponen las bielas y transmisiones que mueven los desvíos, hay que conseguir que el movimiento se ajuste al recorrido que tengan que hacer los espadines, y si el servo se intenta mover más, se forzarán estas transmisiones.

Y ¿podemos hacer algo con respecto a la velocidad? Realmente en el primer esquema, cuando mandábamos el giro con un potenciómetro, la velocidad de giro podía ser la que quisiéramos, pues basta girar más o menos lentamente el mando. Pero claro, no es cosa de estar moviendo un montón de potenciómetros lentamente para conseguir un movimiento lento de los desvíos. Necesitamos unos deditos mágicos que muevan lentamente ese potenciómetro por nosotros, a la velocidad que queramos. Curiosamente esto es posible, y la verdad es que yo ya he usado esos deditos mágicos en todos los controladores que he desarrollado que llevan control de inercia. Y es que el problema es el mismo: en un controlador normal, sin inercia, nosotros movemos el regulador de velocidad más o menos lentamente para acelerar o frenar más o menos rápido, pero en un controlador con inercia, la velocidad aumenta o disminuye lentamente, y con mayor o menos rapidez según ajustemos el mando a una inercia menor o mayor. De nuevo es como si esos deditos mágicos se encargasen de mover más o menos rápidamente el control de velocidad.

Bueno el secreto está en lo que se llama un potenciómetro digital, como el DS1804-100 que se ve en todos mis controladores con simulación de inercia.  El nombre puede ser un poco confuso, pero que quede claro que esto no tiene nada que ver con los sistemas digitales para el manejo de trenes.


En la imagen precedente vemos que toda la parte derecha, sigue igual,  y se ha incluido el potenciómetro de ajuste de 100 K, identificado como RANGE para permitir modificar el alcance del giro, tal como decíamos anteriormente.

Pero, donde antes hubo un potenciómetro manual de 100K ahora hay un potenciómetro digital también de 100k marcado como U1. Si nos fijamos la parte derecha de este chip lleva tres terminales marcados como H W y L (Hight, Wipper y Low) que corresponden exactamente a las tres patillas de un potenciómetro, siendo la W la del cursor, y las otras dos las de los extremos de la pista. 

Para "mover" ese potenciómetro tenemos los tres terminales de la izquierda de los cuales el central CS está unido a tierra y es simplemente para activar o desactivar el dispositivo. Por el terminal superior INC tiene que recibir un tren de pulsos de la frecuencia que queramos. Cada vez que recibe un pulso el "cursor" de este potenciómetro sube o baja una centésima parte de la resistencia total, así que como en este caso es de 100 ohmios subirá o bajará un ohmio. Es como si en un potenciómetro manual moviéramos el mando una centésima parte de su recorrido.

Y el tercer terminal U/D (Upper / Down) hace que esos saltos sean hacia arriba o hacia abajo.  De manera que si el terminal U/D es positivo por cada impulso que llegue por INC el cursor se mueve un ohmio hacia arriba, y si es U/D es negativo se mueve un ohmio hacia abajo. Con eso, el conmutador SW1 actúa como en el segundo esquema. es decir, en una posición conecta U/D al positivo y por lo tanto con cada pulso que llegue el cursor irá subiendo, y si ponemos el conmutador hacia abajo con cada pulso que llegue el cursor baja hasta llegar abajo. 

Lo fundamental de esto es que el cursor sube o baja al ritmo que le marcan la llegada de pulsos por el terminal INC, de manera que si llegan muy rápido enseguida subirá o bajará el cursor y por lo tanto el giro del servo será rápido, Por el contrario si el ritmo es más lento, el servo se moverá más despacio. En definitiva que de la frecuencia del tren de impulsos que llega por  INC depende  la velocidad a la que se mueve el servo. Por ejemplo si la frecuencia es 20  llegarán 20 pulsos por segundo, así que en 5 segundos, el servo se moverá de extremo a extremo, y si llegan por ejemplo 10 pulsos por segundo, el servo se moverá de extremo a extremo en 10 segundos. Etc

Nótese que los pulsos no dejan nunca de llegar, así que el cursor llega siempre al extremo superior o al inferior y nunca se para en posiciones intermedias. Cuando llega a uno de los extremos los pulsos que siguen llegando se ignoran, hasta que U/D cambie de signo.

O sea, es lo mismo que el segundo esquema, en cuanto a que tenemos un conmutador y moviéndolo a uno y otro lado el servo pasa de un extremo a otro, pero ya no lo hace a la máxima velocidad que permite el servo, sino al ritmo impuesto por la frecuencia de los pulsos que llegan a INC. También, al decir de extremo a extremo, ya no es obligatorio que estos extremos estén separados 180º, sino que podemos ajustar el ángulo deseado con potenciómetro RANGE.

Necesitamos por lo tanto añadir a este circuito, algo que genere unos pulsos con una frecuencia que podamos ajustar. Afortunadamente esto es también muy sencillo y se basa también en un NE555. Además como ya teníamos un N555, podemos usar un integrado NE556 que es como dos NE555 en la misma cápsula. Se ahorra espacio, pero ambos son independientes y de hecho en los esquemas aparecen como dos chips independientes.

La imagen adjunta, recoge el circuito que puede generar un tren de impulsos de una frecuencia variable. El potenciómetro de 100k identificado como SPEED permite ajustar esa frecuencia en límites amplios. Como comentaba, este circuito es un viejo conocido para mi, porque es el que hace aumentar o disminuir la velocidad a un ritmo mayor o menor en los controladores con simulación de inercia. De hecho en ellos las frecuencias utilizadas son más bajas, ya que se puede llegar a que el potenciómetro digital tarde más de un minuto en pasar de extremo a extremo. Aumentando el valor del condensador C1 se puede llegar a frecuencias muy bajas. Nótese que la salida de este circuito se identifica como "CLOCK" que es efectivamente la señal que recibe el potenciómetro digital por la entrada INC en el esquema anterior.

Pues con esto ya tenemos todo: Un circuito que es capaz de manejar un servo moviéndolo de un extremo a otro al accionar un conmutador, y con la posibilidad de ajustar el ángulo de giro y la velocidad del giro. Respecto de lo que podemos conseguir de un servo ya no hay más posibilidades, y supongo que esto lo máximo a lo que se suele llegar con Arduino.

El diseño del circuito DRVSERVO que vemos funcionando en el video de la cabecera de este artículo y también en un video más extenso en el artículo anterior tiene alguna cosa más , así que para no alargar mas éste, vamos a dejar el resto para una segunda parte donde además comentaré algunas modificaciones hechas sobe el prototipo inicial, con vistas a su comercialización.

No hay comentarios:

Publicar un comentario

Gracias por expresar tus opiniones.

Los comentarios aparecerán en el blog normalmente en unos pocos segundos