模拟路灯控制系统.docx
《模拟路灯控制系统.docx》由会员分享,可在线阅读,更多相关《模拟路灯控制系统.docx(20页珍藏版)》请在冰点文库上搜索。
模拟路灯控制系统
模拟路灯控制系统
自动化4班
姓名:
常青
学号:
10006610429
摘要
随着电子技术的发展,本设计是以AT89S52为主控器的模拟路灯控制系统,具有对路灯的定时设定功能,也可以分别独立控制路灯的开启和关闭;能够同时具有调光功能,对路面的光线进行调整,还可以按设定要求使路灯驱动电源输出功率在20%~100%范围内任意调节。
在白天模式的时候,还能根据环境明暗的变化控制路灯的开启和关闭路灯,在夜晚模式的情况下,根据交通路面情况自动开关灯。
当灯出现故障不亮时,能够检测并且通过声光系统报警,显示器上显示故障灯的编号。
自制的单元控制器中的LED灯恒流驱动电源,在多数情况下,具有系统稳定,功耗低等特点
关键词:
定时设定调光功率调节检测故障灯
模拟路灯控制系统
控制系统结构如图1所示,路灯布置如图2所示。
图1路灯控制系统示意图
图2路灯布置示意图(单位:
cm)
要求
(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。
(2)支路控制器应能根据交通情况自动调节亮灯状态:
当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相反
(3)支路控制器应能根据环境明暗变化,自动开灯和关灯。
。
(4)当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。
(5)支路控制器能分别独立控制每只路灯的开灯和关灯时间。
分频器
该模块主要用于分出时钟的计时频率,CLK0为输入时钟,1秒钟一个上
升沿,分别计时60和3600得到分钟和小时的
时钟频率CLK1和CLK2
模块仿真如下:
时钟
该模块主要用于实现时钟,在系统中用5个七段数码管来显示时间,在CLK1和CLK2的作用下,输出a00~e00这5个变量,送给数码管显示。
模块仿真图如下:
同时控制:
该模块主要实现对两只路灯设置同时开关灯的功能,CLK0在这里作为按键的消抖的时钟,KE为开灯确定键,当其为高电平时,说明设定的是开灯时间,GE为关灯确定键,当其为高电平时,表明设定的是关灯时间。
而J1、J2分别为分钟和小时的增加键,用来设定时间。
。
L1,L2模拟本模块中的两个路灯,a11~e11用来作为设定时间时实时显示,aa0~ee0和aa1~ee1分别为设定的开关灯时间。
其仿真图如下:
自动调节:
根据设计要求,该模块主要实现支路控制器应能根据交通情况自动调节亮灯状态。
LR为方向使能,当其为“10”时表明从左边进入,当其为“01”时,说明从右边进入,S1S2S3模拟感应传感器,能根据不同的情况输出高低电平。
L3,L4模拟该模块中的两只路灯。
其仿真图如下:
译码显示
该模块主要是接收相应模块的输出变量,将其译码后送给数码管显示。
RESET为复位使能,当其为高电平时,数码管全部显示0,J0为模式选择键,KEYD是显示时间使能,ee为故障路灯的地址编号,系统一直在检测着故障信号的到来,否则将永远不会把ee的值显示出来。
LED1~LED5为5个数码管,该模块根据J0和KEYD信号的控制,选通着a00~e00,a11~e11,a22~e22,a33~e33各段的数值。
其仿真图如下:
模式选择
该模块主要实现对各种模式下的模拟路灯信号的选通。
B1、B2模拟路灯故障使能,J0为模式选择键,L1、L2、L11、
L22、L3、L4、L5、L6为不同模式下的模拟路灯信号。
LED1和LED2模拟两个路灯,ring为蜂鸣器输出,ee为故障路灯编号输出。
其仿真图如下:
源程序
---分频器:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFQ_DIVIDERIS
PORT(CLK0:
INSTD_LOGIC;
CLK1,CLK2:
OUTSTD_LOGIC);
ENDFQ_DIVIDER;
ARCHITECTUREBHVOFFQ_DIVIDERIS
SIGNALCNT1:
INTEGER:
=0;
SIGNALCNT2:
INTEGER:
=0;
BEGIN
PROCESS(CNT1,CLK0)
BEGIN
IFCLK0'EVENTANDCLK0='1'THEN
IF(CNT1<60)THEN
CNT1<=CNT1+1;CLK1<='0';
ELSE
CNT1<=0;
CLK1<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT2,CLK0)
BEGIN
IFCLK0'EVENTANDCLK0='1'THEN
IF(CNT2<3600)THEN
CNT2<=CNT2+1;CLK2<='0';
ELSE
CNT2<=0;
CLK2<='1';
ENDIF;
ENDIF;
ENDPROCESS;
ENDBHV;
---时钟
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYTIME_COUNTERIS
PORT(CLK1,CLK2:
INSTD_LOGIC;
a00,b00,c00,d00,e00:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDTIME_COUNTER;
ARCHITECTUREBHVOFTIME_COUNTERIS
SIGNALa0,b0,c0,d0:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK1,a0,b0)
BEGIN
IFCLK1'EVENTANDCLK1='1'THEN
IF((a0="1001")AND(b0="0101"))THEN
a0<="0000";b0<="0000";
ELSIF(a0<"1001")THEN
a0<=a0+1;
ELSIF(a0="1001")THEN
a0<="0000";b0<=b0+1;
ENDIF;
ENDIF;
a00<=a0;
b00<=b0;
ENDPROCESS;
PROCESS(CLK2,c0,d0)
BEGIN
IFCLK2'EVENTANDCLK2='1'THEN
IF((c0="0011")AND(d0="0010"))THEN
c0<="0000";d0<="0000";
ELSIF(c0<"1001")THEN
c0<=c0+1;
ELSIF(c0="1001")THEN
c0<="0000";d0<=d0+1;
ENDIF;
ENDIF;
c00<=c0;
d00<=d0;
e00<="0000";
ENDPROCESS;
ENDBHV;
--同时调节
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSYNCHRONIS
PORT(CLK0,J1,J2,KE,GE:
INSTD_LOGIC;
a00,b00,c00,d00,e00:
INSTD_LOGIC_VECTOR(3DOWNTO0);
a11,b11,c11,d11,e11:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
aa0,bb0,cc0,dd0,ee0,aa1,bb1,cc1,dd1,ee1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
L1,L2:
OUTSTD_LOGIC);
ENDSYNCHRON;
ARCHITECTUREBHVOFSYNCHRONIS
SIGNALa0,b0,c0,d0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALReg3,Reg2,Reg1,Reg0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALReg7,Reg6,Reg5,Reg4:
STD_LOGIC_VECTOR(3DOWNTO0);
--SIGNALX,Y:
STD_LOGIC;
--SIGNALa22,b22,c22,d22:
INTEGERRANGE0TO9;
--SIGNALL1L2:
STD_LOGIC_VECTOR(1DOWNTO0):
="00";
BEGIN
e11<="0000";
PROCESS(CLK0,J1,a0,b0)
BEGIN
IFJ1='1'THEN
IFCLK0'EVENTANDCLK0='1'THEN
IF((a0="1001")AND(b0="0101"))THEN
a0<="0000";b0<="0000";
ELSIF(a0<"1001")THEN
a0<=a0+1;
ELSIF(a0="1001")THEN
a0<="0000";b0<=b0+1;
ENDIF;
ENDIF;
ENDIF;
a11<=a0;
b11<=b0;
ENDPROCESS;
PROCESS(CLK0,c0,d0,J2)
BEGIN
IFJ2='1'THEN
IFCLK0'EVENTANDCLK0='1'THEN
IF((c0="0011")AND(d0="0010"))THEN
c0<="0000";d0<="0000";
ELSIF(c0<"1001")THEN
c0<=c0+1;
ELSIF(c0="1001")THEN
c0<="0000";d0<=d0+1;
ENDIF;
ENDIF;
ENDIF;
c11<=c0;
d11<=d0;
ENDPROCESS;
PROCESS(KE,Reg3,Reg2,Reg1,Reg0,a0,b0,c0,d0)
BEGIN
IF(KE='1')THEN
Reg0<=a0;
Reg1<=b0;
Reg2<=c0;
Reg3<=d0;
ELSE
Reg0<="0000";
Reg1<="0000";
Reg2<="0000";
Reg3<="0000";
ENDIF;
ENDPROCESS;
PROCESS(GE,Reg7,Reg6,Reg5,Reg4,a0,b0,c0,d0)
BEGIN
IF(GE='1')THEN
Reg4<=a0;
Reg5<=b0;
Reg6<=c0;
Reg7<=d0;
ELSE
Reg4<="0000";
Reg5<="0000";
Reg6<="0000";
Reg7<="0000";
ENDIF;
ENDPROCESS;
PROCESS(Reg7,Reg6,Reg5,Reg4,Reg3,Reg2,Reg1,Reg0,a00,b00,c00,d00)
BEGIN
IF((a00/=Reg0)OR(b00/=Reg1)OR(c00/=Reg2)OR(d00/=Reg3))OR((a00=Reg4)AND(b00=Reg5)AND(c00=Reg6)AND(d00=Reg7))THEN
L1<='0';
L2<='0';ELSE
L1<='1';
L2<='1';
ENDIF;
ENDPROCESS;
PROCESS(Reg7,Reg6,Reg5,Reg4,Reg3,Reg2,Reg1,Reg0)
BEGIN
aa0<=Reg0;
bb0<=Reg1;
cc0<=Reg2;
dd0<=Reg3;
ee0<="0000";
aa1<=Reg4;
bb1<=Reg5;
cc1<=Reg6;
dd1<=Reg7;
ee1<="0000";
ENDPROCESS;
ENDBHV;
--自动调节
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYEN_ADAPTIVEIS
PORT(LR:
INSTD_LOGIC_VECTOR(1DOWNTO0);
S1S2S3:
INSTD_LOGIC_VECTOR(2DOWNTO0);
L3,L4:
OUTSTD_LOGIC);
ENDENTITYEN_ADAPTIVE;
ARCHITECTUREBHVOFEN_ADAPTIVEIS
BEGIN
PROCESS(LR,S1S2S3)
BEGIN
IFLR="10"THEN
IFS1S2S3="100"THENL3<='1';L4<='0';
ELSIFS1S2S3="010"THENL3<='0';L4<='1';
ELSIFS1S2S3="001"THENL3<='0';L4<='0';
ENDIF;
ELSIFLR="01"THEN
IFS1S2S3="001"THENL3<='0';L4<='1';
ELSIFS1S2S3="010"THENL3<='1';L4<='0';
ELSIFS1S2S3="100"THENL3<='0';L4<='0';
ENDIF;
ENDIF;
ENDPROCESS;
ENDBHV;
--译码显示
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDISPLAYIS
PORT(RESET:
INSTD_LOGIC;
J0:
INSTD_LOGIC_VECTOR(2DOWNTO0);
KEYD,ee:
INSTD_LOGIC;
a00,b00,c00,d00,e00:
INSTD_LOGIC_VECTOR(3DOWNTO0);
a11,b11,c11,d11,e11:
INSTD_LOGIC_VECTOR(3DOWNTO0);
a22,b22,c22,d22,e22:
INSTD_LOGIC_VECTOR(3DOWNTO0);a33,b33,c33,d33,e33:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED1,LED2,LED3,LED4,LED5:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));--数码管
ENDDISPLAY;
ARCHITECTUREBHVOFDISPLAYIS
SIGNALa,b,c,d,e:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(a,b,c,d,e,RESET)
BEGIN
IFRESET='1'THEN
LED1<="0111111";
LED2<="0111111";
LED3<="0111111";
LED4<="0111111";
LED5<="0111111";
ELSE
CASEaIS--七段输出译码
WHEN"0000"=>LED1<="0111111";
WHEN"0001"=>LED1<="0000110";
WHEN"0010"=>LED1<="1011011";
WHEN"0011"=>LED1<="1001111";
WHEN"0100"=>LED1<="1100110";
WHEN"0101"=>LED1<="1101101";
WHEN"0110"=>LED1<="1111101";
WHEN"0111"=>LED1<="0000111";
WHEN"1000"=>LED1<="1111111";
WHEN"1001"=>LED1<="1101111";
WHENOTHERS=>LED1<="0111111";
ENDCASE;
CASEbIS--七段输出译码
WHEN"0000"=>LED2<="0111111";
WHEN"0001"=>LED2<="0000110";
WHEN"0010"=>LED2<="1011011";
WHEN"0011"=>LED2<="1001111";
WHEN"0100"=>LED2<="1100110";
WHEN"0101"=>LED2<="1101101";
WHEN"0110"=>LED2<="1111101";
WHEN"0111"=>LED2<="0000111";
WHEN"1000"=>LED2<="1111111";
WHEN"1001"=>LED2<="1101111";
WHENOTHERS=>LED2<="0111111";
ENDCASE;
CASEcIS
WHEN"0000"=>LED3<="0111111";
WHEN"0001"=>LED3<="0000110";
WHEN"0010"=>LED3<="1011011";
WHEN"0011"=>LED3<="1001111";
WHEN"0100"=>LED3<="1100110";
WHEN"0101"=>LED3<="1101101";
WHEN"0110"=>LED3<="1111101";
WHEN"0111"=>LED3<="0000111";
WHEN"1000"=>LED3<="1111111";
WHEN"1001"=>LED3<="1101111";
WHENOTHERS=>LED3<="0111111";
ENDCASE;
CASEdIS
WHEN"0000"=>LED4<="0111111";
WHEN"0001"=>LED4<="0000110";
WHEN"0010"=>LED4<="1011011";
WHEN"0011"=>LED4<="1001111";
WHEN"0100"=>LED4<="1100110";
WHEN"0101"=>LED4<="1101101";
WHEN"0110"=>LED4<="1111101";
WHEN"0111"=>LED4<="0000111";
WHEN"1000"=>LED4<="1111111";
WHEN"1001"=>LED4<="1101111";
WHENOTHERS=>LED4<="0111111";
ENDCASE;
CASEeIS
WHEN"0000"=>LED5<="0111111";
WHEN"0001"=>LED5<="0000110";
WHEN"0010"=>LED5<="1011011";
WHEN"0011"=>LED5<="1001111";
WHEN"0100"=>LED5<="1100110";
WHEN"0101"=>LED5<="1101101";
WHEN"0110"=>LED5<="1111101";
WHEN"0111"=>LED5<="0000111";
WHEN"1000"=>LED5<="1111111";
WHEN"1001"=>LED5<="1101111";
WHENOTHERS=>LED5<="0111111";
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(a,b,c,d,e,J0,KEYD,a00,b00,c00,d00,e00,a11,b11,c11,d11,e11,a22,b22,c22,d22,e22,a33,b33,c33,d33,e33)
BEGIN
IF(J0="001"ANDKEYD='0')THEN
a<=a11;
b<=b11;
c<=c11;
d<=d11;
e<=e11;
ELSIF(J0="010"ANDKEYD='0')THEN-
a<=a22;
b<=b22;
c<=c22;
d<=d22;
e<=e22;
ELSIF(((J0="001")OR(J0="010"))AND(KEYD='1'))THEN
a<=a33;
b<=b33;
c<=c33;
d<=d33;
e<=e33;
ELSE
a<=a00;
b<=b00;
c<=c00;
d<=d00;
e<=ee;
ENDIF;
ENDPROCESS;
ENDBHV;
--模式选择
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYMODEL_SELIS
PORT(B1,B2:
INSTD_LOGIC;
L1,L2,L11,L22,L3,L4,L5,L6:
INSTD_LOGIC;
J0:
INSTD_LOGIC_VECTOR(2DOWNTO0);
ee:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
ring,LLED1,LLED2:
OUTSTD_LOGIC);
ENDENTITYMODEL_SEL;
ARCHITECTUREBHVOFMODEL_SELIS
BEGIN
PROCESS(B1,B2)
BEGIN
IFB1='1'THEN
ee<="0001";
ring<='1';
ELSIFB2='1'THEN
ee<="0010";
ring<='1';
ELSE
ee<="0000";
ring<='0';
ENDIF;
ENDPROCESS;
PROCESS(J0,L1,L2,L11,L22,L3,L4,L5,L6)
BEGIN
IFJ0="001"THEN
LLED1<=L1;
LLED2<=L2;
ELSIFJ0="010"THEN
LLED1<=L11;
LLED2<=L22;
ELSIFJ0="011"THEN
LLED1<=L3;
LLED2<=L4;
ELSI