Obteniendo una gran cantidad de (~ 100) señales de salida digital de Arduino

19

Me gustaría poder controlar alrededor de 100 LED independientes usando un Arduino. El problema es que el Arduino no tiene suficientes pines que se puedan configurar para esto. ¿Cuál sería una manera de resolver este problema? ¿Hay un chip que pueda eliminar una señal más compleja del Arduino que luego pueda controlar los LED? ¿O hay otra solución?

Alexis K
fuente
¿Cuáles son sus requisitos de frecuencia de actualización? ¿Cuánto consumo de corriente por LED?
vicatcu el
frecuencia de actualización de alrededor de 1 segundo. pensando alrededor de 8ma por LED. Sería alimentado por un adaptador externo - no el Arduino
Alexis K
Existen muchas soluciones de demultiplexación. Pero considere la complejidad de su tarea; ¿El algoritmo que necesita para generar los datos se ajustará a las restricciones de la mcu de Arduino? Algunas tareas lo harán, otras no encajarán o solo encajarán a través de diseños de creación que pueden ser bastante satisfactorios de crear pero pueden dificultar el mantenimiento del código.
Chris Stratton el

Respuestas:

22

En primer lugar, un Arduino no puede controlar directamente 100 LED, ya que la corriente combinada que el dispositivo debe generar o hundir excederá con creces tanto el microcontrolador como el regulador de voltaje en la placa Arduino. Sin embargo, un Escudo Arduino personalizado con su propia fuente de energía y regulación podría ser adecuado.

Hay varios enfoques fáciles, el enfoque más simple se detalla a continuación:


El TLC5940 controla 16 LED por IC, controlados por entrada en serie a través de una ligera variante de una interfaz SPI. Se pueden conectar en cascada hasta 40 dispositivos TLC5940, pero 7 de ellos serán suficientes para controlar los 100 LED en la pregunta.

Hay al menos un par de bibliotecas Arduino ( 1 , 2 ) para el TLC5940.

Frecuencias de reloj sugeridas para enviar desde Arduino y frecuencia de actualización correspondiente:

  • 1 MHz GSClk usando el código en este hilo .
  • 330 KHz SCLK (reloj de datos en serie)
  • Por lo tanto, la frecuencia de actualización de datos LED 244 Hz

Esto se basa en las fórmulas de la hoja de datos:

f (GSCLK) = 4096 * f (actualización)
f (SCLK) = 193 * f (actualización) * n
donde:
f (GSCLK): frecuencia mínima necesaria para GSCLK
f (SCLK): frecuencia mínima necesaria para SCLK y SIN
f ( actualización): tasa de actualización de todo el sistema en cascada
n: número en cascada de dispositivos TLC5940

El TLC5940 es un sumidero de corriente constante , por lo que los ánodos de los LED estarían conectados a un voltaje un par de voltios mayor que el LED Vf, o alrededor de 7 voltios, el que sea menor, alimentado independientemente de los pines de alimentación del Arduino. Esta fuente de voltaje debe ser capaz de suministrar 100 * (cualquiera que sea la corriente en la que ejecute los LED), pero puede ser una fuente no regulada.

Los cátodos LED van a las líneas de accionamiento de los respectivos circuitos integrados TLC5940.

El TLC5940 consume hasta Icc = 60 mA por dispositivo durante la escritura de datos, por lo que alimentar 7 de ellos desde el Arduino no funcionará, requerirá que se proporcione un Vcc regulado independiente de 3.3 a 5 voltios, idealmente el mismo valor que el Vcc del Arduino que se está utilizando, y las huellas de tierra necesitan conectarse de nuevo a la tierra de Arduino, por supuesto. Operar las partes de TLC a un voltaje diferente al Arduino generaría la necesidad de una conversión de nivel de la señal en serie, por lo tanto, es mejor evitarla.

Varios videos de YouTube demuestran el uso de Arduino con IC TLC5940 en cascada.


Aunque estos circuitos integrados se diseñaron para controlar pantallas LED numéricas de 7 segmentos, proporcionan un control LED individual, por lo que pueden usarse para hasta 64 LED por circuito integrado. Dos de ellos se pueden conectar en cascada para controlar los 100 LED necesarios. La página 13 de la hoja de datos muestra una configuración en cascada.

Para este diseño, los LED tendrían que estar conectados eléctricamente como grupos de hasta 8 LED, cada uno de los cuales comparte una línea de cátodo (cátodo común).

Los MAX7219 / 7221 son controladores de LED de multiplexación, por lo tanto, el brillo máximo de los LED será menor que para un controlador de LED estático como en la sección anterior.

Aquí hay una útil biblioteca y guía de matriz de LED que utiliza el MAX7219.

Algunos videos relevantes de YouTube ( 1 , 2 ) pueden ser de interés.


Una vez más, estos circuitos integrados se diseñaron para controlar pantallas LED numéricas de 7 segmentos, proporcionan control LED individual, por lo que se pueden usar para hasta 40/64 LED por circuito integrado. Dos / tres de ellos se pueden conectar a un bus Arduino SPI para controlar los 100 LED necesarios.

Las notas de diseño siguen siendo las mismas que en la sección anterior. Además, el brillo máximo del LED individual sería menor que para el diseño multiplex recto del MAX7219.

Hay algunos videos de YouTube que pueden ser de interés.


  • Diseños de componentes discretos, registros de desplazamiento, expansores de E / S, tiras de LED cortables con controladores individuales y muchos más ...

Todos estos enfoques se han utilizado con distintos niveles de simplicidad y éxito. Son implementaciones más complejas que los 3 enfoques anteriores, por lo tanto, no se detallan más. Buscar en la web produciría guías útiles para estos enfoques, si es necesario.

Un irritante clave con tales diseños es la necesidad de resistencias de control de corriente en cada LED o cadena de LED. Los dispositivos diseñados específicamente para la conducción LED generalmente no necesitan esto.

No tengo experiencia personal con este último conjunto de opciones, por lo que no puedo ayudar mucho.


Nota al pie: Después de responder a esta pregunta, encontré una pregunta anterior , que tiene respuestas que detallan y discuten varios de los enfoques en mi última sección. Ese hilo hace interesante "lectura adicional como tarea".


Anindo Ghosh
fuente
1
¿Registros de cambios económicos como 74HC595?
Thomas E
Además, ¿cómo proporciona el Max5951 un "control LED individual"? Solo parece tener un control de 7 segmentos (8 pines para 8 dígitos), ¿no?
Thomas E
Sí, esos también. Necesita muchas resistencias para proteger los LED, y luego el complejo del cableado en comparación con los circuitos integrados especialmente diseñados.
Anindo Ghosh
@ThomasE No: "El MAX6950 controla hasta cinco dígitos de 7 segmentos o 40 LED discretos. El MAX6951 maneja hasta ocho dígitos de 7 segmentos o 64 LED discretos". Uno solo conecta grupos de 8 LED cada uno a una línea de cátodo, como se describe en la sección MAX7219 de mi respuesta.
Anindo Ghosh
2
@starblue Overkill v / s facilidad de implementación de bricolaje : para un esfuerzo único o hobby, ¿el TLC5940 ($ 3.78 en cantidades individuales en DigiKey) no seguiría siendo la solución más simple , debido a las bibliotecas Arduino y el soporte activo dentro de la comunidad Arduino? A menos que haya otras partes igualmente bien soportadas, como usted señaló, que los foros de Arduino adoran.
Anindo Ghosh