Iluminación

Aplicaciones de iluminación con LED de bajo consumo: técnica para la gestión de la alimentación

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

El equilibrio entre la luz generada por los LED y la potencia eléctrica es una especificación fundamental para determinar la calidad de la luz visible al controlar un conjunto de LED en una aplicación de iluminación.

AplicacionesLa iluminación de un grupo completo de LED de forma simultánea para lograr la máxima intensidad luminosa podría resultar imposible en aplicaciones de bajo consumo debido a la limitada corriente suministrada. Para producir una luminosidad óptima se debe gestionar eficientemente la disipación de potencia para cada LED desde la fuente de bajo consumo. Esto exige una técnica de gestión de la alimentación en la cual, dentro del grupo de LED, se alimente tan solo un banco de LED durante un tiempo determinado. Los otros bancos de LED no se detectarán visualmente mientras se alcanza la intensidad luminosa requerida.


Se deben fijar la potencia disponible y la intensidad luminosa necesaria para la aplicación con el fin de determinar el número de LED para un intervalo de tiempo dado. Se debe realizar una comparación entre la intensidad luminosa y las características de la corriente directa para seleccionar los LED con el nivel de intensidad exigido. Una vez establecido el número de LED necesarios, este número se puede alimentar con un intervalo de tiempo que viene determinado por la proporción entre la corriente total que necesitan los LED y la corriente disponible, tal como sigue:

 

Nº de LED en un banco = Corriente total que necesiten los LED / Corriente total disponible en la fuente
La frecuencia a la cual conmuta el banco de LED se debe ajustar de forma que el tiempo en ON sea lo suficientemente largo como para la permitir la total iluminación de un banco, y el tiempo en OFF se ve limitado por el tiempo que tarda antes de que el banco empiece a atenuarse a ojos vista. El tiempo en OFF limita el número de bancos de LED adicionales que se pueden controlar mediante la gestión del intervalo de tiempo.


Esta técnica se puede implementar con un coste bajo con una fuente de reloj, biestables (flip-flops) digitales para controlar bancos de LED y una puerta OR para detectar un estado de puesta en marcha con un sencillo interruptor On/Off. La Figura 1 muestra el diagrama de bloques de una configuración de biestable D para controlar cuatro bancos de LED.


Aplicaciones1Al inicio, el biestable se encuentra en estado invariable y necesita un pulso de puesta en marcha que debe durar como mínimo un ciclo, por lo que se puede detectar por medio del primer biestable en el flanco de subida del reloj. La duración de la señal de puesta en marcha debe ser momentánea y no puede durar más de un ciclo de reloj, pues de lo contrario las dos primeras salidas del biestable se fijan al mismo tiempo y, dado que la corriente suministrada es limitada, la aplicación de iluminación no funcionará correctamente. Un banco de LED está completamente iluminado en el flanco de subida de cada reloj con esta configuración y para el ojo humano parece como si todos los LED estuvieran totalmente conectados de manera simultánea.


Sin embargo, esta realización es monotónica y no aporta flexibilidad al diseño. Solo tiene un estado on u off. Este circuito puede ser adecuado para aplicaciones como retroiluminación de LCD, pero si necesita atenuar o generar secuencias un circuito basado en microcontrolador ofrece la máxima flexibilidad con un mínimo impacto sobre el coste total de la solución. La construcción del circuito es más sencilla, con menos componentes ya que el microcontrolador controla cada banco de LED y también puede detectar las entradas del usuario para el control de atenuación y para seleccionar secuencias.


Un microcontrolador de 8 bit de bajo coste y con pocas patillas, como la familia PIC10F o PIC12F de Microchip, con un ampliador del puerto de E/S como el MCP23018 de Microchip, ofrecería una solución económica. La expansión de E/S también puede resultar útil para controlar los LED cuando el circuito de iluminación se localiza remotamente respecto al microcontrolador.


Aplicaciones2Los ampliadores de puertos de E/S amplían los puertos de E/S de un microcontrolador. En esta aplicación, el microcontrolador controla el ampliador de E/S mediante el protocolo I2C™ para controlar los LED on/off y las patillas de E/S del microcontrolador se puede utilizar para detectar las entradas del usuario por medio de un pulsador o de un convertidor A/D incorporado para detectar un nivel del potenciómetro para el control de atenuación.


Los ampliadores de E/S están disponibles en configuraciones de salida con drenador abierto o push-pull. Los microcontroladores pueden trabajar con una tensión de 3,3V o inferior, de manera que un ampliador de E/S con salida de drenador abierto se adapta bien a esta aplicación. La ventaja es que permite que los LED trabajen a una tensión de 5V o superior, siempre que el microcontrolador y el ampliador de E/S se alimentan a una tensión más baja. El MCP23018 es un ampliador de puerto de E/S de 16 bit con una salida de drenador abierto y un interface I2C. La Figura 2 muestra el diagrama del circuito para un ampliador de E/S con salida en drenador abierto elevada hasta una tensión superior a la tensión de alimentación del microcontrolador.


Cuando el puerto de E/S se fija en estado bajo, la tensión en el ampliador de E/S es de 0V y circula la corriente, que polariza en modo directo y conmuta el LED para que conduzca. La resistencia de polarización del LED limita la corriente que llega al LED según la intensidad luminosa necesaria y también funciona como resistencia de arrastre (pull-up) para la salida en drenador abierto.


Cuando se fija el puerto de salida del ampliador de E/S en estado alto, la salida en drenador abierto pasa a corte o a alta impedancia y la tensión en el puerto del ampliador de E/S se eleva hasta 5V por medio de la resistencia de pull-up. El LED se encuentra en corte porque no circulará corriente. Una configuración con drenador abierto también ofrece la ventaja de que, cuando el puerto está configurado en alta impedancia, tarda más en desconectar el LED debido a la capacidad parásita. Esto permite que el siguiente banco de LED entre en conducción durante un tiempo un poco más largo si se compara con otras aplicaciones parecidas con salida push-pull.


Los 16 puertos de E/S del MCP23018 pueden controlar hasta 16 LED. La cantidad de corriente que se puede suministrar al puerto de E/S cuando el LED está conduciendo de lleno se puede limitar mediante el control de la salida del ampliador de E/S. La tensión en nivel bajo del puerto de E/S se especifica hasta un máximo de 0,6V para una corriente de 8,5 mA. Si la corriente es superior a 8,5 mA, la tensión de nivel bajo aumentará de forma exponencial. La máxima corriente absoluta es de 25 mA.


Si la corriente suministrada se limita a 5V/50 mA, por ejemplo, y se asignan 2 mA para el microcontrolador, el ampliador de E/S y las resistencias para detección de entrada del usuario, la corriente restante que hay disponible se puede dedicar a la iluminación de LED. Se pueden controlar cuatro LED por banco si la intensidad luminosa del LED a unos 10 mA es adecuada. En este ejemplo el valor de la resistencia limitadora de corriente será de 440W aproximadamente.

 

void main (Void){
    initialize();    //initialize the PICmicro peripherals including Timer0, and I/O expander peripherals
    bank_counter = 0;    //Clear the bank counter variable
    while(1){}    //infinite while loop
   }
  Void Interrupt int_service(void){
    TurnOffAll_LEDs();        //subroutine to turn off all previously lit LEDs
    I2C_start();    //I2C protocol – start signal subroutine
    I2C_send(Comand_byte);  //I2C protocol – send byte subroutine

    If(bank_counter == bank1){          // bank1 is a constant defined as 0
        I2C_send(Address_pionter_bank1n2);  //Send peripheral register address pointer
        I2C_send(‘0000 1111’);  //I2C protocol – send bank status (bank 1 on and bank 2 off)
        bank_counter = bank_counter + 1;
    }
    If(bank_counter == bank2){      // bank1 is a constant defined as 1
        I2C_send(Address_pionter_bank1n2);  //Send peripheral register address pointer
        I2C_send(‘1111 0000’);  //I2C protocol – send bank status (bank 2 on and bank 1 off)
        bank_counter = bank_counter + 1;
    }
    If(bank_counter == bank3){     // bank1 is a constant defined as 2
        I2C_send(Address_pionter_bank3n4);  //Send peripheral register address pointer
        I2C_send(‘0000 1111’);  //I2C protocol – send bank status (bank 3 on and bank 4 off)
        bank_counter = bank_counter + 1;
    }
    If(bank_counter == bank4){     // bank1 is a constant defined as 3
        I2C_send(Address_pionter_bank3n4);  //Send peripheral register address pointer
        I2C_send(‘1111 0000’);  //I2C protocol – send bank status (bank 4 on and bank 3 off)
        bank_counter = 0;
    }
    I2C_stop();    //I2C protocol – stop signal subroutine
}   

Pseudocódigo 1: Código de la rutina del servicio de interrupciones del microcontrolador


   *
    *
    *
    If(bank_counter == bank1){        // bank1 is a constant defined as 0
        I2C_send(Address_pionter_bank1n2);  //Send peripheral register address pointer
        Bank1n2_pattern = ~Bank1n2_pattern; //complement the variable using ‘~’
        I2C_send((Bank1n2_pattern | ‘0000 1111’));  //I2C protocol – send bank status
                        //(use OR ‘|’ to set bank 1 on and bank 2 off)
        bank_counter = bank_counter + 1;
    }
    *
    *
    *

Pseudocódigo 2: Generación de secuencias.



    *
    *
    *    
    Void Interrupt int_service(void){
        TurnOffAll_LEDs();        //subroutine to turn off all previously lit LEDs
        If (Delay_ON == ON){    // ON is a constant defined as 1
            Update_Timer0_Counter(Timer0delay_interval);        //subroutine to update Timer0
                             // Timer0delay_interval is a constant to set the minimum delay
            Delay_Counter = Delay_Counter – 1;    //count down the number of interrupts for delay
            If(Delay_Counter == 0){
                Delay_ON = OFF;    // Clear the delay flag for the next interrupt
                Delay_Counter  = Get_Delay_Counter();        //subroutine to detect user input
                        //and set the delay counter variable
            }else{
                Delay_ON = ON; // leave delay flag ON
                Return;            //exit the interrupt service routine
            }
        }

        I2C_start();    //I2C protocol start signal subroutine
        I2C_send(Comand_byte);  //I2C protocol – send byte subroutine
        If(bank_counter == bank1){        // bank1 is a constant defined as 0
            I2C_send(Address_pionter_bank1n2);  //Send peripheral register address pointer
            Bank1n2_pattern = ~Bank1n2_pattern; //complement the variable using ‘~’
            I2C_send((Bank1n2_pattern | ‘0000 1111’));  //I2C protocol – send bank status
                                   //(use OR ‘|’ to set bank 1 on and bank 2 off)
            bank_counter = bank_counter + 1;
            Delay_ON = ON; // turn on the delay flag
        }
    *
    *
    *

Pseudocódigo 3: Implementación del código de retardo para visualizar una secuencia de iluminación.



El cronograma mostrado en la Figura 1 se puede reproducir si se utiliza un código corto de instrucción del microcontrolador. Por ejemplo, para el Pseudocódigo 1, la subrutina principal puede ser un bucle ‘while’ infinito. Para cada intervalo de tiempo del microcontrolador (Timer0) una rutina de servicio de interrupción envía una instrucción I2C al ampliador de E/S para conducir solo un banco de LED. La rutina de servicio de interrupción cuenta o realiza el seguimiento del estado del banco de LED, como por ejemplo si el banco conduce actualmente, y la configuración del puerto de ampliación de E/S correspondiente como estado alto o bajo. Inicialmente, o bien tras reiniciar el microcontrolador, en la primera interrupción de Timer0 el banco bank 1 pasa a conducir. En la segunda interrupción, el banco 1 está desconectado y el banco 2 está activo. Luego, en la tercera interrupción, el banco 2 se desconecta y el banco 3 está activo. Finalmente, en la cuarta interrupción, el banco está desconectado y el banco 4 está en activo, y además la variable del contador de banco se pone a cero. En la siguiente interrupción, el ciclo se repite conectando el banco 1 y desconectando el banco 4. Otras variables, como Command_byte, Address_pointer_bank1n2 y Address_pointer_bank3n4, son constantes definidas en el archivo de inicio. En una implementación de este tipo, el circuito genera la intensidad luminosa necesaria y parece como si todos los LED fueran activados simultáneamente por la fuente de alimentación disponible.

 

Void get_PWM_ratio(void) {
    Double PotScale;     //local variable to store ADC output scale
    Double PWM_Percentage;    //local variable to store PWM change percentage

    PotScale = (ADRESH)/16 + 1;    //Scale ADC output high byte
    PWM_Percentage = 1/16 * PotScale;    //Scale the output from from 0 to 1, equivalent to 100%
    PWM_High = Frequency_counter * PWM_Percentage;    //set PWM high Timer0 value
    PWM_Low = Frequency_counter * (1 – PWM_Percentage);     //set PWM low Timer0 value
        //PWM_High and PWM_Low are global variables,
        //and Frequency_counter is a constant Timer0 value to set frequency.
   }

Pseudocódigo 4: Subrutina para calcular la proporción de PWM

 

   *
   *
   *
   If(bank_counter == bank1){    // bank1 is a constant defined as 0
    If (PWM_High_Low_flag == OFF){   //check PWM status flag
        get_PWM_ratio();    //Detect user input for PWM ratio
        Timer0_counter = 65535 – PWM_High;  //set Timer0 counter variable
        Update_Timer0_Counter(Timer0_counter);        //subroutine to update Timer0
                    
        I2C_send(Address_pionter_bank1n2);  //Send peripheral register address pointer
        Bank1n2_pattern = ~Bank1n2_pattern; //complement the variable using ‘~’
        I2C_send((Bank1n2_pattern | ‘0000 1111’));  //I2C protocol – send bank status
                              //(use OR ‘|’ to set bank 1 on and bank 2 off)
        PWM_High_Low_flag = ON;   //Set flag
        Delay_ON = OFF;

    }else{
        Timer0_counter = 65535 – PWM_Low;  //set Timer0 counter variable
        Update_Timer0_Counter(Timer0_counter);        //subroutine to update Timer0
                            
        I2C_send(Address_pionter_bank1n2);  //Send peripheral register address pointer
        I2C_send(‘1111 1111’));  //I2C protocol – turnoff all LEDs
        bank_counter = bank_counter + 1;
        PWM_High_Low_flag = OFF;  //Clear flag
        Delay_ON = ON;
    }
   }
   *
   *
   *

Pseudocódigo 5: Flujo del código para ajustar la proporción de PWM.


Control de atenuación y generación de secuencias con LED
Se pueden generar interesantes secuencias luminosas con una aplicación basada en microcontrolador. Los estados de la salida del ampliador del puerto de E/S se cargan desde


2 bytes de variables en la RAM que se denominan Bank1n2_pattern y Bank3n4_pattern. El medio byte corresponde a cada banco. Una tabla de consulta previamente definida contiene varias secuencias de unos y ceros para cada banco.


Aplicaciones3Para monitorizar continuamente el estado del pulsador on/off se añade una instrucción IF THEN al código del microcontrolador: el bucle ‘while’ infinito de la subrutina principal. Cuando se presiona momentáneamente el pulsador se carga una secuencia desde la tabla de consulta en los dos bytes de RAM, denominados Bank1n2_pattern y Bank3n4_pattern. Cuando se produce la interrupción de Timer0, se envía la nueva secuencia al ampliador de E/S y los LED se encienden en función de la secuencia. La subrutina principal va recorriendo la tabla de consulta mientras el pulsados siga siendo presionado momentáneamente por el usuario. Para visualizar otra secuencia de iluminación solo hay que enviar el complemento de la secuencia anterior. Por ejemplo, si la secuencia de bank1 es ‘0101’ el complemento es ‘1010’ tal como se indica en el Pseudocódigo 2, que es una sección (snippet) del Pseudocódigo 1.


No obstante, debe añadirse un retardo en la subrutina de interrupción antes de que las instrucciones IF THEN para conexión/desconexión del banco inspeccionen visualmente las secuencias alternativas. Esto se genera mediante un señalizador (flag) Delay_ON, de manera que en la siguiente interrupción solo se resta el contador de retardo para descontar el número de interrupciones para el retardo. El usuario también puede seleccionar el valor del retardo con un potenciómetro cuyo terminal estaría conectado a la entrada del convertidor A/D integrado en el microcontrolador. Los datos digitales del convertidor A/D van escalados de un retardo mínimo hasta un máximo detectando los cuatro bits superiores, que ofrecen 16 niveles. Se puede establecer un ajuste más preciso detectando los cinco bits superiores, es decir, 32 niveles. El retardo máximo es la mayor lentitud a la que pueden parpadear los LED y, con un retardo mínimo, parece como si todos los LED estuvieran en activo. La Figura 3 muestra la posición del retardo, tDELAY.


Para controlar la duración del intervalo del tiempo para cada banco, el control de atenuación emplela modulación de anchura de impulso (pulse width modulation, PWM). La duración de la interrupción Timer0 tiene dos valores, uno de larga duración y otro de baja duración, proporcional al porcentaje de PWM que se ajusta mediante un potenciómetro rotativo cuyo terminal central está conectado a la entrada del convertidor A/D. El nivel de resolución se puede ajustar seleccionando los 4 o 5 bits superiores del convertidor A/D. La posición del contador Timer0 se ajusta proporcionalmente y con una escala de los datos del convertidor A/D, donde un PWM del 100% equivale a la posición máxima del contador, totalmente iluminado, y el 0% es el nivel mínimo o de atenuación más baja. El Pseudocódigo 4 indica la ecuación de la escala de PWM para 16 niveles y la Figura 3 muestra el cronograma durante la PWM, tPWM_LOW y tPWM_HIGH.
La rutina del servicio de interrupción debe actualizar las posiciones del contador Timer0 para la siguiente interrupción. También ha de detectar si PWM tiene una larga o corta duración. Por tanto, se deben añadir unas pocas instrucciones para detector el nivel del potenciómetro para control de atenuación y escalado proporcional de la posición del contador Timer0 con los valores PWM_High y PWM_low mostrados en el Pseudocódigo 4. El Pseudocódigo 5 muestra el código para ajustar la PWM; se emplea una instrucción IF THEN para detectar el estado de PWM.


Esta metodología también se puede implementar en un microcontrolador de 8 bit de gama media con memoria de programa añadida, como la familia PIC16F de Microchip. Una actualización permitiría que la subrutina principal gestionara secuencias avanzadas de iluminación, como luces de movimiento continuo. El módulo Timer1 del microcontrolador se puede emplear para variar la duración y los dos bytes de RAM se actualizan para la secuencia de movimiento continuo.


Los diseñadores siempre buscan nuevas formas de disminuir costes sin comprometer las prestaciones. Existen numerosos métodos para controlar eficientemente los bancos de LED utilizados en retroiluminación de LCD o en aplicaciones de secuencias de iluminación para una iluminación eficiente. En aplicaciones de bajo consumo, los LED se pueden controlar mediante la gestión del intervalo temporal para cada banco de LED. Además, los microcontroladores con pocas patillas y los ampliadores de puerto de E/S ofrecen una alternativa de bajo coste para soluciones de iluminación con una mayor flexibilidad de diseño.

Autor:

Ezana Haile, Ingeniera Jefe de Aplicaciones, División de Productos Analógicos y de Interface Microchip Technology Inc.

Más información o presupuesto

Articulos Electrónica Relacionados

  • Nuevo Mapa Luminico Dinamico ARELSA empresa líder en sistemas de telegestión para la ciudad presenta su nuevo “Mapa Lumínico Dinámico” donde pueden integrarse diferentes auditorías realizad... Iluminación
  • Farolas LED modulares El futuro de la iluminación está en el LED. Los beneficios de este tipo de tecnología, desde energéticos hasta medioambientales, pasando por conceptos como el d... Iluminación

Redes Sociales

Edicion Revista Impresa

1ww   

Para recibir la edición impresa o en PDF durante 1 año (10 ediciones)

Suscripción papel: 180,00.- €  (IVA inc.)

Suscripción PDF: 60,00.- € (IVA inc)

Noticias Populares Electrónica

Kit de desarrollo de aplicaciones LED RGB dinámicas Melexis ADK81116

Melexis presenta el kit de desarrollo de aplicaciones ADK81116. Diseñado para simplificar el desarrollo de aplicaciones dinámicas LED-RGB para...

Series XLC/XLN-NFC: Solución inalámbrica para una iluminación inteligente

Las especificaciones en los dispositivos de iluminación LED son muy diversas. Los fabricantes de LED drivers suelen emplear métodos mecánicos, como...

LED drivers de tamaño compacto MEAN WELL Series XLN/XLC

La nueva generación de LED drivers de MEAN WELL son las series XLN y XLC. Con carcasa de plástico, están diseñados con doble aislamiento y clase...

Gama de LED con diversas soluciones diseñadas para aplicaciones de iluminación, médicas y de hogar inteligente

El uso de la iluminación LED se ha extendido con el utilizo de esta tecnología en diversos ámbitos, como la iluminación comercial y residencial, las...

Noticias Electrónica Profesional

Noticias Fuentes de Alimentación

Bel Mondo, la trattoria que hechiza con su sistema de ilumi

Electrónica OLFER colabora con el grupo francés Big Mamma, en el asesoramiento y puesta en marcha...

LED driver regulable por DALI MEAN WELL PWM-120-DA para tir

Electrónica OLFER, distribuye la serie PWM de MEAN WELL, que ha tenido una gran acogida para...

¿Serán las pantallas Micro-LED una amenaza para las pantal

Con el lanzamiento de las pantallas Micro-LED y Mini-LED por parte de varios OEMs y proveedores de...

Actualidad Electrónica Profesionales

Bel Mondo, la trattoria que hechiza con su sistema de ilumi

Electrónica OLFER colabora con el grupo francés Big Mamma, en el asesoramiento y puesta en marcha...

LED driver regulable por DALI MEAN WELL PWM-120-DA para tir

Electrónica OLFER, distribuye la serie PWM de MEAN WELL, que ha tenido una gran acogida para...

¿Serán las pantallas Micro-LED una amenaza para las pantal

Con el lanzamiento de las pantallas Micro-LED y Mini-LED por parte de varios OEMs y proveedores de...

Convertronic

Revista © Convertronic Electrónica Profesional Española.Todos los derechos reservados GM2 Publicaciones Técnicas, S.L.
Tel.: +34 91 706 56 69
Poema Sinfónico, 27. Esc B. Planta 1 Pta 5
28054 (Madrid - SPAIN)
e-mail: gm2@gm2publicacionestecnicas.com ó consultas@convertronic.net

Suscríbete a nuestro boletín de noticias

Revista Española de electrónica. Impresa desde hace más de 25 años.

España - Madrid - Todos los derechos reservados Revista © Convertronic Electrónica Profesional Española.

Search