Hiedi
11.01.2015, 18:13
Hallo an die Bastler da draußen,
Rotierende LED’s haben mich schon seit längerem in ihren Bann gezogen :). Von den Videos bei YouTube inspiriert baute ich eine erste Version des LED-Globe mit 54 Weißen LED’s. Aufgeklebt auf einem in Form gebrachten Kohlefaserstab. Der Controller war ein Atmel Atmega328p mit 20Mhz. Mit Strom wurde die ganze Sache über zwei Kohlebürsten aus dem Modellbau versorgt. Das Highlight war die Funkübertragung von einem Arduino auf den Globe…
Bild:
https://www.dropbox.com/s/jeq8cnsgsfnxlni/20150111_175950.jpg?dl=0
Von dem Projekt beflügelt, dachte ich, da geht doch mehr!
Und das ist dabei herausgekommen:
RGB LED-Globe V2
techn. Daten:
-Durchmesser 120mm
-96 RGB-LEDs (1,4mmx1,6mm)
-12 TLC5947 LED Treiber (12Bit PWM)
-32Bit Atmel 32UC3B512
-Micro SDCard 8Gb
-Fat32
-Wiedergabe von Bildern
-Wiedergabe von Videos bis zu 20fps
-max 40Hz (2400U/min mehr schafft der Serverlüfter nicht :-))
-Stromversorgung über Luftspule (H-Brücke 64Khz)
-Fernbedienung (induktive Datenübertragung)
-Drehzahlregelung
-Laufschrift mit 8 zusätzlichen LED’s
Bilder:
https://www.dropbox.com/sh/me2a68qdze0rjnd/AAAn6IPHPG7cnJk49bq-tA-Qa?dl=0
http://youtu.be/iosG9f9x9-4
Sorry, die Herzchenbilder sind dem geschuldet, dass ich in den letzten Monaten meine bessere Hälfte sehr vernachlässigt habe.
Und so einiges wieder gut zu machen hatte...
Projektbeschreibung:
Der Weg zum Istzustand war lang und mühsam! Die Voraussetzungen eher bescheiden, da ich keine Erfahrung mit dem Entwerfen bzw. Herstellen von Platinen hatte. Die Letzte hatte ich noch mit meinem Vater per Hand gemalt (Nitrolack und Pinsel) :)…
Nach kurzer Recherche im Netz, nach einem passenden Tool, fiel die Wahl auf KiCad. Nach langer Einarbeitungsphase und Studium der Atmel Datenblätter war die erste Schaltung entworfen. Der Weg zum fertigen Layout hat ebenfalls viel Zeit in Anspruch genommen, da viel in Handarbeit geroutet wurde (runden und nicht 45° Leiterzügen geschuldet). Irgendwann war das Layout fertig und es ging ans Ausdrucken und Ätzen.
Gedruckt wurde mit einem Tintenstrahldrucker auf Overheadfolie, Vorder- und Rückseite zu einer Tasche verklebt und die Platine mit einem UV-Nageltrockner belichtet. Das ganze Entwickelt und mit Natriumsulfat geätzt… Also mit einfachsten Mitteln und Anleitungen siehe Google!
Nach ersten Probeätzungen mit kleiner werdenden Konturen war ich selbst von dem Resultat überrascht und bestärkt weiterzumachen. Leiterzüge von 6mil, die ich benötigte, waren möglich :).
Die über 300 Durchkontaktierungen wurden mit Bungard Kupfernieten, einer kleinen Proxxon Ständerbohrmaschine, einem Körner und viel ruhiger Hand gesetzt. Danach konnte es ans Bestücken gehen. Dazu stand mir eine selbstgebaute Vorwärmplatte und eine Fernost-Heißluftstation zur Verfügung.
Der Motor selbst stammt aus einem alten Fujitsu Server (die haben für die Größe jede Menge Power). Die orig. Welle wurde ausgetauscht und eine Messingbuchse angeflanscht. In dieser ist dann die Welle, welche die Platine aufnimmt, eingeklebt. Die Teile stammen alle aus ausgeschlachteten CD-Rom’s, Festplatten, Servern…Der Fuß besteht aus einem Sammelsurium alter Prozessorlüfter, welche nach vielem Probieren irgendwie zusammen gepasst haben.
Die Drehzahl-Regelung übernimmt der Atmega 328p auf der Front-Platine. Ausgelegt als P-Regler, der das Tachosignal des Lüftermotors auswertet, und diesen über eine 10Bit PWM ansteuert.
Mit Strom wird der Globus induktiv über zwei ineinander laufenden Wicklungen versorgt. Geschaltet wird die Primärwicklung mit einer H-Brücke, welche von zwei Dual-Mosfet Treibern angesteuert wird (hab ich in einer alten Xbox360 gefunden).
Sekundärseitig wird die Spannung mittels 3A Step-Down Wandlers (MP2307) auf 5Volt stabilisiert. Bei der hohen Frequenz von 64Khz musste ich HF-Litze für die Wicklungen verwenden. Diese besteht aus 40 verdrillten 0,15mm Kupferdrähten.
Die Signale der Fernbedienung werden ebenfalls vom Atmega 328p auf der Frontplatine ausgewertet. Um nicht noch ein Protokoll für die Datenübertragung zu entwickeln und kostbare Prozessorzeit zu verbrauchen, habe ich den USART missbraucht. Dabei werden die 8Bit des Fernbedienungsbefehls auf Tx gesendet und direkt ausgewertet. Abhängig vom Pegel wird das Tastverhältnis der H-Brücke geändert. Primärseitig lässt sich das Signal mittels Timer im Capture-Mode auswerten und die Pegel des USART’s reproduzieren. Diese auf den Atmel 32UC3b512 (Rx-Eingang des USART) geleitet und man hat die Fernbedienungsbefehle interruptgesteuert auf der rotierenden Scheibe zur Verfügung. Geht sicher eleganter, aber es funktioniert…
Nun zur Software:
Der Atmel 32UC3b512 war komplettes Neuland für mich. Die Komplexität und der Mangel an hardwarenahem Beispielcode musste ich schmerzlich erfahren. Also Wochen damit verbracht das ASF (Atmel Software Framework) zu studieren und Interrupt-Prioritäten, Interrupt-Gruppen, Powermanagement, Timer… zu verstehen. Wenn man so wie ich bisher nur mit 8Bit Atmegas zu tun hatte ist das eine komplett neue Welt :(.
Aber jammern bringt einen nicht weiter und irgendwann leuchteten die ersten LED’s.
Um die Datenmenge schnellgenug für die LED-Treiber zur Verfügung zu stellen, wird jeder der 12 Treiber einzeln seriell angesteuert. Dafür wird der jeweils anzuzeigende Teil des Bildes, welches im RAM liegt und vorher von der SD-Card geladen wurde, in das Portregister geladen um mit einem Takt alle 12 Treiber zu füllen. Soweit die Theorie, doch mit C# Mitteln war das deutlich zu langsam. Die Lösung, welche eine Verdoppelung der Geschwindigkeit brachte, war Inline-Assembler.
Die Laufschrift, die in einem kleineren Radius als das Hauptbild läuft, wird von einem 8Bit Schieberegister generiert. Hauptbild und Laufschrift teilen sich einen frei laufenden 16Bit Timer und werden über jeweils einen Compare-Interrupt angezeigt. Grundlage dafür ist ein weiterer Timer welcher die Rundenzeit mittels Reflektions-Lichtschranke ermittelt.
Die anzuzeigenden Bilder, welche Im RAW-Format (24Bit RGB) auf der SD-Card gespeichert sind, werden auf zwei Arten gelesen. Wenn es sich um ein Einzelbild handelt kommt die langsame blockweise Lesemethode zum Einsatz. Alternativ wird der DMA-Mode verwendet um Videos (Folge von Einzelbildern) schnell genug im RAM zu aktualisieren. Methode eins hat den positiven Nebeneffekt eines schönen Übergangs beim Umschalten der Bilder.
Gruß
Fritz
Rotierende LED’s haben mich schon seit längerem in ihren Bann gezogen :). Von den Videos bei YouTube inspiriert baute ich eine erste Version des LED-Globe mit 54 Weißen LED’s. Aufgeklebt auf einem in Form gebrachten Kohlefaserstab. Der Controller war ein Atmel Atmega328p mit 20Mhz. Mit Strom wurde die ganze Sache über zwei Kohlebürsten aus dem Modellbau versorgt. Das Highlight war die Funkübertragung von einem Arduino auf den Globe…
Bild:
https://www.dropbox.com/s/jeq8cnsgsfnxlni/20150111_175950.jpg?dl=0
Von dem Projekt beflügelt, dachte ich, da geht doch mehr!
Und das ist dabei herausgekommen:
RGB LED-Globe V2
techn. Daten:
-Durchmesser 120mm
-96 RGB-LEDs (1,4mmx1,6mm)
-12 TLC5947 LED Treiber (12Bit PWM)
-32Bit Atmel 32UC3B512
-Micro SDCard 8Gb
-Fat32
-Wiedergabe von Bildern
-Wiedergabe von Videos bis zu 20fps
-max 40Hz (2400U/min mehr schafft der Serverlüfter nicht :-))
-Stromversorgung über Luftspule (H-Brücke 64Khz)
-Fernbedienung (induktive Datenübertragung)
-Drehzahlregelung
-Laufschrift mit 8 zusätzlichen LED’s
Bilder:
https://www.dropbox.com/sh/me2a68qdze0rjnd/AAAn6IPHPG7cnJk49bq-tA-Qa?dl=0
http://youtu.be/iosG9f9x9-4
Sorry, die Herzchenbilder sind dem geschuldet, dass ich in den letzten Monaten meine bessere Hälfte sehr vernachlässigt habe.
Und so einiges wieder gut zu machen hatte...
Projektbeschreibung:
Der Weg zum Istzustand war lang und mühsam! Die Voraussetzungen eher bescheiden, da ich keine Erfahrung mit dem Entwerfen bzw. Herstellen von Platinen hatte. Die Letzte hatte ich noch mit meinem Vater per Hand gemalt (Nitrolack und Pinsel) :)…
Nach kurzer Recherche im Netz, nach einem passenden Tool, fiel die Wahl auf KiCad. Nach langer Einarbeitungsphase und Studium der Atmel Datenblätter war die erste Schaltung entworfen. Der Weg zum fertigen Layout hat ebenfalls viel Zeit in Anspruch genommen, da viel in Handarbeit geroutet wurde (runden und nicht 45° Leiterzügen geschuldet). Irgendwann war das Layout fertig und es ging ans Ausdrucken und Ätzen.
Gedruckt wurde mit einem Tintenstrahldrucker auf Overheadfolie, Vorder- und Rückseite zu einer Tasche verklebt und die Platine mit einem UV-Nageltrockner belichtet. Das ganze Entwickelt und mit Natriumsulfat geätzt… Also mit einfachsten Mitteln und Anleitungen siehe Google!
Nach ersten Probeätzungen mit kleiner werdenden Konturen war ich selbst von dem Resultat überrascht und bestärkt weiterzumachen. Leiterzüge von 6mil, die ich benötigte, waren möglich :).
Die über 300 Durchkontaktierungen wurden mit Bungard Kupfernieten, einer kleinen Proxxon Ständerbohrmaschine, einem Körner und viel ruhiger Hand gesetzt. Danach konnte es ans Bestücken gehen. Dazu stand mir eine selbstgebaute Vorwärmplatte und eine Fernost-Heißluftstation zur Verfügung.
Der Motor selbst stammt aus einem alten Fujitsu Server (die haben für die Größe jede Menge Power). Die orig. Welle wurde ausgetauscht und eine Messingbuchse angeflanscht. In dieser ist dann die Welle, welche die Platine aufnimmt, eingeklebt. Die Teile stammen alle aus ausgeschlachteten CD-Rom’s, Festplatten, Servern…Der Fuß besteht aus einem Sammelsurium alter Prozessorlüfter, welche nach vielem Probieren irgendwie zusammen gepasst haben.
Die Drehzahl-Regelung übernimmt der Atmega 328p auf der Front-Platine. Ausgelegt als P-Regler, der das Tachosignal des Lüftermotors auswertet, und diesen über eine 10Bit PWM ansteuert.
Mit Strom wird der Globus induktiv über zwei ineinander laufenden Wicklungen versorgt. Geschaltet wird die Primärwicklung mit einer H-Brücke, welche von zwei Dual-Mosfet Treibern angesteuert wird (hab ich in einer alten Xbox360 gefunden).
Sekundärseitig wird die Spannung mittels 3A Step-Down Wandlers (MP2307) auf 5Volt stabilisiert. Bei der hohen Frequenz von 64Khz musste ich HF-Litze für die Wicklungen verwenden. Diese besteht aus 40 verdrillten 0,15mm Kupferdrähten.
Die Signale der Fernbedienung werden ebenfalls vom Atmega 328p auf der Frontplatine ausgewertet. Um nicht noch ein Protokoll für die Datenübertragung zu entwickeln und kostbare Prozessorzeit zu verbrauchen, habe ich den USART missbraucht. Dabei werden die 8Bit des Fernbedienungsbefehls auf Tx gesendet und direkt ausgewertet. Abhängig vom Pegel wird das Tastverhältnis der H-Brücke geändert. Primärseitig lässt sich das Signal mittels Timer im Capture-Mode auswerten und die Pegel des USART’s reproduzieren. Diese auf den Atmel 32UC3b512 (Rx-Eingang des USART) geleitet und man hat die Fernbedienungsbefehle interruptgesteuert auf der rotierenden Scheibe zur Verfügung. Geht sicher eleganter, aber es funktioniert…
Nun zur Software:
Der Atmel 32UC3b512 war komplettes Neuland für mich. Die Komplexität und der Mangel an hardwarenahem Beispielcode musste ich schmerzlich erfahren. Also Wochen damit verbracht das ASF (Atmel Software Framework) zu studieren und Interrupt-Prioritäten, Interrupt-Gruppen, Powermanagement, Timer… zu verstehen. Wenn man so wie ich bisher nur mit 8Bit Atmegas zu tun hatte ist das eine komplett neue Welt :(.
Aber jammern bringt einen nicht weiter und irgendwann leuchteten die ersten LED’s.
Um die Datenmenge schnellgenug für die LED-Treiber zur Verfügung zu stellen, wird jeder der 12 Treiber einzeln seriell angesteuert. Dafür wird der jeweils anzuzeigende Teil des Bildes, welches im RAM liegt und vorher von der SD-Card geladen wurde, in das Portregister geladen um mit einem Takt alle 12 Treiber zu füllen. Soweit die Theorie, doch mit C# Mitteln war das deutlich zu langsam. Die Lösung, welche eine Verdoppelung der Geschwindigkeit brachte, war Inline-Assembler.
Die Laufschrift, die in einem kleineren Radius als das Hauptbild läuft, wird von einem 8Bit Schieberegister generiert. Hauptbild und Laufschrift teilen sich einen frei laufenden 16Bit Timer und werden über jeweils einen Compare-Interrupt angezeigt. Grundlage dafür ist ein weiterer Timer welcher die Rundenzeit mittels Reflektions-Lichtschranke ermittelt.
Die anzuzeigenden Bilder, welche Im RAW-Format (24Bit RGB) auf der SD-Card gespeichert sind, werden auf zwei Arten gelesen. Wenn es sich um ein Einzelbild handelt kommt die langsame blockweise Lesemethode zum Einsatz. Alternativ wird der DMA-Mode verwendet um Videos (Folge von Einzelbildern) schnell genug im RAM zu aktualisieren. Methode eins hat den positiven Nebeneffekt eines schönen Übergangs beim Umschalten der Bilder.
Gruß
Fritz