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.

viernes, 5 de marzo de 2021

DRVSERVO

 

DRVSERVO 1.0


Hace poco, comenté aquí, que cuando quise motorizar el paso a nivel FALLER 282730, con un servo, utilicé para manejar el servo un viejo proyecto de un controlador de servos que hice en el año 2014. Funcionar funcionó, pero cuando estuve trabajando con él encontré algunas cosas que no acababan de gustarme. Y no es de extrañar, porque ese diseño fue de las primeras cosas que yo hacía en este campo de la electrónica, y es raro que después de ocho años y unas docenas de diseños, no hubiera aprendido nada.

Así que llegue a la conclusión de que yo, hoy, lo haría de otra forma, y como esto no es más que un hobby me puse a hacer un diseño actualizado para un nuevo "diver" de servos.

El resultado, que podemos ver en la cabecera, es más pequeño, y tiene bastantes menos componentes, y entre otras cosas no lleva ningún relé, como el antiguo, así que resulta bastante más barato.

Iba a decir, "y funciona mejor", pero no es cierto, funciona exactamente igual, porque el principio de funcionamiento es el mismo.

La diferencia mayor estriba en que el antiguo proyecto pretendía funcionar "como un desvío", mientras que este, funciona más bien como un controlador de desvíos, como el DDESVIO3 o el KDESVIO3 que he diseñado posteriormente, es decir se activa mediante entradas que se conectan a elementos tales como pulsadores, sensores hall, conmutadores, etc, que no envían corriente al driver sino que establecen una tensión nula en una entrada. De esta forma la conexión es común a todos los demás dispositivos que he hecho y que estoy utilizando en mi maqueta. 

En el siguiente video puede verse el nuevo driver, bautizado como DRVSERVO y una demostración bastante completa de sus características y funcionamiento.


Como se puede comprobar, el video acaba con unos ejemplos de aplicación, que comprenden, en primer lugar el manejo de un desvío PECO y después el paso a nivel 282730 de Faller que vimos montar en el artículo Motorizacion del paso a nivel FALLER 282730En ese artículo se veía como al final se colocaba el antiguo controlador de servos en la base del paso a nivel, y se hacía funcionar con él. Lo que he hecho, es montar uno de los nuevos DRVSERVO, es sustituir el antiguo por este, dejando todo lo demás igual, incluyendo el mismo servo, y grabar unas escenas más de vídeo con el nuevo driver. Por cierto, que este este nuevo video se utilizan sensores Hall para accionar el paso a nivel, cosa que ahora es fácil porque como decía el nuevo está preparado para ser accionado con sensores Hall, cosa que el viejo no tenía, y habría que haber hecho un poco de bricolaje para conseguirlo. 

Llamo la atención a los lectores que se hayan interesado por estos temas, sobre el buen resultado que se obtiene con el ejemplo del movimiento del desvío PECO, ya que se obtiene un movimiento excepcionalmente lento, y uniforme, y todo ello con unos elementos muy sencillos. He estado curioseando por YouTube, donde hay muchos vídeos que demuestran diferentes formas de mover este tipo de desvíos, y entre el abundante material que aparece al respecto, no he encontrado nada que funcione tan bien y de forma tan simple.

Y es que se juntan dos factores: por un lado el DRVSERVO permite un control muy preciso del servo, ya que se puede ajustar la velocidad de giro del servo, y la amplitud del giro, para ajustar el movimiento a lo deseado. La inmensa mayoría de los ejemplos que se ven en YouTube utilizan un Arduino para controlar el servo. A mi me parece un despropósito utilizar un Arduino para eso, porque al fin y al cabo un Arduino es un microprocesador que necesita un programa, mientras que mi sistema es un simple circuito analógico. Por ejemplo si queremos que un servo manejado por Arduino se mueva más rápido o mas lento, o que el movimiento sea más o menos amplio, hay que actuar sobre el programa de Arduino, modificarlo y volverlo a cargar, mientras que con mi circuito hay dos potenciómetros que se mueven con un destornillador, y modifican esos valores incluso mientras el driver está funcionando, de manera que se puede comprobar el efecto conseguido mientras se modifican los ajustes.

Y eso no es todo: Arduino necesita una alimentación de 5V que no es normal en el ámbito del modelismo ferroviario. En lugar de eso, el mío funciona con tensiones entre 9 y 15 V que son las habituales en las escalas Z, N y H0. y por otra parte el sistema de mando del Arduino probablemente no admite con facilidad la conexión por ejemplo de sensores Hall, (que necesitan una alimentación que DRVSERVO les proporciona). 

En definitiva este driver es un sistema creado especialmente para manejar servos en el entorno del modelismo ferroviario, mientras que Arduino es un sistema con una amplísima gama de posibilidades, que en la mayoría de los casos quedan infrautilizadas. Un amigo mío decía que utilizar un Arduino para esto, es como utilizar un Ferrari para ir a comprar el pan a 100 metros de casa. 

Y el otro factor que contribuye al buen funcionamiento del desvío que se ve en el vídeo, es el sistema que mueve el desvío a partir del giro del servo. En la generalidad de los casos se conecta la traviesa móvil del desvío con la leva del servo mediante un alambre o varilla rígido, que tira o empuja la traviesa móvil del desvío. Incluso muchas veces se ve que han hecho un zigzag en esa varilla, lo cual es una técnica copiada del aeromodelismo, para absorber el movimiento excesivo del servo cuando las agujas ya se han movido hasta sus topes. En primer lugar contando con un ajuste del ángulo de giro como tiene mi sistema ese zigzag sería innecesario, aunque sería delicado ajustar exactamente el desplazamiento requerido. Pero lo peor es que con un sistema de leva y varilla, que hacia un lado tira y hacia el otro empuja la traviesa, se producen muchas holguras difíciles de evitar, lo que da lugar a movimientos un tanto imprecisos. 


Lo que yo he hecho es, en primer lugar cambiar la varilla que tira y empuja, por un hilo, que naturalmente solo puede tirar. El movimiento hacia el lado contrario lo garantiza un resorte que tira hacia el lado contrario. Este resorte, puede ser una sencilla goma elástica, como veíamos en el vídeo del paso a nivel, o también, y es una idea mejor, un resorte metálico formado a partir de un imperdible, al que se han cortado los extremos y se han doblado hacia arriba (hacia abajo, en la imagen anterior, que está "cabeza abajo") , para hacer que uno de ellos mueva directamente la traviesa y el otro se fije a un punto que proporcione siempre una tensión que desplace la traviesa móvil hacia el lado contrario al que tira el hilo.

El hilo se enrolla sobre un carrete formado en la cabeza del eje del servo, y que se hace sencillamente con dos arandelas y una sección de macarrón. 

El hilo además hace un reenvío alrededor de la varilla que actúa sobre la traviesa móvil. Este reenvío hace que el movimiento sea la mitad de lento de lo que sería con tiro directo, pero además proporciona una forma muy cómoda de ajustar la longitud del hilo. Aquí se ha sujetado a un tornillo con una arandela que pisa el hilo, pero puede haber otras formas menos aparatosas.

Creo sinceramente que este sistema, es con mucho, el más sencillo de los que se pueden encontrar por Internet, y los resultados son tan buenos o mejores como la mayoría de los mostrados. Todos aquellos que quieran hacer que sus desvíos se muevan de forma espectacularmente lenta, lo tienen a su disposición. Por cierto, los desvíos reales modernos, no se mueven tan lentamente, gracias a los motores eléctricos que llevan. Lo del movimiento lento es una reminiscencia de cuando los desvíos se movían a mano con las célebres "marmitas" o incluso desde un puesto centralizado ("enclavamientos", se llamaban) con palancas manuales.