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
Mist, wieso klappt das mit den Formeln nicht?!! :-(
Hmm... Beim direkt-aufruf von den Formelbildern kriege ich 503 Service Unavailable The server is temporarily busy, try again later!
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!!
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?
Nein, das ist das Verhältniss, wie Falk oben beschriben hat: zweit hellste Stufe ist also 181, das heisst 181 an, 256 aus.
@ 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
Genau hab ich mich vertan: 181 an 256-181=75 aus
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.