C单片机和PWM调光LED台灯设计方案 联系客服

发布时间 : 星期日 文章C单片机和PWM调光LED台灯设计方案更新完毕开始阅读92ba76d53d1ec5da50e2524de518964bce84d262

口和PWM端口这两个必须条件,另外ADC的位数尽量高,单片机的工作速度尽量快。在调整充电电流前,单片机先快速读取充电电流的大小,然后把设定的充电电流与实际读取到的充电电流进行比较,若实际电流偏小则向增加充电电流的方向调整PWM的占空比;若实际电流偏大则向减小充电电流的方向调整PWM的占空比。

本文介绍了以STC89C51为控制核心,通过光敏电阻感应光度,并利用PWM调光技术对LED进行光度的自动调节。同时设置手动控制。该LED台灯电路简单,很大程度上节省电能,延长LED灯寿命,适宜阅读。

一、总体方案设计

基于C51单片机和PWM调光的LED台灯以STC89C51作为主控芯片,设置了手动控制和自动控制。在手动控制时,分为三档,输出不同的PWM占空比对LED的电流进行控制,从而实现了对光度的手动调节。

在自动控制时,通过ADC0809模拟-数字转换芯片不断检验光敏电阻的电压来间接测量感应光度,将电压和预设的阈值进行对比,调整PWM的占空比对LED的电流进行控制,从而实现了对光度的自动调节。总体框图如下(图1.1):

图1.1

二、硬件设计

硬件设计总体框图如下:

图2.0

1、主控电路:

主控电路采用STC89C51作为主MCU。STC89C51是一款八位,片内有ROM/EPROM的单片机,其硬件结构具有功能部件种类全,功能强等特点。这种芯片构成的最小系统简单、实用﹑可靠。用STC89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如下图(图2.1)所示。本设计所选用的晶振为12MHZ,晶振电容为30PF。

图2.1

2、LED驱动

LED的亮度受电流控制,通过控制电流调节LED灯的亮度。利用公式可知,利用调整PWM不同的占空比就可以控制电流的大小。电流通断的变化用NMOS管K2717实现,三极管9014提供驱动K2717的电流,PWM由P2.0输出,低电平有效。如下图(图2.2)所示:

图2.2

2、手动控制

KEY4变化控制的方式,KEY4为自锁按键,按下为手动控制,弹起为自动控制。手动控制时可以分为三档,对应与KEY1~3三个按键。如下图(图2.3)所示:

图2.3

3、自动控制

<1>光敏电阻反馈部分

光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。光敏电阻器一般用于光的测量、光的控制和光电转换。因此,不断采集光敏电阻对地的电压便可以获知台灯周边光强的变化。如下图(图2.4)所示:

图2.4

<2>ADC0809模数转换部分

ADC 0808和ADC 0809除精度略有差别外(前者精度为8位、后者精度为7位),其余各方面完全相同。它们都是CMOS器件,不仅包括一个8位的逐次逼近型的ADC部分,而且还提供一个8通道的模拟多路开关和通道寻址逻辑,因而有理由把它作为简单的“数据采集系统”。利用它可直接输入8个单端的模拟信号分时进行A/D转换,在多点巡回检测和过程控制、运动控制中应用十分广泛。

如下图(图2.4)所示,ADC0809的参考电压设置成5V,时钟信号通过单片机P3.3口利用定时器中断输出。光敏电阻的对地电压从IN3口输入, ADC0809将其转换成数字量后通过OUT1-7输出,以便单片机进一步处理。

图2.5

三、软件设计

1、总体框图

图3.1

2、主要程序

<1>按键扫描

不断扫描按键判断是手动控制和自动控制。程序代码:

void keyscan() { ad()。 if(key==1) { if(c<0.40) last=0。

//key4松开,a恒为0 ,通过读c的值确定b的值

}

else if((c>=0.40)&&(c<2.0)) last=2。 else if((c>=2.0)&&(c<3.0)) last=5。 else if((c>=3.0)&&(c<4.0)) last=7。 else last=10。 } if(key==0) //key4按下, 手动控制 { if(key1==0) { delayms(10)。 //去抖 if(key1==0) last=1。 } if(key2==0) { delayms(10)。 if(key2==0) last=6。 } if(key3==0) { delayms(10)。 if(key3==0) last=10。 } }

<2>AD转换

定时器1产生CLK信号,定时时间为2us,亦即CLK周期为0.4us。程地址为011, 即IN3口输入。利用公式getdata*1.0/255*VREV+对数字量进行变化。程序代码如下:

void ad() { ST=0。//关闭转换 OE=0。//关闭输出 ST=1。//开启转换 ST=0。//关闭转换 P34=1。//选择通道0 P35=1。 P36=0。 while(EOC==0)。//判断是否转换结束:是则执行以下语句,否则等待 OE=1。//开启数据输出允许 getdata=P0。//将数据取走,存放在变量getdata中

}

OE=0。//关闭输出

c=getdata*1.0/255*4.85。//电压值转换,5V作为参考电压,分成256

<3>PWM调节

定时器0控制PWM周期和占空比。程序代码如下: void into(void) interrupt 1 { TH0=(65536-500)/256。 TL0=(65536-500)%6。 count++。 if(count>CIRCLE) { count=1。 } if(count<=last) pwm=0。 //占空比,使用反相器应为1 else pwm=1。

四、总结

基于C51单片机和PWM调光的LED台灯以STC89C51作为主控芯片,设置了手动控制和自动控制。在手动控制时,分为三档,输出不同的PWM占空比实现了对光度的手动调节。在自动控制时,通过ADC0809模拟-数字转换芯片不断检验光敏电阻的电压来间接测量感应光度,将电压和预设的阈值进行对比,调整PWM的占空比实现了对光度的自动调节。该LED台灯电路简单,很大程度上节省电能,延长LED灯寿命,适宜阅读。

同时,在本次课程设计中,主要有以下体会:

1、对LED的驱动有进一步的了解,明白了如何对LED进行规定电流驱动,并通过输出不同的占空比来调节LED的亮度,从而对LED的耗电进行相应的管理;

2、进一步掌握了AD转换原理以及相关芯片的应用,通过ADC0809对外界的模拟量进行转换。

3、培养了自己的团队意识,能够比较好的和队员就工程进行及时的沟通,在分工和整合方面做的不错。

附录1:作品照片