Controlando 500 LEDs con PWM

26

Estoy considerando la posibilidad de asumir un proyecto que implicaría abordar individualmente 500 LED, de manera óptima con soporte de PWM para cada uno.

Planeo usar un Arduino ya que ya tengo uno, pero estoy abierto a sugerencias si alguien piensa que una plataforma diferente sería una mejor combinación.

Los registros de turnos tendrían que ser empleados. ¿Qué es un buen registro de cambios para usar en esta situación? Si PWM hace que este proyecto sea mucho más caro, estoy bien si lo hago sin él. Quiero intentar gastar menos de $ 100. Me gustaría comprar a granel 500 LEDs de eBay.

¿Cuál es su opinión sobre la mejor manera de controlar un número tan elevado de LED? Además, ¿cómo haría para proporcionar el poder? Apreciaría cualquier ayuda. Tengo bastante experiencia con la electrónica, nunca he hecho nada a una escala tan grande.

    
pregunta littlebirdceo

15 respuestas

14

Soy el autor de la biblioteca ShiftPWM y acabo de actualizar la documentación para incluir esquemas y mucha más información general sobre los LED normales, las tiras de LED y los LED de alta potencia.

Probablemente ya comenzó su proyecto, pero como esta página recibe una gran cantidad de visitantes, todavía me gustaría proporcionar una respuesta detallada.

Si desea controlar 500 LED con ShiftPWM, puede obtener aproximadamente 64 niveles de brillo por LED a 60 Hz. Usaría 64 registros de turnos. Los controladores PWM de hardware dedicado te darán más niveles de brillo, pero serán un poco más caros. Creo que la principal ventaja de mi biblioteca es la facilidad de uso, ya que incluye funciones RGB y HSV y muchos ejemplos.

Yo personalmente iría para el TLC5916 de TLC5917 en lugar de los registros de desplazamiento normales, ya que tienen un controlador LED de corriente constante incorporado. Esto le ahorrará mucha soldadura, ya que no necesita resistencias.

En mi sitio web ( enlace ) Tengo más información sobre cómo conectar los LED y cómo manejar la señal larga Cables con el Arduino a altas velocidades.

Si tiene más preguntas, pregunte.

    
respondido por el ElcoJacobs
13

Solo copia :-)

enlace

  

Hoy estamos lanzando una actualización a nuestro proyecto LED Pegboard de código abierto "Peggy". La versión 2 de Peggy ha sido rediseñada desde cero. Y se ve ... casi exactamente lo mismo. Sin embargo, los cambios bajo el capó son sustanciales, y creemos que es una gran mejora en muchos aspectos.

     

Lo primero y más importante es que Peggy 2.0 sigue haciendo lo mismo: proporciona potencia eficiente a una matriz de 25 LED de 25 ubicaciones. Peggy está diseñado para eliminar algunas de las picaduras, la complejidad y el desorden de jugar con los LED. Es un tablero de instrumentos versátil y potente que le permite manejar cientos de LED en la configuración que desee, sin tan solo calcular una resistencia de carga única. Puedes instalar desde 1 a 625 LED, y Peggy los encenderá por ti.

  

Peggy 2.0 ahora también es compatible con Arduino: admite la programación a través de un cable USB-TTL, utilizando el popular entorno de software Arduino.

    
respondido por el Axeman
6

¿En qué diseño quieres que estén los LEDs? Puede comprar mucho trabajo si compra algunas matrices de LED, puede obtener matrices de 8x8 LED de un solo color (64 LED) for a buck buck_a> o two .

No obtendrás PWM real con un AVR y los registros de cambios en este número de LED, pero es posible que puedas exprimir 2-4 niveles de brillo. Tendría que ejecutar los números y ver qué es posible.

Allegro hace un poco útil registros de cambio de sumidero de corriente constante específicamente diseñados para controlar Arreglos de LEDs, para que no necesite las resistencias adicionales, eso también hará las cosas más simples. Es posible que no pueda conducir los LED directamente desde la salida del AVR si no puede proporcionar suficiente energía, por lo que deberá utilizar transistores. Puede obtenerlos en matrices en un solo IC , que también ahorra algo de trabajo .

    
respondido por el davr
5

No tengo idea de la gama de PWM que necesita para un LED, pero he estado trabajando en un controlador PWM de 64 canales para una aplicación de control de servo que me puede dar pulsos de entre 600us y 2.4ms. Esto utiliza los CD74HCT238E (demultiplexores de 3-8 líneas) para generar 64 canales desde 8 pines de E / S en un ATMega168 y se puede controlar a través de simples comandos serie. Supongo que podría encadenar varias versiones de una versión modificada de este controlador en una línea serie y abordar los 500 LED ... Probablemente podría usar la versión ATTiny2313 del controlador, ya que sus requisitos de firmware serían más simples.

Mi blog contiene la fuente del ensamblaje, los esquemas y los detalles del proceso de diseño.

    
respondido por el Len Holgate
5

Echa un vistazo a los circuitos integrados "LED driver" en mouser / digikey. TI, por ejemplo, fabrica una gran cantidad de controladores con una variedad de interfaces (I2C, SPI) que ciertamente satisfarán sus necesidades. La mayoría de estos controladores están diseñados para ser conectados en cadena, por lo que la salida en serie de uno se introduce en la entrada en serie de otro.

Por ejemplo, algo como el TLC5940 ofrece control de PWM de 16 canales. Así que, básicamente, es un registro de desplazamiento de 16 bits actual constante con control PWM en escala de grises de 12 bits. Puedo recomendar ese IC en particular, ya que ayudé a diseñar una pantalla de 80x16 con él.

    
respondido por el David Brenner
4

Mondomatrix crea algunas placas controladoras LED direccionables serie (rs-485), y se basa en la plataforma Arduino: enlace capaz de armar un sistema usando ese hardware con bastante facilidad

    
respondido por el Lepton
4

Si no desea demasiados bits de control de PWM para cada LED, y desea evitar tener que hacer que un procesador pierda los 500 LED de cada ciclo de PWM, puede controlar 8 LED con N bits de brillo usando N 74HC595 o fichas equivalentes. Conecte las salidas de todos los chips N juntos, y conecte las habilitaciones a algunos circuitos que solo lo permitirán uno a la vez con la temporización adecuada. Organice para que el primer chip se habilite la mitad del tiempo, el segundo se habilite por la mitad del resto, etc.

Cualquier recarga de los registros de desplazamiento se debe sincronizar con la frecuencia de PWM, para minimizar los efectos de aliasing (por ejemplo, si un nivel de brillo cambiara rápidamente entre 0111 y 1000, el punto en el ciclo de PWM cuando se produjo el cambio podría cambiar momentáneamente el brillo aparente).

Aunque tener que usar múltiples salidas 74HC595 para cada LED puede ser molesto, este enfoque es probablemente el más simple que podría mantener diferentes niveles de brillo sin la intervención continua de la CPU.

    
respondido por el supercat
3

Esto no responde directamente a la pregunta, pero otro aspecto que debe tener en cuenta es la posible variabilidad de brillo entre los LED de su lote de 500. Esto es particularmente importante si estos LED están montados uno cerca del otro, como en una matriz o en pantallas de 7 segmentos. Consulte esta respuesta para obtener más detalles sobre cómo abordar este problema, en particular, usando la corrección de puntos para compensar las variaciones en Brillo del LED.

Experimenté este problema cuando obtuve 200 LED rojos de 1 mm para un conjunto de pantallas grandes de 7 segmentos que estaba construyendo. Mi solución barata para resolver el problema implicaba lo siguiente:

  1. Construí un probador de LED en una placa de pruebas para clasificar los conjuntos de leds en varias categorías de brillo
  2. Monté cada segmento usando LED en la misma categoría (en mi diseño, cada segmento consistía de 5 LED montados en serie)
  3. Compensé la diferencia en el brillo de cada segmento utilizando diferentes resistencias limitadoras de corriente. Por ejemplo, para un segmento con LED más brillantes, usaría una resistencia de 100 ohmios, mientras que, para otro segmento con LED más tenues, usaría resistencias de 120 ohmios.
respondido por el Ricardo
2

Sugiero usar la técnica de modulación de ángulo binario descrita en este artículo enlace

O consulte la biblioteca de ShiftPWM enlace

    
respondido por el x4mer
1

XMOS utiliza el Macroblock MBI5026 con sus kits de azulejos LED. Creo que se usan en la mayoría de los otros sistemas profesionales.

León

    
respondido por el Leon Heller
1

Los chips de controladores dedicados con interfaces seriales probablemente serán la mejor ruta. Tratar con los registros de desplazamiento individuales probablemente signifique un circuito muy complejo. Al menos Maxim y TI hacen algunos. No recuerdo si alguno de los dos tiene un modelo especialmente adecuado para eso.

Todavía llevará una gran cantidad de hardware.

En cuanto a la alimentación, la programación y los buses, la hoja de datos de cada controlador probablemente tendrá la mayoría de la información que necesitará.

    
respondido por el XTL
1

Dentro del ámbito del software, si el número de configuraciones de brillo distintas que necesita no es demasiado grande, puede ser útil almacenar los datos en formato "bit-planar" (como se describe en mi otra respuesta basada en hardware) y luego haga que las rutinas de salida usen operadores booleanos para actuar en 8 píxeles a la vez. Para lograr la máxima eficiencia, esto requerirá tener múltiples rutinas de salida separadas, utilizadas para diferentes partes del ciclo de PWM; por ejemplo, si uno desea usar valores de brillo de 4 bits, uno usaría ocho rutinas de la forma:

  movf  bit0Comp,w  ; Should be 00 or FF depending upon bit 0 of comparand (FF if clear)
  iorwf POSTINCF,w  ; Bit 0 of data; always use IORWF
  andwf POSTINCF,w  ; Bit 1 of data; use IORWF if bit 1 of comparand is set; ANDWF if clear
  andwf POSTINCF,w  ; Bit 2 of data; Use IORWF if bit 1 of comparand is set; ANDWF if clear
  andwf POSTINCF,w  ; Bit 2 of data; Use IORWF if bit 1 of comparand is set; ANDWF if clear
  movwf SPIREG      ; Store resulting byte (bits set if >= comparand)

Uno usaría diferentes combinaciones de IORWF y ANDWF, dependiendo del valor del comparando. Tenga en cuenta que al utilizar este método como se ilustra, se pueden actualizar los valores de brillo de píxeles en cualquier punto del ciclo PWM sin parpadeo, siempre que los cuatro bits se escriban entre las llamadas a la rutina de cambio de pantalla, o haciendo que la rutina de actualización de píxeles determine si el siguiente turno generará un "1" o un "0" para el píxel, y establecerá o borrará todos los bits del píxel (cualquiera sea la operación que haga que haga lo que fuera a hacer) y luego escriba cualquier bit cuyo valor deba ser opuesto Tenga en cuenta también que se pueden lograr escalas de brillo no lineales arbitrarias variando la sincronización de las actualizaciones de la pantalla, o usando algunos valores comparativos más de una vez en un ciclo de PWM. Las escalas de brillo no lineales suelen ser útiles con los LED, ya que la diferencia de brillo entre 1/128 y 2/128 generalmente es mucho más visible que la diferencia entre 127/128 y 128/128 (o incluso entre 7/8 y 8/8).

    
respondido por el supercat
1

Los FPGA o CPLD pueden ser buenos para tales tareas, ya que ofrecen muchos pines de E / S. Ve por lo más sencillo y barato. Si uno no es suficiente, usa una pareja.

    
respondido por el Carl
1

Es casi seguro que puede hacer esto fácilmente usando un PSoC3 o PSoC5 .

Los chips PSoC son microcontroladores que contienen hardware digital reconfigurable, un poco como un FPGA o CPLD. Esto significa que puede hacer circuitos complejos para hacer cosas inusuales como conducir 500 LED con PWM. Además, es probable que pueda implementar todo usando los bloques digitales reconfigurables, lo que significa que la parte de la CPU del chip solo necesita escribir los brillos de LED deseados en una matriz.

Los 504 LED encajan en un rectángulo de 21 x 24. Si tuviera 24 canales PWM y 21 GPIO, entonces podría hacer que esto funcione. ¿Adivina qué? El PSoC tiene más que eso.

Puede configurar fácilmente 24 canales PWM en un PSoC y configurar otros 21 pines para que formen parte de un registro de desplazamiento. A continuación, configure algunos canales DMA para bombear bytes de la memoria a las salidas PWM, y se estará riendo. Todo lo que la CPU necesita hacer ahora es generar los gráficos. El PSoC3 tiene un núcleo 8051 de 8 bits, mientras que el PSoC5 tiene un ARM de 32 bits. Elige tu opción. Los únicos IC externos que necesitará son algunos ULN2803 para proporcionar la alta corriente de transmisión para las filas. Las salidas PWM deben tener suficiente unidad de corriente para los LED individuales.

    
respondido por el Rocketmagnet
0

Hacer uso de las economías de escala. Los sitios chinos como Aliexpress venden filamentos de LED basados en WS2811 por ~ $ 15 por cada 50 LED. Son direccionables individualmente, brillantes, generalmente impermeables, y tienen PWM para el brillo. No hay registros de soldadura o cambio para meterse con cualquiera. Hacer todo esto por ti mismo te apuesto que te costará más, te llevará mucho más tiempo y será muy frustrante. Además, estás en Oz, por lo que el envío desde China no será demasiado caro.

Están diseñados para hacer pantallas LED gigantes, por lo que tienden a ser bastante baratos. Solo asegúrese de reinyectar la energía aproximadamente cada 50 LED para obtener el mejor rendimiento.

También hay bibliotecas de Arduino para que sean fáciles de usar.

    
respondido por el nemik

Lea otras preguntas en las etiquetas