Forum: Mikrocontroller und Digitale Elektronik Constant Current Source


von Hagen (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leute,

entschuldigt wenn mir kein besserer Betreff eingefallen ist. Ich habe
mal wieder eine reine Elektonikerfrage :)

Also, auf http://www.maxim-ic.com/appnotes.cfm/appnote_number/2199 wird
beschrieben wie man mit Push-Pull Ausgänge und einem Transistor eine
einfache Konstantstromansteuerung von LEDs bewerkstelligen kann. Im
besonderen interessiert mich dabei die Bilder 9 und 11. Allerdings eben
bezogen auf einen AVR !

Gut dachte ich mir schaue ich mal im Datenblatt der AVR's (neuere
Typen natürlich) nach und informiere mich genauer über die Ports. Also
Push-Pull Ausgänge scheinen die AVR's ja nicht zu haben, oder doch ?
Ich frage weil ich eben kein Schaltbild oder Equivalenzbild der
Portausgänge gefunden habe. Es gibt zwar zb. im ATMega8 Datenblatt eine
grobe Übersicht auf Seite 50, aber daraus kann ICH nicht meine Schlüsse
ziehen.

Wäre die AN von Maxim nun übertragbar auf die AVR's ?

Mein Ziel wäre es wie im Bild 11 gemultiplexte LEDs anzusteuern. Es
sind RGB LEDs mit gemeinsammer Anode, und jede Farbe wird in einer
Spalte einer Matrix betrieben. Ergo: über den PNP als schaltbare
Konstantstromquelle werden verschiedenfarbige LEDs gemultiplext
betrieben. Oben mal 3 Columns und unten die 3 MOSFETs bilden die Rows.
Es ist immer nur einer dieser MOSFETs zu einem Zeitpunkt
durchgeschaltet und so immer nur eine der 3 LEDs pro RGB-LED.

Um die Beschaltung der Matrix selber geht es mir hier nicht.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Keiner eine Idee ?
Ich push nur ungern, kann mir aber nicht vorstellen das alle hier mit
dem AVR arbeiten und keiner genau weis wie die Ports elektrisch
aufgebaut sind. Oder zumindestens mir einen Hinweis oder Link geben
kann !?

Auch eine Suche in den Datenblättern/AN's bei Atmel war erfolglos.

Gruß Hagen

von crazy horse (Gast)


Lesenswert?

kannst du so machen wie angegeben, kein Problem.

von Hagen (Gast)


Lesenswert?

Danke Crazy Horse.

Ich versuche das nochmal zu präzesieren:

Die RGB LEDs haben eine unterschiedliche Vorwärtsspannung von 3.9V für
Blau, 1.9V Rot und 3.4V Grün. Alle werden durch den PNP Transistor über
Vcc versorgt. Der PNP hat Vbe 4.0V und Vcc ist 5V. Laut Formel aus der
AN von Maxim also I_led = (Vcc - Vbe)/R -> (5V - 4V) / 50 Ohm = 20mA.

Wenn ich also mit einem AVR so wie in den Maxim AN immer nur eine der 3
LEDs in der RGB-LED ansteuere so müsste sich mit einem Widerstand von 50
Ohm denoch immer 20mA LED Strom einstellen ?

Was mich dabei stutzig macht sind 3 Punkte:
1.) der PNP wird ohne Basiswidertand betrieben
2.) obwohl die 3 RGB's pro LED unterschiedliche Vorwärtsspannung haben
stellt sich bei Einzelansteuerung immer der gleiche Strom ein
3.) wieviel Strom fleißt in den Pin des AVR's bzw. wieviel wird aus
dem Pin gezogen ?

Erklärbar wäre dies doch nur auf Grund der internen Aufbauweise eines
Ports des AVR.

Klar, falls sich das exakt so verhält wäre dies ideal für mich. Nur
blicke ich eben die elektronischen Grundlagen dafür noch nicht.

Gruß Hagen

von Volker (Gast)


Lesenswert?

Hallo Hagen,

die Kontastanstromquelle funktioniert wie folgt.

Der AVR Output geht auf Low, damit liegt auch die Basis des PNP
auf Masse, am Emitter stellt sich jetzt eine um ca. 0,7V höhere
Spannung als an der Basis ein. Der Strom wird jetz vom Emitter-
Widerstand bestimmt.
I=(VCC-0,7V)/R
Du brauchst keinen Basiswiderstand, da durch die Basis nur der
Strom geteilt durch den Verstärkungsfaktor des Transistors fliest.

Aber:
Die SChaltung wird so nicht funktionieren, weil die LED zu viel
Spannung benötigen.
Dies siehst du auch bei Maxim, da liegen die LEDs nicht an Masse
sondern an einer negativeren Spannung.
Diese Spannung muß vom Betrag her um ca. 1V größer sein als die maximal
abfallende Spannung einer Leuchtdiode. (Damit über der EC-Strecke noch
Spannung anliegt und er damit regeln kann).

Du schaltest aber die LED über die Fets nur gegen Masse.

Gruß Volker

von Hagen (Gast)


Lesenswert?

Hm manchmal habe ich das Gefühl das Transistorenschaltungen doch viel
komplizierter sind als vermutet.

"Der AVR Output geht auf Low, damit liegt auch die Basis des PNP
auf Masse, am Emitter stellt sich jetzt eine um ca. 0,7V höhere
Spannung als an der Basis ein. Der Strom wird jetz vom Emitter-
Widerstand bestimmt.
I=(VCC-0,7V)/R"

Hm, da es ein PNP ist müsste sich doch Vcc - 0.7V als Emitterspannung
einstellen, also 5V - 0.7V = 4.3V oder ?

Die LEDs benötigen minimal 3.9V +1V = 4.9V bleibt also eine Differnz
von 4.3V - 4.9V == -0.6V die mir fehlen richtig ?

Wenn ich alles richtig verstanden habe dann hilft es mir auch nichts
die Spannung am Transistor um Vcc + x Volt zu erhöhen da dann der PNP
nicht richtig aufmacht.

Das Problem dürfte der Spannungsabfall von 0.7V sein. Wäre es möglich
statt einem PNP einen P-Channel-MOSFET zu benutzen ?

Meine Fragerei zielt primär darauf ab die verschiedenen LEDs in einer
Zeile immer mit gleichem Strom zu versorgen, klar ich möchte ja immer
gleiche Helligkeiten erreichen. Aber am wichtigsten ist der Punkt das
ich so viele Vorwiderstände einsparen könnte, und dies wäre PCB
technisch wichtig für mich. Immerhin sollen ja viel mehr LEDs auf
kleinestem Raum angesteuert werden.

Hm, sogesehen sind die AN von Maxim eher theoretischer Natur.

Gruß Hagen

von Volker (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Hagen,

soll natürlich Konstantstromquelle heißen.

Ich hab mal schnell ne Schaltung gepinselt, mit der es funktionieren
sollte, allerdings benötigt man noch 9V.
Die Spannung an der Basis von T2 wird mittels T1 zwischen 5V und 9V
umgeschaltet. Bei 9V (Portpin für T1 auf Low) ist die Stromquelle aus,
bei 5V (Portpin für T1 auf high) ist die Stromquelle an.

Hoffe, dass die Schaltung funktioniert, ist noch so früh am morgen.

Gruß Volker

von Volker (Gast)


Lesenswert?

Hallo Hagen

Ich weiß nicht wie du darauf kommst: "Der PNP hat Vbe 4.0V".

bei einem PNP ist im offenen Zustand der Emitter um ca. 0,7V größer als
die Basis.
bei einem NPN ist im offenen Zustand die Basis um ca. 0,7V größer als
der Emitter.

Volker

von Hagen (Gast)


Lesenswert?

Danke Volker, das hatte ich mir schon fast gedacht und war auf der Suche
nach entsprechenden Doppeltransistoren :) Das Problem ? ich brauche 64
Stück von den Dingern auf einem PCB das noch sehr klein sein muß. Ich
muss mich also doch auf die Suche nach einer anderen integrierten
Lösungen begeben. Shiftregister oä. fallen aus da die LEDs sehr schnell
angesteuert werden müssen.

Gruß Hagen

von Volker (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Hagen,

habe die Schaltung nochmals modifiziert, sollte jetzt mit einem
Transistor+Widerstand weniger auskommen und läuft mit 5V.
Schaltung ohne Gewähr.

Gruß Volker

von Hagen (Gast)


Angehängte Dateien:

Lesenswert?

Hi Volker,

super dank an dich. Ich habe mal das Datenblatt des PNP's angehangen
den ich nutzen wollte.
Wäre es zuviel verlangt wenn ich dich bitten würde mir deine Schaltung
genauer zu erklären ? HaReddmann AT T-Online DOT de.

Um 20mA durch die LEDs fließen zu lassen muß Rstrom 35 Ohm sein. Auf
die 4.7V kommst du durch die Spannung an der Basis von 4.0V + die 0.7V
Vbe. Aber wie kommst du auf die 4.0V an der Basis ?

Ich werde das mal am Wochenende experimentell abchecken.

Gruß Hagen

von Volker (Gast)


Lesenswert?

Nun ja,

wenn der Portpin des AVR auf low liegt ergibt sich durch den
Spannungsteiler von R1, R2 nach dem ohmschen Gesetz
Ub= 5V/(R1+R2)* R1 = 5V/1270R * 1000R also ca. 4V

Wichtig ist, dass der Spannungsteiler relativ niederohmig ist,
bzw. der Transistor eine hohe Verstärkung hat.
Grund: angenommen der Transistor hat eine Vertärkung von 100, bei
20mA Emitter-Kollektor Strom wäre das ein Basis Strom von 0,2mA.
Diese 0,2mA belasten natürlich den Spannungsteiler und verändern die
Basisspannung und somit auch den Strom durch die LED.

wenn der Portpin des AVR an R2 auf High liegt, liegt auch die Basis
auf 5V, somit ist die Stromquelle ausgeschaltet.

Um 20mA fließen zu lassen komme ich auf R=0,3V/20mA= 15 Ohm

Die SChaltung hat aber einen kleinen Nachteil, Spannungsschwankungen
auf der 5V Schiene verändern auch den Strom und die 0,3V sind halt
ziemlich gering, die Stromkonstanz ist also nicht die allerbeste,
sollte aber für LEDs ausreichend sein.
Die Konstanz ist allein davon abhängig, wie stabil die Differenz
der 5V und den 4,7V ist (also der 0,3V) und der Stabilität des
Widerstandes.
Das Problem ist halt, dass die Blaue LED schon  3,9V benötigt und
somit dem Transitor zum regeln über der EC-Strecke nur noch 0,8V
übrig bleiben, deshalb bleiben für die Stromregelung nur ca. 0,3V
übrig.

Der Transitor sieht ganz gut aus, ich glaube aber der BC807-40
hat eine höhere Verstärkung, auch SOT-23 und könnte sogar billiger
sein.
Ansonsten: Du hast recht, einfach mal aufbauen und auprobieren, ist ja
in 15min erledigt.

Falls du noch Fragen hast einfach nochmal melden.

Volker

von Volker (Gast)


Lesenswert?

Fehler, muß oben natürlich lauten:

Ub= 5V/(R1+R2)* R2 = 5V/1270R * 1000R also ca. 4V

Volker

von Hagen (Gast)


Lesenswert?

Hi Volker,

"Ub= 5V/(R1+R2)* R2 = 5V/1270R * 1000R also ca. 4V"

Mein Fehler war das ich nicht (R1+R2) gerechnet hatte.

"Die SChaltung hat aber einen kleinen Nachteil,
Spannungsschwankungen.."

Das ist doch relativ :=) Mir geht es nicht darum das zu jedem Zeitpunkt
immer 20mA fließen, genaugenommen benötige ich zwischen 50-80mA da ich
sehr schnell pulsen will.
Der einzigste Zeitpunkt der wichtig ist ist wenn die LEDs einer Spalte
als solches gemeinsam angesteuert werden. Dann soll sichergestellt sein
das alle LEDs mit gleicher Helligkeit leuchten. Normalweise könnte ein
normaler LED-Vorwiderstand ausreichend sein, nur so wie jetzt ist es
einfach besser weil alle LEDs der RGB LED eben mit ungefähr gleichem
Strom betrieben werden können, OHNE das ich für jede LED einzeln einen
Vorwiderstand benötige. Im Grunde also zwei wichtige Kriterien:
1.) LED's einer Spalte -> gleicher Strom -> gleiche Helligkeit
2.) möglichst ohne einzelne Vorwiderstände auskommen um Bauteile zu
sparen, würde ich's ganz exakt machen so benötigte ich 3 mal mehr
Vorwiderstände wie jetzt.

Das über den gesammten zeitlichen Verlauf immer der gleiche Strom
fließt ist nicht so wichtig, besonders weil ich glaube das 5mA mehr
oder weniger im Pulsbetrieb nicht auffallen werden.
Einzigste Sache die mir noch Sorgen bereitet sind die
Bauteiltoleranzen.


Den SMBTA56 möchte ich benutzen weil ich 1000 Stück für schlappe 2 Euro
bekommen habe :=)

Aber noch eine wichtige Frage:
Der AVR hat ja eine Portprotection gegen Überspannungen (Schutzdioden).
Ich habe da mal eine AN gesehen in der 230V über 1M an einen Pin gelegt
wurde.
Ich könnte doch die Spannung für die LEDs erhöhen ? sagen wir mal 6V
statt 5V oder ?

Zb.
R1=1K, R2=470, Vled = 6V -> ergibt 4V an Basis. I_led = (6V - 4.7V)/65
Ohm == 20mA. Und 1.3V Differenz. Ich vermute aber das der PNP dann
nicht mehr richtig schaltet, oder ?

Gruß Hagen

von Volker (Gast)


Lesenswert?

mit 6V sollte es gerade noch gehen, anschalten ist kein Problem,
nur irgendwann kannst du den PNP und damit den LED Strom nicht mehr
komplett ausschalten, da von den 6V ausgehend ein Strom über die
interne Schutzdiode des AVR nach VCC=5V fließen kann, deswegen hatte
ich ja in der ersten Schaltung noch den NPN drin (und 9V LED
Spannung).
Aber wie gesagt sollte es mit 6V noch gehen, abzüglich der 4V bleibt
noch 1V übrig, diese müßten dann die EB-Diode und die AVR-Diode
"überwinden" damit noch ein Basistrom fließen kann.
Kaputtgehen kann bei den geringen Strömen eigentlich nichts.

wie wärs mit 3,8V --> 4,5V und 5,5V Spannung für LED?

Ansonsten hast du recht, jegliche weitere Präzision benötigt mehr
Bauteile und ist wohl unnötig.

Es wäre vielleicht auch noch eine Alternative für R1 eine Zenerdiode
(5,6V),Kathode an die Basis, Anode an den AVR zu schalten. LED-Spannung
auf ca. 9V erhöhen, damit ergibt sich wenn der AVR auf Low geht:
Basis=5,6V Emitter=6,3V UanR=9V-6,3V=2,7V
Wenn der AVR auf High geht fließt durch die Zenerdiode auch kein Strom
mehr, da ja mindestens 10,6V benötigt würden. (Allerdings fließt noch
ein sehr geringer Leckstrom)

Baue es mal auf und teste es einfach (auch über größere
Temperaturschwankungen.



Volker

von Hagen (Gast)


Angehängte Dateien:

Lesenswert?

Hi Volker

ich habe mit LTSpice einige Simulationen durchgeführt, anbei nun meine
Lösung die ich dann in Hardware testen werde.

Links der FPGA/AVR wird intern mit 3.2 Volt betrieben, teilweise
OpenCollector. Rechts die LEDs können im Bereich von 4.2 Volt bis 15.0
Volt betrieben werden. Dabei ändert sich für alle LED's gleichermaßen
der Strom kontinulierlich, egal in welchem Muster sie angesteuert
werden. Die LED's werden mit 1 Mhz angesteuert.

Wie du feststellen kannst ist die Dimensionierung der Widerstände eine
andere als die von dir vorgeschlagene. Ich habe die Basiswiderstände
absichltich höher dimensioniert um Strom zu sparen.
Natürlich zeigt das JPEG nur einen Teil der LED-Zeilen-Ansteuerung.
Insgesamt wird es wohl 16 Zeilen * 12 Spalten == 64 RGB LEDs geben.

Vorteil bei der jetzigen Lösung ist es das man V_LED im Bereich 4.2 bis
>15 Volt einregeln kann und für alle LED's stellt sich der gleiche
Strom ein.

Gruß Hagen

von Hagen (Gast)


Angehängte Dateien:

Lesenswert?

Und hier noch die LED Spannungen die sich in der 1. Zeile einstellen.

Gruß Hagen

von Volker (Gast)


Lesenswert?

Hallo Hagen,

sorry, ich habe den Thread erst eben wieder entdeckt.

Im Prinzip hast du jetzt meine zuerst gepostete Schaltung verwendet,
nur das der NPN-Transistor eben der Open-Kollektor Ausgang deines
Controllers/FPGA ist.

Funktioniert die Schaltung jetzt wie gewünscht?

Gruß Volker

von Martin S. (Gast)


Lesenswert?

@Hagen
"Constant Current Source" - entschuldigt wenn mir kein besserer
Betreff eingefallen ist

"Zu meiner Zeit" hätte ich den Betréff einfach
"Konstantstromquelle" genannt, oder "Konstanstromquelle an einem
AVR".

Möglicherweise war deine Motivation / Vermutung, daß man heutztage mit
dem entsprechenden eglischen Fachbegriff mehr Leser erreichen kann,
weil die einfach kein Deutsch mehr verstehen :-(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.