Ich plane, einen RGB LED POV Globus zu erstellen, der nur physisch größer als dieser ist.
Ich plane die Verwendung von 64 RGB-LEDs, die 3x Pins pro LED für insgesamt 192 Ausgänge benötigen. Natürlich brauche ich einige Schieberegister. Ich habe mir 74HC595 (8 Bit) angesehen und es wären 24 dieser Chips erforderlich, um alle diese LEDs zu handhaben.
Ich plane, diese Schieberegister mit 6 pro Kanal von meinem Mikrocontroller in Reihe zu schalten.
Der 74HC595 hat eine Schaltfrequenz von 100 MHz.
Mir wurde gesagt, dass ich den Globus mit ungefähr 1500 U / min (25 pro Sekunde) drehen muss.
Der Plan ist, ein Arduino für den Mikrocontroller zu verwenden, aber ich bin offen für Vorschläge.
Meine Fragen sind:
- Gibt es für dieses Projekt einen besser geeigneten Chip als den 74HC595?
- Gibt es neben dem Arduino einen besser geeigneten Mikrocontroller für dieses Projekt?
- Ich möchte die LEDs des Mikrocontrollers nicht ausschalten, daher benötige ich externe Stromversorgung. Wie würde ich das machen?
- Wie schnell kann ich mit 6x 74HC595 in Serie alle LED-Farben auf diesem Kanal umschalten?
- Wie schnell kann ich mit 12x 74HC595 in Serie alle LED-Farben auf diesem Kanal umschalten?
Antworten:
1. Eine Reihe von 74HC595-Chips funktioniert hervorragend. Andere Chips, die ebenfalls genauso gut und vielleicht etwas besser funktionieren würden, sind aufgeführt unter: Welcher SIPO-Chip ist besser, 74HC4094 oder 74HC595 oder etwas anderes?
2. Der Arduino ist eine ausgezeichnete Wahl für das Prototyping, insbesondere wenn Sie mit gcc vertraut sind. Vielleicht wäre es jetzt schneller, eine zu verwenden. Leider vermute ich, dass Sie bald Code für dieses POV-Display schreiben werden, das mehr RAM benötigt, als das Arduino zur Verfügung hat. Verwenden Sie zu diesem Zeitpunkt entweder (a) einen oder mehrere Tricks, um den benötigten RAM zu reduzieren, oder (b) fügen Sie einige hinzu externer RAM oder (c) Portieren Sie den Code auf einen anderen Mikrocontroller mit mehr RAM (möglicherweise den ATMEGA1284?).
Der Parallax Propeller ist eine ausgezeichnete Wahl für ein hochauflösendes POV-Display - er verfügt um eine Größenordnung mehr internen RAM (32 KB RAM) als der ATmega238 im Arduino. (Kann ich irgendetwas tun, um die Portierung von gcc auf den Propeller zu unterstützen?)
Einige Leute bevorzugen "quadratische Pixel". Ich bin sicher, Sie wissen bereits, dass der Abstand um den Äquator einer Kugel doppelt so lang ist wie der Abstand von Pol zu Pol (der Erdäquator ist etwas mehr als doppelt so lang). Da Sie 64 Pixel vom Südpol zum Nordpol haben, können Sie eine neue vertikale "Linie" von Pixeln 2 * 64 = 128 Mal pro Umdrehung neu laden, um 128 "quadratische Pixel" am Äquator zu erhalten. Der einfachste Weg, dies zu tun, besteht darin, das gesamte Bild unkomprimiert im RAM zu speichern. Dies erfordert 64 * 128 Pixel * 3 Bits / Pixel = 24 576 Bits = 3 072 Bytes plus einige Bytes RAM für andere Programmvariablen. Leider hat der Atmel ATmega328 im Arduino nur 2 048 Bytes RAM.
Frühere POV-Anzeigenverwendete Mikrocontroller mit einer Größenordnung (!) weniger RAM als diese. Daher haben die Leute eine Vielzahl von Tricks entwickelt, mit denen Sie dies umgehen können. Ein Trick: Beleuchten Sie nur die "vordere" Hälfte des Globus, während Sie die LEDs sehen können, und schalten Sie dann alle LEDs aus (oder lassen Sie sie in einer konstanten Farbe), während Sie die "hintere" Hälfte nicht direkt verwenden können siehe die LEDs. Das halbiert die Menge an RAM, die Sie benötigen, und passt dann in das Arduino. Wenn Sie diesen Trick nicht mögen, können Sie andere Tricks verwenden, die weniger offensichtlich sind. Ein weiterer Trick: Speichern Sie das Bild im Flash-Programmspeicher. Der Arduino verfügt über genügend Flash-Programmspeicher, um mehrere 3 072-Byte-Frames zu speichern. Noch ein Trick: Verwenden Sie ASCII-Text, um den anzuzeigenden Text zu speichern, und verwenden Sie dann den Flash-Programmspeicher, um das "Zeichengenerator-ROM" zu speichern. Daten. Ich bin mir ziemlich sicher, dass es noch andere POV-Tricks gibt ...
3. Wenn ich es bauen würde, würde ich den Arduino- und den 74HC595-Chip über ein großes Netzteil mit Strom versorgen und den Motor, der den POV dreht, über ein separates Netzteil mit Strom versorgen.
Erst wenn ich alles zum Laufen gebracht hätte, würde ich sogar ein komplizierteres getrenntes Stromversorgungssystem in Betracht ziehen. (Wenn Sie ein separates "rotes" Schaltnetzteil haben, dessen + V nur an 74HC595-Chips angeschlossen ist, die wiederum nur an rote LEDs angeschlossen sind, können Sie die Ausgangsspannung unabhängig voneinander einstellen, um die Gesamtleistung und Wärmeerzeugung von zu minimieren das System. Aber es scheint unnötig kompliziert.)
4. und 5. Die vielleicht einfachste Möglichkeit für das Arduino, das POV-Display anzusteuern, besteht darin, alle 24 74HC595-Chips in einer langen einzelnen Zeichenfolge zu verketten und dann die Arduino SPI-Bibliothek zu verwenden . Dies erfordert 192 Taktimpulse, um in der neuen Datenspalte zu takten, und dann einen Impuls auf dem RCLK (auch bekannt als Rahmenimpuls, SS usw.), um diese neuen Daten anzuzeigen. Laut einem Tutorial zur Arduino-zu-SPI-Schnittstelle ist die schnellste SPI-Taktrate die Systemgeschwindigkeit / 4. Der 16-MHz-Arduino kann also einen SPI-CLK von 4 MHz ausgeben. Wenn Sie es mit einem 20-MHz-Quarz aufrüsten, erhalten Sie einen SPI-CLK von 5 MHz. Wenn Sie Ihr Programm schnell genug erhalten, um mit der SPI-Hardware Schritt zu halten, können Sie eine neue Spalte bestenfalls mit 5 MHz / 193 Impulsen ausgeben, sodass die theoretisch maximal mögliche Geschwindigkeit 25 907 Spalten / Sekunde beträgt.
Bei der Standard-Bildwiederholfrequenz für Zeichentrickfilme von 24 Bildern / Sekunde (die merklich flackert - Sie möchten etwas Besseres) und bei 128 Spalten / Bild "quadratische" Pixel am Äquator (möglicherweise möchten Sie mehr, um eine bessere Auflösung zu erzielen). Dies ergibt 24 Bilder / Sekunde * 128 Spalten / Bild = 3072 Spalten / Sekunde.
Zwischen "der gewünschten Geschwindigkeit": 3072 Spalten / Sekunde und "der Geschwindigkeit, die mit Arduino-Hardware völlig unmöglich ist": 25 908 Spalten / Sekunde liegt fast eine Größenordnung des Atemraums. Hoffentlich gibt dir das genug Platz.
Einige Leute denken, dass Sie eine schnellere Spaltenaktualisierungsrate erzielen können, indem Sie die 74HC595-Chips in zwei oder mehr Ketten neu anordnen und alle Ketten parallel laden. Manche Leute sind so - sie sehen unbenutzte Stifte am Arduino und es juckt sie, sie für etwas zu verwenden . Dies kann jedoch kontraproduktiv sein - die SPI-Hardware ist nur mit einem Satz von Pins auf dem Arduino verbunden, und daher müssen Ketten, die an andere Pins angeschlossen sind, mit emulierter "Bit-Banging" -Software geladen werden, die ausnahmslos langsamer und langsamer ist Verwenden Sie mehr CPU-Zeit als die integrierte SPI-Hardware.
quelle
Beachten Sie, dass Sie, um andere Farben als nur aus, Weiß, Rot, Grün, Blau, Gelb, Cyan und Fuchsia zu erhalten, Ihre eigene PWM ausführen müssen, wenn Sie nur ein Schieberegisterbit zur Steuerung jeder LED-Komponente verwenden . Sie müssen jedes Bit PWM-fähig machen, wenn Sie jede Gruppe verschieben. Daher müssen Sie dies für Ihre Aktualisierungsrate berücksichtigen und Ihren Code etwas komplexer gestalten.
Alternativ können Sie einen IC wie den TI TLC5947 verwenden, der 24 PWM-Kanäle basierend auf den Bits ausführt, die Sie in ihn verschieben. http://focus.ti.com/lit/ds/symlink/tlc5947.pdf
Bei dieser Lösung müssten Sie für jeden Kanal 12 Bit (anstelle von 1) verschieben, aber die PWM wird für Sie erledigt, sodass dies möglicherweise eine lohnende Lösung ist.
quelle
Angenommen, Sie benötigen 500 Updates pro Umdrehung. Das sind 500 * 192 * 25 'Verschiebungen' pro Sekunde - das sind nur 2,4 MHz Verschiebungsfrequenz, geteilt durch 6 Kanäle = 400 kHz Verschiebungsfrequenz.
Dies ist mit Arduino (20 MHz wirklich bevorzugt) möglich, erfordert jedoch sorgfältige Programmierung und Timing.
Also für deine Fragen:
1) Ich denke nicht. 8-Bit-Register würden ein schwieriges PCB-Routing erfordern
2) Wenn Sie 24 Ausgänge hätten, wäre es einfacher. Für ein so großes Display wäre es auch schön, genügend internen Speicher für den Framebuffer zu haben, um die Programmierung zu vereinfachen. Im Minimum würden Sie 16 KB Speicher benötigen, was bei 8-Bit-AVRs nicht der Fall ist. Mittelklasse-ARMs sind vielleicht besser, aber schwieriger zu entwickeln.
3) Nun, das bist du nicht. Sie verwenden Strom von 595, sie sind nicht sehr leistungsfähig, aber im einfachsten Fall ausreichend (überprüfen Sie das Datenblatt für ein bestimmtes Modell, das Sie haben).
4,5) Schneller als nötig :-)
quelle