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

domingo, 14 de noviembre de 2010

Tenía que hacer esta prueba


Ya he comentado que la placa de comunicaciones K8055 de la empresa Velleman ha sido para mi, todo un hallazgo, que al final tendré que agradecerle a Micropik.

Una de las ventajas es que a cada placa se le puede asignar una dirección entre 0 y 3 de modo que el ordenador puede manejar cuatro placas...¿simultáneamente?. Esos interrogantes definen cuál era mi duda. No sabía si el programa podía trabajar al mismo tiempo con cuatro placas o cómo se manejaba esta situación. Así que, para resolverlo, me decidí a pedir una segunda placa. Realmente como ya tengo prácticamente decidido utilizar las salidas PWM de estas placas para controlar la corriente de tracción, necesitaba al menos dos placas para tener cuatro salidas y poder manejar cuatro trenes simultáneamente, así que tarde o temprano iba a necesitar al menos una segunda placa.

Una vez la segunda placa montada, y probada, ha llegado el momento de hacer la prueba conjunta. Examinando el programa fuente que proporciona Velleman, ya me había dado cuenta que las instrucciones de llamada a las funciones de comunicación, no llevan el parámetro que indicaría la placa, como sería lo perfecto.

Así que la conexión no es simultánea sino alternativa. Es decir si doy la instrucción desde el programa de abrir la comunicación con una placa, ésta placa será la activa, y todas las funciones de comunicación se dirigen a esa placa. Si en un momento dado doy la orden de abrir la segunda placa, todas las instrucciones a partir de ese momento se dirigen a la segunda placa, quedando la primera inactiva,  y así sucesivamente.

De entrada esto es un inconveniente: Si necesito dirigirme a cualquiera de las dos placas en función de las circunstancias del programa o bien llevo una cuidadosa cuenta de cuál es la placa activa en cada momento para que si no es la que necesito activarla, o bien, de una forma más segura pero menos elegante, cada vez que necesite dirigirme a una placa doy la orden de activarla, sin preocuparme de si ya estaba o no estaba activada. No cabe duda de que es una complicación, pero, realmente, programando esta actuación en un procedimiento de comunicaciones, no supone mayor problema.

Sin embargo me he dado cuenta de otro problema: El que la placa esté activa o no, no solo afecta a las salidas sino también a las entradas. Estas entradas, como ya he comentado recibirán la señal producida por los detectores de trenes, ya sean estos ampollas reed, o sensores hall. El problema está en que si se recibe una señal de entrada cuando la placa está inactiva, esta señal se perderá.

Afortunadamente se me ha ocurrido una solución, y es la que podemos ver en la imagen. En la pantalla se ve que el programa de comunicaciones, en este caso el programa que proporciona Velleman está abierto dos veces. Podemos ver en la imagen de la pantalla, las dos ventanas correspondientes con las dos instancias del programa. Cada una de estas dos instancias, abre inicialmente una de las dos placas, y ya permanece siempre en comunicación con esa placa. Ahora si que tengo las dos placas activas simultáneamente, y no sólo puedo enviar en cualquier momento señales de salida a cualquiera de las dos placas, sino que, y esto es lo importante, ambas placas están permanentemente activas y por lo tanto no se pierde ninguna señal de entrada.

Naturalmente era importantísimo probar si esto podía funcionar así, antes de tomar cualquier otra determinación, incluyendo la de mayor importancia de pasarme definitivamente al sistema de Velleman. La prueba ha sido completamente satisfactoria.

Quizá alguno de mis lectores, sepa lo suficiente de programación como para echar de menos el final de la explicación. La cuestión es que si yo tengo UN programa como ControlZ funcionando, solo puedo comunicarme con una placa, y si abro otra instancia de ControlZ para comunicarme con la otra placa, voy a tener dos ventanas distintas con el esquema de vías, etc.

La idea es que voy a tener un solo programa Control Z funcionando, pero le voy a quitar la actual rutina de comunicaciones, Además arrancaré automáticamente dos programas de comunicaciones adicionales ( o tres o cuatro) cada uno de los cuales pilotará una de las placas. Entonces no hay más que organizar una zona de intercomunicación a la que tengan acceso todos los programas y se intercambien los datos. Es algo parecido a aquellas "áreas COMMON" que utilizábamos hace años cuando programábamos en FORTRAN.

jueves, 11 de noviembre de 2010

Sensores de efecto Hall


En un comentario a mi anterior artículo sobre la forma de realizar un sistema de acantonamiento gobernado por un programa de ordenador, Un fiel seguidor de este blog (Raul) incluyó un comentario con varios enlaces, entre ellos uno a una universidad norteamericana, donde estaban llevando a cabo una serie de estudios sobre sistemas de control de procesos en tiempo real, y para las prácticas empleaban una maqueta de trenes.

Raul llamaba la atención sobre la descripción del sistema de acantonamiento (en inglés se denomina "block system") ya que efecto la descripción que hacen del sistema que tienen pensado coincide con sorprendente exactitud con el que yo he pensado para mi maqueta. En resumen, distribuyen la corriente de alimentación a los distintos bloques (¡precisamente ocho bloques!) mediante un sistema digital gobernado por señales de control.

Sin embargo, al leer el texto, me llamó la atención una mención que hacen a que el sistema de detección de los trenes se basa en "sensores de efecto hall"

Había visto en algunas web's de componentes electrónicos, mencionar este tipo de dispositivos, entre los sensores de luz, de temperatura, etc. Pero nunca había tenido la curiosidad de saber su utilidad. Al ver que detectaban los trenes con estos dispositivos me ha parecido interesante investigar sobre ellos, y he llegado a las siguientes conclusiones:

Los detectores de efecto hall responden al campo magnético, más exactamente a la variación del campo magnético. De forma parecida a un fototransistor, cuando el campo magnético supera un determinado valor, el dispositivo pasa un estado conductor, y cuando vuelve a descender pasa al estado de corte.

Así que si acercamos un imán a uno de estos detectores, este "se enciende" dando un "1" lógico en el pin de salida mientras dura la presencia del imán. En principio, perfecto para detectar un tren, con el habitual sistema de colocar un imán en la panza de la locomotora.

Como es sabido, mi previsión era utilizar contactos reed para detectar los imanes de las locomotoras. La verdad es que estos contactos reed funcionan perfectamente de modo que para decidirme a cambiar, tendría que encontrar importantes ventajas.

De entrada la conexión es algo más complicada ya que necesitan alimentación. Así que llevan tres pines uno de tierra, otro de alimentación y el pin de salida que se pone a  "H" o a "L" con el campo magnético.  Para un sistema como el que yo tengo previsto esto es una ventaja, porque me da directamente la señal de entrada hacia el sistema digital. Con los reed en cambio hay que poner unas resistencias de pull-up para conseguir la señal de entrada. 

El principal inconveniente de los reed es su tamaño. Se fabrican en varios tamaños pero para Z los apropiados son unos muy pequeños que es muy difícil encontrar. Estos tan pequeños soportan una intensidad muy pequeña, lo que puede ser peligroso si han de actuar directamente sobre relés. Afortunadamente con mi sistema, la intensidad es mínima, por lo que esto tampoco es significativo.

En cuanto a los sensores Hall, los que yo he localizado son también muy pequeños. Hay un tipo con montura de transistor SIP de 3 x 4 mm y un espesor de 1.5 mm, que por lo tanto podría situarse entre las vías. Además está la versión en montaje superficial SOT 23 que mide sólo 2 x 3 mm y 1 mm de espesor. lo que también permite situarlo entre las vías. Respecto de los reed. son más pequeños y además su aspecto es más parecido a una baliza de vías de un ferrocarril real.

Bueno, y ¿cuanto valen?. evidentemente esta pregunta es fundamental, porque tiene uno la sensación de que estamos hablando de un elemento de muy alta tecnología. Pues sorprendentemente están "tiraos". En la página donde yo los he localizado, venden cinco por 0,91 € en versión SIP y cinco por 1,26 € en versión SOT. (los precios de los componente electrónicos cada vez me asombran más)

Así que en cuanto tenga ocasión, voy a pedir algunos de estos componentes y veré como se comportan. Lo más importante es averiguar la sensibilidad que tienen, lo que se traducirá en la necesidad de que el imán de la locomotora pase más o menos cerca del sensor. Si esta distancia es muy pequeña y muy crítica, la ventaja estaría del lado de los contactos reed. Pero podría ocurrir que fuesen muchísimo más sensibles. Sería estupendo que fuesen tan sensibles que detectasen el imán desde el otro lado del tablero. Esto facilitaría muchísimo el montaje.

Lo que me ha llamado mucho la atención al leer sobre estos elementos es que en algunos casos el imán está adosado al sensor hall, de forma que éste está incluido en el campo magnético permanentemente.  Entonces cuando acercamos un objeto de hierro (no un imán) el campo magnético se deforma y se concentra más (debido a la mayor permeabilidad magnética del hierro) lo que provoca el disparo del sensor. ¿¿ sería posible que con sólo la presencia de las panzas metálicas de las locomotoras, se activasen los sensores sin necesidad de poner imanes en las mismas??

martes, 2 de noviembre de 2010

Acantonamiento electrónico.



En mi último artículo esbozaba las ideas que me habían surgido como consecuencia de las posibilidades que aporta la tarjeta de Welleman. Todo ello se refiere al control de tracción de los trenes, un tema que hasta ahora apenas había esbozado en este blog. Así que ahora que me he calentado el coco con este asunto , conviene dejarlo por escrito, en primer lugar para mi mismo.

La idea inicial, ha sido siempre dividir toda la maqueta en sectores aislados. con la condición de que sólo puede haber una locomotora moviéndose en cada uno de esos sectores. (Puede haber más. pero necesariamente estarán "aparcadas" en una vía de estacionamiento, que tiene abierto el circuito de alimentación) Como el concepto de estos sectores coincide con la definición de cantones, yo les llamo cantones, pero hay que entender que no solo me refiero a los cantones del circuito principal que permiten la circulación de varios trenes en dicho circuito, sino que hay otros cantones más, en concreto dos más que corresponden a la estación principal (dibujado en violeta en el proyecto) y al taller de vapor (dibujado en gris).

El primer esquema de este artículo corresponde a esta solución: He dibujado dos cantones contiguos cualesquiera, a los que he llamado Cantón 1 y Cantón 2 y el circuito se recorre en el sentido de la flecha.

Las líneas de puntos indican las conexiones con el ordenador

Como se ve, hay una alimentación unida a cada cantón de forma fija, de modo que A alimenta el cantón 1 y B alimenta el cantón 2.

He colocado, cerca del final de cada cantón un contacto (tipo reed) y otro al principio. El situado al principio, como son los marcados como 2 y 4 están situados a solo unos pocos centímetros del principio del cantón y tienen la misión de detectar que un tren ha entrado en el cantón. El situado al final de cada cantón (como 1 y 3) está sin embargo a una cierta distancia. Esta distancia permite que un tren que circule por ese punto, se pueda detener de manera progresiva sin llegar a salirse del cantón. Obsérvese que no hay un trozo de vía aislado para detener el tren al final del cantón de salida o al principio del cantón de entrada para que allí se detengan los trenes, como es habitual en los sistemas analógicos. Los trenes se paran y arrancan suavemente porque son comandados desde la correspondiente alimentación, y no porque se queden en un carril aislado.

Así que el funcionamiento es como sigue: Mientras el tren está en el cantón 1, todos los controles que el usuario maneja en el ordenador referidos a la locomotora, se dirigen a la alimentación A que es la que maneja el cantón por el que circula esa locomotora. Cuando un tren se aproxima a un cambio de cantón y cierra el contacto 1. el programa de ordenador sabe si el cantón siguiente está libre o está ocupado. Si está ocupado, actúa sobre la alimentación A, para reducir progresivamente la velocidad del tren y que éste frene antes de llegar al final del cantón.

Obsérvese que cuando el tren queda frenado al final del cantón, todo el cantón tiene la alimentación a cero. Así que si por accidente se había metido otro tren en el cantón también quedará parado, de manera que nunca puede llegar a chocar con el tren parado al final.

Cuando el cantón siguiente queda libre, lo que hace el programa es "poner en paralelo" la alimentación B con la A (es decir a partir de este momento ambas funcionan al unísono) y hacer una arrancada suave del tren actuando simultáneamente sobre las dos alimentaciones. Cuando la locomotora pasa del cantón 1 al 2, pasa de recibir corriente de la alimentación A a hacerlo de la B, pero como ambas están actuando al unísono, en principio no debería notarse ninguna transición en el movimiento. Una vez que toda la locomotora está ya en el segundo cantón, el tren pasa por el contacto 2. Este contacto le indica al ordenador que el cantón 2 ha quedado ocupado y el cantón 1 ha quedado libre. Entonces ambas alimentaciones se dessincronizan, pasando a ser entonces la alimentación B la que pilota el tren. Evidentemente el programa de ordenador debe actuar en consecuencia, de modo que los controles del programa que se refieren a la locomotora deben pasar a actuar sobre la alimentación B en lugar de hacerlo sobre la A.

Desde luego, si cuando el tren llega al contacto 1, el cantón siguiente está libre, no se ordena ningún frenado sino que se pasa directamente a la sincronización de ambas alimentaciones.

Este fue mi pensamiento inicial, y en realidad es una solución posible, aunque tiene dos inconvenientes: En primer lugar el software resulta complicado, porque esa operación de "sincronizar" dos fuentes de alimentación, requiere un programa que no es tan fácil de hacer, sobre todo si se están considerando temas como la simulación de inercia, frenado, peso del tren, etc.

Sin embargo hay un problema más grave y es que la locomotora pasa de una alimentación a otra al pasar el corte de los carriles, por lo que en un momento dado puede estar recibiendo corriente sumada de las dos fuentes (tomada una por las ruedas delanteras y la otra por las traseras. Como ya demostró Ángel en su blog (Transiciones I) esto puede producir una irregularidad en el movimiento, ya que no se puede garantizar la coincidencia de fases entre las dos alimentaciones.*

Basándome en la solución aportada en el blog de Ángel (Transiciones II) tenía pensado ir a un esquema del tipo siguiente:

El esquema es similar, pero se añaden dos elementos SA y SB que son relés, por supuesto también comandados desde el programa. La variación estriba en que cuando el cantón está libre o se libera, no sólo se sincronizan ambas alimentaciones A y B, sino que el conmutador, en este caso SB conmuta la alimentación del cantón 2 para que sea también alimentado (todo el cantón) desde la alimentación A. Por ello el tren pasa por el corte de los carriles sin la menor afectación, porque ambos lados del corte están alimentados`por la misma alimentación.

Al llegar al contacto 2, el programa actúa sobre el relé SB cambiando instantáneamente la alimentación desde la fuente A a la fuente B. Ya no se produce la posibilidad de que la locomotora reciba la corriente sumada de las dos fuentes, y la conmutación es rapidísima,así que si las dos fuentes estaban bien sincronizadas no se debe notar ningún salto.

Obsérvese que excepto en unos intervalos muy cortos, se sigue manteniendo el esquema de que cada cantón es alimentado por su propia fuente de alimentación, por lo que sigo necesitando ocho alimentaciones. El programa sigue manteniendo la dificultad de conseguir la sincronización entre dos fuentes y el control necesario para que las instrucciones destinadas a cada locomotora vaya a parar a la alimentación que la controla en cada momento.

Como he comentado siempre he pensado en los conmutadores SA y SB como relés, precisamente por el motivo de que deben conmutar la corriente de tracción, y por lo tanto por el mismo motivo ya explicado para los interruptores de las vías de apartadero

La nueva idea, mantiene un esquema similar, pero los conmutadores ahora son múltiples, y están colocados al revés: En vez de permitir que un cantón se alimente desde una u otra fuente de alimentación, lo que hacen es que cada fuente de alimentación se pueda llevar a uno cualquiera de los 8 cantones. De hecho, aunque no está así dibujado, cada fuente de alimentación se puede llevar a dos cantones cualesquiera, a uno solo o a ninguno.

El funcionamiento es entonces como sigue. Suponiendo que la alimentación A está unida al cantón 1, cuando el tren llega al detector 1, el programa comprueba si el cantón 2 está libre. Si lo está dirige el conmutador de la alimentación A de modo que alimente simultáneamente al cantón 1 y al cantón 2 (si no está detiene el tren antes de que salga del cantón como en los casos anteriores) El tren pasa entonces el corte de carriles sin ningún problema puesto que ambos cantones están alimentados desde la fuente A. Al cerrar el segundo contacto, 2, la alimentación A se desconecta del cantón 1, pero continúa conectada al cantón 2, donde ahora está la locomotora.

Las ventajas son muy importantes: En primer lugar, la locomotora no ha cambiado de alimentación, de modo que no hay nada que sincronizar ni hay posibilidad de ninguna irregularidad en el funcionamiento. En segundo lugar el programa no tiene que ocuparse de cambiar los controles de esa locomotora a otra alimentación, ya que la alimentación no ha cambiado. Ambas cosas simplifican tremendamente el programa de control,

Y como tercera ventaja, si se observa el razonamiento, la alimentación 2 no ha hecho falta para nada. Así que con este sistema se puede funcionar sólo con cuatro o cinco alimentaciones. El número de alimentaciones no tiene relación con el número de cantones sino con el máximo número de trenes que queramos rodar de forma simultánea.

La complicación de este tercer método a ido a parar al hardware ya que esos conmutadores son complicados de hacer. Hacerlos con relés sería muy complicado ya que se requiere un número muy grande. Por eso me propongo intentar realizarlos con conmutadores estáticos (multiplexores analógicos) como el 74HC4051. Hay además una dificultad adicional, y es que la situación de estos conmutadores debe mantenerse indefinidamente en el tiempo (hasta que se reciba una orden para cambiar su estado) lo cual parece apuntar a la necesidad de utilizar circuitos de enclavamiento como el 74HC373.

Y por supuesto, soy consciente de que con este tipo de dispositivos sólo puedo manejar tensiones de 5V y corrientes de microamperios con una polaridad dada**, de modo que la parte de amplificación, inversión y por supuesto los Gaugemasters, deben quedar "aguas abajo" y asociarse a los cantones y no a las alimentaciones.

No se si he explicado suficientemente el tema, porque yo mismo tengo todavía algunas vacilaciones, pero creo que esta última vuelta de tuerca ha sido muy positiva. He podido comprobar por las estadísticas de este blog que todos los temas relacionados con el control de los cantones, son de los que más lecturas acumulan. Espero que este novedoso método de acantonamiento basado en ordenador no provoque más dudas que soluciones.

Una cosa: El tren puede estar funcionando en "automático" o en "manual". La diferencia está simplemente en que en automático, si el tren se puede mover se moverá y lo hará a una velocidad programada. En cambio en modo manual, el tren no se mueve hasta que el operador actúa sobre el control en el ordenador, y puede ajustar la velocidad. Sin embargo, aunque el operador pretenda saltarse una señal y entrar en un cantón cerrado, el programa frenará el tren automáticamente, como si estuviera en modo automático.

A lo mejor esto parece poco real, pero el sistema que he descrito, incluyendo los detectores situados uno de ellos con tiempo para el frenado y el otro junto al punto de parada, y el hecho de que si pretendo saltarme una señal el tren se frena solo reproducen casi exactamente el sistema ASFA que es el empleado normalmente en las líneas férreas reales. Véase este vídeo:



* Contando con dos alimentaciones conectadas a dos salidas PWM de la misma placa Welleman, dado que ambas provienen del mismo microcontrolador me sorprendería que no estuvieran en fase. Sin embargo cuando se trata de alimentaciones de placas distintas, no creo que haya forma de sincronizarlas

** En realidad podría manejar la corriente como positiva o negativa ya que este multiplexor es analógico, pero a base de una dificultad en la alimentación que no me compensa.