Forum: Mikrocontroller und Digitale Elektronik Moeglichst schnelle LED-PWM?


von Sebastian S. (ttt)


Lesenswert?

Hallo,

Ich habe hier bereits einige interessante Forenbeitraege zur 
Helligkeitsregelung von LEDs mittels PMW gelesen. Mein Problem ist nun 
folgendes: Die Wiederholrate bei geringen Helligkeiten ist wohl zu 
langsam. Mein Vater (Zoologe) haette gerne eine Daemmerungssimulation 
(Farbverschiebung ist aber unwichtig) fuer einen Versuch zur 
Tag-/Nachtaktivitaet. Tiere koennen aber teilweise noch deutlich hoehere 
Frequenzen wahrnehmen als Menschen. Deswegen sollte die Frequenz 
idealerweise bei 500 Hz oder hoeher liegen. Und niedrigste Helligkeit 
vielleicht 1% (subjektives Empfinden) der Maximalhelligkeit. Mit der 
quadratischen Naeherung fuer's Sehempfinden also: 500 Hz * 10.000 Stufen 
= 5 MHz. Da bleiben einem gerade mal 4 Taktzyklen pro Stufe bei z.B. nem 
ATTiny @ 20MHz. Ganz schoen knapp, finde ich. Gut, man kann noch nen 
Faktor 4 oder so gewinnen, wenn man die LEDs in z.B. 4 Gruppen aufteilt, 
und die ersten Male eben nur eine weitere Gruppe aktiviert.
Aber so ganz ueberzeugend finde ich das noch nicht. Gibt es da noch 
weitere Moeglichkeiten, z.B. gleichzeitige Strombegrenzung (wie koennte 
so etwas aussehen)? Oder irgendwelche ICs, die schneller sind?
Bei der Gelegenheit bin ich auch gleich noch auf der Suche nach einem 
passenden schnellen Leistungstreiber fuer die LEDs (~20 LEDs, je 20mA @ 
3V -> 1.2W ?).

Vielen Dank schonmal fuer alle Vorschlaege!

Sebastian

von check (Gast)


Lesenswert?

Ich möchte aber ein paar Details anmerken:

-Tiere erkennen die Dämmerung nicht nur an der Helligkeit sondern auch 
an den Farben. Das ist nicht unwichtig.
http://de.wikibooks.org/wiki/Melatonin
Such mal nach Wellenlänge!

-Warum PWM? So wie ich Versuchsaufbauten kenne, sind Energieverluste 
doch nicht so wichtig. Regelt das doch einfach linear!

-10.000 Stufen? Wozu das denn? Schon bei 1% Helligkeitsänderung stößt 
das Auge an seine Grenze, 256 Stufen sollten daher doch reichen, oder?

von Matthias (Gast)


Lesenswert?

vielleicht sowas in der Art: PCA6934

oder, du nimmst ne "realistische" PWM-Frequenz (viell. 10kHz, machbar 
mit Atmel) und musst dahinter ne Glätungsdrossel setzen. Wenn du die 
richtig dimensionierst, ist der Wechselanteil komplett rausgefiltert. 
DIe Schaltung verhält sich dann wie ne Stromquelle. So hast du 
Gleichspannung/strom an der LED.. kann aber bei mehreren LEDs ziemlich 
aufwändig werden

von ARM-Fan (Gast)


Lesenswert?

Da scheint es bei dir noch einige Verständnisprobleme zu geben:

1. Die "Wiederholrate" hat bei der PWM nichts mit der Helligkeit zu tun.
   Es wird nur die Pulsweite und nicht die Frequenz verändert

2. Mit den 4 Taktzyklen pro Stufe hast du einen Denkfehler. PWM macht 
der
   Controller in Hardware mit einem Timer. Man kann eine PWM zwar auch
   "in Software" realisieren - aber nur in "Notfällen"

3. Ob 500Hz mit 10000 Stufen (14bit) mit nem AVR drin ist, kann ich 
nicht
   100% sagen. Da müßten sich mal die Experten melden....

von Jan M. (mueschel)


Lesenswert?

>> Ob 500Hz mit 10000 Stufen (14bit) mit nem AVR drin ist, kann ich
>>nicht 100% sagen.

Bei nur einem Kanal ist das kein Problem, auch nicht bei zwei oder vier 
(je nach Anzahl der 16bit-Counter im Chip)
500 Hz nimmt allerdings selbst der Mensch bei Bewegung noch als Flackern 
war (siehe beispielsweise LED-Rücklichter an Autos, die aber schon mit 
einem Kilohertz oder mehr arbeiten).
10.000 Schritte sind zwar recht viel, aber gerade bei den niedrigsten 
Helligkeiten ist die Schrittweite schon recht groß. Ich würde es zuerst 
mit 12bit (= 4096) Stufen und 4kHz versuchen. Das sollte ein AVR bei 16 
MHz gerade so schaffen in Hardware.

von Heinz K. (heinzkleister)


Lesenswert?

Ich denke die PWM-Frquenz ist nicht so sehr entscheidend, wenn dahinter 
anständig geglättet wird.
Der Nachteil ist, dass die Helligkeit bei extremer Glättung nicht mehr 
sehr schnell geändert werden kann. Aber das spielt hier sicher keine 
Rolle...

von Dirk (Gast)


Lesenswert?

Hallo, 10.000 Schritte ist doch voll übertrieben, nichtmal 256 Schritte 
nimmt das Auge war, weil das Auge nicht linear ist.

Eine andere Moeglichkeit waere ein LM2575 mit z.B. INA138 am Sense 
Eingang zuregeln und somit eine Konstantstromquelle aufzubauen. Die 
Dimmung uebernimmt ein AVR mit einem PWM Ausgang (RC Tiefpass). Der 
LM2575 schafft 500mA und ist im DIP8 Gehaeuse erhaeltlich, wenn Du den 
LM2575 mit einer Engangsspannunng von 22V betreibst kannst du einige 
LED's in Reihe schalten.

Du koenntest Dir auch den INA138 sparen und einen OP benutzen. Die LEDs 
sind dann als Erdfreie Verbraucher anzuschliessen. Siehe Zeichnung 
2.2.4:

http://www.umnicom.de/Elektronik/Schaltungssammlung/Strom/Quelle/Stromquelle.html




von Sebastian S. (ttt)


Lesenswert?

@Matthias:
PCA6934? Dazu finde ich leider nichts (jedenfalls liefert eine 
Google-Suche nichts) :/

@ARM-Fan:
Hm? PWM wird doch meiner bisherigen Kenntnis nach dadurch gemacht, dass 
(Pseudocode):
do
portpin_aus
for i = 0 to maximalwert
   if i > pwm_schwelle then portpin_an
next i
loop
Ob nun in Hardware oder Software is ja erstmal egal. Kleinste Helligkeit 
ist dann 1/maximalwert. Und jetzt kommt die Frequenz ins Spiel: die 
Schleife soll mindestens 500 Mal pro Sekunde durchlaufen, damit die >= 
500 Hz erreicht werden. Macht eben die genannten 5 MHz. Oder bin ich da 
auf dem voellig falschen Dampfer?
Ich gebe allerdings zu dass mein Satz oben "Die Wiederholrate bei 
geringen Helligkeiten ist wohl zu gering" falsch formuliert war. Die 
Wiederholrate bleibt natuerlich konstant. Sie ist nur bei den meisten 
Anwendungen die ich bisher gesehen habe viel zu klein (100 Hz oft das 
hoechste der Gefuehle). Oder der Sprung von "ganz aus" auf "minimalste 
Helligkeit" ist bereits sehr gross (maximalwert klein), und das soll 
eben nicht der Fall sein.

Ich brauche natuerlich auch nicht wirklich alle 10000 Stufen, mit 
zunehmender Helligkeit kann die Abstufung immer groeber sein. Wichtig 
ist halt die Dynamik.

@Jan:
Danke, ich werd's mal austesten.

von balu (Gast)


Lesenswert?

hardware bedeutet:

wir sagen dem controller nimm den 16 bit timer und mache damit pwm ohne 
den proz takt zu teilen
das war pkt 1.  sind 2 anweisungen die einmal ausgeführt werden müssen.

dann übergeben wir nur noch dem OCR.... register eine 16 bit zahl welche 
unsere pulseite entspricht . nichts weiter das wars

die geschwindigkeit is  cpu freq / 2^16 = 305 Hz
wenn s schneller gehen soll auflösung verringern  zB. mit einem 
konstanten vorladewert  alles kein thema sind in der initialisierung 2 
befehle mehr.

von balu (Gast)


Lesenswert?

wäre also bei 10000 stufen eine  freq von 20000000/ 10000 = 2000 hz

von Matthias (Gast)


Lesenswert?

sorry, hatte mich vertippt: PCA9634

http://www.nxp.com/pip/PCA9634D.html

von Matthias S. (da_user)


Lesenswert?

Man könnte doch auch ne PWM mit nem Sägezahn und Komperator aufbauen. 
Komperator wird vom Sägezahn und über PWM von nem µC angesteuert. Somit 
kann man die PWM-Frequenz über die Sägezahn Frequenz quasi beliebig (was 
halt der Komperator abkann) einstellen.

Kritisch dürfte hierbei werden, dass die PWM vom µC möglichst gut 
geglättet werden muss, aber auch das ist möglich ;-)

von Dieter Werner (Gast)


Lesenswert?

Da die Empfindlichkeit annäherend logarithmisch ist, könnte man ja auch 
mit der gleichen PWM zusätzlich noch den über die LEDs fließenden Strom 
steuern und hätte dadurch eine quadratische Kennlinie.

Dann wären 256 Stufen wahrscheinlich ausreichend.

von Kliby (Gast)


Lesenswert?

was soll die helligkeit mit der frequenz zu tun haben?
ganz im gegentil, mit zu hoher frequenz wirst du eher mühe haben die 
auflösung reinzubringen...
entscheidend ist die pulslänge (bei 5Mhz und 10000 stufen, wären das 
dann extrem kurze zeitabstände, das wirst du nicht hinkriegen mit einem 
avr... naja musst du ja auch nicht...)
nimm einfach etwa 4,31 kHz (oder kleiner bei der auflösung) oder so 
(kein vielfaches von 50... (falls noch weitere lampen etc in der nähe 
sind...))
p.s. achte darauf dass du die treibertransistoren etwas zu gross 
dimesionierst, die bekommen z.t. mühe bei den hohen frequenzen... (auf 
volllast auslegen...)

wozu wird das ganze gebraucht? meine ist ja nicht unkritisch... (für 
tiere, LED's haben sehr begrenzte wellenlängen...) wie willst du die 
10000 stufen einstellen? macht das wirklich sinn???

von Sebastian S. (ttt)


Lesenswert?

Hach Mensch...
entweder ich kapier irgendwas nicht... oder einige der Beantworter 
verstehen etwas nicht. Ich meine... ich moechte hier auf keinen Fall 
meckern oder undankbar sein -- ganz im Gegenteil, vielen Dank schonmal 
fuer die vielen Hinweise.

Aber warum hacken alle immer auf den 10.000 Stufen ("so viele brauchst 
du doch nie!") und der Frequenz drauf herum? Natuerlich brauche ich 
nicht jede einzelne der 10.000 Stufen. Insbesondere zwischen 9.999 und 
10.000 wird fuer's Auge ueberhaupt gar kein Unterschied sein. Aber 
zwischen 0 (ganz aus) und 1 sehr wohl. Und ich moechte eben den 
Dynamikumfang haben, dass Stufe 10.000 eben 10.000 mal so lang leuchtet 
wie Stufe 1. Um wenigstens nen Faktor 100 "gefuehlte" Helligkeit zu 
haben. Voellig egal wie viele ich von den Stufen tatsaechlich benoetige, 
brauche ich auf jeden Fall (Dynamikumfang) * (minimale 
Wiederholfrequenz) = 10.000 * 500 Hz = 5 MHz.
Vielleicht verstehe ich auch nicht, welche Frequenz genau z.B. Kilby mit 
den 4.31kHz meint?!

balu: Danke, scheint also doch machbar zu sein.
Heinz: Glaettung werd ich auf jeden Fall ausprobieren. Wobei ich ehrlich 
gesagt keine Ahnung habe wie man gut glaettet wenn dahinter eine hohe 
Last haengt... vermutlich erst glaetten, dann verstaerken. Dazu werde 
ich mir mal die Links angucken die hier gepostet wurden.

von Stefan (Gast)


Lesenswert?

Ist schon was dran, dass bei 256 Stufen zwischen 0 und 1 ein relativ 
großer Unterschied ist. Aber warum ignorierst du eigentlich konsequent 
die sachdienlichen Hinweise ?

Zwei Leute haben bereits geschrieben dass für diese Anwendung 
("Tag/Nachtsimulation für Tiere") LEDs nicht funktionieren werden, da 
LEDs a) nur ein sehr schmales Lichtspektrum abgeben und b) weil Tiere 
den Tag und die Nacht nicht nur an der Helligkeit erkennen.

Weiterhin hatte jemand die Idee einen LM7525 oder so herzunehmen, und 
den als einstellbare Konstantstromquelle zu missbrauchen. Auf diese Art 
und Weise hättest du schon eine wesentlich linearere 
Einstellmöglichkeit, so dass dann die 256 Stufen reichen dürften. Wenn 
doch nicht kann man, je nach µC Typ, auch 9, 10, 11, 12, 13, 14, 15 oder 
16 bit nehmen. Ebenfalls wiederholt: Ein AVR kann PWM in Hardware 
machen, d.h. du musst nicht in Software dauernd irgendwie einen Zähler 
laufen lassen. Du sagst dem AVR z.B. mache PWM an Ausgang OC2 mit der 
Frequenz F_CPU / 256 und dem Tastverhältnis 128/256 (50 %), anschließend 
hat die CPU NICHTS mehr zu tun bis du das Tastverhältnis änderst.

Bitte geh' doch mal ein klein Bischen auf die zahlreichen konstruktiven 
Antworten ein,

Gruß
Stefan

von Stefan (Gast)


Lesenswert?

Das ich auch noch was konstruktives Beitrage:

>vermutlich erst glaetten, dann verstaerken.

Nein! Dadurch machst du Dir den Vorteil der PWM zunichte. Wenn du erst 
glättest und dann das Signal z.B. auf einen MOSFET gibst, muss dieser 
bei Werten < 100% den Rest in Wärme verheizen. Muss der MOSFET nur ein 
oder aus schalten, hast du im aus Zustand keine Verluste, und im ein 
Zustand nur Rdson*I°2, und noch ein bischen was, was an den 
Schaltflanken draufgeht.

Stefan

von balu (Gast)


Lesenswert?

so zum tagesabschluss

ich denke mal das du das schon irgendwie verstanden hast. das rumgehacke 
kommt weil
a keiner glaubt das man eine solche auflösung braucht.
(a1 wenn doch dann wirds interessant von der umsetzung)
b du selber immer schwankst.

das zählen erfolgt linear. das kann man zum ende hin nicht quadratisch 
beschleunigen  schluss! wenn du dann sagst das  du eine dynamik von 
10000 willst dann sind das auch 10000 stufen auch wenn du am ende im 
prog größere sprünge machst um das quadratisch zu bekommen.

einigen haben auch schon gesagt das dein ansatz ungünstig ist.

gegenvorschlag:

such dir einen D/A wandler der 13 bit (ich einige mich mal auf 8192 
stufen) hat. da du sowas wohl nicht so einfach bekommst nimm 14 bit.
steuere damit eine stromquelle. welche von 0-20 mA ausgelegt ist.
damit bekommst du ein ganz sanftes signal ohne irgedwelches gezappel und 
gut.

hört sich jetzt einfach an, hat natürlich einige hürden.

14 bit is ne menge holz von der auflösung her (zumindest was die 
störanfälligkeit betrifft)
die lichtaussendung pro mA is bei einer led alles andere als linear!
das musst du im µc mit tabelle verwursten

und halt all die anderne wiedrigekeiten

ich geh davon aus das du noch nix mit µc und elektronik im höheren sinn 
gemacht hast. also wenn du dich jetzt hinsetzt und konzentriert dran 
arbeitest dann hast du das in 3 wochen fertig !! sehr optimistische 
schätzung !!! nimm es lieber zu sicherheit mal 4



von balu (Gast)


Lesenswert?

ps falls es nicht rihctig raus kommt  in meinem gegenvorschlag gibt es 
keine pwm mehr das is alles analog

dein ziel ist es nicht effizient zu sein sondern  genau und ruhig

von Matthias (Gast)


Lesenswert?

naja, nimm den PCA9634, der kann bis zu 8rgb-leds steuern

von antworter (Gast)


Lesenswert?

meine 2cent:


ich finde den oben geäußerten Vorschlag mit dem geschalteten 
Vorwiderstand gar nicht mal schlecht:

Für einen Duty-Cycle von - sagen wir mal - 5% bis 100% nimmt man einen 
kleinen Vorwiderstand (hohe Helligkeit).

Unter 5% (wo ja eine höhere Auflösung gefordert ist), schaltet man auf 
einen größeren Vorwiderstand um, und hat nun wieder den vollen 
Duty-Cycle Bereich zur Verfügung, um die "unteren 5%" fein aufzulösen.


Glückauf ;-)

von antworter (Gast)


Lesenswert?

...so schaffst Du auch mit einer 8Bit-PWM eine hohe Auflösung im kleinen 
Bereich - und das mit hoher Frequenz :-)

von Sebastian S. (ttt)


Lesenswert?

Stefan wrote:
> Zwei Leute haben bereits geschrieben dass für diese Anwendung
> ("Tag/Nachtsimulation für Tiere") LEDs nicht funktionieren werden, da
> LEDs a) nur ein sehr schmales Lichtspektrum abgeben und b) weil Tiere
> den Tag und die Nacht nicht nur an der Helligkeit erkennen.

Zumindest das Spektrum von weissen LEDs ist so schmal nun auch nicht, 
und glaube mir... den zoologischen Teil lass mal meinen Vater machen, 
der ist schon lange in dem Geschaeft. Tag/Nacht-Wechsel kann man bei 
Hamstern durchaus auch ganz einfach mit ner Zeitschaltuhr machen, die 
einfach nur die Raumbeleuchtung ein- oder ausschaltet. Da ist weder was 
mit Wellenlaenge noch mit Daemmerung. Es funktioniert, wird in vielen 
Labors genau so gemacht, ist nur eben ueberhaupt nicht natuerlich. Ob 
ueberhaupt schon mal jemand den Unterschied erforscht hat, weiss ich 
nicht. Es stellt sich aber mittlerweile wohl raus dass man beim jetzigen 
Stand der Forschung nicht mehr ausschliesslich auf das ein-aus-Modell 
setzen sollte.

> Weiterhin hatte jemand die Idee einen LM7525 oder so herzunehmen, und
> den als einstellbare Konstantstromquelle zu missbrauchen. Auf diese Art
> und Weise hättest du schon eine wesentlich linearere
> Einstellmöglichkeit, so dass dann die 256 Stufen reichen dürften.

Da widersprichst du dir gerade selber mit einer Aussage, die etwas 
spaeter folgt:

> die lichtaussendung pro mA is bei einer led alles andere als
> linear!
> das musst du im µc mit tabelle verwursten

... genau. Ich glaube nicht, dass Stromsteuerung das grundsaetzliche 
Problem loest! Ob ich nun mit der PWM direkt versuche, eine nichtlineare 
Kennlinie abzufahren, oder ob ich mit der PWM durch glaetten eine 
Spannung generiere, die dann linear in einen Strom umgewandelt wird, der 
dann eine nichtlineare Kennlinie abfaehrt... ?

> Ebenfalls wiederholt: Ein AVR kann PWM in Hardware
> machen, d.h. du musst nicht in Software dauernd irgendwie einen Zähler
> laufen lassen.

Hab ich das behauptet? Die Funktionsweise ist aber intern die selbe. Die 
Zeit/Takt-Rechnung bleibt also.

> das zählen erfolgt linear. das kann man zum ende hin nicht quadratisch
> beschleunigen  schluss! wenn du dann sagst das  du eine dynamik von
> 10000 willst dann sind das auch 10000 stufen auch wenn du am ende im
> prog größere sprünge machst um das quadratisch zu bekommen.

Mir is sehr wohl bewusst, dass ich (bzw... fuer dich nochmal ganz 
praezise: der AVR selbst, ohne dass die CPU irgendwie belastet waere) 
die ganzen 10.000 runterzaehlen muss. Ich wollte nur darauf hinaus, dass 
ich natuerlich nicht den entsprechenden Comparator-Wert auf alle 
dieser 10.000 Stufen setzen muss/brauche. Da mir ja in anderen Posts 
vorgehalten wurde man wuerde ja den Unterschied zwischen 10.000 und 256 
gar nicht sehen. Natuerlich sieht man nicht, ob man gerade in ner 8bit 
PWM von 254 auf 255 geschaltet hat oder bei der 10.000er von 9.999 auf 
10.000. Aber am unteren Ende eben schon!

> ich geh davon aus das du noch nix mit µc und elektronik im höheren
> sinn gemacht hast.

Durchaus richtig, ich habe bisher lediglich ein paar Spielereien mit µc 
und Digital-ICs, dazu noch ein bisschen OpAmps gemacht. Ich denke aber 
mir fehlt in erster Linie noch der Ueberblick, welche Moeglichkeiten es 
denn so gibt. Und genau deswegen bin ich hier.


Den PCA9634 hab ich mir gerade mal angesehen, der macht allerdings 
ebenfalls nur 8bit PWM. Keinerlei logarithmische Anpassung gefunden. 
Sicher huebsches IC, danke fuer den Hinweis, aber leider hier nicht 
wirklich eine Loesung.

Schaltbarer Vorwiderstand: Klingt sinnvoll, mal sehen wie man das 
konkret umsetzen kann.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Damit du dir keine sorgen mehr um die Frequenz machen musst nimm einfach 
nen Tiny26, der kann mittels PLL den Timer mit 64MHz laufen lassen. Das 
sind bei 8 bit 250kHz. Wenn du dann die Vorwiderstandumschaltemethode 
verwendest, hast  du auch die gewünschte auflösung im geringen bereich 
und du solltest glücklich sein ;)

PS: Glätten - such mal nach LC filter oder nach Step-down converter 
(sind 2 verschiedene sachen, je nach Leistung ist das eine oder andere 
Sinnvoll)

von antworter (Gast)


Lesenswert?

konkrete Realsierung:

Schalten der Widerstände mittels (2 extra) FETs.

-----------------------------------------------------------------

Bei der Widerstandsberechnung mal aus dem Bauch:

Bei - sagen wir mal - 5% Duty Cycle läßt Du die LED mit 1/20 ihrer 
Leistung laufen.

Normal z.B.: 20mA * 2.6V = 52 mW * (1/20) = 2.6 mW

2.6mW Leistung kannst Du dann aus der Strom-Spannungs-Kennlinie der LED 
ablesen (bzw. iterativ berechnen), und so den Widerstand für die unteren 
5% Duty Cycle berechnen.

von antworter (Gast)


Lesenswert?

huch... zuviel Gleichheit ;-)

korrekt geschrieben:

20mA * 2.6V = 52 mW      ;Leistung bei 100% Duty Cycle
52 mW * (1/20) = 2.6mW   ;gemittelte Leistung bei 5% Duty Cycle

:-)

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.