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