eda交通信号灯控制系统设计.docx
《eda交通信号灯控制系统设计.docx》由会员分享,可在线阅读,更多相关《eda交通信号灯控制系统设计.docx(21页珍藏版)》请在冰豆网上搜索。
eda交通信号灯控制系统设计
河南机电高等专科学校
《VHDL程序设计》结课大作业
交通信号灯控制系统设计
姓名:
笑嘻嘻思想
专业班级:
笑嘻嘻笑嘻嘻思想
学 号:
笑嘻嘻笑嘻嘻思想
任课教师:
笑嘻嘻笑嘻嘻思想
时间:
2010-11-23
成绩:
交通信号灯控制系统设计
应电08级1班 靳晓龙 任课老师:
石新峰
摘要:
伴随着社会的发展以及人类生活水平的提高,汽车的数量的增加。
DEA技术的发展和应用领域的扩大与深入,EDA技术在电子信息,通信,自动,控制及计算机应用等领域的重要性日益突出。
随着技术市场与人才市场对DEA的不断的增加,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了.为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。
交通灯控制系统设计城市路口交通信号控制系统大体上分为三种类型:
定周期的信号机、多时段且具有无电缆协调功能的微电脑型信号机以及联网式自适应多相位智能型信号机。
具体采用哪种类型,应根据其应用场合及特点加以确定。
其中,第一种类型以其成本低,设计简单,安装及维护方便等特点得到了广泛应用。
以下就是运用数字电子设计出的交通灯:
其中红灯亮,表示该条路禁止通行;黄灯亮表示停车;绿灯亮表示允许通行。
交通灯控制器控制两个主干道交叉路口的交通,路口车辆多,直行信号、左转弯信号分开显示,a,b两个主干道的通行时间相等,其中指示直行的绿灯亮30s,指示左转弯的绿灯亮12 s,绿灯变至红灯时,黄灯亮3s,以便于车辆能停在停车线内,红灯信号的最后3s相应的黄灯也同时亮,以便提示驾驶人员准备起步。
在两个主干道路口都配备传感器用来检测有无车辆通行。
当两个主干道都有车辆时,自动处于主干道a绿灯,主干道b红灯的状态,然后轮流切换通行。
当主干道a无车辆时,自动处于主干道b绿灯,主干道a红灯的状态;反之亦然,以提高通行效率。
关键词:
交通灯控制系统;分频器;信号控制器;VHDL语言
1概述………………………………………………………………………………1
2设计要求………………………………………………………………4
3总体构思…………………………………………………………10
4各单元电路的设计和实现………………………………………15
5 功能仿真及其结果………………………………………………19
6编译、下载及调试………………………………………………25
7总结与展望…………………………………………………………30
参考文献……………………………………………………………35
1概述
随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
随着城市机动车量的不断增加,许多大城市如北京、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。
然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。
而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。
所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。
2设计要求
设计一个十字路口的交通灯控制系统,用实验平台上的LED发光二极管显示车辆通过的方向(东西和南北各一组),用数码管显示该方向的剩余时间。
要求:
工作顺序为东西方向红灯亮45秒,前40秒南北方向绿灯亮,后5秒黄灯亮。
然后南北方向红灯亮45秒,前40秒东西方向绿灯亮,后5秒黄灯亮。
依次重复。
有紧急事件时允许将某方向一直开绿灯或者开红灯,另外允许特定情况两方向均为红灯,车辆禁行,比如十字路口恶性交通事故时,东西,南北两个方向均有两位数码管适时显示该方向亮灯时间。
3总体构思
(1)该交通灯控制器应具备的功能
设东西和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同,定为红灯45sec,黄灯5sec,绿灯40sec,同时用数码管指示当前状态(红、黄、绿)剩余时间。
另外,设计一个紧急状态,当紧急状态出现时,两个方向都禁止通行,指示红灯。
紧急状态解除后,重新计数并指示时间。
(2)实现方案
一 从题目中计数值与交通灯的亮灭的关系如图
(1)所示
4各单元电路的设计和实现
(1)分频器
分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。
该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号。
(2)控制器设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。
此外,当检测到特殊情况(HOLD=‘1’)发生时,无条件点亮红灯的二极管。
本控制器可以有两种设计方法,一种是利用时钟烟的下降沿读取前级计数器的计数值,然后作出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。
这两种方法各有所长,必须根据所用器件的特性进行选择:
比如有些FPGA有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;而有些CPLD的组合逻辑资源则比较多,用第二种方法可能更好。
(3)计数器设计
这里需要的计数器的计数范围为0-90。
计到90后,下一个时钟沿回复到0,开始下一轮计数。
此外,当检测到特殊情况(HOLD=‘1’)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。
(4)分位译码电路设计--1
因为控制器输出的到计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如25分为2和5,7分为0和7)。
与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。
控制器中,引入了寄存器。
分位电路用组合逻辑电路实现。
(5)分位译码电路设计—2
(6)数码管驱动设计
串行连接,即每个数码管对应的引脚都接在一起(如每个数码管的a引脚都接到一起,然后再接到CPLD/FPGA上的一个引脚上),通过控制公共端为高电平控制相应数码管的亮、灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。
串行法的优点在于消耗的系统资源少,占用的I/O口少,N个数码管只需要(7+N)个引脚(如果需要小数点,则是(8+N)个引脚)。
其缺点是控制起来不如并行法容易。
(7)下图为交通灯控制系统硬件框图
图4:
交通灯控制系统硬件框图
5功能仿真及其结果
根据交通灯控制器的功能与要求,将其总体电路分为分频器、信号控制器两个模块。
外部脉冲振荡器的频率选为32768kHz,经分频器分频得1Hz的信号,1Hz信号用做信号控制器的计数脉冲,用VHDL设计组成交通灯控制器的分频器、信号控制器两个模块,在QuartusⅡ开发平台上,分别编译两个模块的VHDL程序,然后用原理图输入法形成图1所示的总体框图。
其中,Sa,Sb分别是a,b路口传感器的信号,aR,aY,aG,aLR,aLY,aLG分别代表控制主干道a的直行红灯、黄灯、绿灯,左转弯红灯、黄灯、绿灯的信号;bR,bY,bG,bLR,bLY,bLG分别代表控制主干道b的直行红灯、黄灯、绿灯,左转弯红灯、黄灯、绿灯的信号;aPR,aPG,bPR,bPG是人行道信号,enl是使能信号。
enl=0时a,b两路口红灯同时亮,便于处理特殊情况。
用QuartusⅡ对程序编译、仿真,得到的仿真波形如图2所示,经程序下载、实验验证,系统功能符合要求。
6编译、下载及调试
(1)分频器的设计
LIBRARYIEEE;
USE IEEE.Std_Logic_1164.ALL;
ENTITYFreDeviderIS
PORT
(Clkin:
IN Std_Logic;
Clkout:
OUTStd_Logic);
END;
ARCHITECTURE Devider OF FreDeviderIS
CONSTANTN:
Integer:
=499;
signal counter:
Integerrange0 toN;
signalClk:
Std_Logic;
BEGIN
PROCESS(Clkin)
begin
IF rising_edge(Clkin)THEN
IF Counter=Nthen
counter<=0;
Clk<=notclk;
else
counter<=counter+1;
end if;
endif;
end process;
clkout<=clk;
end;
(2)控制设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。
此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY countroller IS
PORT(Clock:
INSTD_LOGIC;
Hold:
instd_logic;
CountNum:
inINTEGERRANGE0TO89;
NumA,NumB:
out INTEGER RANGE0TO45;
RedA,GreenA,YellowA:
outstd_logic;
RedB,GreenB,YellowB:
outstd_logic);
END;
ARCHITECTURE behaviorOFCountrollerIS
BEGIN
process(Clock)
BEGIN
IFfalling_edge(Clock)THEN
IFHold='1' THEN
RedA<='1';
RedB<='1';
GreenA<='0';
GreenA<='0';
YellowA<='0';
YellowB<='0';
ELSIFCountNum<=39 THEN
NumA<=40-CountNum;
RedA<='0';
GreenA<='1';
YellowA<='0';
ELSIFCountNum<=44THEN
NumA<=45-CountNum;
RedA<='0';
GreenA<='0';
YellowA<='1';
ELSE
NumA<=90-CountNum;
RedA<='1';
GreenA<='0';
YellowA<='0';
END IF;
IF CountNum<=44THEN
NumB<=45-CountNum;
RedB<='1';
GreenB<='0';
YellowB<='0';
ELSIF CountNum<=84THEN
NumB<=85-CountNum;
RedB<='0';
GreenB<='1';
YellowB<='0';
ELSe
NumB<=90-CountNum;
RedB<='0';
GreenB<='0';
YellowB<='1';
END IF;
END IF;
ENDPROCESS;
END;
(3)计数器的设计
这里计数器的计数范围为0—45S。
计到45后,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=‘1‘)发生时,计数器暂停计数,而系统复位号Reset则使计数器异步清0。
程序如下:
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITYcounterIS
PORT(clock:
INSTD_LOGIC;
reset:
instd_logic;
Hold:
instd_logic;
countNum:
BuFFeR INTEGERRANGE0 TO90);
END;
ARCHITECTURE behaviorOFcounterIS
BEGIN
process(reset,Clock)
BEGIN
IFReset='1' THEN
countNum<=0;
ELSIFrising_edge(Clock)THEN
IFHold='1' then
countNum<=countNum;
ELSE
IFcountNum=90THEN
countNum<=0;
ELSE
countNum<=countNum+1;
ENDIF;
ENDIF;
END IF;
ENDPROCESS;
END;
(4)分位译码电路设计--1
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITY Fenwei IS
PORT
(Numin:
INinteger RANGE0TO 45;
NumA,NumB:
OUTInteger RANGE 0to 9
);
END;
ARCHITECTURE behaviorOF FenweiIS
BEGIN
process(Numin)
BEGIN
IF Numin>=40THEN
NumA<=4;
NumB<=Numin-40;
ELSIF Numin>=30THEN
NumA<=3;
NumB<=Numin-30;
ELSIFNumin>=20THEN
NumA<=2;
NumB<=Numin-20;
ELSIFNumin>=10 THEN
NumA<=1;
NumB<=Numin-10;
ELSE
NumA<=0;
NumB<=Numin;
ENDIF;
ENDPROCESS;
END;
(5)分位译码电路设计—2
USEIEEE.STD_LOGIC_1164.ALL;
ENTITY Fenwei2 IS
PORT
(Numin:
INintegerRANGE0TO 45;
NumC,NumD:
OUTIntegerRANGE 0 to9
);
END;
ARCHITECTUREbehaviorOFFenwei2IS
BEGIN
process(Numin)
BEGIN
IFNumin>=40THEN
NumC<=4;
NumD<=Numin-40;
ELSIFNumin>=30THEN
NumC<=3;
NumD<=Numin-30;
ELSIFNumin>=20 THEN
NumC<=2;
NumD<=Numin-20;
ELSIFNumin>=10 THEN
NumC<=1;
NumD<=Numin-10;
ELSE
NumC<=0;
NumD<=Numin;
ENDIF;
ENDPROCESS;
END;
(6)数码管驱动设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYbcd_dataIS
PORT
(bcd_data:
in STD_LOGIC_VECTOR(3downto0);
segout:
out STD_LOGIC_VECTOR(6downto 0)
);
END;
ARCHITECTUREbehaviorOFbcd_data IS
BEGIN
process(bcd_data)
BEGIN
case bcd_datais
when"0000"=>segout<="1111110";
when"0001"=>segout<="0110000";
when "0010"=>segout<="1101101";
when "0011" =>segout<="1111001";
when"0100"=>segout<="0110011" ;
when"0101"=>segout<="1011011";
when "0110"=>segout<="0011111";
when"0111"=>segout<="1110000";
when "1000"=>segout<="1111111";
when"1001"=>segout<="1110011";
when others=>null;
ENDCASE;
END PROCESS;
END;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_unsigned.ALL;
ENTITYdtsmIS
PORT(clk:
in STD_LOGIC;
NumA,NumB,NumC,NumD:
inSTD_LOGIC_VECTOR(3downto 0);
segout1:
out STD_LOGIC_VECTOR(6downto0);
led_sel:
outSTD_LOGIC_VECTOR(3downto0));
ENDdtsm;
architecture bhvofdtsmis
component bcd_data is
port(bcd_data:
inSTD_LOGIC_VECTOR(3downto0);
segout:
outSTD_LOGIC_VECTOR(6 downto 0));
endcomponent;
signal x:
STD_LOGIC_VECTOR(3downto 0);
signalq:
STD_LOGIC_VECTOR(1downto0);
begin
p1:
process(clk)
begin
ifclk'eventandclk='1'then
Q<=Q+'1';
endif;
endprocess;
p2:
process(Q)
begin
caseQ is
when"00"=>led_sel<="1110";x<=NumD;
when"01"=>led_sel<="1101";x<=NumC;
when"10"=>led_sel<="1011";x<=NumB;
when"11"=>led_sel<="0111";x<=NumA;
whenothers=>null;
end case;
endprocess;
u1:
bcd_dataPORTmap(bcd_data=>x,segout=>segout1);
end
(7)软件工作流程图
7总结与展望
EDA设计我感觉程序调试最重要,试验软件、硬件熟悉其次。
我在编完各模块程序之后,编译查错最初有三十几个错误,有输入错误、语法错误。
一遍一遍的变异查错,直到没有错误。
必须注意工程名和实体名一致,不然一般会出错。
在没有错误之后可以进行波型仿真。
若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。
都通过可以进行管脚配对,把程序烧入芯片,在实物机上看结果,从显示中得出还需改正的地方,再去改程序。
伴随着社会的发展以及人类生活水平的提高,汽车的数量的增加。
DEA技术的发展和应用领域的扩大与深入,EDA技术在电子信息,通信,自动,控制及计算机应用等领域的重要性日益突出。
随着技术市场与人才市场对DEA的不断的增加,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了.为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。
参考文献
(1)潘松,黄继业.2006.EDA技术使用教程.北京:
科学出版社。
(2)黄任;2005;VHDL入门.解惑.经典实例.经验总结.北京:
北京航空航天大学出版社。
(3)徐志军,徐光辉.2002.CPLD/FPGA的开发与应用.北京:
电子工业出版社。
(4)褚振勇.FPGA设计与应用.西安:
西安电子科技大学出版社。