Un inconveniente del PWM es la imposibilidad de asociar sus valores a un porcentaje de luminosidad determinado. Una lógica lineal nos lleva fácilmente a creer que un valor de 127 equivale a un 50% de brillo pero eso está muy lejos de ser así y, para colmo, varía de un led a otro. Para obtener un resultado próximo al deseado hay que dejar a un lado la linealidad del PWM y centrarnos en el modo en que nuestros ojos perciben el brillo o luminosidad.
Como es un tema que me apasiona voy a tratar de contenerme y no empezar a largar sobre conos, bastones, visión escotópica, fotópica, mesópica y un largo etcétera. Si os apetece ahí está la wikipedia para un resumen o
esta web que lo trata con detalle.
Mejor me centro en las prácticas que hice...
- Coloqué un led blanco (5mm, alto brillo, 20º) en el interior de un bote de plástico negro (de los que contenían los carretes de fotos) y lo dispuse sobre el sensor de un luxómetro de manera que no recibiera otra luz que no fuera la del led.
- Usé un Arduino y fue variando los valores del PWM para crear una tabla en Excel con las mediciones que me daba el luxómetro.
- Repetí la operación con un led tipo piraña (5mm, 100º) y un led Straw Hat (8mm, 120º).
Resultado: No fui capaz de encontrar una pauta que me permitiera extrapolar los datos a la práctica de manera más o menos fíable. Yo buscaba un sistema que me permitiera fraccionar los pasos en valores concretos, de forma similar a como se hace, por ejemplo, al compensar la exposición en una cámara para evitar la sub o sobre exposición de la fotografía.
La intención era rescatar aquellos valores del PWM que implicaran un incremento/disminución exponencial de luminosidad y descartar todos los demás. Por ejemplo: aquellos valores que supusieran 1/16 más de luminosidad que el paso anterior y 1/16 menos que el paso siguiente, entre el apagado y el brillo máximo. Si esta pauta estaba en las tablas yo fui incapaz de verlo.
Y este mismo problema se tiene con el método que propones Chaly, acentuado además por el echo de que el ojo percibe de forma diferente la luminosidad en función del color.
Si se quiere probar, un fotómetro no es el instrumento adecuado. Lo sería un luxómetro o, en su defecto, una simple LDR.
Después fui encontrando por la red algunos modelos que consiguen más o menos lo que en un principio buscaba, partiendo de fórmulas para crear las tablas. Os dejo unos ejemplos:
- función exponencial
Partiendo de una fórmula se crea una tabla de valores (de los 256 posibles del pwm) que suponen un porcentaje de aumento/disminución de luminosidad del led. Por ejemplo podemos indicarle que cada paso irradie 1/3 más de luz que el paso anterior (o 1/8, 1/16... etc) consiguiendo de esta manera que el efecto de fadding sea regular en todo el recorrido. Es similar a la compensación de exposición de las cámaras fotográficas.
http://electromotiveforces.blogspot.com.es/2011/10/led-fading-using-exponentially-changing.html- corrección de Gamma
Si bien la corrección de gamma no sería lo correcto en este caso, la curva resultante es muy similar a la de la percepción de brillo por parte del ojo humano y de ahí que no sea difícil asociarla. Algo de info para crear una tabla:
https://learn.adafruit.com/led-tricks-gamma-correction- espacio de color CIE1931
Es el espacio de color que más se asemeja a nuestra percepción. Info:
https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/http://jared.geek.nz/2013/feb/linear-led-pwmEstos tres modelos generan tablas con valores muy similares en un pwm de 8bits, tanto que, en la práctica, resulta indiferente usar uno u otro.
También sería posible crear una tabla a partir de una función logística, pero el enlace que tengo es el de una web que ya no está en línea y no localizo la información que tenía guardada.
Un inconveniente del uso de tablas es que éstas se generan mediante fórmulas cuyos resultados contienen decimales, que para ser usados por el pwm han de convertirse en enteros, viéndose así reducido notablemente el número de valores diferentes. En un pwm de 8 bits, con un fadding a baja velocidad se aprecian saltos. La relación, si no recuerdo mal, sería de número_de_pasos_pwm/8. Es decir: para un pwm de 8 bits tenemos 256/8 = 32 valores diferentes como máximo.
Para conseguir una transición de luminosidad suave o un control sobre el color medianamente preciso el pwm debería ser al menos de 12bits.
un saludo