模拟路灯控制系统.docx
《模拟路灯控制系统.docx》由会员分享,可在线阅读,更多相关《模拟路灯控制系统.docx(66页珍藏版)》请在冰豆网上搜索。
![模拟路灯控制系统.docx](https://file1.bdocx.com/fileroot1/2023-6/1/1fd4fd53-3dd6-47d8-ab64-38d647d2b91a/1fd4fd53-3dd6-47d8-ab64-38d647d2b91a1.gif)
模拟路灯控制系统
衡阳市第四届大学生科技创新大赛
成果总结材料
项目名称面向节能的路灯控制系统研制
参赛学生蒋军王实铭敬文毅
指导教师李祖林王韧
参赛学校湖南工学院
申报时间2010-5-27
材料清单
一、研究报告
1.成果简介……………………………………………………………1
2.项目研究背景和意义………………………………………………1
3.研究计划……………………………………………………………2
4.研究内容……………………………………………………………4
5.成果创新点…………………………………………………………9
二、附件材料
附件一:
电路原理图……………………………………………………10
附件二:
实物图片………………………………………………………12
附件三:
程序清单………………………………………………………13
三、实物作品
衡阳市第四届大学生创新大赛相关项目的研究报告
项目名称:
面向节能的路灯控制系统研制
项目类型:
实用型
成果形式:
1、研究报告;2、实用作品
参赛学生:
蒋军王实铭敬文毅
指导教师:
李祖林王韧
一、成果简介
本系统是基于单片机控制的路灯模拟控制系统,以单片机AT89S52为主控制器,对路面交通情况、外界环境亮度对交通灯的影响和故障等信息进行采集,实现对路灯的智能化节能控制。
该系统以1W高亮度LED灯作为模拟路灯,制作了LED灯恒流驱动电源,电流调节范围在0-1A内可调。
通过红外式反射光电传感器检测路面交通情况,控制LED路灯亮、灭。
通过光敏三极管对环境变化及路灯故障等信号进行检测,实现了路灯亮、灭控制和路灯故障报警。
LED灯能在规定时间实现自动减小亮度,并能在规定范围内设定调节,调节误差小于2%。
该系统节能,性价比高,具有应用价值。
二、项目研究背景和意义
节能是二十一世纪的热门主题,面对全球能源危机,全世界都以节能为方向进行各方面的研究。
LED就是节能的一个研究方向,高亮度LED以其低热损耗,高流明而迅速取代传统照明工具。
系统以高亮度LED灯作为模拟路灯,可以实现路灯的节能控制。
系统附带了周围环境检测功能,可以根据周围环境亮度开启和关闭路灯。
系统还可以根据路面交通情况,控制路灯的调光功能,实现真正意义的节能环保。
综合以上功能,该模拟路灯控制系统有很好的应用价值和研究意义。
三、研究计划
项目确定前期,我们为了更快更好的完成研究设计,做了如下计划:
2009年5月---2009年8月:
进行相关调研。
2009年9月:
组内三人讨论确定总体方案。
2009年9月---2009年10月:
分工协作完成项目的软、硬件设计。
2009年10月---2009年11月:
完成实际系统的制作、调试及测试。
2009年12月---2010年3:
完成项目的总结。
四、研究内容
1、方案的提出
1.1方案描述
针对题目的功能和指标进行分析,基于AT89S52单片机为模拟路灯支路控制器,通过光电传感器对路灯信号的检测,控制二路恒流源驱动LED路灯。
系统整体设计原理框图如图1所示:
1.2方案论证与比较
(1)系统控制方案选择
方案一:
选用数字电路进行控制,但整个系统电路制作复杂,实现题目发挥部分的指标有困难。
方案二:
选用AT89S52单片机为控制器,易于编程控制,外围控制资源丰富,整个控制系统操作更加灵活,电路制作简单、方便、性价比高。
因此,我们选择方案二。
(2)路灯信号检测
方案一:
选用金属传感器,该传感器精度高,反应灵敏,但是金属传感器价格较高。
方案二:
选用红外反射式光电传感器和光敏三极管,该传感器反应灵敏且价格便宜,外围检测电路简单。
考虑到系统检测电路和性价比,我们选择方案二。
(3)LED灯恒流驱动电源
题目要求用恒流源驱动1WLED灯,并具有调光功能,驱动电源输出功率能在规定时间内按设定要求自动减小,该功率要求能在20%~100%范围内设定并调节,调节误差≤2%,方案比较如下。
方案一:
选用模拟电路中所学的比例电流源,电路虽然简单,但该方案为电流-电流转换,且输出电流小,不能驱动1WLED灯。
方案二:
采用开关电路实现恒流源,通过控制PWM信号占空比,并将该信号作为驱动电路的控制信号,实现MOS驱动电路的导通时间,实现电压-电流转换,电源效率高,控制方便,但是电源纹波较多,制作困难。
方案三:
线性数控电流源,用单片机控制DAC0832的输出,通过集成运放控制MOSFET管,实现电压-电流的线性转换,电路制作简单,性价比高。
因此,我们选择方案三。
2、理论分析与设计
2.1单元电路设计
(1)单片机最小系统
支路控制器控制芯片选用AT89S52,以DS1302作为时钟芯片,采用8255作并口扩展,以24c04作为掉电保护,外接矩阵式键盘和液晶显示器和二路DAC0832电路。
(2)路灯信号检测电路
该装置选用红外式反射光电传感器,当小车经过传感器位置时,小车上的铝箔将红外线反射回去,红外接收管接收到信号输出到比较器整形送给单片机,让单片机对路灯进行控制。
其原理图如图2所示:
图2信号检测电路
(3)环境变化检测和故障检测
环境变化和故障检测选用光敏三极管,当环境亮度达到光敏三极管的导通阈值时,光敏三极管导通,信号送给单片机,单片机实现对路灯的控制和发出声光报警。
其原理图如图3所示:
图3光敏三极管检测电路
(4)LED恒流驱动电源
该恒流驱动电源是通过单片机控制DAC0832的输出电压,经运放控制MOS管的导通,MOSFET的源极经1Ω采样电阻接地,对恒流源输出电流进行控制,实现了输出电流的线性数控。
其原理图如图4所示,假设DAC0832输出至运放OP07同相端的输入为
,由运放虚短可知,MOSFET的源极电压
为
则恒流源输出电流
通过单片机控制输入电压
,可线性控制恒流源的输出电流
。
图4LED恒流驱动电源
2.2系统软件设计
3、系统测试及分析
3.1系统测试
测试仪器:
数字示波器RIGOLDS5022/25Mhz
直流稳压电源1731B
指针式毫安表精度0.5级
数字万用表DT-890
秒表卷尺
功能测试:
将系统各个单元模块组装好,用小车对系统进行模拟,依次测试如下功能:
时钟功能、能设定、显示开关灯时间,控制整条支路按时开灯和关灯、故障检测及报警功能,实现了题目给定的基本要求和发挥部分。
指标测试:
LED恒流驱动电源输出功率的设定与调节测量结果如表1-1所示:
表1-1LED驱动电源输出功率的设定与调节测量结果
预置功率(W)
LED电压(V)
LED电流(mA)
LED功率(W)
误差
0.20
2.92
66
0.19
1%
0.40
3.06
130
0.39
1%
0.60
3.18
192
0.61
1%
0.80
3.26
244
0.79
1%
1.00
3.34
299
0.99
1%
3.2结果分析
经系统调试及测量,我们得出该系统能够满足以下要求:
(1)时钟功能、能设定、显示开关灯时间,控制整条支路按时开灯和关灯;
(2)根据环境明暗自动开关灯;
(3)根据交通状况自动调节亮灯状态;
(4)独立控制每只路灯的开关灯时间;
(5)故障地址检测及报警功能;
(6)单元控制器具有调光功能;
(7)路灯驱动电源输出功率能在规定时间按设定要求自动减小;
(8)功率能在20%~100%范围内设定并调节,调节误差为1%。
五、成果创新点
1.节能环保。
本项目使用高亮度LED为交通灯,具有低热损耗,高流明等特点,系统可以根据路面交通情况实现交通灯的开启和关闭,并根据实际情况调节路灯的亮度,实现节能环保。
2.智能化控制。
路灯可以根据周围环境的变化为参考,实现自动开启和关闭,自动检测路面交通情况,控制LED路灯亮、灭。
通过光敏三极管对环境变化及路灯故障等信号进行检测,实现了路灯亮、灭控制和路灯故障报警。
3.实用性。
项目经过进一步的开发,具有很好的实用价值和工程应用价值。
附录一系统电路原理图
1.单片机系统原理图
2.传感器及LED驱动电路原理图
附录二程序清单
////////////////*****************调用函数声明**************///////////////
#include
#include
#include
#include
#include
#include
////////////////*****************8255头文件定义**************///////////////
#defineCOM8255XBYTE[0x7f03]/*8255命令口地址*/
#definePA8255XBYTE[0x7f00]/*8255的PA口地址*/
#definePB8255XBYTE[0x7f01]/*8255的PB口地址*/
#definePC8255XBYTE[0x7f02]/*8255的PC口地址*/
#defineDAC0832AXBYTE[0x1fff]
#defineDAC0832BXBYTE[0x3fff]
///////////////*****************数据类型声明**************//////////////////
#defineucharunsignedchar
#defineuintunsignedint
////////////////*****************24C04读写地址**************///////////////
#defineread0xa1//器件地址以及读操作
#definewrite0xa0//器件地址以及写操作
#defineADDR0xff//ADDR最高地址
////////////////*****************液晶控制信号**************////////////////
sbitrs=P1^0;//为高电显示数据
sbitrw=P1^1;//为高电数据被读到DB7-DB0
sbiten=P1^2;//使能信号
////////////////*****************DS1302控制信号**************///////////////
sbitDS1302_CLK=P1^3;//实时时钟时钟线引脚
sbitDS1302_IO=P1^4;//实时时钟数据线引脚
sbitDS1302_RST=P3^3;//实时时钟使能信号线引脚
//////////////*******************AD52535控制信号***************///////////////
sbitCC=P1^7;
sbitBB=P1^6;
sbitAA=P1^5;
sbitDD=P3^4;
sbitEE=P3^5;
sbitFF=P3^2;
///////////////******************液晶头函数*******************////////////////
ucharcommand;
voidclear_lcd();//清屏程序
voidlcd_int();//初始化
voidlcd_set();//功能设计
voidcheckbusy();//判忙
voidwrite_command(ucharcommand);//写命令
voidwrite_data(uchardata0);//写数据
voiddisplayhz(ucharm,ucharn,uchar*p);//汉字显示函数
voidsetwordbkcolor(ucharx,uchary,ucharwide,ucharbkcor);
voidsetrowbkcolor(ucharrow,ucharbkcor);
/////////////////*****************延时头函数*******************//////////////////
voiddelay_ms(unsignedinti);//延时1ms
voiddelay(ucharus);
/////////////////****************键扫头函数*******************/////////////////
ucharkey_scan(void);//键扫描函数
////////////////***************时钟头函数***************////////////////
voidwrite_1302(uchardata_1302);//向1302写入1个字节
voidwrite_1302time_2(void);
voidwrite_1302time_1(void);
voidwrite_1302time(void);
voidtime_disbuffer(void);
voidwrite_all_1302(ucharaddr,uchardata_1302);//向1302的某一地址中写入一个字节的数据
ucharread_all_1302(ucharaddr);//从1302的某一地址中读取一个字节的数据
ucharyear,month,week,day,hour,second,minute;////////DS1302的变量
ucharyear_1,month_1,day_1,hour_1,second_1,minute_1;
ucharcodedispcode[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e,0x3a};//液晶显示0到9;0x2e为小数点
uchartime[8]={0x02,0x09,0x09,0x04,0x12,0x48,0x05,0x50};//输进的初始时间
uchardisbuffer[12];//反冲数组
ucharkai1[8];
ucharidataguan1[8];
ucharidatakai2[8];
ucharidataguan2[8];
ucharidatas,m,h,d,mon,y,w;
uchard1,d2,d3,d4,d5,d6;
ucharshi,fen,miao;
/////////////***************24C04头函数***************////////////////
sbitSDA=P3^1;//数据线
sbitSCL=P3^0;//时钟线
voidstart();//开始
voidstop();//停止
uchari2c_read();//读AT24C04
biti2c_write(ucharwrite_data);//写AT24C04
ucharread_retn(ucharre_adder);//在指定地址adder处读出数据
voidwrite_byte(ucharadder,ucharwrite_data);//在指定地址adder处写入数据
voidfill_byte(ucharfill_dady);//24C04数据擦除
ucharkk;
uchardsj;
voidsjsj(void);
ucharSC=0;SB=0;
ucharR;
ucharkey,key1,key2,key3,v;//键扫值
ucharjs,ha;
ucharG=0x30;//对应功能变量
ucharlu;
uchargl;
ucharcaibiao[16]={0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8};
ucharidatacaibiao1[22]={0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8};
ucharjs1,js2,js3,js4,hh;
voidshuzi_1(void);
voidzong(void);
voidzhi(void);
voidxianzai(void);
voiddisplay4(void);
voiddisplay3(void);
voiddisplay2(void);//这些以后写功能函数
voiddisplay1(void);
voidgongneng1(void);
voidgongneng2(void);
voidgongneng3(void);
voidgongneng4(void);
voidgongneng5(void);
voidgongneng(ucharG);//功能选择
voiddiaodian(void);
voidxuanze(void);
voidqing(void);
voidsan(void);
voidsan1(void);
voidsan2(void);
voidjianshao(void);
voidjiaotong(void);
voidguzhang(void);
voidhuanjing(void);
voidbujian(void);
voidbujin(void);
voidgonglv(void);
voidshijian(void);
voiddiao(void);
uchari=20;
uchardjs,ty=50,tj;
voidmain(void)
{
lcd_int();//初始化
lcd_set();//功能设置
clear_lcd();//清屏
start();
stop();
delay_ms(100);//单片机与8255同时复位
COM8255=0x88;//给8255送命令,PA,PB口都为输出,PC口高位为输入,低位输出。
R=read_retn(50);//掉电判断
diaodian();
clear_lcd();
//fill_byte(0xff);
DAC0832A=0x00;
DAC0832B=0x00;
displayhz(1,1,"模拟路灯控制系统");//开机界面
display3();
//write_1302time();//1302写初始时间
displayhz(4,2,"系统时间设定");
while
(1)
{
key=key_scan();
//delay_ms(15);
//delay(100);
display1();
display2();
huanjing();
write_byte(50,0);
if(key==0x11){i++;DAC0832A=i;DAC0832B=i;}
if(key==0x41){i--;DAC0832A=i;DAC0832B=i;}
if(key==0x21){G=0xd9;qing();setrowbkcolor(1,1);}/////////////////////////////////////
if(key==0x84){gongneng5();}
if(key==0x88)//确认键:
第四行第四列
{
clear_lcd();
delay_ms(200);
xuanze();
qing();
G=0;
while
(1)
{
write_byte(50,0);
delay(500);
key1=key_scan();
delay_ms(150);
if(key1==0x21){G=0xd9;qing();setrowbkcolor(1,1);}
if(key1==0x41){G=0xda;qing();setrowbkcolor(2,1);}
if(key1==0x81){G=0xdb;qing();setrowbkcolor(3,1);}
if(key1==0x12){G=0xdc;qing();setrowbkcolor(4,1);}
if(key1==0x88&&G!
=0){clear_lcd();delay_ms(100);gongneng(G);}//确认键:
第四行第四列
if(key1==0x18){G=0;clear_lcd();break;}//取消键:
第四行第一列
}
clear_lcd();display3();displayhz(1,1,"模拟路灯控制系统");displayhz(4,2,"系统时间设定");
}
}
}
voidxuanze(void)
{
displayhz(1,2,"交通故障控制");
displayhz(2,2,"总支路控制");
displayhz(3,2,"各支路控制");
displayhz(4,2,"输出功率设置");
write_command(0x80);
write_data(0xa2);
write_data(0xd9);
write_command(0x90);
write_data(0xa2);
write_data(0xda);
write_command(0x88);
write_data(0xa2);
write_data(0xdb);
write_command(0x98);
write_data(0xa2);
write_data(0xdc);
}
voidqing(void)
{
setrowbkcolor(1,0);
setrowbkcolor(2,0);
setrowbkcolor(3,0);
setrowbkcolor(4,0);
}
voidgongneng(ucharG)
{
while
(1)
{
switch(G)
{
case0xd9:
gongneng1();break;
case0xda:
gongneng2();break;
case0xdb:
gongneng3();break;
case0xdc:
gongneng4();break;
}
key3=key_scan();
if(key==