Forum: Mikrocontroller und Digitale Elektronik Eingebaute "Gamma-Korrektur" in WS2812


von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

Nachdem ich schon vor zwei Jahren beobachtet habe*, dass der 
Zusammenhang zwischen PWM-Wert und Helligkeit in der WS2812 nicht linear 
ist, habe ich heute noch einmal ein paar Messungen gemacht.

Dazu habe ich einen umgebungslichtsensor sensor genutzt (BH1750), um die 
zeitlich gemittelte Helligkeit von unterschiedlichen RGB LEDs zu messen. 
Das Ergebnis ist im angehängten Plot zu sehen.

SK6812 und TX1812 bilden den PWM Setzwert linear auf die Helligkeit ab, 
während die WS2812 bei kleinen Werten einen geringeren Anstieg hat bei 
höheren Werten aufholt.

Technische ist das anscheinend realisiert, in dem der 8 bit Eingangswert 
in einen 11bit PWM-Wert umgerechnet wird.

Vermutlich will man so erreichen, dass das Dimming für niedrige PWM 
Werte besser mit der wahrgenommenen Helligkeit skaliert (Gamma). 
Allerdings handelt es sich nicht um eine echte Gamma-Funktion, was dazu 
führt, dass die Farbwidergabe ungenau wird.

Hat jemand eine Idee, was das für eine Abbilungsfunktion sein könnte? 
Sie muss sich auf jeden Fall einfach in Hardware umsetzen lassen. Oder 
was das ganze sonst soll? Interessant ist, dass es im Datenblatt seit 10 
Jahren nicht erwähnt wird...

*https://cpldcpu.wordpress.com/2020/12/19/power-analysis-probing-ws2812-rgb-leds/

von c-hater (Gast)


Lesenswert?

Tim  . schrieb:

> Dazu habe ich einen umgebungslichtsensor sensor genutzt (BH1750), um die
> zeitlich gemittelte Helligkeit von unterschiedlichen RGB LEDs zu messen.
> Das Ergebnis ist im angehängten Plot zu sehen.

Vergiss' deine Messungen. Oder die Ansteuerung deiner WS2812.

> Technische ist das anscheinend realisiert, in dem der 8 bit Eingangswert
> in einen 11bit PWM-Wert umgerechnet wird.

Nein. Die WS2812 haben keinerlei Gammakorrektur. Richtig angesteuert, 
ist der Zusammenhang zwischen Helligkeit und PWM-Wert linear.

> Interessant ist, dass es im Datenblatt seit 10
> Jahren nicht erwähnt wird...

Liegt daran, dass es eine derartige Funktion halt auch wirklich nicht 
gibt.

von Tim  . (cpldcpu)


Lesenswert?

c-hater schrieb:
> Tim  . schrieb:
>
>> Dazu habe ich einen umgebungslichtsensor sensor genutzt (BH1750), um die
>> zeitlich gemittelte Helligkeit von unterschiedlichen RGB LEDs zu messen.
>> Das Ergebnis ist im angehängten Plot zu sehen.
>
> Vergiss' deine Messungen. Oder die Ansteuerung deiner WS2812.

Die Messungen sind korrekt. Das Verhalten lässt sich sowhl über den PWM 
(siehe Link), als auch über die Helligkeit (siehe plots) beobachten.

>> Technische ist das anscheinend realisiert, in dem der 8 bit Eingangswert
>> in einen 11bit PWM-Wert umgerechnet wird.
>
> Nein. Die WS2812 haben keinerlei Gammakorrektur. Richtig angesteuert,
> ist der Zusammenhang zwischen Helligkeit und PWM-Wert linear.

Falsch. Bitte selber nachmessen.

von c-hater (Gast)


Lesenswert?

Tim  . schrieb:

> Die Messungen sind korrekt.

Dann passt die Ansteuerung wohl nicht.

> Falsch. Bitte selber nachmessen.

Vor Jahren bereits erledigt, wenn auch eigentlich in einem anderen Zshg.

von Labdoc (Gast)


Lesenswert?

Hmm das Thema kommt mir irgendwie bekannt vor. Gab es nicht mal eine 
Frage, nach welchem Strom einer bestimmten Helligkeit bei der WS2812 
entspricht? Was sich dann am Ende auch als ziemlicher Blödsinn heraus 
gestellt hat.

von Tim  . (cpldcpu)


Lesenswert?

c-hater schrieb:
> Tim  . schrieb:
>
>> Die Messungen sind korrekt.
>
> Dann passt die Ansteuerung wohl nicht.

Doch, denn die Referenzbauteile verhalten sich linear.

>> Falsch. Bitte selber nachmessen.
>
> Vor Jahren bereits erledigt, wenn auch eigentlich in einem anderen Zshg.

Zeig doch mal Deine Messungen.

von c-hater (Gast)


Lesenswert?

Tim  . schrieb:

>> Dann passt die Ansteuerung wohl nicht.
>
> Doch, denn die Referenzbauteile verhalten sich linear.

Was'n das für'n Schwachsinn? Die Referenzbauteile werden doch wohl 
hoffentlich anders angesteuert als die WS2812? Also ich jedenfalls würde 
sowohl SK6812 als auch TX1812 anders ansteuern als WS2812, aus dem 
einfachen Grund, weil das UNUNMGÄNGLICH ist...

von Tim  . (cpldcpu)


Lesenswert?

c-hater schrieb:
> Was'n das für'n Schwachsinn? Die Referenzbauteile werden doch wohl
> hoffentlich anders angesteuert als die WS2812? Also ich jedenfalls würde
> sowohl SK6812 als auch TX1812 anders ansteuern als WS2812, aus dem
> einfachen Grund, weil das UNUNMGÄNGLICH ist...

Die Bauteile unterstützen das gleiche Protokoll mit kompatiblem Timing. 
Daher ist die Ansteuerung identisch.

von c-hater (Gast)


Lesenswert?

Tim  . schrieb:

> Die Bauteile unterstützen das gleiche Protokoll mit kompatiblem Timing.

Das ist ja mal 'ne spannende Behauptung. Ich sehe da nämlich ganz 
erhebliche Unterschiede.

von Ron-Hardy G. (ron-hardy)


Lesenswert?

c-hater schrieb:
> Das ist ja mal 'ne spannende Behauptung. Ich sehe da nämlich ganz
> erhebliche Unterschiede.

Bitte erhelle uns

von Tim  . (cpldcpu)


Lesenswert?

c-hater schrieb:
> Tim  . schrieb:
>
>> Die Bauteile unterstützen das gleiche Protokoll mit kompatiblem Timing.
>
> Das ist ja mal 'ne spannende Behauptung. Ich sehe da nämlich ganz
> erhebliche Unterschiede.

Bitte konkrete Beispiele.

von Ron-Hardy G. (ron-hardy)


Lesenswert?

ok,die verschiedenen data transmission times für low und high 
unterscheiden sich marginal

von Labdoc (Gast)


Lesenswert?

Also, mit ein wenig googlen findet man auch weitere Referenzmessungen 
zur WS2812. Da sind sie stehst linear. Somit wohl doch ehr ein Problem 
mit deinem Aufbau?

Wie steuerst du die WS2812 an? Ein paar Bibliotheken bieten zum Beispiel 
eingebaute Gamma Korrektur.

von Tim  . (cpldcpu)


Lesenswert?

Labdoc schrieb:
> Also, mit ein wenig googlen findet man auch weitere Referenzmessungen
> zur WS2812. Da sind sie stehst linear. Somit wohl doch ehr ein Problem
> mit deinem Aufbau?

Hast Du da einen Link?

> Wie steuerst du die WS2812 an? Ein paar Bibliotheken bieten zum Beispiel
> eingebaute Gamma Korrektur.

Ws2812_light library, bzw. RP2040 PIO im neuen Aufbau. Beide geben 
direkt die Rohdaten aus.

: Bearbeitet durch User
von Labdoc (Gast)


Lesenswert?


von Wolfgang (Gast)


Lesenswert?

c-hater schrieb:
> Das ist ja mal 'ne spannende Behauptung. Ich sehe da nämlich ganz
> erhebliche Unterschiede.

Was hat denn die Übertragung der Daten mit dem mittleren Lichtstrom zu 
tun?
Solange der digitale Wert für die Helligkeitssteuerung heil beim 
LED-Controller ankommt, ist doch völlig egal, wie das Protokoll den Wert 
im Detail überträgt.

von Tim  . (cpldcpu)


Lesenswert?

Labdoc schrieb:
> http://rgb-123.com/ws2812-color-output/

Interessant! Der Plot zeigt genau die gleiche Nichtlinearität, wie man 
am Knick um den PWM-Wert 25 herum sehen kann. (Eigentlich sogar noch 
schlimmer, da deutlich droop im höheren Bereich sichtbar ist. 
Wahrschienlich keine gute Stromversorgung, oder self-heating)

http://ohararp.com/wp/wp-content/uploads/2013/05/FullRGB.jpg

> "You can see that for the most part the output is fairly linear over the full 8 
bit pwm range of the WS2812.FullRGB"

"Fairly linear" ist halt nicht ganz linear.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Labdoc schrieb:
> http://rgb-123.com/ws2812-color-output/

Es fehlt eine Messung zur Prüfung der Linearität des TCS34717 (z.B. über 
geometrische Abschwächung).

von Labdoc (Gast)


Lesenswert?

Stimmt, war mir gar nicht aufgefallen, dass da unten auch ein Knick ist.

von Der Zahn der Zeit (🦷⏳) (Gast)


Lesenswert?

Wenn es tatsächlich nur um die kleine Nichtlinearität zwischen 0 und 
20/255 handelt: Das hat wahrlich nichts mit Gammakorrektur zu tun. 
Gammakorrektur bedeutet eine exponentielle Kennlinie über den gesamten 
Bereich. Ich denke, dass das weitgehend bekannt hier ist.

Diese kleine Nichtlinearität halte ich schlicht und ergreifend für einen 
ungewollten Effekt, der sich nur mit erhöhtem Aufwand in der LED 
vermeiden ließe. Oder beim Design einfach verschlampt und nicht erkannt 
oder als irrelevant eingestuft wurde. Erklären kann ich ihn nicht, einen 
Sinn sehe darin ich auch nicht.

von Wolfgang (Gast)


Lesenswert?

Der Zahn der Zeit (🦷⏳) schrieb:
> ... einen Sinn sehe darin ich auch nicht.

Sinn wäre, dass sich die Helligkeit im unteren Bereich feiner einstellen 
lässt.

von Der Zahn der Zeit (🦷⏳) (Gast)


Lesenswert?

Wolfgang schrieb:
>> ... einen Sinn sehe darin ich auch nicht.
>
> Sinn wäre, dass sich die Helligkeit im unteren Bereich feiner einstellen
> lässt.
Hmmmm... Wenn man das angestrebt hätte, hätte man doch wohl keine 
fußkranke Kennlinie, sondern eine anständige Gamma-Charakteristik 
realisiert. Aber vielleicht haben die Designer später auch gedacht, "Hey 
guys, that's not a bug, it's a feature!" (Natürlich in Japanisch und 
korrekt gegendert.)

Mich würde mal interessieren, wie die Kennlinie bei den LED-Panels, mit 
denen ganze Video-Bildschirme realisierbar sind, aussieht. Bei denen 
wird ja extern durch die Ansteuerung die PWM definiert. Daher sollte die 
(weitgehend) linear sein.

von Der Zahn der Zeit (🦷⏳) (Gast)


Lesenswert?

Der Zahn der Zeit (🦷⏳) schrieb:
> Aber vielleicht haben die Designer später auch gedacht, "Hey
> guys, that's not a bug, it's a feature!"
... und dann hätten sie es auch im Datenblatt beschrieben!

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Ich vermute dass der flache Verlauf bei niedrigen Werten auf einen 
langsamen Stromanstieg der internen Konstantstromquellen zurückzuführen 
ist. Erst wenn die ON-Zeit der PWM größer ist als die Anstiegszeit der 
KSQ setzt eine Linearität ein.

von Tim  . (cpldcpu)


Lesenswert?

Magnus M. schrieb:
> Ich vermute dass der flache Verlauf bei niedrigen Werten auf einen
> langsamen Stromanstieg der internen Konstantstromquellen zurückzuführen
> ist. Erst wenn die ON-Zeit der PWM größer ist als die Anstiegszeit der
> KSQ setzt eine Linearität ein.

So einen Effekt gibt es bei der WS2812B-V5 auch, und der führt dazu, 
dass die LED bei PWM settings <3 gar nicht einschaltet.

Die Nichtlinearität oben wird allerdings im Digitalteil erzeugt, denn 
sie beeinflusst direkt den Duty-Cycle des Signals.

von Tim  . (cpldcpu)


Lesenswert?


von 888 (Gast)


Lesenswert?

Tim  . schrieb:

> SK6812 und TX1812 bilden den PWM Setzwert linear auf die Helligkeit ab,
> während die WS2812 bei kleinen Werten einen geringeren Anstieg hat bei
> höheren Werten aufholt.

Bei sehr kurzem Tastgrad der PWM dominiert die Anstiegs- und Abfallzeit 
des Pulses. Damit ist die Zeit, in der die Flußspannung der LED 
überschritten wird und diese leuchtet, kürzer als die Einschaltdauer, 
und die LED erscheint dunkler (oder leuchtet gar nicht mehr). Dieser 
Effekt hängt von Exemplarstreuungen und von der Temperatur des Bauteils 
ab.

von Der Zahn der Zeit (🦷⏳) (Gast)


Lesenswert?

Tim  . schrieb:
> Habe meine Messungen hier zusammengefasst:
Diese Fußkrankheit der Kennlinie als Gamma-Korrektur zu bezeichnen, wäre 
wirklich Blödsinn. Ich würde in der Überschrift eher formulieren "The 
WS2812 has  no integrated Gamma-Correction". Sonst ist sie irreführend.

Magnus M. schrieb:
> Ich vermute dass der flache Verlauf bei niedrigen Werten auf einen
> langsamen Stromanstieg der internen Konstantstromquellen zurückzuführen
> ist. Erst wenn die ON-Zeit der PWM größer ist als die Anstiegszeit der
> KSQ setzt eine Linearität ein.
Das klingt sehr plausibel! Ich hatte schon an Kapazitäten gedacht, 
aber dann würde die Kennlinie anders aussehen. Dieser absichtlich 
langsame Stromanstieg wäre auch ein plausibler Grund, um die die 
Stromtransienten der PWM (EMV durch induktive Anteile der 
Stromversorgung) zu reduzieren und damit auch mit weniger 
Stützkondensatoren auszukommen. Ich wette, deine Vermutung stimmt!

Das müsste sich gut mit Oszillografieren der Stromaufnahme der LED bzw. 
des LED-ICs nachweisen lassen!

von Tim  . (cpldcpu)


Lesenswert?

Der Zahn der Zeit (🦷⏳) schrieb:
> Tim  . schrieb:
>> Habe meine Messungen hier zusammengefasst:
> Diese Fußkrankheit der Kennlinie als Gamma-Korrektur zu bezeichnen, wäre
> wirklich Blödsinn. Ich würde in der Überschrift eher formulieren "The
> WS2812 has  no integrated Gamma-Correction". Sonst ist sie irreführend.

Der Titel ist eine Frage... :)

> Magnus M. schrieb:
>> Ich vermute dass der flache Verlauf bei niedrigen Werten auf einen
>> langsamen Stromanstieg der internen Konstantstromquellen zurückzuführen
>> ist. Erst wenn die ON-Zeit der PWM größer ist als die Anstiegszeit der
>> KSQ setzt eine Linearität ein.
> Das klingt sehr plausibel! Ich hatte schon an Kapazitäten gedacht,
> aber dann würde die Kennlinie anders aussehen. Dieser absichtlich
> langsame Stromanstieg wäre auch ein plausibler Grund, um die die
> Stromtransienten der PWM (EMV durch induktive Anteile der
> Stromversorgung) zu reduzieren und damit auch mit weniger
> Stützkondensatoren auszukommen. Ich wette, deine Vermutung stimmt!
>
> Das müsste sich gut mit Oszillografieren der Stromaufnahme der LED bzw.
> des LED-ICs nachweisen lassen!

Das habe ich gemacht, siehe auch den link im OP. Ich habe noch einmal 
ein Oszilloskopbild in den neuen Artikel eingefügt, welches zeigt dass 
die Anstiegszeit nichts mit dem beobachteten Effekt zu tun hat. Es 
handelt sich um ein Feature im Digitalen Design.

: Bearbeitet durch User
von Labdoc (Gast)


Lesenswert?

Jetzt müsstest du eigentlich mal hingehen und mit einer schnellen 
Fotodiode schauen, wie sich Tastverhältnis und Frequenz der PWM über den 
Bereich verhalten. Den Knick könnte man ja auf 3 Ursachen schieben.

1. Der Strom durch den Emitter ist nicht über alle PWM Stufen konstant
2. Das Tastverhältnis ist im Knick nicht linear, wie in den oberen 
Stufen
3. Die Frequenz der PWM ist im Knick eine andere.

von Tim  . (cpldcpu)


Lesenswert?

Labdoc schrieb:
> 1. Der Strom durch den Emitter ist nicht über alle PWM Stufen konstant

Der Strom ist konstant.

> 2. Das Tastverhältnis ist im Knick nicht linear, wie in den oberen
> Stufen

Genau das ist der Fall, scheint also im Digitalteil so vorgesehen zu 
sein.

> 3. Die Frequenz der PWM ist im Knick eine andere.

Das sollte, in gewissen Rahmen, aber keine Auswirkungen haben, wenn das 
Tastverhältnis konstant ist.

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.