微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > 高辉度LED的特性与驱动方法

高辉度LED的特性与驱动方法

时间:04-29 来源: 点击:

三、LED驱动器的制作

国外厂商开发许多LED驱动专用IC,不过一般业者却无法取得,有鉴于此本文将介绍一种单片微机构成的升压型定电流LED驱动器。本驱动器利用4个电池动作,2V系列LED使用3~15个,3.6V系列使用2~8个串联连接的LED,它以20mA定电流使LED点灯。

1、电路结构

     图13是LED驱动器的电路亦即一般称为“Switching Type DC-DC Converter”,微处理器使用同时具备A-D Converter与PWM功能的PIC12F683,它会自动调整Chopper Type升压电路的输出电压,使LED内流动的电流变成20mA形成定电流驱动。
     由于LED作串联连接,因此所有LED都以相同电流值驱动,LED内部流动的电流值以OP增幅器将R7产生的电压增幅,接着再用A-D Converter读取。电源使用4个电池,虽然电源电压只有4~6V左右,随着LED串联数量升压电路的输出电压最大可以提高到30V,整体而言电路结构非常简单,而且LED的VF总合值即使超过电源电压低于30V也可以正常动作。

2、电路与微处理器的动作

     PIC微处理器一旦开始动作,就会以AN0读取LED内部流动的电流值,再与PIC内部预设的目标电流值20mA的数据进行比较,最后根据比较结果增减升压电路的PWM Duty值并输出到CCP1。Duty的增减条件如下:
     ILED〉20mA时Duty减少
     ILED〉20mA时Duty增加
     由于电源投入后瞬间升压电路并未动作,因此LED内部无电流流动,Duty增加升压电路启动后输出电压变高,此时LED内部电流才开始流动,如果电压过高LED的电流值超过20mA时,PIC微处理器会减少Duty降低输出电压,其结果反复定电流动作最后在20mA稳定下来。
     图14是升压型LED驱动电路板的实际外观;清单1是升压型LED驱动器的PLC程序;图15 LED驱动器的外观。实验时将15个橙色LED串联,输出电压在3.0V附近略有变动,不过LED的电流在20mA却非常稳定,在此状态下输入为5.5V/180mA,输出为30.1V/120mA,效率大约是61%。表3是主要高功率LED的规格摘,表中记载的规格原则上都是标准值,至于最大值与最小值表示概略平均值,至于相同型号细分等级,则一律采用中级品当作标准值。
 升压型LED驱动器的PLC程序(使用CCS-C程序编辑器):
 # includ   〈12f683.h〉
 # device   ADC=10          //A-D转换10bit
 # fuses INTRC_IO, NOWDT, NOPROTECT, NOMCLR, BROWNOUT //指定内部clock
 # use delay (CLOCK = 8000000)   //指定clock频率
 # use fast_in (A)                     //固定输出入模式
 # define LED_IF 20                //LED电流(A)(实测补偿)
 Void main()
 {
    Signed long duty;              //Duty data
    Float current;                //电流量测资料
    Setup_oscillator(OSC_SMHZ);        //内部clock 8MHz
    ///A-DこI/0的设定
    Setup_adc_portsANO_ANALOG);     //输入PA0类比
    Setup_adc(ADC_CLOCK_div_32);       //Fosc/32
    Setup_tris_a(0b00000011);               //输入AN0,AN1
    ///CCP1的初期设定 
    Setup_ccp1(CCP_PWM);      //CCP1设定成PWM
    Setup_timer_2(T2_div_BY_1,0x3F,1);      //Timer2 31,125kHz
 Duty=0              //启动软体
 While(1){                 //永久Loop
    Set_adc_channel(0);      //AN0
    Delay_us(S0);
    Current=read_adc();      //量测电流
    Current=(current*56)/1024    //
    If(current〉LED_IF) duty-  //Duty减少
    If(current〈LED_IF) duty++ //Duty增加
 If(duty〈0) duty=0;  
 If(duty〉0xC8) duty=0xC8;    //lmitter(8bit)
 Set_pwm1_duty(duty);       //Duty输出
    }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top