Hoy voy a referirme a los distintos modelos de controladores que tengo desarrollados y que se pueden adquirir en mi tienda, asi como a futuros desarrollos en esa línea.
Como saben los lectores de este blog, todo surge de una idea, que ya casi tengo olvidado cuando empezó *, de la posibilidad de hacer un controlador de velocidad para trenes analógicos, que genere corriente de tipo PWM (Pulse Width Modulation) que es la forma habitual de controlar la velocidad de los motores de corriente continua en la industria, incluyendo la industria ferroviaria, donde las locomotoras chopped, que son prácticamente todas las eléctricas actuales, se basan en el mismo principio.
No voy aquí a hablar del buen comportamiento de las locomotoras con esta clase de control, porque es un tema que ya se ha tratado extensamente (véase por ejemplo: Comparativa PWM ) pero si de la forma de generar esa forma de onda, y de los distintos desarrollos que he realizado.
Existen varias formas de generar una señal PWM, pero yo desde el principio me he decidido por usar el típico oscilador NE555 que es uno de los circuitos integrados más famosos, y que directamente, y con muy pocos eementos adicionales genera una señal PWM de anchura de pulso variable, prácticamente de 0 a 100%.
Una ligera desventaja del método es que el control de la anchura de pulso, que es lo que en definitiva establece la velocidad del tren, no depende de una tensión de control, sino de un equilibrio entre dos ramas de resistencia. Esto se materializa muy bien con un potenciómetro, pero es dificil hacer una interfase con otros sistemas.
La señal PWM generada por el NE555 se lleva como señal de control a un circuito en punte H para el control de motores, lo que proporciona directamente la corriente de tracción para la vía.
Este esquema básico lo he seguido en dos productos, bautizados como PWM04 y PWM06. la diferencia entre ambos estriba en que el circuito controlador de motores del primero (L293D), es más potente en el segundo (L298), con lo cual se pueden manejar varias locomotoras o incluso locomotoras de la escala H0 mientras que el primero sólo tiene potencia para una locomotora de las escalas Z o N.
Existe otra diferencia, y es que mientras el cambio de sentido de la marcha se hace mediante un conmutador inversor en el PWM04, en el PWM06 se hace mediante unos pulsadores que activan un circuito latch y que a su vez produce la inversión actuando sobre el circuito controlador de motores.
Salvando esas dos diferencias, ambos circuitos son muy semejantes y responden a un esquema general como el representado a la izquierda, donde vemos que hay un único bloque que representa el circuito y que recibe una "señal" de velocidad y dos señales de "adelante" y "atrás" para cambiar el sentido. También hay una señal de "stop" no representada que corta la corriente, parando el tren de forma inmediata.
Como ya he dicho, se necesita exactamente un potenciómetro para controlar este circuito, así que los PWM04 y PWM06 llevan un potenciómetro para el control de la velocidad, pero por eso mismo, es dificil usar cualquier automatismo para su manejo. Afortunadamente existen los "potenciómetros digitales" como DS1804 que son unos circuitos integrados con ocho terminales, de los cuales tres emulan el comportamiento de un potenciómetro manual pero que son manejados mediante señales electrónicas (me resisto a emplear la expresión "señales digitales" para evitar que se confundan con los sistemas digitales de control de trenes con los que esto no tiene nada que ver)
La forma de mover este tipo de potenciómetros, es enviar impulsos a la entrada de control del circuito. Por cada impulso, el potenciómetro mueve su cursor como lo haría un potenciómetro manual, aumentando la resistencia en una rama y disminuyendo en la otra. Exactamente lo que se necesita para manejar el generador de PWM.
Pero aquí aparece una ventaja: según lo rápido que enviemos los impulsos que mueven el potenciómetro digital, la velocidad aumenta o disminuye con mayor o menor velocidad. De esta forma si enviamos impulsos lentamente la velocidad del tren aumenta muy lentamente simulando el efecto de la inercia del tren.
Por ejemplo, el DS1804 tiene 100 pasos, es decir, con cien pulsos pasa del menor valor al mayor. Si enviamos los impulsos con una frecuencia de 100 pulsos por minuto, el potencimetro tardará un minuto en moverse del mínimo al máximo y el tren tardará un minuto en alcanzar su velocidad máxima desde cero
Esto dió lugar a la aparición del controlador PWM05, cuyo diagrama de bloques tenemos en la imagen de cabecera. Este circuito lleva una etapa de salida análoga al PWM04 o PWM06, pero su mando, en vez de ser hecho con un potenciómetro manual se hace mediante el circuito denominado Calculador de Velocidad en el esquema, el cual maneja un potenciómetro digital mediante pulsos que lo mueven en un sentido u otro según las señales "Acelera" y "Frena" y que a su vez permite que esta aceleración sea más o menos rápida, a base de modificar la frecuencia de los impulsos, lo que se consigue con un ajuste de "Inercia".
Este circuito se maneja normalmente mediante un Joystick que manda las señales de acelerar y frenar, y mediante botones para el control de sentido de la marcha y para la parada.
Después de probar este circuito, descubrí que era muy fácil incluir un perfeccionamiento, que consiste en una orden de "Parada progresiva" un botón adicional actúa sobre el "Calculador de Velocidad" y simula el efecto de mantener presionado el botón de frenado indefinidamente, Denominé PWM05.3G a esta variante del PWM05, haciendo alusión a que cada función se podía activar desde tres puertas (gates) lógicas.
Asi que conectando la señal de "Parada" de una cualquiera de las tres puertas lógicas a un sensor en la vía se podía conseguir una parada progresiva, por ejemplo en una estación o ante una señal. Quedaba así configurado el PWM05.3G cuyo esquema de bloques es el recogido en la imagen de la cabecera.
Sin embargo, a cualquiera se le ocurre esta cuestión: De acuerdo: con la función "Parada" podemos hacer que el tren se detenga lentamente. ¿no debería haber también una función "Arrancada" para que el tren volviese a ponerse en marcha hasta alcanzar la misma velocidad que tenía cuando se detuvo por la parada progresiva? Parece algo muy simple y completamente análogo a la función de parada.
La dificultad es que no es tan sencillo por una razón: Dicho corto, porque una parada acaba siempre en velocidad cero, así que lo opuesto es que una arrancada acabe siempre en la velocidad máxima. Pero claro, no queremos eso, queremos que el tren acelere pero solo hasta la misma velocidad que tenía antes de la parada, y, ¿cual es esa velocidad? ¿se guarda en algún sitio? la respuesta es no, así que el asunto se presenta complicado. De hecho, el PWM05 no sabe a que velocidad va el tren en cada momento, de modo que cuando recibe la orden de parada empieza a mandar pulsos de disminución de velocidad indefinidamente. En algún momento el tren se para, pero de hecho el circuito de control sigue mandando pulsos de frenado, Afortunadamente el potenciómetro digital ignora los pulsos que le indican seguir bajando una vez que ya ha llegado a mínimo. Por eso, se podría hacer que la arrancada acelerase hasta el máximo y pasaría lo mismo, una vez que el potenciómetro alcanzase el máximo ignoraría los pulsos que le indiquen seguir subiendo, pero no hay forma de parar la subida en una velocidad inferior.
Ya se ve por lo tanto que conseguir la "Arrancada progresiva" es algo bastante más complicado que la "Parada progresiva" Aparentemente se necesitan dos cosas: saber de alguna manera hasta que velocidad debe volver a acelerar el tren lo cual implica guardar en algún tipo de memoria ese dato, y además conseguir que el sistema sepa en cada momento la velocidad del tren, de manera que pueda saber cuándo ha alcanzado la velocidad prevista, y entonces dejar de acelerar.
Hace poco publiqué un artículo denominado Off-Topic al cual pertenece este párrafo:
Bueno, pues como resultado de todo esto, he aprendido un montón sobre todos estos temas de contadores y análisis de frecuencias. Antes decía que esto no tenía mucho que ver con el tema de trenes, pero ya me rondan por la cabeza algunos temas en los que puede tener aplicación. Por ejemplo es elemental poner un velocímetro en mi controlador PWM05
Efectivamente, un contador es la forma de que el controlador sepa a qué velocidad marcha el tren porque como hemos dicho la velocidad aumenta o disminuye cuando llegan los pulsos al potenciómetro digital, de manera que si contamos los pulsos, tendremos conocida la velocidad.
Efectivamente el potenciómetro digital DS1804 tiene cien pasos, o sea que partiendo de la posición inicial de cero, si le llegan 50 pulsos hacia arriba, estará en la posición del 50% de resistencia, si a continuación llegan 5 pulsos hacia abajo estará en el 45%, y si luego llegan 55 pulsos más hacia arriba estará en el 100%. Basta pues contar los pulsos hacia arriba o hacia abajo para saber en que posición está el cursor del potenciómetro, y como esta posición marca directamente la anchura de pulso del PWM sabremos con toda exactitud la velocidad en cada momento.
Aclaremos una cosa: al decir velocidad me refiero solamente a una cifra que es realmente el porcentaje de la velocidad respecto de la velocidad máxima de la locomotora.
Más exactamente: Una cifra de 45 en la cuenta de impulsos indica que el ancho de pulsos del PWM es el 45% del periodo (Duty =45%) y por lo tanto la tensión eficaz de la señal PWM es el 45% de la tensión de pico, o sea que por ejemplo para 12 Voltios de alimentación la tensión eficaz de la corriente de tracción será 5,4 Voltios. Así que la locomotora se moverá como si la alimentamos con corriente continua plana de 5,4 voltios. Naturalmente cada locomotora responde de una forma distinta a esta tensión, y ni siquiera proporcionalmente, así que no se puede saber la velocidad real de cada locomotora en particular, pero decir que si tenemos una cuenta de pulsos de 45, la locomotora se mueve al 45% de su velocidad máxima es una buena aproximación.
Los contadores dan el resultado de su cuenta en código binario, así que para contar cualquier valor entre 0 y 99 se necesita encadenar dos contadores de décadas como el 74HC190 y el resultado se obtiene en ocho bits, en BCD (Binary Coded Decimal)
La primera ventaja colateral de esta forma de actuar es que puedo llevar este conteo a un display y mostrar la cifra de la velocidad (insisto: del porcentaje respecto de la máxima) en cada momento. Al estar en BCD los cuatro bits altos dan la cifra decimal alta y los cuatro bits bajos dan la cifra decimal baja, asi que el 45% de anchura de pulso se mostraría como 45 en el display. En resumidas cuentas puedo poner un velocímetro en el controlador sin hacer prácticamente nada.
Este porcentaje en BCD lo puedo comparar con la velocidad a la que debería ir la locomotora en un comparador formado por dos 74HC85 que me dan una salida si la velocidad es mayor menor o igual que la referencia.
Pero al final, decidí que una vez claro que había que montar todo este tinglado inevitablemente, podía sacarle más provecho cambiando un poco la filosofía del controlador. El esquema finalmente queda así:
El control de velocidad, por medio de su joystick funciona como siempre, es decir generando pulsos hacia arriba o hacia abajo que son contados en un contador incluido en el "Calculador de velocidad objetivo" La salida de este contador es un valor de 8 bits que puede mostrarse en decimal en un visualizador como el mostrado, Es decir el Joystick no hace otra cosa que mover este valor de "Velocidad Objetivo" hacia arriba o hacia abajo, en el rango 00 a 99. La actuación del Joystick puede ser más o menos rápida según la frecuencia a la que se generen los pulsos, ajustable con el mando de Sensibilidad, que ya no es exactamente la inercia del tren.
Por otro lado, en la parte inferior tenemos el circuito análogo al del PWM06, en el cual el "Calculador de velocidad actual" crea los pulsos que van al Generador de PWM con una mayor o menor frecuencia según el ajuste del mando de inercia. Simultáneamente el contador incluido en este segundo calculador muestra exactamente la cuenta de pulsos enviada al generador de PWM y por lo tanto la velocidad actual de la locomotora.
El comparador, compara continuamente la cifra presente en ambos contadores, en definitiva la velocidad actual con la velocidad objetivo, de modo que si la velocidad actual es menor, se envía la señal de "Acelera", y si es mayor la de "Frena" De esta forma con el Joystick marcamos una velocidad objetivo, y el controlador seguirá ese objetivo de velocidad con mayor o menor retardo según el ajuste de inercia. Por supuesto cuando la velocidad actual se iguala con la velocidad objetivo no se produce ninguna de las dos señales y dejan de enviarse pulsos al generador de PWM, que por lo tanto mantiene indefinidamente esa velocidad. Cualquier cambio que hagamos en la velocidad objetivo mediante la actuación sobre el joystick, provoca que de nuevo se generen pulsos de aceleración o frenado hasta conseguir igualar la velocidad real con el nuevo objetivo.
Y ¿qué pasó con la parada y arrancada progresivas? Pues muy fácil: cuando el comparador recibe la señal de "Parada", lo que hace es comparar la velocidad actual con cero. Evidentemente esto provoca la parada progresiva al ritmo marcado por el ajuste de inercia hasta tener la locomotora parada. Observese que la velocidad objetivo que tuviéramos en el contador de velocidad objetivo no ha cambiado, así que al recibir la señal de "Arrancada" se vuelve a comparar la velocidad actual con la que teníamos como objetivo, con lo cual, el tren vuelve a arrancar progresivamente según el ajuste de la inercia hasta alcanzar la velocidad objetivo.
He llamado "sensibilidad de control" al mando que actúa como inercia en el joystick. Evidentemente si este mando está ajustado a muy poca inercia la velocidad objetivo subirá y bajará muy deprisa y será difícil ajustar un valor. Si en esas condiciones el control de velocidad actual tiene una inercia muy grande, parecerá que el tren no obedece al mando. Por el contrario si la inercia del control de velocidad es muy baja, los trenes aceleran y y frenan muy rápidamente en las paradas automáticas, pero si el mando del control es lento, en las aceleraciones manuales predominará la inercia del control. Es difícil hacerse una idea muy clara de como es más cómodo manejar esto, así que habrá que hacer pruebas con un prototipo,
Ya tengo tarea para cuando acabe el verano.
Una idea que me ha surgido al ver los diagramas de bloques que se ven en este artículo, es la posibilidad de hacer también un sistema modular de controladores, de manera que se compartan módulos: Por ejemplo el módulo Generador de PWM es claramente el mismo en todos los casos, de modo que se puede hacer un circuito que sirva tanto para hacer un controlador básico al estilo del PWM06, como para usarlo como parte de un controlador con inercia como el PWM05 o de un controlador con parada y arrancada progresivas como sería este nuevo diseño (¿quizá PWM07?)
* Bueno si, Empezó en Marzo del 2009
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
Hola.
ResponderEliminarSe lo que es la numeración en sistema binario, pero no había oído hablar de lo que llamas BCD. ¿es lo mismo?
Un Saludo
Jose María
Hola Jose María
ResponderEliminarPues no, no es lo mismo.
Como ya sabes, un numero representado en notación binaria es la expresión de una cantidad mediante sólamente dos cifras, 0 y 1 en lugar de las diez cifras 0, 1, ,,,,8, 9 que se usan en la notación decimal.
Asi si contamos de 0 a 12 en decimal, escribimos:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,......
pero si contamos en binario escribimos:
0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100...........
Fijate por ejemplo que nueve unidades se representan con el número 9 en decimal y con el número 1001 en binario.
Siguiendo la cuenta, la cantidad de noventa y nueve se representa con 99 en decimal y con 1100011 en binario.
Pero supongamos que yo me invento otra cosa y digo: si 99 se representa con dos nueves en decimal, ¿porqué no representarlo con dos nueves en binario? como el nueve en binario es 1001, dos nueves en binario serían 10011001.
Fíjate que 10011001 no tiene nada que ver con 1100011 que es 99 en binario, ya que lo primero son dos nueves juntos y lo segundo noventa y nueve.
Bueno pues la notación BCD (binary coded decimal = decimal codificado en binario) es exactamente esa forma: la expresión de una cantidad en decimal pero expresando cada cifra en codigo binario. Se necesitan cuatro bits para cada cifra, de manera que la expresión resulta más larga que en codigo binario.
Pero la diferencia fundamental es que el código binario es aritmético, es decir se puede operar con cifras binarias con sumas restas y demás operaciones, y el resultado es la expresión binaria del resultado. Eso es lo que hacen los ordenadores.
Pero el código BCD no es aritmético. Es decir, si yo sumo dos numeros en BCD el resultado no es el código BCD de la suma.
Entonces, ¿qué ventaja tiene? Pues solo una, pero muy importante, y es que permite realizar ciertas operaciones en decimal, especialmente los conteos, utilizando codigos binarios.
Por ejemplo en el texto se menciona un circuito contador de décadas. Este circuito va contando impulsos y tiene una salida de cuadro digitos. Asi que si cuenta por ejemplo ocho pulsos la salida representa 1000. Si llega otro pulso, la salida muestra 1001, pero si llega otro pulso más, que sería el décimo la salida muestra 0000 es decir un cero binario y si llega otro pulso más muestra 0001 etc. En cambio un contador binario, si está en 1001 y recibe un pulso más, cuenta 1010 es decir diez en binario, y con el siguiente 1011 que es once en binario, etc. Por eso onos se llaman contadores de décadas y los otros contadores binarios.
Fijate entonces que la salida representa siempre la cifra de la derecha (las unidades) de la cantidad contada en decimal. Por eso cuando la cuenta llega a 10 muestra cero, cuando llega a 11 muestra uno, etc. Es decir es la expresión binaria de la cifra decimal de las unidades. En definitiva, está generando código BCD.
Todos los contadores, cuando se desbordan, es decir, cuando reciben un pulso por encima de su máximo, dan una salida que se puede contar en otro contador. Asi el contador de décadas cuando está en 9 y recibe un pulso más pasa a cero, pero manda el pulso a un contador siguiente que contará una unidad cada vez que que el anterior haya contado diez, de modo que después del primer paso de 9 a 0 el segundo tendrá la cuenta de 1. Cuando vuelva a ocurrir un paso de 9 a 0 el segundo contador pasará de 1 a 2, etc En definitiva, el segundo contador va registrando la cifra de las decenas, etc. ASi que con dos contadores se obtiene la expresión en BCD de cualquier número entre 0 y 99
Una de las ventajas inmediatas de este resultado, es que si yo llevo los cuatro primeros bits del resultado a un display de siete segmentos y los cuatro siguientes a un segundo display, veré en cada uno una cifra entre 0 y 9 y entre ambas cifras muestran la expresión decimal del número de impulsos contados. Eso es lo que hace el circuito descrito en el texto
La verdad es que ya me hubiera gustado encontrar en los libros, explicaciones tan claras como ésta a muchos temas!
EliminarMuchas Gracias!
Jose María