Estoy considerando emprender un proyecto que implicaría abordar individualmente 500 LED, de manera óptima con soporte PWM para cada uno.
Estoy planeando 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.
Habría que emplear registros de turnos. ¿Cuál es un buen registro de desplazamiento para usar en esta situación? Si PWM hace que este proyecto sea mucho más caro, puedo prescindir de él. Quiero tratar de gastar menos de $100. Compraría al por mayor 500 LED en eBay.
¿Cuál es su opinión sobre la mejor manera de controlar una cantidad tan grande de LED? Además, ¿cómo haría para proporcionar el poder? Agradecería cualquier ayuda. Tengo bastante experiencia con la electrónica, nunca he hecho nada a una escala tan grande.
Soy el autor de la biblioteca ShiftPWM y acabo de actualizar la documentación para incluir esquemas y mucha más información general para LED normales, tiras de LED y LED de alta potencia.
Probablemente ya comenzó su proyecto, pero dado que esta página recibe muchos visitantes, me gustaría brindarle una respuesta detallada.
Si desea controlar 500 LED con ShiftPWM, puede obtener alrededor de 64 niveles de brillo por LED a 60 Hz. Usaría 64 registros de desplazamiento. Los controladores PWM de hardware dedicados le 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, porque incluye funciones RGB y HSV y muchos ejemplos.
Personalmente, elegiría el TLC5916 de TLC5917 en lugar de los registros de desplazamiento normales, porque tienen un controlador LED de corriente constante incorporado. Esto le ahorrará mucho trabajo de soldadura, porque no necesita resistencias.
En mi sitio web ( http://www.elcojacobs.com/shiftpwm ) tengo más información sobre cómo conectar los LED y cómo manejar los cables de señal largos con el Arduino a altas velocidades.
Si usted tiene más preguntas, por favor pregunte.
Solo copia :-)
http://www.evilmadscientist.com/article.php/peggy2
Hoy lanzamos una actualización de nuestro proyecto de tablero perforado LED de código abierto "Peggy". La versión 2 de Peggy ha sido rediseñada desde cero. Y se ve... casi exactamente igual. Sin embargo, los cambios bajo el capó son sustanciales y creemos que es una gran mejora en muchos sentidos.
En primer lugar, Peggy 2.0 sigue haciendo lo mismo: proporciona energía eficiente a una matriz de 25 x 25 ubicaciones de LED. Peggy está diseñado para eliminar parte del aguijón, la complejidad y el desorden de jugar con LED. Es un tablero de clavijas emisor de luz versátil y potente que le permite manejar de manera eficiente cientos de LED en cualquier configuración que desee, sin siquiera calcular una sola resistencia de carga. Puede instalar desde uno hasta 625 LED, y Peggy los encenderá por usted.
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.
¿En qué diseño quieres los LED? Puede ahorrar mucho trabajo si compra algunas matrices de LED, puede obtener matrices de LED de 8x8 de un solo color (64 LED) por un dólar o dos .
No obtendrá PWM real con un AVR y registros de desplazamiento en tantos LED, pero puede exprimir de 2 a 4 niveles de brillo. Tendrías que hacer números y ver qué es posible.
Allegro fabrica algunos registros de desplazamiento de sumidero de corriente constante útiles diseñados específicamente para controlar conjuntos de LED, de modo que no necesite resistencias adicionales, lo que también simplificará las cosas. Es posible que no pueda controlar los LED directamente desde la salida AVR si no puede proporcionar suficiente energía, por lo que deberá usar transistores. Puede obtenerlos en matrices en un solo IC , lo que también ahorra algo de trabajo.
No tengo idea del rango de PWM que necesita para un LED, pero he estado trabajando en un controlador PWM de 64 canales para una aplicación de servocontrol que me puede dar pulsos de entre 600us y 2.4ms. Utiliza CD74HCT238E (demultiplexores de 3 a 8 líneas) para generar 64 canales a partir de 8 pines de E/S en un ATMega168 y se puede controlar a través de simples comandos en serie. Supongo que podría encadenar varias versiones de una versión modificada de este controlador en una línea serial 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 de ensamblaje y los esquemas y detalles del proceso de diseño.
Echa un vistazo a los circuitos integrados de "controlador LED" en mouser/digikey. TI, por ejemplo, fabrica un montón de controladores con una variedad de interfaces (I2C, SPI) que sin duda satisfarán sus necesidades. La mayoría de estos controladores están diseñados para conectarse en cadena, de modo que la salida en serie de uno se alimenta a la entrada en serie de otro.
Por ejemplo, algo como el TLC5940 ofrece control PWM de 16 canales. Entonces, básicamente es un registro de desplazamiento de 16 bits de corriente constante con control PWM de escala de grises de 12 bits. Puedo recomendar ese IC en particular, ya que ayudé a diseñar una pantalla de 80x16 con él.
Mondomatrix fabrica algunas placas de controlador LED direccionables en serie (rs-485) y se basa en la plataforma Arduino: http://www.displayduino.com/ Es posible que pueda armar un sistema usando ese hardware con bastante facilidad
Si no quiere demasiados bits de control PWM para cada LED, y quiere evitar tener un procesador con 500 LED en cada ciclo PWM, puede controlar 8 LED con N bits de brillo usando N 74HC595 o chips equivalentes. . Cablee las salidas de todos los N chips juntos y conecte las habilitaciones a algún circuito que solo habilitará una a la vez con la sincronización adecuada. Haga arreglos para que el primer chip esté habilitado la mitad del tiempo, el segundo esté habilitado la mitad del resto, etc.
Cualquier recarga de los registros de desplazamiento debe sincronizarse con la tasa de PWM, para minimizar los efectos de aliasing (por ejemplo, si un nivel de brillo cambiaba rápidamente entre 0111 y 1000, el punto en el ciclo de PWM cuando ocurrió el cambio podría cambiar momentáneamente el brillo aparente). ).
Si bien 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.
Esto no responde directamente a la pregunta, pero otro aspecto que debe considerar es la posible variabilidad de brillo entre los LED en su lote 500. Esto es particularmente importante si estos LED se montan 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, utilizando la corrección de puntos para compensar las variaciones en el brillo de los 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:
Sugiero usar la técnica de modulación de ángulo binario descrita en este artículo http://www.artisticlicence.com/WebSiteMaster/App%20Notes/appnote011.pdf
O consulte la biblioteca ShiftPWM http://www.elcojacobs.com/shiftpwm/
XMOS utiliza el Macroblock MBI5026 con sus kits de mosaicos LED. Creo que se utilizan en la mayoría de los otros sistemas profesionales.
León
Los chips de controladores dedicados con interfaces en serie probablemente sean la mejor ruta. Tratar con registros de desplazamiento individuales probablemente signifique un circuito muy complejo. Al menos Maxim y TI hacen algunos. No recuerdo si alguno tiene un modelo particularmente adecuado para tanto.
Todavía tomará una gran cantidad de hardware.
En cuanto a la potencia, la programación y los buses, la hoja de datos de cada controlador probablemente contenga la mayor parte de la información que necesitará.
Dentro del ámbito del software, si la cantidad de configuraciones de brillo distintas que uno 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 tener el las rutinas de salida utilizan operadores booleanos para actuar sobre 8 píxeles a la vez. Para obtener la máxima eficiencia, esto requerirá tener múltiples rutinas de salida separadas, utilizadas para diferentes partes del ciclo PWM; por ejemplo, si se desea utilizar valores de brillo de 4 bits, se utilizarían ocho rutinas de la forma:
movf bit0Comp,w ; Debería ser 00 o FF dependiendo del bit 0 del comparador (FF si está claro) iorwf POSTINCF,w ; Bit 0 de datos; siempre use IORWF andwf POSTINCF,w ; Bit 1 de datos; use IORWF si el bit 1 del comparador está establecido; ANDWF si claro andwf POSTINCF,w ; Bit 2 de datos; Use IORWF si se establece el bit 1 del comparador; ANDWF si claro andwf POSTINCF,w ; Bit 2 de datos; Use IORWF si se establece el bit 1 del comparador; ANDWF si claro movwf SPIREG; Almacenar el byte resultante (bits establecidos si >= comparando)
Uno usaría diferentes combinaciones de IORWF y ANDWF, dependiendo del valor del comparador. Tenga en cuenta que al usar este enfoque como se ilustra, uno puede actualizar los valores de brillo de píxeles en cualquier punto del ciclo PWM sin parpadeo, siempre que los cuatro bits se escriban entre llamadas a la rutina de cambio de pantalla, o haciendo que la rutina de actualización de píxeles determine si el El siguiente turno generará un "1" o un "0" para el píxel, y establecerá o borrará todos los bits del píxel (cualquiera que sea la operación que lo haga hacer lo que iba a hacer de todos modos) y luego escribirá cualquier bit cuyo valor debería ser opuesto Tenga en cuenta también que se pueden lograr escalas de brillo no lineales arbitrarias al variar el tiempo de las actualizaciones de la pantalla o al usar algunos valores de comparación más de una vez en un ciclo de PWM.
Los FPGA o CPLD pueden ser buenos para tales tareas, ya que ofrecen muchos pines de E/S. Opta por lo más sencillo y económico. Si uno no es suficiente, use un par.
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 crear circuitos complejos para hacer cosas inusuales como conducir 500 LED con PWM. Es más, probablemente pueda implementar todo utilizando los bloques digitales reconfigurables, lo que significa que la parte de la CPU del chip solo necesita escribir los brillos LED deseados en una matriz.
504 LED caben 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 reirá. 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 circuitos integrados externos que necesitará son algunos ULN2803 para proporcionar la alta corriente de accionamiento para las filas. Las salidas PWM deben tener suficiente unidad de corriente para LED individuales.
Hacer uso de las economías de escala. Los sitios chinos como Aliexpress venden hilos de LED basados en WS2811 por ~ $ 15 por 50 LED. Son direccionables individualmente, brillantes, generalmente a prueba de agua y tienen PWM para el brillo. Sin soldaduras ni registros de desplazamiento con los que meterse. Apuesto a que hacer todo esto usted mismo le costará más, tomará 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 costoso.
Estos están hechos para hacer pantallas LED gigantes, por lo que tienden a ser bastante baratos. Solo asegúrese de volver a inyectar energía aproximadamente cada 50 LED para obtener el mejor rendimiento.
También hay bibliotecas de Arduino para que sean fáciles de usar.
Super gato
Super gato
ElcoJacobs
ElcoJacobs