自动灯光调节系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自动灯光控制系统
小组成员:杨龙
张粮雨
邱沙沙
组别:信科16组
目录
1. 方案论证与比较 (4)
1.1. 数控部分:单片机的选择 (4)
1.2. 稳压部分: (4)
1.2.1. 开关器件的选择。

(4)
1.2.2. 驱动电路的选择 (4)
1.2.3. 光控部分 (4)
2. 硬件设计 (5)
2.1. 系统设计框图: (5)
2.2. 单片机系统 (5)
2.3. 稳压系统 (6)
2.4. 光控系统 (7)
2.5. 原理分析及参数计算............................................................ 错误!未定义书签。

3. 软件设计 (8)
3.1.1. 整体软件流程图 (8)
4. 测试数据 (8)
4.1. 模式一:手动模式 (9)
4.2. 模式二:自动模式 (9)
4.3. 误差分析 (10)
5. 参考文献 (10)
《C语言程序设计》谭浩强 (10)
《51单片机》郭天祥 (10)
《电子技术基础-模拟部分》康华光 (10)
6. 附件 (10)
6.1. 元器件列表: (10)
6.2. 程序部分: (11)
6.2.1. 主函数部分 (11)
6.2.2. 产生PWM波 (11)
6.2.3. 两种控制模式 (12)
摘要
本设计采用宏晶公司的STC89C52单片机作为自动灯光控制系统的MCU控制器。

系统以感光元件,键盘控制,显示控制,PWM信号控制开关管IRF540N导通等模块组成。

感光元件实现开关功能控制后端负载灯泡的亮灭。

单片机产生PWM波控制开关管对系统进行优化,采用开关管具有较高的电压转换效率,有效控制灯泡明暗调节。

以自动手动两种可切换模式进行输入值设定实现灯泡明暗变化。

关键词:STC89C52单片机 PWM波开关管感光开关自动、手动灯光明暗控制
1.方案论证与比较
1.1. 数控部分:单片机的选择
方案一:采用STC89C52作为自动灯光控制系统的控制核心。

STC89C52单片机算术运算功能强,软件编程灵活、自由度大功耗低、体积小、技术成熟和成
本低等优点,价格低廉。

STC89C52可以通过定时器产生PWM波,通过调整其占
空比来实现电压控制。

方案二:采用MSP430,引脚复杂,不易于手工焊接,成本相对较高,不适于本次试验。

1.2. 稳压部分:
1.2.1.开关器件的选择。

(1)方案一:选择BJT作为开关器件。

选用NPN或者PNP型晶体管作为功率开关,这种方式开关饱和导通时集-射极导通电阻非常小,开关损耗较小。

但是驱动功
率与输出功率成正比,需要有较大的驱动电流。

(2)方案二:采用IRF540N作为开关器件。

选用P沟道或者N沟道的IRF540N作为功率开关,需要的驱动功率小,而且输出功率较大。

(3)方案三:选用IGBT作为开关器件。

IGBT集BJT与MOSFET的优点于一身,适合在大功率、超大功率的场合使用。

IGBT成本要高。

综合以上比较,本设计电源属于中小功率,且用单片机产生PWM驱动,驱动功率不高,因此选择方案二
1.2.2.驱动电路的选择
方案一:采用自激式开关稳压方式。

这种方式开关管即作为功率开关,又兼作PWM驱动信号产生的振荡管。

这种方案中开关管工作在谐振状态。

它具有内部损耗小,转换效率高、低成本等特点。

但是工作可靠性差,不便于控制的缺点。

同时,这种方式的开关电源输出功率较低。

方案二:采用它激式方式,即通过MCU产生PWM控制信号来控制开关管的通断,进而达到调整电压的目的。

这种方式具有工作稳定、可靠、易于控制等优点。

综合上述比较,本设计需要能够方便地调整电压,并且能够稳定电压,对可靠性要求较高,方案二比较适合,因此选择方案二。

1.2.3.光控部分
采样电路如图2.4所示。

该部分将光强度的变化转化成电压值的变化,输出给微处
理器处理数据,然后经过驱动电路驱使灯的亮度变化。

,采样电路应该由光源产生电路和光敏电阻电路组成。

光源产生电路可调节光的强度,而光敏电阻电路可以检测光强的变化并将这种变化转化成电压值的变化。

通过实际测量,光敏电阻在光强较大时呈现高阻状态(大约大于100千欧姆),而在光强逐渐变弱的情况下,电阻逐渐减小,利用分压电路,其所分电压值便逐渐减小,而输出部分的电压值逐渐增大。

2.硬件设计
2.1. 系统设计框图:
2.2. 单片机系统
图2.1.1单片机最小系统
系统包括了时钟电路、复位电路、按键控制电路等。

系统设置了16位的矩阵键盘来进行模式一与模式二之间的切换,有数字键0-9,还包括小数点,删除和确定按键。

系统还提供了液晶显示模块、
数控部分利用对STC89C52编程实现对光控部分电路输入电压值分档输出0~5V,对按键输出值提供0.0~5.0V电压值得分档输出。

在数控部分便实现了由模拟转数字在转变成模拟量的过程。

使得系统的设计目的实现
2.3. 稳压系统
2.4. 光控系统
3.软件设计
3.1.1.整体软件流程图
4.测试数据
测试仪表:
A——数字电流表(采用3位半数字万用表DT-9205)
V——数字电压表(采用3位半数字万用表DT-9205)
4.1. 模式一:手动模式
所测数据如表1所示。

表 1
测试项目
输出值(V )
实际测量值Ui
(V )
显示电压值Uo
(V )
误差(%)
分档 0 0 0 0 1.00 1.00 1.01 0.01 第一档 2.00 2.01 2.01 0 第二档 3.00 2.99 3.00 0.01 第三档 4.00 4.00 3.98 0.02 第四档 5.00
5.09
4.99
1.96
第五档
误差计算与分析:
10
|
-o
|∑=
∆Ui U U
计算得,U ∆=0.02%。

符合测试要求。

4.2. 模式二:自动模式
所属档位 测试项目
第一档 第二档 第三档 第四档 第五档 输出采集
实际测量值Ui
(V ) 0.98
2.00
3.01
3.99
4.99
显示电压值Uo
(V ) 1.00 1.96 3.03 3.99 5.10 误差(%)
1.02
0.51
1.35
0.01
10
|
-o
|∑=
∆Ui U U
计算得,输出采集电压的误差为
2
σ∆=0.3%,符合测试要求。

4.3. 误差分析
误差主要来源有:
1)pwm波控制开关管导通不迅速;
2)开关管收温度影响引起误差;
3)负载(灯泡)因温度升高而引起的误差;
5.参考文献
《C语言程序设计》谭浩强
《51单片机》郭天祥
《电子技术基础-模拟部分》康华光
6.附件
6.1. 元器件列表:
LM399 1 Res 200k 4 switch 3 1602液晶 1
6.2. 程序部分:
6.2.1.主函数部分
void Main()
{
uchar i=1;
enable(0x01);
L1602_init();
L1602_string(1,1,"Mode:");
L1602_string(2,1,"voltage:");
while(1)
{
if(choose==0)
{
delay(20);
if(choose==0)
switch(i)
{
case 1:manual_mode();i++;m=0;break;
case 2:auto_mode();i=1;break;
}
}
}
}
6.2.2.产生PWM波
//*******************中断程序******************* //PWM波生成,T0中断
void PWM_T0(void) interrupt 1
{
TH0=(65536-25)/256;
TL0=(65536-25)%256;
time_PWM++;
if(time_PWM < high_PWM)
{
p3_0=1;
}
if(time_PWM==high_PWM)
{
p3_0=0;
}
else
if(time_PWM==t_PWM)
{ p3_0=1;
time_PWM=0;
}
}
6.2.3.两种控制模式
void manual_mode() //手动模式
{
L1602_string(1,6,"Manual");
L1602_string(2,9," ");
high_PWM=85;
t_PWM=500;
while(1)
{
if(int_part==0)
{
delay(20);
if(int_part==0)
{
m++;
switch(m)
{
case 1:L1602_string(2,9,"1.0V");
high_PWM=85;
timer_int();xiaoshu();
break;
case 2:L1602_string(2,9,"2.0V");
high_PWM+=83;
xiaoshu();
break;
case 3: L1602_string(2,9,"3.0V");
high_PWM+=84;
xiaoshu();
break;
case 4: L1602_string(2,9,"4.0V");
high_PWM+=85;
xiaoshu();
break;
case 5: L1602_string(2,9,"5.0V");
high_PWM+=86;
m=0;
break;
}
}
}
if(choose==0)
break;
}
}
void auto_mode() //自动模式
{
L1602_string(1,6,"Auto ");
L1602_string(2,9,"****");
timer_int(); //开中断
while(1)
{
if(p3_1==0)
{
high_PWM=5;
t_PWM=10;
}
else
{
high_PWM=0;
t_PWM=10;
}
if(choose==0)
{
delay(20);
if(choose==0)
{
EA=0;
EX0=0;
break;
}
}
}
}。

相关文档
最新文档