viernes, 25 de octubre de 2013

Vacuum Fluorescent Display (VFD) driver con MAX7219 y Arduino



Recientemente he adquirido varias pantallas VFD (Vacuum Fluorescent Display). Hace años estos displays se podían encontrar en toda clase de dispositivos electrónicos, y aunque hoy en día la tecnología LED les han ganado bastante terreno, los VFD se siguen encontrando en nuevos dispositivos, pues su luminosidad, contraste y ángulo de lectura es inigualable. Calculadoras, auto-radios, reproductores de vídeo, mini-cadenas, equipos de laboratorio... son ejemplos de dispositivos que incorporaban estos displays. La geometría de los dígitos o elementos a mostrar es ilimitada, por lo que se pueden encontrar VFD con dígitos de 7, 9, 14 y 16 segmentos, gráficos de barras, matrices de píxeles, iconos y figuras, etc... En concreto, los que se van a utilizar en este proyecto, VFD de 5 dígitos de 7-segmentos de antiguos surtidores de gasolinera. 

Estructuralmente, los VFD están compuestos por un filamento (cátodo), una serie de rejillas sobre cada dígito y los segmentos (que juegan el papel de ánodo), cubiertos por una película fluorescente. El sistema entero se encuentra a vacío. En muchos VFD, los segmentos son comunes para todos los dígitos, por lo que el sistema tiene que trabajar multiplexado. Mediante las rejillas se selecciona el dígito a iluminar. Tanto las rejillas como los segmentos a iluminar deben de estar a la tensión de trabajo, mientras que los demás deben permanecer conectados a GND.
El funcionamiento es muy parecido al de un monitor CRT:
El filamento se calienta mediante el paso de corriente (que puede ser AC o DC) con una tensión de unos 2 a 6V. Debido a la temperatura del filamento, algunos de los electrones que circulan por él son capaces de desprenderse del metal y entonces, debido a la diferencia de potencial, son acelerados hacia el ánodo. En este momento, si la rejilla está conectada a tierra, repelerá los electrones e impedirá que se acerquen al ánodo. Por otra parte, si tiene tensión positiva, los electrones irán hacia ella, y los que no colisionen seguirán su camino, impactando con la película fluorescente sobre el ánodo. El material fluorescente, tras recibir un impacto electrónico, es excitado energéticamente, y al volver a su estado fundamental, emite los fotones responsables del brillo observado.

Para averiguar la función de cada patilla, lo que hice fue alimentar con 3V (DC) el filamento (normalmente son las patillas de los extremos). Seguidamente, puse una de las rejillas (se suele ver que patilla corresponde a que rejilla a través del vidrio) a una tensión de +15V, compartiendo masa con el filamento. A continuación, con un cable también a +15V, fuí tocando patilla a patilla, anotando que segmento se iluminaba. Con el patillaje ya claro, el siguiente paso objetivo sería iluminarlos inteligentemente mediante un controlador.

El principal inconveniente de los VFD es su voltaje de trabajo. Mientras que otros displays, como pantallas LCD, LEDs, etc, necesitan de tensiones no superiores a +5V, los VFD necesitan entre 30-70V para funcionar. Es por ello que necesitan de drivers capaces de manejar esa tensión para poder ser controlados por electrónica CMOS. En mi caso, los VFD que tengo han sido reciclados de otros dispositivos, y en la mayoría de casos, los drivers van integrados en circuitos mucho mas complejos, impidiendo que estos puedan ser aprovechado para otros propósitos (eso si, en las placas donde se encuentran los VFD normalmente se encuentran arrays de transistores capaces de manejar tensiones elevadas, que nos serán de mucha utilidad al construir nuestro propio driver).

Por otra parte, tenía varios MAX7219 sin utilizar, cuya función es controlar displays LED de 7 segmentos de cátodo común. Con tal de aprovecharlos, decidí intentar construir un circuito basado en el MAX7219 capaz de controlar un display VFD de 5 dígitos de 7 segmentos. De esta forma, sería posible conectar y manejar el VFD mediante cualquier microcontrolador (μC) como PICs, Arduino, etc...

El MAX7219 es un driver que se comunica con los controladores mediante el protocolo SPI (en serie, 4 cables), diseñado para manejar 8 dígitos de 7 segmentos (cátodo común).
El integrado incorpora decodificador BCD, multiplexador, 8 drivers para los segmentos y el punto digital, 8 drivers para los dígitos y una RAM 8x8 donde se almacena cada dígito.

El problema que presenta la incorporación del MAX7219 en este proyecto es que el  integrado está pensado para ser usado con LEDs de cátodo común, con lo que por los pines destinados a manejar los segmentos el integrado suministra +5V (hasta 100mA) mientras que los pines destinados al cátodo común de cada dígito van directamente a tierra.

La diferencia con VFD, como se ha comentado antes, es que tanto los segmentos como las rejillas (el equivalente al cátodo común de los LEDs) se alimentan con tensión positiva.

Por lo tanto, el circuito ha de funcionar como interfaz entre el MAX7219 y el VFD, siendo capaz de manejar los voltajes requeridos. Por otra parte, debe de invertir la lógica del MAX7219 en los pines que seleccionan el dígito a iluminar, alimentándolo positivamente cuando el MAX7219 presenta 0V en la patilla correspondiente al dígito, y viceversa.
Los segmentos se pueden conectar directamente al MAX7219 a través de un UDN2981 (IC2), driver de corriente de 8 canales, que soporta hasta 80V y cargas de hasta -500mA por canal.

La inversión de la tensión en las salidas para los dígitos del MAX7219 se consigue mediante la instalación de una serie de operacionales (LM358, amplificador operacional doble, alimentación hasta 32V, IC3-IC5), de en fase inversora entre los dígitos y el MAX7219. La tensión en la entrada positiva se ha fijado a 2.5V mediante el zener D1, y la corriente a través de este se ha limitado mediante R1 (1KΩ).

La alimentación del VFD se obtiene de un circuito conversor DC-DC (step-up) a partir de los 5V del circuito, que genera 36V. El voltaje se encuentra un poco en el límite inferior del necesario por los VFD, pero era el máximo que suministra el conversor DC-DC. Al ser un voltaje relativamente bajo, el display no brilla con suficiente intensidad. Aún así, pudo ser corregido aumentando el voltaje de los filamentos a 5V. 

PCB donde se observa el conversor DC-DC step-up soldado en un nivel superior

El circuito fue diseñado con Eagle (descargar aquí) y luego transferido a una placa de baquelita fotosensible. Se reveló con ortosilicato sódico, y se grabó con FeCl3. Seguidamente, se perforó con una broca de 1mm, y se soldaron todos los componentes.
Como prueba, lo conecté a un Arduino, con un simple programa basado en la librería LedControl.

Al principio observé que existía un ligero ghosting. Conectando dos de los dígitos al osciloscopio, pude ver que se debía al solapamiento de su nivel alto estos en el proceso de multiplexado. Este, que al nivel lógico de 5V ocurre perfectamente sincronizado, tras pasarlo por los operacionales, se retrasa debido al incremento de tensión en rampa no ideal que ocurre en los operacionales. Esta rampa, que tiene una duración de tan sólo 30 μs, es suficiente como para observar este fenómeno de ghosting.

Pantalla del osciloscopio mostrando el multiplexado del MAX7219 a diferentes valores de la función "setIntensity"

La solución fue muy simple, y consistía en cambiar el brillo de la pantalla por software mediante

objeto.setIntensity(address, intensity)

Esta función, lo que en realidad hace es reducir el tiempo que el dígito está encendido. Tras ajustar el parámetro al valor óptimo, así es como lucía en el osciloscopio, y en aparencia.

El circuito funciona de forma estable y contínua. La corriente total de este es de 510 mA, incluyendo el conversor DC-DC y el MAX7219. El consumo podría disminuirse aumentando el voltaje del conversor DC-DC, y disminuyendo el voltaje en el filamento.


En definitiva, si tienes algún MAX7219 abandonado, y aquel VFD que un día desmontaste de una radio y nunca utilizaste, aquí tienes una idea de como puedes hacer para que se lleven bien. En mi caso, estos dígitos van a sacar a relucir la temperatura de mi bomba difusora ¡Espero que os sirva!


Referencias
http://www.noritake-elec.com/vfd_operation.html
http://www.futaba.co.jp/en/display/vfd/index.html
http://en.wikipedia.org/wiki/Vacuum_fluorescent_display

martes, 27 de agosto de 2013

Reloj con Nixie Tubes


El día que vi por primera vez un Nixie Tube, me que quedé anonadado. No conocía de su existencia, y fue navegando por internet que me topé con este display tan precioso. El avance de la tecnología (también su precio e inconvenientes) ha hecho de estos dispositivos reliquias obsoletas que ya no se pueden encontrar en nuevos dispositivos electrónicos. Por suerte, aún quedan almacenes con stocks de hace mas de treinta años para los nostálgicos.


Los nixies son displays digitales, constituidos por un ánodo en forma de malla, y diferentes cátodos en forma de números u otros símbolos, dentro de una ampolla de vidrio rellena de neón (también existen nixies con mercurio o argón) a baja presión. Al aplicar un voltaje entre ánodo y cátodo (≈170V) se genera un brillo naranja alrededor del cátodo. En presencia de este voltaje, las moléculas de gas se ionizan, disociándose en iones cargados positivamente (cationes) y electrones. Los iones positivos son atraídos por el cátodo, cargado negativamente, mientras que los electrones se dirigen hacia el ánodo. De esta forma, comienza el flujo de corriente eléctrica dentro del nixie. En el transcurso de los iones hacia el cátodo se producen impactos con otras moléculas de gas, todavía no ionizadas, las cuales  son arrastradas también hacia el cátodo.
Las colisiones producidas por los iones al alcanzar la superficie del cátodo, consiguen arrancar átomos del metal que lo forman, en un proceso llamado sputtering. Los átomos  expulsados de la superficie del cátodo son entonces alcanzados por los electrones que viajan hacia el ánodo, llevándolos a un estado energético excitado. Para la desactivación de este estado excitado existen diferentes mecanismos, siendo uno de ellos la emisión fotónica. Los fotones emitidos tras la desactivación son los responsables del brillo naranja que se observa alrededor de los dígitos del nixie.

Con estos preciados dígitos me propuse construir un reloj digital, cuya construcción detallo a continuación. Para realizar el siguiente proyecto, me ha sido de gran ayuda la página de Peter H. Wendt

La construcción del reloj se puede separar en tres partes, que son la fuente de alimentación de la electrónica y los nixies, el corazón del reloj, encargado de llevar las cuentas, y el driver de los nixies, capaz de manejar los voltajes necesarios para iluminar los nixies que le indica el reloj.

Generador de pulsos

La base de todo reloj recae en una fuente continua y precisa de pulsos. Existen diferentes opciones para generar la señal necesaria para un reloj: circuitos resonantes (LC), circuitos RC, circuitos integrados (como el 555) u osciladores de cristal piezo-eléctrico de cuarzo, entre otros. Este último es el que se emplea en este proyecto, dada su estabilidad de frecuencia.

El circuito oscilador empleado posee un cristal piezo-eléctrico que trabaja a una frecuencia de 32.768 Hz. Un condensador variable permite ajustar finamente la frecuencia del oscilador. El integrado divisor (4060) genera diferentes pulsos a partir de la frecuencia del cristal. Por el pin 1 se obtienen pulsos a 8 Hz mientras que por el pin 3 se obtiene una señal de 2 Hz. Esta última, se vuelve a dividir para obtener 1 Hz mediante un flip-flop (4013). Este pulso de 1 Hz es el encargado de mover casi toda la electrónica del reloj, segundo a segundo.

Contador de tiempo, lógica del reloj

Los pulsos de 1 Hz generados por el circuito oscilador se pasan directamente a la entrada (pin 14) de un contador de décadas (IC1, 4017), encargado de llevar la cuenta de las unidades de segundo. Este integrado posee un contador interno que avanza cada vez que recibe un pulso por su entrada. El contador es el responsable de seleccionar en que pin del integrado habrá tensión de 5V. Así, empezando desde Q0, la señal electrónica va avanzando segundo a segundo por cada salida hasta llegar a Q9.

Estando el contador en Q9, la llegada de un nuevo pulso resetea el contador, y Q0 vuelve a estar en alto. Este integrado, cuyas salidas se corresponden al primer dígito del reloj, maneja las unidades de segundo.

Los reset de los IC se ponen a tierra a través de las resistencias de 100K.

El integrado IC1 posee una señal de salida, que conectada a la entrada del siguiente 4017 (IC2, segundo contador de décadas), hace que este avance una posición cada 10 segundos. De esta forma se consigue que IC2 cuente decenas de segundos.
Con esta configuración, el sistema formado por los dos IC llegaría a contar hasta 99 segundos. Pero lo que se desea es que la cuenta llegue hasta 59, es decir, que cuente exactamente durante un minuto, y una vez pasado este tiempo, el conjunto de IC1 e IC2 se resetee volviendo a 0 0. Para ello, basta con conectar el pin Q6 de IC2 a su propio pin de reseteado. De esta forma, cuando el contador de IC2 pase de Q5 a Q6, el pin de reseteado entra en alto, y el contador de IC2 vuelve a 0 (al mismo tiempo que lo hace IC1).

Las salidas Q0-Q5 de IC2 se corresponden con el segundo dígito del reloj, las decenas de segundo.

No es difícil imaginar como funciona el contador de minutos, pues es exactamente igual: también esta formado por dos contadores de décadas (IC3 e IC4), conectados en serie, donde el segundo de ellos (IC4) tiene su pin Q6 conectada al reset. La entrada de pulsos al contador de minutos es a través del pin 14 del IC3, y los pulsos son los provenientes del pin Q6 del IC2, cada 60 segundos.

El contador de horas funciona bajo el mismo concepto, con la salvedad de que se tiene que resetear o bien a las 12 o a las 24 horas (dependiendo del formato de tiempo que se le quiera dar al reloj). Personalmente me gusta mas la convención de 24h, así que lo he conectado para que funcione de tal forma. El reseteo del reloj sólo debe ocurrir si Q4 de IC5 y Q2 de IC6 están en alto, es decir, al llegar a las 24 horas. Para direccionar esto, es necesario formar una puerta lógica AND entre las nombradas patillas de forma que sólo con ellas dos en alto llegue un nivel alto al reset. De ello se encarga el circuito formado por los dos transistores (T1 y T2), cuyas bases están conectadas  a Q4 de IC5 y Q2 de IC6, y el emisor de T2 está conectado al colector de T1, cuyo emisor está conectado a su vez al reset.
Se pueden aprovechar las otras salidas del integrado 4060 para inyectar pulsos de mayor frecuencia al sistema, de esta forma se puede poner a hora el reloj rápidamente.

Se ha añadido un interruptor de tres posiciones al sistema. La posición central no hace nada, la de un extremo conecta la salida del 4060 de 4 Hz a la entrada del contador de segundos, mientras que la otra lo hace al contador de minutos


Fuente de alimentación

La fuente de alimentación de este proyecto tiene que ser capaz de proporcionar voltajes de nivel lógico para el sistema contador de tiempo, a la vez que los 170-180 V necesarios para hacer brillar a los nixies.

Mediante un transformador convencional se reducen los 220V de la instalación eléctrica a algo mas de 12V. Un puente de diodos conectado al secundario del transformador rectifica la corriente alterna, mientras que el condensador suaviza los picos de la señal resultante. El integrado LM7812 elimina cualquier excedente de 12V y mantiene la señal a este voltaje, que es el que alimentará la electrónica. Por otra parte, directamente desde el secundario del primer transformador, se conecta a otro transformador en posición invertida (formando lo que se conoce como back-to-back transformer), que eleva la tensión de nuevo a 220V. Esta señal se rectifica a continua, y servirá para alimentar a los nixies. Con este montaje, se consigue aislar la tensión que pasa por los nixies de la línea de corriente, haciendo mas seguro el montaje en caso de tocar accidentalmente los nixies mientras esta conectado a la red. (De esta forma, los nixies no están conectados a tierra)

Driver de los Nixie Tubes

Como se ha indicado anteriormente, los nixies necesitan de unos 170V entre ánodo y cátodo para que empiecen a brillar, por lo tanto, la tensión suministrada por los contadores de tiempo (IC1-IC6) es insuficiente. Se necesita de un driver capaz de manejar los voltajes necesarios para los nixies al son que marquen los contadores.

El driver se puede construir fácilmente mediante transistores. Es necesario buscar transistores cuyo VCE y VCB sea mayor de 170V. Como bien se aconseja en la página de Peter H. Wendt, el MPS-A42 es un transistor capaz de manejar voltajes hasta 300V, a la vez que económico. Se necesita un transistor por cátodo, lo que suma 60 transistores, junto con sus 60 resistencias para limitar la corriente a través de los cátodos. El número de estos se puede simplificar teniendo en cuenta que las decenas de segundo y minuto sólo cuentan desde 0 a 5, y las decenas de hora, desde 0 a 2, con lo que se reduciría el número de transistores a 45. Personalmente, he decidido conectar todos los cátodos, de forma que todos los dígitos están activos por si quisiera utilizar el driver para otro propósito.

Construcción de los circuitos

El circuito lo he separado en 3 placas diferentes, una para la fuente de alimentación, otra para el driver de los nixies y la otra para la lógica del reloj.

Ejemplo de máscara (en este caso, para la placa driver de los nixies) impresa sobre papel de acetato
El circuito ha sido diseñado con CadSoft EAGLE. Los archivos se pueden descargar desde este enlace.

Las placas son de baquelita fotoresistiva. Se ha impreso una máscara de los circuitos diseñados en papel de transparencia con una impresora láser, a la máxima calidad y seleccionando los parámetros para que utilice la mayor cantidad de tóner posible. Tras colocar la máscara de sobre la baquelita, fueron irradiados con luz UV de 254 nm durante aproximadamente 1.5 minutos.

Placa driver de los nixies, tras el tratamiento con FeCl3
Seguidamente fueron revelados en una disolución de ortosilicato sódico, durante un período aproximado de 5 minutos (hasta que ya no se observó mas desprendimiento de colorante de la placa). Tras secar las placas, estas fueron introducidas en una disolución de tricloruro de hierro (FeCl3) a 60ºC, a la vez que se agitaba mecánicamente y se le burbujeó aire con compresor de nevera.

Placa lógica del reloj, con casi todos los componentes soldados

De esta forma el cobre no protegido fue eliminado de la baquelita en unos 5 minutos. Tras lavar las placas con agua, se irradiaron de nuevo con luz UV, esta vez sin máscara, y luego se volvieron a introducir en la disolución reveladora, con el fin de eliminar la película fotorresistiva restante.
Los taladros fueron realizados con brocas desde 0.5 a 1.5 mm, dependiendo de las necesidades, y seguidamente se soldaron todos los componentes.




Cuerpo del reloj terminado. Se muestra la fuente y la placa lógica (composición)

Las conexiones entre placas se realizaron principalmente con manguera plana de 10 vías. Los asientos para los nixies fueron hechos a mano (no encontré opción barata por eBay) mecanizando ligeramente unos pines para propósitos diferentes.
Placa driver de los nixie tubes terminada

Placa driver de los nixie tubes vista desde arriba


La caja metálica es una de tantas que tenía por ahí esperando ser utilizada en algún proyecto, a la que se realizaron dos taladros, uno para sacar el cable de la alimentación y otro para el interruptor de ajuste de hora. Tras pintar la caja de negro y ponerle un embellecedor en aluminio cepillado (mecanizado gracias a Pepe) quedó con un muy buen acabado.

Nixie tubes montados en la caja. Falta cerrar y poner embellecedor
Y este es el resultado final, tras ensamblar todas las placas, conectarlas entre ellas y conectar el reloj a la red eléctrica:


Referencias