LED光源的单纯控制需要设计的初始阶段就要非常小心。光源越复杂,就越要用PWM调光。这就需要系统设计者谨慎思考LED驱动拓扑。Buck调节器为PWM调光提供了很多优势。如果调光频率必须很高或者信号转换率必须很快,或者二者都需要,那么Buck调节器就是最好的选择。
LED的调光控制 传统上,LED的调光是利用一个DC信号或滤液PWM对LED中的正向电流进行调节来完成的。减小LED电流将起到调节LED光输出强度的作用,然而,正向电流的变化也会改变LED的彩色,因为LED的色度会随着电流的变化而变化。
许多应用(例如汽车和LCD TV背光照明)都不能允许LED发生任何的色彩漂移。在这些应用中,由于周围环境中存在不同的光线变化,而且人眼对于光强的微小变化都很敏感,因此宽范围调光是必需的。通过施加一个PWM信号来控制LED亮度的做法允许不改变彩色的情况下完成LED的调光。
LED PWM调光C程序#include《reg52.h》 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit LED1 = P2^0;
sbit LED = P2^1; //定义LED灯,通过LED显示调光效果
sbit LED2 = P2^2;
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
unsigned char PWM_ON ;//定义高电平时间
/******************************************************************/
/* 延时函数 &nbs/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
void main()
{
bit Flag;
TMOD |=0x01; //定时器设置 0.1ms in 12M crystal
TH0=(65536-100)/256;
TL0=(65536-100)%256; //定时0.1mS
IE= 0x82; //打开中断
TR0=1;
CYCLE = 50; // 时间可以调整 这个是10调整 8位PWM就是256步
while(!Flag)
{
delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果
PWM_ON++; //这个使用较长延时,以便能看清楚变化过程
if(PWM_ON == CYCLE)
{ //这个里可以添加其他程序 如到最亮时候控制设备
Flag=1;
}
}
while(Flag) //亮度递减 同上,是个相反的过程
{
delay(20000); //延迟时间为20000*0.4=8000us
PWM_ON--;
if(PWM_ON == 0)
{
Flag=0;
}
}
}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
void TIm(void) interrupt 1 using 1
{
staTIc unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256; //定时0.1mS
if (count==PWM_ON)
{
LED1 = 1;
LED = 1; //灯灭
LED2 = 1;
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果开启时间是0 保持原来状态
{
LED1 = 0;
LED = 0; //灯亮
LED2 = 0;
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)