Estoy considerando asumir 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 opción.
Los registros de desplazamiento tendrían que ser empleados. ¿Qué es un buen registro de turno para usar en esta situación? Si PWM hace que este proyecto sea mucho más costoso, puedo hacerlo sin él. Quiero intentar gastar menos de $ 100. Compraría 500 LEDs a granel 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 en electrónica, nunca he hecho nada a una escala tan grande.
fuente
Solo copia :-)
http://www.evilmadscientist.com/article.php/peggy2
fuente
¿En qué diseño quieres los LED? Puede ahorrar mucho trabajo si compra algunas matrices LED, puede obtener matrices LED 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 esta cantidad de LED, pero puede exprimir de 2 a 4 niveles de brillo. Tendría que ejecutar los números y ver qué es posible.
Allegro crea algunos prácticos registros de cambio de sumidero de corriente constante diseñados específicamente para controlar matrices de LED, de modo que no necesite las resistencias adicionales, que también simplificarán 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 necesitará usar transistores. Puede obtenerlos en matrices en un solo IC , lo que también ahorra algo de trabajo.
fuente
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 servo control que me puede dar pulsos de entre 600us y 2.4ms. Utiliza los CD74HCT238E (demultiplexores de 3-8 líneas) para generar 64 canales a partir de 8 pines de E / S en un ATMega168 y es controlable a través de comandos seriales simples. Supongo que podría encadenar varias versiones de una versión modificada de este controlador en una línea en 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 y los esquemas y detalles del proceso de diseño.
fuente
Echa un vistazo a los circuitos integrados de "controlador LED" en el ratón / digikey. TI, por ejemplo, hace 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 serie para que la salida en serie de uno se alimente en 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 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.
fuente
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 utilizando ese hardware con bastante facilidad
fuente
Si no desea demasiados bits de control PWM para cada LED, y desea evitar tener que 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 . Conecte las salidas de todos los N chips juntos, y conecte las habilitaciones a algunos circuitos que solo permitirán uno a la vez con la sincronización adecuada. Organice de manera que el primer chip se habilite la mitad del tiempo, el segundo se habilitará la mitad del resto, etc.
Cualquier recarga de los registros de desplazamiento debe sincronizarse con la velocidad PWM, para minimizar los efectos de alias (por ejemplo, si un nivel de brillo cambia rápidamente entre 0111 y 1000, el punto en el ciclo 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 una intervención continua de la CPU.
fuente
Esto no responde directamente a la pregunta, pero otro aspecto que debe tener en cuenta es la posible variabilidad del brillo entre los LED en su lote de 500. Eso 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, utilizando la corrección de puntos para compensar las variaciones en el 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:
fuente
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/
fuente
XMOS utiliza el Macroblock MBI5026 con sus kits de mosaicos LED. Creo que se usan en la mayoría de los otros sistemas profesionales.
León
fuente
Los chips de controlador dedicados con interfaces seriales probablemente serán la mejor ruta. Tratar con registros de desplazamiento individuales probablemente significará un circuito muy complejo. Al menos Maxim y TI hacen algunos. No recuerdo si alguno tiene un modelo particularmente adecuado para eso.
Todavía necesitará mucho hardware.
En cuanto a la alimentación, la programación y los buses, la hoja de datos para cada controlador probablemente tendrá la mayoría de la información que necesitará.
fuente
Dentro del ámbito del software, si el número de configuraciones de brillo distintas que uno necesita no es demasiado grande, puede ser útil almacenar los datos en formato "plano de bits" (como se describe en mi otra respuesta basada en hardware) y luego tener el Las rutinas de salida utilizan operadores booleanos para actuar en 8 píxeles a la vez. Para una máxima eficiencia, esto requerirá tener múltiples rutinas de salida separadas, usadas para diferentes partes del ciclo PWM; por ejemplo, si uno desea usar valores de brillo de 4 bits, usaría ocho rutinas de la forma:
Uno usaría diferentes combinaciones de IORWF y ANDWF, dependiendo del valor del comparand. Tenga en cuenta que usando 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 las llamadas a la rutina de cambio de pantalla, o al hacer que la rutina de actualización de píxeles determine si el el próximo turno generará un "1" o un "0" para el píxel, y configurará o borrará todos los bits del píxel (la operación que haga que haga lo que sea que vaya a hacer de todos modos) y luego escriba los bits cuyo valor debería ser opuesto Tenga en cuenta también que se pueden lograr escalas de brillo no lineales arbitrarias variando el tiempo de las actualizaciones de la pantalla o usando algunos valores de comparandos más de una vez en un ciclo PWM.
fuente
Los FPGA o CPLD pueden ser buenos para tales tareas, ya que ofrecen muchos pines de E / S. Ir por el más simple y más barato. Si uno no es suficiente, use un par.
fuente
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. Además, probablemente pueda implementar todo usando 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 encajan en un rectángulo de 21 x 24. Si tuviera 24 canales PWM y 21 GPIO, entonces podría hacerlo funcionar. ¿Adivina qué? El PSoC tiene más que eso.
Puede configurar 24 canales PWM fácilmente en un PSoC y configurar otros 21 pines para formar parte de un registro de desplazamiento. Luego, configure algunos canales DMA para bombear bytes desde la memoria a las salidas PWM, y se está 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 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.
fuente
Hacer uso de economías de escala. Los sitios chinos como Aliexpress venden hilos LED basados en WS2811 por ~ $ 15 por 50 LED. Son individualmente direccionables, brillantes, generalmente impermeables y tienen PWM para brillo. No hay registros de soldadura o 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 enviar 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 cada 50 LED más o menos para obtener el mejor rendimiento.
También hay bibliotecas Arduino para que sean fáciles de usar.
fuente