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.
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.
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
@ 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
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?
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.
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.
@ 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
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!!
@ 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
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.
@ 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