32x20 WS2812 RGB LED Matrix

Die "neuen" LEDs mit integrierten 8-Bit PWM Controller aus China überschwemmen den Markt der RGB-LEDs. Auch ich konnte nicht wiederstehen einige Hundert davon zu ergattern (zum Teil aus Sammelbestellungen auf Mikrocontroller.net als auch aus privater Hand [5]). Aus dem Kauf hinaus entstand die Idee einer LED Matrix zur Wanddekoration (bzw. als Eye-Catcher für Veranstaltungen).

WS2812 RGB LED Strip

Hier ein Bildausschnitt eines LED-Strips mit WS2812 LEDs. Gut zu sehen in der Mitte der 5050 SMD LEDs der kleine dunkle Fleck welcher der 8-BIT PWM Controller ist.

Erste Prototypen / Versuche:

Um die Ansteuerung der LEDs bzw. deren serielles Protokoll zu erproben, wurden zunächst 5 LEDs in Reihe zu einem Prototypen verbaut. Anfangs sollte die Ansteuerung mit einem AVR Controller stattfinden. Später soll jedoch auf einen STM32F4 umgestellt werden.
Nun erstmal zur Ansteuerung mit AVR.

Steckbrett Aufbau zum Testen

Zum Testen kommt ein kleiner ATtiny45 auf ein Steckbrett. Zusätzlich noch ein 16Mhz Quarz sowie die dazugehörigen Keramikkondensatoren. Da ich die LEDs über Mikrocontroller.net bei einer Sammelbestellung bezogen habe und der freundliche Organisator Markus M. eine kleine Testroutine dazu entworfen hat [1] ging mein Prototyp von eben diesem Testprogramm aus. Das Testprogramm schiebt im Prinzip ständig neue Daten in das Serielle Interface um die Farben zu wechseln. Ich habe mal versucht davon ein paar Bilder zu schießen, aber leider verspiegelt meine Kamera die superhellen LEDs...In der Reflexion sind die Farben zu erkennen.

Ansteuerung mit ATtiny

Um die LED-Matrix möglichst groß zu bekommen, wollte ich zuerst Tischtennisbälle auf die LEDs kleben. Die ersten Versuche zeigten jedoch, dass die Bälle trotz ihrer dünnen Wände die Farben verfälschen und die Helligkeit sehr stark reduzieren.

Versuche mit Tennisbällen
Eigenschaften und Interface:

Bei näheren Blicken in das spärlich mit Informationen bestückte Datenblatt der LEDs [2] lassen sich folgende wichtige Daten rauslesen.

Auszug aus dem DatenblattJedes Pixel der zukünftigen Matrix benötigt also mindestens 24 Bit mal 1,25µs um die Daten zu übernehmen. Pro LED sind das immerhin 30µs. Bei einer Matrixgröße von 20x32 LEDs (640 LEDs insgesamt) ergibt das 19,4ms. Um die "Bilder" der Matrix dann auch flüssig abspielen zu können, sollten aber mindestens 50Hz Bildwiederholrate gewährleistet sein (also 20ms Periodendauer). Letztendlich blieben dem Mikrocontroller dann "nur" 0,6ms um andere Aufgaben abzuarbeiten. Da später jedoch auch noch eine Schnittstelle zum PC (z.B. RS232 bzw. VCP über USB) integriert werden soll, wäre ein ATtiny hier völlig überfodert. Außerdem wäre der Ram des ATtiny viel zu klein um die Daten für die 640 LEDs puffern zu können. Insgesamt werden für die 640 Pixel zu je 3 Farben (Byte) also 1920 Byte RAM zum puffern benötigt.

LED Matrix Prototyp 1.1:

Um die LED-Matrix mit einem AVR-Prozessor betreiben zu können ist also ein Mikrocontroller mit 2KB Ram notwendig. Der ATMega328 als großer Bruder des ATMega8 ist dafür bestens geeignet. Da nur wenige IOs benötigt werden wäre ein größerer Mikrocontroller oversized. Der größere Flash gegenüber des ATmega8 wird für eventuelle Erweiterungen (SD-Karte etc.) nützlich sein.

Der AVR ist dafür zuständig die korrekten Timings für die Daten der LED-Matrix herzustellen. Die eigentlichen Rohdaten werden am PC generiert und per USART bzw. über USB und virtuellem Comport zum AVR geschickt. Die USB Verbindung zum PC wird mit dem Treiberbaustein FT232 realisiert. Dieser IC besitzt eine integrierte Spannungsversorgung für die USB-Pegel sowie UART und USB-Treiber. Damit wird dem Mikrocontroller die Aufgabe der Datenübertragung abgenommen.

Die Schaltung besteht somit nur aus der Standard-Beschaltung des FT232, einem nahazu unbeschaltenem ATmega328, einem Quarz und ein wenig Kleinzeug. Durch das serielle Interface der LEDs wird nur ein IO benötigt. Allerding habe ich den Datenausgang der letzten LED auf einen Interrupt geführt um einen eventuellen Pufferüberlauf erkennen zu können. Die Firmware hierfür gebe ich nicht heraus, da es mich einiges an Zeit und Aufwand gekostet hat, dies zu entwickeln. 


Schaltplan

Die Steuerung der Matrix erfolgt dann mittels PC und dem Freeware-Programm GLEDIATOR von den Solderlab-Jungs [3].

Ein wichtiger Punkt bei der LED Matrix ist die Stromversorgung. Ein Strang mit 32 LEDs bezieht einen Strom von 1,2A bei voller Ansteuerung (Farbe Weiß). Bei meiner Matrixgröße kommen somit 24A Spitzenstrom zusammen. Aufgrund des Preises von 5V-Schaltnetzteilen ist das verwendete Netzteil etwas auf Kante genäht (20A Dauerlast). Da ich mir jedoch sicher bin, dass im Betrieb der Matrix nie alle LEDs für längere Zeit weiß leuchten werden, werden auch nie die maximalen 24A Stromspitze für länger gefordert.

starkes 20A Netzteil von Meanwell

Die hohen Ströme mögen auch sauber und über große oder wie hier viele kleine Querschnitte in die Matrix gespeist werden. Vom Netzteil gehen insgesamt Acht 2x0,5mm² Leitungen zur LED Matrix.

viele Leitungen zur Lastverteilung

Hier die erste Inbetriebnahme mit einem einzelnen Bildlaufpunkt zum Test der Matrix:



Mechanischer Aufbau der Matrix:

Die 640 LEDs werden in einer 20x32 Matrix angeordnet. Durch das serielle Interface der LEDs besteht diese Matrix im Prinzip nur aus einem Schlangenförmigen LED-Strang. Damit die LEDs jedoch möglichst an jedem Punkt die gleiche Helligkeit erreichen, wird die Versorgungsspannung an jedem Wendepunkt neu eingespeist. Diers reduziert den Strom pro LED-Reihe und es kann somit ein kleinerer Querschnitt zur Verdrahtung genutzt werden.

Verdrahtungsschema

Die LEDs sind wie auf dem Bild ganz oben zu erkennen als Strip zu erwerben. So haben die LEDs einen Abstand von 1,6cm. Damit würde die Matrix gerade einmal 32cm x 51,2cm groß werden. Ein Abstand von 5cm zwischen den LED-Mittelpunkten ist angedacht um so auf eine Größe von 100cm x 160 cm zu kommen. Dies zieht eine enorme Fleißarbeit nach sich. Die LED-Streifen müssen geschnitten, kurze Leitungsstücken abisoliert und angelötet werden. Bei 640 LEDs ergibt das überschlägig fast 4000 Lötstellen.

Detailansicht

in Realität

Die Pixel werden durch ein 2mm starkes Holzgefache begrenzt. Dieser Setzkastenähnliche Aufbau hat eine höhe von 45mm. Diese Höhe ist notwendig um den Lichtkegel der LED auf die komplette Fläche des Pixels sichtbar zu machen. Bei einer flacheren Konstruktion würden die Mittelpunkte der Pixel stärker ausgeleuchtet.

aufgeklebte LEDs in dem "Setzkasten"

Abgedeckt wird die Pixelmatrix mit Acrylglas um die Lichtpunkte homogener wirken zu lassen. Da satiniertes Acrylglas um mindestens Faktor 1,5 teurer ist als normales transparentes, wurde das transparente Acrylglas mit einer Schleifmaschine bearbeitet um eine milchige und raue Oberfläche zu erhalten.

angeschliffenes Acylglas sorgt für Diffusion

Ein solider Holzrahmen sorgt für die nötige Stabilität gegen Biegung und Windung. Ebenfalls wird auf diesem Rahmen später das Acrylglas befestigt.

Stabiler Holzrahmen

Die zwei Laschen dienen zur Befestigung an z.B. Bühnentraversen oder Gerüsten. Der Rahmen wird noch in Schwarz gestrichen, damit dieser auf Bühnen nicht so hervorsticht. Die kleine Platine mit dem AVR muss möglichst nah an der ersten LED sitzen, da eine zu lange Steuerleitung die sehr kurzen Signale zu sehr verfälscht. Das stellt vor allem auf Bühnen ein Problem dar, da dort viele weitere Geräte und PWM gedimmte LED-Strahler  aufgebaut werden, die Störsignale produzieren. Mehr als 10cm Leitung zwischen jedem Device des Seriellen Interfaces ist daher nicht zu empfehlen.

Schaltung Detailansicht

Die Matrix in Aktion:

Ihre Premiere hatte die LED Matrix auf dem Keller-Open-Air Festival 2013 [4] und sorgte für einen weiteren Hingucker auf der Bühne...

auf der Bühne

auf der Bühne II

Quellen und Anregungen:

[1] ATtiny45 Routine für WS2812: www.mikrocontroller.net/topic/279912
[2] WS2812 Datenblatt: http://www.partfusion.com/wp-uploads/2013/01/WS2812preliminary.pdf
[3] GLEDIATOR Software: http://www.solderlab.de/index.php/software/glediator
[4] Keller-Open-Air Festival: http://keller-crew.com/index.php/keller-open-air
[5] WS2812 Bezugsquelle: info-at-wolff-salzgitter.de (zum Schutz vor Spam das @ ersetzt)