Autor Tema: Cambiar la luminosidad de unos leds  (Leído 1268 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3706
Cambiar la luminosidad de unos leds
« en: 06 de Septiembre de 2020, 14:09:48 »
Hola amigos,

Estoy desarrollando un nuevo proyecto dónde desde un pic se van a manejar una serie de salidas. Las salidas serán unos leds de alta luminosidad y entre los pines del pic y los leds tenía previsto colocar unos integrados ULN2803.

Por otra parte tendré un fotorresistor (LDR) que dependiendo de la luz ambiental que reciba se pueda variar la luminosidad de los leds.
En todo momento como máximo habrá solo 2 diodos leds iluminados de forma permanente y otros 2 que irán parpadeando.
La secuencia de encendido de los leds la tengo conseguida por programa en el pic, pero me encuentro que no doy con la solución hardware para que dependiendo de la luz ambiental captada por la LDR pueda variar la luminosidad de los leds. Es decir, entiendo que sería reduciendo la tensión que le llegaría a los leds

Adjunto un esquema de como serían las conexiones y lo que me falta es lo que podría ir dentro del rectángulo es lo que me gustaría realizar. Por cierto la denominación de los leds en el esquema adjunto es errónea, me limite a copiar los leds.

Habia pensado en realizarlo con un comparador, con un operacional, de forma que varié la salida dependiendo del valor de la resistencia LDR pero no veo, en Proteus, que los valores me puedan valer.

¿Alguno seria amable de proporcionare un ayuda o guía por donde proseguir?
Muchas gracias de antemano.
F.

P.D.: Aprovechando la consulta. ¿alguien que domine Proteus me puede decir que representa la numeración que se ve en el display del dispositivo LDR que incorpora Proteus? ¿Es la luminosidad o la resistencia?
« Última modificación: 06 de Septiembre de 2020, 14:14:30 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1245
Re:Cambiar la luminosidad de unos leds
« Respuesta #1 en: 07 de Septiembre de 2020, 13:12:37 »
Que tal Fer_TACA,

Mi sugerencia sería que realizaras un generador de onda triangular con operacionales y la salida la conectas a la entrada - de un comparador (LM311 por ejemplo) y en la entrada + conectas un divisor de tensión formado por una resistencia y tu LDR. La salida del comparador la usas para activar un transistor PNP cuyo emisor lo conectas a VDD y tu colector al ánodo común de tus leds.
Con esto lo que estas haciendo es un generador de PWM que varía su cliclo de trabajo dependiendo de la cantidad de luz.
Con respecto a tu pregunta del LDR en proteus, lo que ves ene l recuador es la antidad de luxes y este va de 1 hasta 1000. Pero si le das click derecho sobre el LDR encontrarás la seccion de advanced properties y cambias la opción Light Source por Resistence at 1Lux. Eso te permite colocar el valor de resistencia por cada LUX, así por ejemplo si tu LDR es de 100Kohms, entonces la resistencia por cada luz es de 100.

 

* LDR_set.JPG
(40.23 kB, 491x396 - visto 123 veces)


 

* PWM.JPG
(81.07 kB, 636x447 - visto 127 veces)


Espero haberme explicado.

Saludos,

elreypic

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8121
Re:Cambiar la luminosidad de unos leds
« Respuesta #2 en: 07 de Septiembre de 2020, 13:28:21 »
El led se maneja con corriente no con voltaje, su voltaje es fijo.

Asi como esta conectado, la cantidad de leds encendidos varia la corriente que pasa por el LDR, y por lo tanto su caída de tensión, haciendo que al activar otro led, la corriente disminuya en los leds. Es decir, mientras mas leds encendes, mas baja el brillo, aunque ya definiste que son 2 leds como maximo.

Lo mas sencillo seria el LDR al ADC del PIC y luego controlar mediante PWM el brillo, conmutando un MOSFET donde se encuentra el LDR en tu esquema. Esto ya que el ULN no tiene algo que ponga en tri-state las salidas. Sino te ahorrarias del MOSFET. Pero seguramente usas el ULN debido a un alto consumo, ya que no das informacion de la corriente/tension de los leds, ni tension de alimentacion.

A no ser que estés buscando una solución que no se encuentre basada en que sea el PIC quien lo controle..
« Última modificación: 07 de Septiembre de 2020, 13:37:34 por KILLERJC »

Desconectado Fer_TACA

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3706
Re:Cambiar la luminosidad de unos leds
« Respuesta #3 en: 07 de Septiembre de 2020, 17:27:36 »
Gracias Elreypic2 y Killerjc por vuestras respuestas.

Veo que quizás no me expliqué muy bien. En lo que en el esquema del primer post  dentro de un rectángulo quería indicar era como un pequeño diagrama de bloques. Evidentemente se que de ese modo no podría conectar el LDR.

Lo que he estado investigando es lo que adjunto en este segundo esquema. En el cual con RV2 podría ajustar el máximo de luminosidad a conseguir a un determinado nivel de luz ambiental, y RV1 se sustituiría por la LDR de forma que al aumentar la luz ambiental la resistencia de la LDR disminuiría y por consiguiente la polarización de base del transistor subiría de esta forma la corriente a suministrar a los leds aumentaría. Luego si disminuye la luz ambiental la resistencia sube, baja la polarización de base del transistor y por tanto la corriente a suministrar bajaría y por tanto su luminosidad.
Al simularlo en Proteus, veo que la corriente se mantiene constante con los valores que se vaya seleccionando tanto con Rv2(ajuste luminosidad máximo) y RV1(simulación de LDR). Al final del post está el esquema.

¿Cómo lo ven?

Killerjc:
Lo mas sencillo seria el LDR al ADC del PIC y luego controlar mediante PWM el brillo, conmutando un MOSFET donde se encuentra el LDR en tu esquema. Esto ya que el ULN no tiene algo que ponga en tri-state las salidas. Sino te ahorrarias del MOSFET. Pero seguramente usas el ULN debido a un alto consumo, ya que no das informacion de la corriente/tension de los leds, ni tension de alimentacion.
A no ser que estés buscando una solución que no se encuentre basada en que sea el PIC quien lo controle..

Creo que al final los leds serán unos que van a consumir unos 25mA cada uno. El este segundo esquema puedes ver que parto de una  alimentación de 12V d.c.
Me he inclinado por una solución que el brillo no se controle por el pic debido a que no sé exactamente que LDR se va a usar y por tanto su valor óhmico. Al no disponer de este dato no podría utilizar el AD.

Elreydelpic2:
Que tal Fer_TACA,

Mi sugerencia sería que realizaras un generador de onda triangular con operacionales y la salida la conectas a la entrada - de un comparador (LM311 por ejemplo) y en la entrada + conectas un divisor de tensión formado por una resistencia y tu LDR. La salida del comparador la usas para activar un transistor PNP cuyo emisor lo conectas a VDD y tu colector al ánodo común de tus leds.
Con esto lo que estas haciendo es un generador de PWM que varía su cliclo de trabajo dependiendo de la cantidad de luz.
Con respecto a tu pregunta del LDR en proteus, lo que ves ene l recuador es la antidad de luxes y este va de 1 hasta 1000. Pero si le das click derecho sobre el LDR encontrarás la seccion de advanced properties y cambias la opción Light Source por Resistence at 1Lux. Eso te permite colocar el valor de resistencia por cada LUX, así por ejemplo si tu LDR es de 100Kohms, entonces la resistencia por cada luz es de 100.
Espero haberme explicado.
Saludos,
elreypic

Gracias por el esquema lo probaré haber el resultado.
Entonces si pongo un valor de 100 en "Light Source por Resistence at 1Lux" si la LDR es de 100Kohms ¿quiere decir que cuando el display marque 1000 el valor de la resistencia de la LDR es 100Kohmios y que por ejemplo si marca el display 100 la resistencia de la LDR seria de 10Kohmios?

F.
« Última modificación: 07 de Septiembre de 2020, 17:29:49 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 513
Re:Cambiar la luminosidad de unos leds
« Respuesta #4 en: 07 de Septiembre de 2020, 17:32:47 »
...La secuencia de encendido de los leds la tengo conseguida por programa en el pic, pero me encuentro que no doy con la solución hardware para que dependiendo de la luz ambiental captada por la LDR pueda variar la luminosidad de los leds. Es decir, entiendo que sería reduciendo la tensión que le llegaría a los leds
Dudo que se pueda implementar una solución por hardware que resulte satisfactoria en un rango grande de iluminación. Esto es de oscuridad absoluta a estar al sol los leds se vean siempre bien sin un brillo (o falta) excesivo.

Calculo que te va a convenir leer el LDR, ya sea por ADC o formando un oscilador si no tiene,  y en función de eso manejar una salida PWM que alimente el común de todos los leds.

Citar
P.D.: Aprovechando la consulta. ¿alguien que domine Proteus me puede decir que representa la numeración que se ve en el display del dispositivo LDR que incorpora Proteus? ¿Es la luminosidad o la resistencia?

Como ya te dijeron es la iluminación en Lux que recibe.

El modelo responde a la ecuación  R = R_1 * (Lux)^k * H(lambda)
donde
R_1: Resistencia a 1 Lux
k:     Constante del LDR. 
H(lambda):  Función que depende de la longitud de onda que no conozco cual usa. 

En mi versión tienen un valor por defecto de 127410ohms , -0.8582 y 550nm respectivamente.

Proteus te permite asignar un valor a estos parámetros de acuerdo a tu LDR y variar manualmente los lux.

También seleccionando AdvancedProperties->LightSource->External  , donde  tenés que tener un nodo etiquetado LUXIN y su voltaje corresponderá al número de lux.   Esta sirve para simular un circuito realimentado.

El problema está en que este modelo es muy simplificado y necesitarías un ensayo para ver hasta donde aproxima tu LDR.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3706
Re:Cambiar la luminosidad de unos leds
« Respuesta #5 en: 07 de Septiembre de 2020, 17:35:58 »
Gracias Eduardo por tu respuesta.

Creo que respondí a las respuestas anteriores justo antes de colocar el tuyo.

F.
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3706
Re:Cambiar la luminosidad de unos leds
« Respuesta #6 en: 07 de Septiembre de 2020, 17:40:41 »
Adjunto el fichero de Proteus por si alguien quiere simularlo.
Todos los días se aprende algo nuevo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8121
Re:Cambiar la luminosidad de unos leds
« Respuesta #7 en: 08 de Septiembre de 2020, 11:47:11 »
Citar
¿Cómo lo ven?

De forma lineal no considero que exista una forma sencilla de realizarlo,

Ya que uno no puede limitar la corriente a una cierta cantidad, ya que cuando se encienda otro led, este va a tener que modificarse. Por ejemplo, si regulamos 40mA para que ambos diodos consuman 20mA cada uno de forma ideal (es decir 40mA por tu transistor) , al momento que apagas un led, deberías modificar ese limite a 20mA. Eso hace a tu circuito dependiente de la cantidad de leds activos. Esto no es problema si tenes un solo led.
La que te quedaría seria varios transistores regulando cada uno de los diodos y manejando la base.. Lo cual no tiene mucho sentido por la complejidad..., y mas cuando tenes ya varios transitores en el ULN.

Si realiza un switching, necesitas un oscilador como te dijo Eduardo2, y que el LDR lo controle. Pero primero hay que ver si el LDR solo es capaz de manejar el rango en funcion de la variacion de la resistencia del mismo, respecto a la variacion de la resistencia que vos necesites para modificar el duty de tu oscilador, si no necesitas de otra parte del circuito. Y la complejidad aumenta.

Por eso la idea mas sencillo y rapida y menos compleja es la de usar un PWM del PIC y una entrada de ADC.

La otra que pensaba, era usar un shitf-register con 3-state, pero los mas comunes tienen un maximo de 25mA por salida. Era para usar el Output-Enable como switching. El problema es la corriente.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3706
Re:Cambiar la luminosidad de unos leds
« Respuesta #8 en: 08 de Septiembre de 2020, 16:06:51 »
Yo lo que veo, cuando lo simulo con Proteus, es que si por cada led se consumen pongamos 24mA, por cada rama de activación de cada led circula esa corriente y lo único que varia es la corriente total que es suministrada por el transistor.
Regulo la corriente máxima para cada led y según se van iluminando la corriente aumenta a través del transistor. Después al aumentar la resistencia de la LDR la tensión de base disminuye y por tanto la corriente. De esa manera la luminosidad disminuye.
Ver imagen adjunta.

¿En que me equivoco? Perdón pero con la analógica estoy un poco oxidado.

F.
« Última modificación: 08 de Septiembre de 2020, 16:55:50 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 573
Re:Cambiar la luminosidad de unos leds
« Respuesta #9 en: 10 de Septiembre de 2020, 05:51:47 »
Por más que te quieras complicar, la mejor solución, simple, breve, barata, y fácil de implementar es la lectura del ldr mediante un adc del pic y el comando de todos los led mediante un pwm también del pic.

  Con el rango del pwm de 8 bits tienes 256 distintos niveles de intensidad desde completamente apagado a completamente encendido.

  El pwm lo conmutas con uno o varios mosfet dependiendo del número de leds y del consumo.

  Eso es lo que yo haría.   Ahora si te quieres complicar con operacionales y demás pues ale...... 

  Un saludo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8121
Re:Cambiar la luminosidad de unos leds
« Respuesta #10 en: 10 de Septiembre de 2020, 12:05:59 »
Creo que ya quedo en claro que era lo mejor.

Citar
¿En que me equivoco? Perdón pero con la analógica estoy un poco oxidado.

El equivocado soy yo...
Pensé que era un PNP, pero veo que es un NPN puesto como colector común, lo cual estaría funcionando como seguidor de tensión, prácticamente estas manejando la tensión del paralelo. de los leds. El cual en tu imagenes es  (8.7V -0.6V base-emisor -Vsat ULN) como tension en tu resistencia-led.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3706
Re:Cambiar la luminosidad de unos leds
« Respuesta #11 en: 10 de Septiembre de 2020, 13:36:17 »
Gracias por las nuevas respuestas, remi04 y Killerjc.

Si, entiendo lo de la PWM y quizás será la implementación final. Solamente que al inicio me salio la idea de controlarlos de manera analógica y como dije que debo estar un poco oxidado con su manejo, se me ocurrió ver que podía sacar en claro con ello.

F.
Todos los días se aprende algo nuevo.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2289
Re:Cambiar la luminosidad de unos leds
« Respuesta #12 en: 12 de Septiembre de 2020, 13:12:11 »
Me he inclinado por una solución que el brillo no se controle por el pic debido a que no sé exactamente que LDR se va a usar y por tanto su valor óhmico. Al no disponer de este dato no podría utilizar el AD.
En cualquier caso siempre vas a necesitar una calibración de la LDR para determinar los niveles mínimo y máximo de luz ambiente, y esto será más fácil hacerlo vía programación que de otra manera.

Yo también creo que la opción PWM es lo más sencillo y práctico en este caso.

Y, ya que estamos, voy a soltar un puto rollo voy a comentar alguna cosilla sobre el uso de control de luminosidad led mediante PWM porque hay algún que otro error que veo repetirse continuamente, y desde hace años.

  Con el rango del pwm de 8 bits tienes 256 distintos niveles de intensidad desde completamente apagado a completamente encendido.

Esto es cierto y falso a la vez. Es cierto porque si utilizas un medidor podrás ver que las candelas irradiadas por el led aumentan a medida que aumenta el ancho de pulso, aunque no lo hagan de manera lineal dado que la curva de brillo es logarítmica, y es falso debido a nuestra percepción del brillo (o luminosidad), también logarítmica.
No sólo percibimos un porcentaje de luminosidad mayor que la emitida, además a partir de un cierto nivel de brillo somos incapaces de distinguir los cambios. De los 256 valores posibles tenemos una buena respuesta al 50% inferior y muy pobre en la parte superior, en la que una buena parte de los valores 'se pierden'.

Como referencia de base podemos tomar la fórmula: Brillo percibido = sqr(Brillo emitido) * 10
Según ésta, un brillo del 10% será percibido como algo próximo al 32% y, si damos por válido que un valor de PWM del 50% (127) se corresponde como un valor de brillo emitido también del 50% nuestra percepción sería en realidad la de un 70% de brillo.

En la práctica, gestionar un panel de leds mediante PWM significa que los valores 1..127 determinan el 70% del brillo y 128..255 el 30% restante. Si queremos basar este control en la lectura de la luz ambiente nos puede pasar que grandes cambios en la misma no supongan, en apariencia, cambio alguno en el brillo.

Hace unos años estuve un tiempo batallando con este tema y encontré (y probé) algunas soluciones, con mayor o menor fortuna, eso sí. Básicamente se trata de obtener una curva antilogarítmica en sustitución de la curva lineal de entrada (PWM) que, combinada con la curva logarítmica de salida de lugar a una impresión de cambio lineal en el brillo.

Digo que con mayor o menor fortuna porque para obtener una transición de luz suave es necesario contar al menos con un PWM de 10 bits para alguna de las soluciones que encontré, y en otros casos se aplican fórmulas que dejan al pic en estado catatónico.

Y bueno, creo que ya llega de rollo. Si a alguien le interesa puedo comentar como crear alguna tabla de valores para obtener incrementos de luz proporcionales y quizá alguna cosa más...

un saludo

Desconectado Fer_TACA

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3706
Re:Cambiar la luminosidad de unos leds
« Respuesta #13 en: 12 de Septiembre de 2020, 14:32:18 »
Bueno siguiendo los consejos al final iré por el uso del PWM.
He estado realizando algunas pruebas al respecto y aunque el programa no está terminado pues solo he probado con 3 de los 12 leds posibles me encuentro con el siguiente problema que paso a indicar porque seguro que me van a poder echar una mano ya que mi parte analógica está ya muy olvidada:

Les adjunto el esquema de mis conexiones y el problema esta en lo siguiente:
- Tengo un programa que cuenta los segundos y produce el parpadeo en una serie de leds. Hasta aquí todo bien. Se puede ver en la figura adjunta
- Por otra parte, para probar he colocado un potenciómetro en una entrada analógica del PIc y genero una PWM. Todo bien hasta aquí. Se puede ver en la figura adjunta.
- A partir de una tension de 3,3V la llevo al drenador de un mosfet cuya puerta está unida a la salida de la señal PWM y el source debería llevarlo a los ánodos de los leds para comandar la luminosidad de los leds. Al menos eso creo que debería ser así.
- Bien si realizo las uniones indicadas en el punto anterior, los segundos dejan de contarse y se quedan parados, lo mismo que el parpadeo de los leds, aunque la PWM sigue funcionando. Ahora bien si lo conecto a los 5V de alimentación del pic los ánodos de los leds, como están en la figura el sistema funciona bien, pero evidentemente no puedo regular la luminosidad de los leds.
- Si la fuente de alimentación de los leds en vez de 3,3V le pongo a 5V. El contador de los segundos tampoco funciona.

Seguro que estoy realizando alguna conexión mal o me falta algo en mi esquema para que funcione con el mosfet.
¿me pueden ayudar en ello?
Gracias por anticipado.
F.

Xocas: Te agradeceria de disponeer del orecimiento de la tabla.
« Última modificación: 12 de Septiembre de 2020, 14:34:53 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2289
Re:Cambiar la luminosidad de unos leds
« Respuesta #14 en: 13 de Septiembre de 2020, 07:11:28 »
Te comento la solución que todavía recuerdo de memoria y, creo, me será la más fácil de explicar. Después haré una búsqueda entre la información que conservo para que veas otras posibilidades.

No se busca una transición suave (tipo fade-in, fade-out) sinó una serie de pasos de luz que mantengan una proporcionalidad entre sí.

La fórmula:
2 ^ (n/r) - 1
n = número de pasos
r = resultado de dividir el número total de pasos / 8

El 8 sale del rango de valores PWM (2^8) y -1 se utiliza para concretar los valores entre 0..255, ya que 2^8 son 256 y este valor queda fuera del rango.

Con esta fórmula podemos crear tablas para 8, 16, 24 y 32 valores o pasos de luz para un PWM de 8 bits.

Ejemplos:
2^(1/1), 2^(2/1).. 2^(8/1) - 8 pasos
2^(1/2), 2^(2/2).. 2^(16/2) 16 pasos
2^(1/3), 2^(2/3).. 2^(24/3) 24 pasos
2^(1/4), 2^(2/4).. 2^(32/4) 32 pasos

Los valores de tabla obtenidos para 16 pasos serían:
0, 1, 2, 3, 5, 7, 10, 15, 22, 31, 44, 63, 90, 127, 180, 255

A mi me resultó muy fácil asimilar este modelo porque es básicamente lo mismo que los valores de exposición (EV) que ya conocía en fotografía, que también se miden en pasos y representan el doble o la mitad que sus pasos adyacentes, en caso de ser un paso completo, o fracciones proporcionales de 1/3, 1/2,  2/3.

Espero haber conseguido explicarme mínimamente.

un saludo

Un paper sobre el tema:
https://tinyurl.com/y5erzxy7