Forum: Mikrocontroller und Digitale Elektronik LED-Helligkeit in Abhängigkeit von der Pulsweite


von Maxim (Gast)


Lesenswert?

Hallo,

nach meinen ersten Versuchen habe ich festgestellt, dass die Helligkeit 
der LED nicht direkt proportional zu der Pulsweite ist. Zumindest kommt 
es mir so vor. Wahrscheinlich ist das menschliche Auge daran "schuld", 
weil es bei schwach leuchtender LED feinere Helligkeitsabstufungen 
registrieren kann?

Jedenfalls zieht dies einen unschönen Effekt nach sich. Bei einem 
linearen Anstieg der Pulsweite wird die LED zunächst sehr schnell hell 
und dazu noch sichtbar stufenweise. Danach nimmt die Helligkeit 
scheinbar immer langsamer zu. Nach Gefühl würde ich einen Logarithmus 
vermuten.

Wie kann ich diesen beiden Effekten entgegenwirken?

Meine Ansätze wären:

 - höhere PWM-Auflösung, um die Abstufungen im dunkleren Bereich
   zu erhöhen

 - eine LUT, die das lineare Verhältnis von Pulsweite und
   Helligkeit herstellt

Wobei mit die Idee mit der LUT nicht ganz effektiv vorkommt. Müsste doch 
sicherlich etwas eleganteres geben. Außerdem muss man die 
Proportionalitätswerte erstmal irgendwie herausfinden.

von Nullpainter (Gast)


Lesenswert?

Ja, das Auge hat eine Logarithmische Kennlinie. Die Leute geben 
standardmaessig zuviel Strom auf die LED. Bei einer 20mA LEd genuegen 
1-2mA, bei einem 70ma Backlight genuegen 5-10mA.

von Εrnst B. (ernst)


Lesenswert?

Statt LUT kannst du die Kennlinie mit ein paar Stützpunkten annähern, 
und dazwischen linear interpolieren.
Und zumindest bei software-pwm kannst du die Auflösung selber 
modifizieren, ist ja nicht vorgeschrieben, daß das Tastverhältnis direkt 
proportional zu dem PWM Wert ist.

Codebeispiele für beides gibts hier:
Beitrag "RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung"

/Ernst

von Falk (Gast)


Lesenswert?

@ Maxim (Gast)

> - höhere PWM-Auflösung, um die Abstufungen im dunkleren Bereich
>   zu erhöhen

Ist meist Overkill.

> - eine LUT, die das lineare Verhältnis von Pulsweite und
>   Helligkeit herstellt

>Wobei mit die Idee mit der LUT nicht ganz effektiv vorkommt. Müsste doch

Warum? Das ist doch ganz einfach. UNd vor allem musst du ja nicht eine 
riesige Tabelle mit 256 Einträgen machen. 16 bis 32 reichen.

>sicherlich etwas eleganteres geben. Außerdem muss man die
>Proportionalitätswerte erstmal irgendwie herausfinden.

Das ist leicht.

Die einzelnen Werte unterscheiden sich um den kosntanten Faktor X, für 
den gilt

für eine 8-Bit PWM. N ist dabei die gewünschte Anzahl Stufen. Umgeformt 
heisst das

Die einzelnen PWM-Stufen errechnet man dann einfach, indem man 256 
fortlaufend durch X teilt.

MFG
Falk

von Falk (Gast)


Lesenswert?

Mist, wieso klappt das mit den Formeln nicht?!! :-(

von Εrnst B. (ernst)


Lesenswert?

Hmm... Beim direkt-aufruf von den Formelbildern kriege ich

503 Service Unavailable
 The server is temporarily busy, try again later!

von Wurst (Gast)


Lesenswert?

Hallo!

Hab zwar nicht das selbe Problem, aber es interessiert mich trotzdem.

@Falk: kannst du das nochmals erläutern? Habs noch nicht ganz begriffen.
Sagen wir: wir haben eine 8bit PWM und wir möchten 16 Helligkeitsstufen, 
wie sind nun die Tastverhältnisse zu berechnen?

von Nullpainter (Gast)


Lesenswert?

wir moechten logarithmisch teilen. Dh die Werte sind dann um den Faktor 
exp(log(256)/16) verschieden. Ohne einen Rechner zu haben... Ich fang 
mal an : 1,2,4,8,16,32,64,128,256, oops sind erst 9 stueck. Naja so in 
der Richtung.

von Maxim (Gast)


Lesenswert?

Angenomen ich möchte 100 Abstufungen mit einem 8-Bit-PWM haben.

x=1.057

Die dunkelste Stufe wäre dann also 1*1.057?
Und was sagt mir jetzt dieser Wert?

Ich erkenne schon, dass man der logarithmischen Wahrnehmung des Auges 
mit einem exponentiellen Anstieg der Spannung an der LED entgegenwirken 
kann. Aber ich verstehe noch nicht ganz, wie man das umsetzen könnte.

von Falk (Gast)


Lesenswert?

@ Wurst (Gast)

>Sagen wir: wir haben eine 8bit PWM und wir möchten 16 Helligkeitsstufen,
>wie sind nun die Tastverhältnisse zu berechnen?

OK.

8-PWM mit 256 linearen Stufen.

Die soll unterteilt werden in 16 nichtlineare Stufen, wobei der RELATIVE 
Abstand benachbarter Stufen konstant sein soll. Also

S1*X=S2
S2*X=S3
S3*X=S4
S4*X=S5
S5*X=S6
S6*X=S7
S7*X=S8
S8*X=S9
S9*X=S10
S10*X=S11
S11*X=S12
S12*X=S12
S12*X=S14
S14*X=S15
S15*X=S16

Nach sechzehn Stufen muss 256 rauskommen. Bis dahin haben wir aber 16 
mal mit x multipliziert.

umgestellt nach X

(X = 16te Wurzel aus 256/S1)

Wenn wir S1 mit 1 annehmen ergibt sich für X 1,41.

Kleiner praktischer Tip. Auf den meisten Taschnrechnern gibt es keine 
Funktion für die N-te Wurzel. Wer aber in der Schule nicht nur Kreide 
holen war weiss, dass gilt

( N-te Wurzel aus X = X hoch (1/N) )

Auf dem Windows-Taschenrechner geht das so (umschalten auf 
wissenschaftliche Darstellung)

256
x^y
16
1/x
=

Die PWM-Werte errechnen sich einfach nach obiger Formel.

S1 = 1
S2 = x*S1 = 1,41*1
...

Die konkreten Zahlen sind hier (gerundet) 
1,2,3,4,6,8,11,16,23,32,45,64,91,128,181,256

MfG
Falk

von Wurst (Gast)


Lesenswert?

War in der Schule auch nicht nur Kreide holen, aber nach deiner ersten 
Erklärung war mir nicht ganz klar die du das meinst, aber jetzt hab 
ichs!

Danke!!

von Maxim (Gast)


Lesenswert?

Und 1.41 muss ich ja wiederum in Spannung umsetzen. Also lasse ich z.B. 
1.41uS lang die LED an und danach 256-1.41uS aus?

von Wurst (Gast)


Lesenswert?

Nein, das ist das Verhältniss, wie Falk oben beschriben hat:

zweit hellste Stufe ist also 181, das heisst 181 an, 256 aus.

von Falk (Gast)


Lesenswert?

@ Maxim (Gast)

>Und 1.41 muss ich ja wiederum in Spannung umsetzen. Also lasse ich z.B.
>1.41uS lang die LED an und danach 256-1.41uS aus?

1.41 ist der Faktor zwischen den PWM-Einstellungen! Die Pulsbreite hängt 
von deinem PWM-Takt ab!
Bei ner LED sind 100 Hz PWM-Frequenz ausreichend, also brauchst du 25,6 
kHz PWM-Takt.

MFG
Falk

von Nullpainter (Gast)


Lesenswert?

Genau.

von Wurst (Gast)


Lesenswert?

Genau hab ich mich vertan:
181 an
256-181=75 aus

von Maxim (Gast)


Lesenswert?

Aha, jetzt wird es nochmals verständlicher.

Ich betreibe mein Versuchsaufbau mit dem standard PWM-Modus des ATMega8.

Die dunkelste Einstellung, nämlich 1 Takt ein und 255 Takte aus und die 
zweitdunkelste Einstellung (2 Takte an und 254 aus) unterscheiden sich 
ziemlich extrem. Wenn ich jetzt eine 4-Bit-Auflösung nehme, habe ich 16 
Abstufungen. Somit habe ich genügend Spielraum, um eine lineare 
Abstufung zu realisieren. Das hat ja aber keine Auswirkungen auf die 
Tatsache, dass der Unterschied zwischen 1 und 2 Takten so stark ist. Um 
das auszubessern, müsste ich zwischen den Stufen 1 und 2 noch andere 
einbauen.

Da 16 Abstufungen aber wenig sind (100 sollten es schon sein), muss ich 
zwangsläufig auf eine höhere PWM-Auflösung umsteigen.

Das war jetzt mein Gedankengang zum mitlesen.
Ich hoffe, ihr versteht, was ich meine und es stimmt so.

von Falk (Gast)


Lesenswert?

@ Maxim (Gast)

>Die dunkelste Einstellung, nämlich 1 Takt ein und 255 Takte aus und die
>zweitdunkelste Einstellung (2 Takte an und 254 aus) unterscheiden sich
>ziemlich extrem.

Dann musst du deine PWM auf 9 oder 10 Bit umkonfigurieren. Mit welchem 
Takt betreibst du deine PWM? Es könnte nämlich auch sein, dass bei SEHR 
hohen PWM-Systemtakten (>1MHz) die LED zu langsam schaltet und somit bei 
der PWM-Einstellung von 1 Takt gar nicht richtig leuchtet, bei zwei dann 
aber schon.
>Da 16 Abstufungen aber wenig sind (100 sollten es schon sein), muss ich
>zwangsläufig auf eine höhere PWM-Auflösung umsteigen.

Genau. Das hat aber weniger mit der Anzahl nichtlinearer Stufen als mit 
der Empfindlichkeit des Auges zu tun.

MFG
Falk

von Jankey (Gast)


Lesenswert?

du erkennst mit Freiem Auge bei Einer LED noch 70uA ( zb einer Osram )

von Falk (Gast)


Lesenswert?

To whom it may concern

LED-Fading

MfG
Falk

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.