Mehr Strom in den LED Cube

Hallo

Seit Jahresbeginn habe ich mein altes Hobby reaktiviert und bin beim Arduino angelangt.

Nachdem ich mir einige Projekte im Netz angesehen hatte, wusste ich es muss ein 3D Cube sein.
Der kleine 4x4x4 Prototyp funktionierte auch auf Anhieb einwandfrei. Nun möchte ich einen 7x7x7 Cube bauen
und frage mich ob ich genug Strom hineingekomme damit die LEDs hell genug sind.

Trotz 2 Wochen Finetuning und Suche im Netz bekomme ich gerade 280 mA in den 4x4x4 Cube hinein, wenn
ich alle LEDs (Weiss Ultrahell; 19000 mCD) einschalte (Multiplex Betrieb). Schalte ich alle Ebene permanent an,
wird der Cube deutlich hellerund das Multimeter zeigt > 1A an. Allerdings gehen hier die Transistoren (800mA, Peak 1A)
in die Knie bzw kaputt.

Anbei meine Setup

Hardware:

4x4x4 jeweils gemeinsame Anode pro Ebene und die Ebenen über die Kathoden verlötet

Der Arduino steuert über 3 Leitungen 2 74HC595. Die 16 Aussgänge der 74HC595 steuern
2 ULN2803, welche wiederum die 16 Kathodenstränge auf Masse legen (bis 500 mA pro Darlington).

4 weitere Pins vom Arduino sind über 10 Ohm Widerstände mit der Basis von 4 NPN Transitoren (bis 800 mA)
verbunden. Die NPN Kollektoren sind jweils über einen 2.9 Ohm Wiederstand mit einem 12 V/ 1A Netzteil verbunden.
Die 4 Emitter steuern die 4 Ebenen.

Die Widerstände wurden nach und nach verkleinert um mehr Strom in den Cube zu bekommen.

Software:

Muster werden im loop nach und nach in 4 Werte (jeweils einer pro Ebene) geladen
und ein MsTimer2 Interrupt ruft alle 2 ms die Routine für die 4 Ebenen auf wobei jede 5ms angeschaltet wird.
Routine braucht also ca. 20 ms. Dies ergibt die grösste Helligkeit ohne lästiges Flackern.

Wenn ich den Strom zw. Arduino Pin und Transistor Basis messe, dann sind es gerade mal 100 uA. Ich vermute
das ist zu wenig um den Transistor für die Ebenen durch zu schalten. Da die LEDs mehr Peakstrom
aushalten, würde ich die 280mA gerne auf 600-800 mA erhöhen.

Habt ihr eine Idee?

Gruss

zema

Zeig mal Dein Schaltbild und den Code.

Hier erstmal der Code, Schaltbild muss ich noch erstellen

#include <MsTimer2.h>

int letter [148] [4] = {{1,1,1,1},
{16,16,16,16},
{256,256,256,256},
{4096,4096,4096,4096},
{8192,8192,8192,8192},
{16384,16384,16384,16384},
{32768,32768,32768,32768},
{2048,2048,2048,2048},
{128,128,128,128},
{8,8,8,8},
{4,4,4,4},
{2,2,2,2},
{32,32,32,32},
{512,512,512,512},
{1024,1024,1024,1024},
{64,64,64,64},
{4096,4096,4096,4096}, // 2
{8448,8448,8448,8448},
{16912,16912,16912,16912},
{33825,33825,33825,33825},
{2114,2114,2114,2114},
{132,132,132,132},
{8,8,8,8},
{0,0,0,1}, // 3
{0,0,32,0},
{0,1024,0,0},
{32768,0,0,0},
{0,0,0,65535}, //4
{0,0,65535,0},
{0,65535,0,0},
{65535,0,0,0},
{0,0,0,1}, // 5
{0,0,0,16},
{0,0,0,256},
{0,0,0,4096},
{0,0,0,8192},
{0,0,0,16384},
{0,0,0,32768},
{0,0,0,2048},
{0,0,0,128},
{0,0,0,8},
{0,0,0,4},
{0,0,0,2},
{0,0,0,32},
{0,0,0,512},
{0,0,0,1024},
{0,0,0,64},
{0,0,64,0},
{0,0,1024,0},
{0,0,512,0},
{0,0,32,0},
{0,0,2,0},
{0,0,4,0},
{0,0,8,0},
{0,0,128,0},
{0,0,2048,0},
{0,0,32768,0},
{0,0,16384,0},
{0,0,8192,0},
{0,0,4096,0},
{0,0,256,0},
{0,0,16,0},
{0,0,1,0},
{0,1,0,0}, // 64
{0,16,0,0},
{0,256,0,0},
{0,4096,0,0},
{0,8192,0,0},
{0,16384,0,0},
{0,32768,0,0},
{0,2048,0,0},
{0,128,0,0},
{0,8,0,0},
{0,4,0,0},
{0,2,0,0},
{0,32,0,0},
{0,512,0,0},
{0,1024,0,0},
{0,64,0,0},
{64,0,0,0}, // 80
{1024,0,0,0},
{512,0,0,0},
{32,0,0,0},
{2,0,0,0},
{4,0,0,0},
{8,0,0,0},
{128,0,0,0},
{2048,0,0,0},
{32768,0,0,0},
{16384,0,0,0},
{8192,0,0,0},
{4096,0,0,0},
{256,0,0,0},
{16,0,0,0},
{1,0,0,0},
{1,0,0,0}, // 96
{0,0,0,1632},
{0,0,1632,1632},
{0,26214,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{4080,4080,1632,1632},
{26214,26214,1632,1632},
{1,0,0,0}, // 117
{0,0,51,51},
{0,0,13056,13056},
{0,0,52224,52224},
{0,0,204,204},
{204,204,0,0},
{52224,52224,0,0},
{13056,13056,0,0},
{51,51,0,0}, // 125
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903},
{0,1632,1632,0},
{63903,36873,36873,63903}, //147
{65535, 65535, 65535, 65535}}; //148

byte steps =148;

int taktPin =13;
int speicherPin=12;
int datenPin= 11;
byte col1 = 5;
byte col2 = 4;
byte col3 = 3;
byte col4 = 2;
int wert[5] = {0};
int ddelay = 5000;
int ddelay2 = 75;

void setup(){
pinMode(taktPin, OUTPUT);
pinMode(speicherPin, OUTPUT);
pinMode(datenPin, OUTPUT);
pinMode(col1, OUTPUT);
pinMode(col2, OUTPUT);
pinMode(col3, OUTPUT);
pinMode(col4, OUTPUT);
MsTimer2::set(2, anzeige);
MsTimer2::start();
}

void anzeige(){
digitalWrite(speicherPin, LOW);
shiftOut(datenPin, taktPin, MSBFIRST, wert[1]>>8);
shiftOut(datenPin, taktPin, MSBFIRST, wert[1]&255);
digitalWrite(speicherPin, HIGH);
digitalWrite(col1, LOW);
digitalWrite(col2, LOW);
digitalWrite(col3, LOW);
digitalWrite(col4, HIGH);
delayMicroseconds(ddelay);
digitalWrite(col4, LOW);
digitalWrite(speicherPin, LOW);
shiftOut(datenPin, taktPin, MSBFIRST, wert[2]>>8);
shiftOut(datenPin, taktPin, MSBFIRST, wert[2]&255);
digitalWrite(speicherPin, HIGH);
digitalWrite(col1, LOW);
digitalWrite(col2, LOW);
digitalWrite(col3, HIGH);
digitalWrite(col4, LOW);
delayMicroseconds(ddelay);
digitalWrite(col3, LOW);
digitalWrite(speicherPin, LOW);
shiftOut(datenPin, taktPin, MSBFIRST, wert[3]>>8);
shiftOut(datenPin, taktPin, MSBFIRST, wert[3]&255);
digitalWrite(speicherPin, HIGH);
digitalWrite(col1, LOW);
digitalWrite(col2, HIGH);
digitalWrite(col3, LOW);
digitalWrite(col4, LOW);
delayMicroseconds(ddelay);
digitalWrite(col2, LOW);
digitalWrite(speicherPin, LOW);
shiftOut(datenPin, taktPin, MSBFIRST, wert[4]>>8);
shiftOut(datenPin, taktPin, MSBFIRST, wert[4]&255);
digitalWrite(speicherPin, HIGH);
digitalWrite(col1, HIGH);
digitalWrite(col2, LOW);
digitalWrite(col3, LOW);
digitalWrite(col4, LOW);
delayMicroseconds(ddelay);
digitalWrite(col1, LOW);
}

void loop(){
for (int i=0; i<steps; i++){
wert[1] = letter*[0];*
_ wert[2] = letter*[1];_
_ wert[3] = letter[2];
wert[4] = letter[3];
delay(ddelay2);
}
}*_

Hallo zema0001
Ich sehe da einen akuten Mangel an Vorwiderständen an jedem einzelnen der 16 Kathodenstränge.
Des weiteren sind die Basiswidertände heillos zu klein. Bei 10 Ohm Basiswidersständen würden teoretisch (5V-0,7)/10 = 430mA. Das zwingt jeden Arduino-Ausgang in die Knie.

Die Transistoren gehen kaputt, weil Du keine Strombegrenzung hast. Ein 2,9Ohm Widerstand begrenzt bei 12V den Strom auf ca 4A. Die LED sind nur noch nicht abgeraucht, weil das Netzteil nicht genug Stron dafür liefert.

Ich verstehe auch nicht wie die NPN Transisoren den Pluspol schalten sollen. Da gehören PNP Transistoren hin und ein 2. NPN-Transitor damit Du den PNP Transistor sperren kannst.

:wink: :wink: :wink: :wink: :wink:

Grüße Uwe

Hallo Uwe

vielen Dank für die Antwort. Die Widerstände an den Kathodensträngen hatte ich am Anfang drin, habe diese
aber entfernt und die anderen reduziert um einen höherem Strom zu erhalten.

Es ging nur ein Transistor kaputt als ich von Multiplexing auf dauer geschaltet habe, ansonsten läuft das
ganze seit ca. 2 Wochen rund um die Uhr ohne das was kaputt geht

(5V-0,7)/10 = 430mA -> Diese Berechung hatte ich auch und bin mit 470 Ohm gestartet , werde wieder zurück gehen,
da sich kaum ein Helligkeitsunterschied ergibt. Wiso messe ich nur 100 uA mit dem Multimeter, es müssten ja mehrere
100 mA sein wie berechnet :astonished:

Werde mir nochmal die Transistoren anschauen, allerdings wie gesagt im 4x4x4 läuft die Schaltung
mit allen Animationen. Vieelicht hatte ich einfach Glück :slight_smile:
Möchte nur besser Bescheid wissen bevor ich mit dem 7x7x7 anfange

Als Attachment kurz die Schaltung mit Fritzing gezeichnet

zema

Weil die ganze Schaltung schwingt.

Dei Ansteuerung der Anoden muß über PNP-Transistoren erfolgen und die Vorwiderstände müssen auf die 16 Katodenstränge.
Schaltung der PNP-Transistoren:

So bekommst Du auch den Strom den Du haben willst.

Grüße Uwe