基于EDA技术基础的交通灯设计论文.docx
《基于EDA技术基础的交通灯设计论文.docx》由会员分享,可在线阅读,更多相关《基于EDA技术基础的交通灯设计论文.docx(21页珍藏版)》请在冰点文库上搜索。
![基于EDA技术基础的交通灯设计论文.docx](https://file1.bingdoc.com/fileroot1/2023-5/17/53fb729f-640b-425f-96e5-43a5f3341c48/53fb729f-640b-425f-96e5-43a5f3341c481.gif)
基于EDA技术基础的交通灯设计论文
基于EDA技术的交通灯设计
班级:
姓名:
学号:
指导教师:
1、绪论
1.1课程设计背景
随着世界范围内城市化和机动化进程的加快,城市交通越来越成为一个全球化的问题。
城市交通基础设施供给滞后于高速机动化增长需求,道路堵塞日趋加重,交通事故频繁,环境污染加剧等问题普遍存在。
目前,全国大中城市普遍存在着道路拥挤、车辆堵塞、交通秩序混乱的现象,交通事故频发,这给人民的生命财产安全带来了极大的损失。
如何解决城市交通问题已成为全社会关注的焦点和大众的迫切呼声。
探究城市交通发展中存在问题的原因,无论是从宏观上还是从微观上分析,其根本原因在于城市交通系统的管理机制不适应。
城市交通控制系统(UTC,UrbanTrafficControlSystem)是现代城市智能交通系统(IDJ,Intelligenttransportsystem)的组成之一,主要用于城市道路交通的控制与管理。
城市平交路口实现交通信号控制是城市交通管理现代化的基本标志之一,是提高交通管理效能的重要技术手段。
路口信号控制器是控制交叉路口交通信号的设备,它是交通信号控制的重要组成部分。
各种交通控制方案,最终都要由路口信号控制器来实现。
为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。
伴随着社会的发展以及人类生活水平的提高,汽车的数量在不断增加,EDA技术的发展和应用领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域的重要性日益突出。
利用EDA技术设计交通灯来完成这个需求就显的更加迫切,同样也是非常的实用和合理。
1.2课程设计目
a.掌握十字路口交通灯控制的设计原理,并能够运用VHDL编程语言编写出实验程序,进一步对所学的EDA知识进行掌握与实际应用。
b.学会在MAX+plusⅡ软件环境中仿真,熟悉软件的基本操作和运行环境。
c.锻炼自己获取信息的能力,以及能够独立自主的思考和解决问题的能力。
2、系统分析与总体方案
2.1系统分析
通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、东西各四个灯(红、黄、绿、左转),四个灯能够按顺序依次亮灭。
而且要求绿灯亮转红灯亮或者转左转灯亮之前要先转黄灯亮5秒,左转灯亮转红灯亮之前也要先转黄灯亮5秒,红灯亮可以直接转绿灯或左转灯亮(四种灯的循环顺序如图2.1所示)。
还要求四种灯的点亮时间能够以倒计时的形式显示出来。
可以用VHDL语言合理设计系统功能,使红黄绿左转灯的转换有一个准确的时间间隔和转换顺序。
图2.1四种灯的循环顺序
2.2方案比较
实现路口交通灯的方法很多,可以用标准逻辑器件、可变程序控制器和单片机等方案来实现。
若用单片机来实现的话,模型可以由电源电路、单片机主控电路、无限收发控制电路和显示电路四部分组成。
在电源电路中,需要用到+5V的直流稳压电源,无限收发控制电路和显示电路应由编码芯片和数据发射模块两部分组成,主控电路的主要元件为AT89C51。
硬件设计完成后还要利用计算机软件经行软件部分的设计才能够实现相应的功能。
虽然利用单片机系统设计的交通灯控制器相对来说比较稳定,能够完成较多功能的实现,但这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改和系统设计与调试的困难。
相反,使用基于FPGA的方法具有周期短、使用灵活、易于修改等明显的优点。
而且,随着FPGA器件,设计语言和电子设计自动化工具的发展和改进,越来越多的电子系统采用FPGA来设计。
未来使用FPGA器件设计的产品将出现在各个领域。
因此此次的交通灯控制器将基于FPGA的设计方案来实现所需要的功能。
2.3设计的总体方案
根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图3.1所示:
图2.2系统的框图
3、硬件电路设计
3.1分频器设计
分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示电路。
具体实物模块如图:
图3.1分频器模块
3.2状态控制电路设计
状态控制器的作用是根据计数器的计数值控制各方向上发光二极管的亮、灭,当计时时间到达,状态控制器就响应,自动跳转到下一个状态。
此外,当检测到特殊情况(EMI=‘1’)发生时,无条件点亮红灯的二极管(急救灯按下EMI='1',则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南北方向定时时间保持不变。
急救灯未按下或者按下后恢复,则继续计时(计时通过计数器ct),同时恢复东西南北原来灯的状态)。
具体实物模块如图:
图3.2控制电路模块
3.3计数器设计
这里需要的计数器的计数范围为0-80。
计到80后,下一个时钟沿回复到0,开始下一轮计数。
此外,当检测到特殊情况(EMI=‘1’)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。
图3.3计数器模块
3.4译码显示电路设计
根据状态控制器所控制的状态和计数器的计时时间,选择当前状态下的显示器,使显示器输出当前状态下的数码管亮、灭指令,其中数码管的显示采用动态扫描显示。
具体实物模块如图:
图3.4译码显示电路模块
4、实验程序设计
一个完整的VHDL语言程序通常包括实体(Entity)、构造体(Architecture)、配置、包集合(Package)和库(Library)5个部分组成。
下面结合实际的程序来加以说明。
4.1实体定义:
libraryIEEE;
useIEEE.std_logic_1164.all;
entitytraffic_lightis
port(clk:
instd_logic;--时钟频率为250KHz.
start:
instd_logic;--交通灯控制:
'1'开,'0'关.
EMI:
instd_logic;--急救灯控制,'1'所有红灯亮.
ew_rled:
outstd_logic;--东西红灯控制,'0'开,'1'关.
ew_gled:
outstd_logic;--东西绿灯控制,'0'开,'1'关.
ew_yled:
outstd_logic;--东西黄灯控制,'0'开,'1'关.
ew_turnled:
outstd_logic;--东西左转灯控制,'0'开,'1'关
sn_rled:
outstd_logic;--南北红灯控制,'0'开,'1'关
sn_gled:
outstd_logic;--南北绿灯控制,'0'开,'1'关
sn_yled:
outstd_logic;--南北黄灯控制,'0'开,'1'关
sn_turnled:
outstd_logic;--南北左转灯控制,'0'开,'1'关
L:
outstd_logic_vector(2downto0);--显示器选取
dled:
outstd_logic_vector(7downto0));--显示器数据输出
endtraffic_light;
4.2译码显示:
architecturecontroloftraffic_lightis
TYPEeastwestIS(ew_red,ew_green,ew_yellow0,ew_yellow1,ew_turnl);
TYPEsouthnorthIS(sn_red,sn_green,sn_yellow0,sn_yellow1,sn_turnl);
signalew_state:
eastwest;
signalsn_state:
southnorth;
begin
process(clk)
functiondisplay(s:
integerrange0to9)returnstd_logic_vectoris
variableresult:
std_logic_vector(7downto0);
begin
casesis
when0=>result:
=X"FC";--0
when1=>result:
=X"60";--1
when2=>result:
=X"DA";--2
when3=>result:
=X"F2";--3
when4=>result:
=X"66";--4
when5=>result:
=X"B6";--5
when6=>result:
=X"BE";--6
when7=>result:
=X"E0";--7
when8=>result:
=X"FE";--8
when9=>result:
=X"F6";--9
whenothers=>null;
endcase;
returnresult;
enddisplay;
4.3状态转换:
variablecnt:
integerrange0to7;
variablect:
integerrange0to5;
variableew_secondH,sn_secondH:
integerrange0to8;
variableew_secondL,sn_secondL:
integerrange0to9;
begin
ifstart='0'then–初始化
dled<=X"00";
ew_state<=ew_red;
sn_state<=sn_green;
ew_secondH:
=8;ew_secondL:
=0;
sn_secondH:
=5;sn_secondL:
=0;
ew_rled<='0';ew_gled<='1';ew_yled<='1';ew_turnled<='1';
sn_rled<='1';sn_gled<='0';sn_yled<='1';sn_turnled<='1';
elsifclk'eventandclk='1'then--clkrisingedgedetection
cnt:
=cnt+1;
ifEMI='1'then
ew_rled<='0';ew_gled<='1';ew_yled<='1';ew_turnled<='1';
sn_rled<='0';sn_gled<='1';sn_yled<='1';sn_turnled<='1';
else
ct:
=ct+1;
caseew_stateis
whenew_red=>ew_rled<='0';ew_gled<='1';ew_yled<='1';ew_turnled<='1';--东西向红灯
whenew_green=>ew_rled<='1';ew_gled<='0';ew_yled<='1';ew_turnled<='1';--东西向绿灯
whenew_yellow0=>ew_rled<='1';ew_gled<='1';ew_yled<='0';ew_turnled<='1';--东西向黄灯
whenew_yellow1=>ew_rled<='1';ew_gled<='1';ew_yled<='0';ew_turnled<='1';--东西向黄灯
whenew_turnl=>ew_turnled<='0';ew_rled<='1';ew_gled<='1';ew_yled<='1';--东西向左转灯
whenothers=>ew_rled<='0';ew_gled<='1';ew_yled<='1';ew_turnled<='1';--东西向红灯
endcase;
casesn_stateis
whensn_red=>sn_rled<='0';sn_gled<='1';sn_yled<='1';sn_turnled<='1';--南北向红灯
whensn_green=>sn_rled<='1';sn_gled<='0';sn_yled<='1';sn_turnled<='1';--南北向绿灯
whensn_yellow0=>sn_rled<='1';sn_gled<='1';sn_yled<='0';sn_turnled<='1';--南北向黄灯
whensn_yellow1=>sn_rled<='1';sn_gled<='1';sn_yled<='0';sn_turnled<='1';--南北向黄灯
whensn_turnl=>sn_turnled<='0';sn_rled<='1';sn_gled<='1';sn_yled<='1';--南北向左转灯
whenothers=>sn_rled<='0';sn_gled<='1';sn_yled<='1';sn_turnled<='1';--南北向红灯
endcase;
endif;
ifct=5then
ct:
=0;
ifew_secondH=0andew_secondL=0then–状态结束
caseew_stateis–东西向当前状态
whenew_red=>ew_state<=ew_green;ew_secondH:
=5;ew_secondL:
=0;--下一状态的绿灯
whenew_green=>ew_state<=ew_yellow0;ew_secondH:
=0;ew_secondL:
=5;--下一状态的黄灯
whenew_yellow0=>ew_state<=ew_turnl;ew_secondH:
=2;ew_secondL:
=0;--下一状态的左转灯
whenew_turnl=>ew_state<=ew_yellow1;ew_secondH:
=0;ew_secondL:
=5;--下一状态的黄灯
whenew_yellow1=>ew_state<=ew_red;ew_secondH:
=8;ew_secondL:
=0;--下一状态的红灯
whenothers=>ew_state<=ew_red;ew_secondH:
=8;ew_secondL:
=0;--下一状态的红灯
endcase;
elsifew_secondL=0then
ew_secondL:
=9;
ew_secondH:
=ew_secondH-1;
else
ew_secondL:
=ew_s_secondL-1;
endif;
ifsn_secondH=0andsn_secondL=0then–状态结束
casesn_stateis–南北向当前状态
whensn_red=>sn_state<=sn_green;sn_secondH:
=5;sn_secondL:
=0;--下一状态的绿灯
whensn_green=>sn_state<=sn_yellow0;sn_secondH:
=0;sn_secondL:
=5;--下一状态的黄灯
whensn_yellow0=>sn_state<=sn_turnl;sn_secondH:
=2;sn_secondL:
=0;--下一状态的左转灯
whensn_turnl=>sn_state<=sn_yellow1;sn_secondH:
=0;sn_secondL:
=5;--下一状态的黄灯
whensn_yellow1=>sn_state<=sn_red;sn_secondH:
=8;sn_secondL:
=0;--下一状态的红灯
whenothers=>sn_state<=sn_red;sn_secondH:
=8;sn_secondL:
=0;--下一状态的红灯
endcase;
elsifsn_secondL=0then
sn_secondL:
=9;
sn_secondH:
=sn_secondH-1;
else
sn_secondL:
=sn_secondL-1;
endif;
endif;
4.4显示器片选:
casecntis–显示时间
when0=>L<="000";dled<=display(ew_secondH);
when1=>L<="001";dled<=display(ew_secondL);
when2=>L<="010";dled<=X"00";
when3=>L<="011";dled<=X"00";
when4=>L<="100";dled<=X"00";
when5=>L<="101";dled<=X"00";
when6=>L<="110";dled<=display(sn_secondH);
when7=>L<="111";dled<=display(sn_secondL);
endcase;
endif;
endprocess;
endcontrol;
5、程序仿真与分析
5.1仿真结果
利用MAX+PLUSII软件对本程序进行编译,生成了可以进行仿真定时分析以及下载到可编程器件的相关文件。
仿真结果如图5.1所示:
图5.1仿真结果
5.2仿真结果分析
通过设定clk值以及start和EMI的初值,就可以得到如上所示的仿真波形图。
由仿真波形图可以看出波形是由start初值信号触发而显示出各个状态的。
EMI高电平信号输入时,所有交通灯都变为红灯状态(符合任务书的要求)。
由仿真波形图还可以清楚的看出各时间段每个交通灯的状态。
要得到正确的仿真波形图就不许设定合适的时间信号clk值。
如果clk值设置的太小则交通灯状态变化得太快无法分辨,如果clk值设置得太大则交通灯状态转换缓慢,效果不明显。
其次,要设定start初值,如果没有设定start初值就不可能触发而得到仿真图。
最后,就是要设置一EMI高电平信号来检测紧急情况下的交通灯的状态。
5.3硬件运行结果
将程序下载到实验板上,经过硬件测试达到了设计要求,实现了交通灯控制器的基本功能,下图为运行结果图:
6、心得体会
EDA课程设计就要结束了,这次课程设计历时近二个星期,通过这两个星期的学习,发现了自己的很多不足,发现了很多知识上的漏洞。
同时也看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
这次课程设计让我学到了很多,不仅是巩固了先前学的EDA技术的理论知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。
在课程设计中一个人的力量是远远不够的,真正的完成任务需要共同的智慧与劳动,团结协作是我们成功的一项非常重要的保证。
在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。
还有一点是我们做任何事情都无法缺少的,那就是细心认真。
此次设计我们就深深地体会到了,由于编程的时候没有做到足够的细心,导致一串代码弄混了。
但是密密麻麻的英文字母混在一起,我始终没有发现。
最终在调试的时候,就出现了问题。
只知道出现了问题,就是不知道到问题的根源在哪里,好长时间都没有找出问题的所在。
这也让我真正的明白了,科学的严谨性,它不允许出半点差错,否则后果会是比较麻烦的。
做其他事情也一样,都需要我们付出足够的认真去对待,才能顺利的完成。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
虽然我这次做的课程设计不是非常的复杂,但在设计和仿真的过程中,我们也遇到了不少的困难,回首整个过程,却受益匪浅。
对我而言,知识上的收获重要,精神上的丰收更加可喜。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆!
参考文献
[1]阎石主编,《数字电子技术基础》,高等教育出版社,1998
[2]谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001
[3]廖裕评等主编,《CPLD数字电路设计——使用MAX+plusⅡ入门篇》,清华大学出版社,2001
[4]冯涛等主编,《可编程逻辑器件开发技术:
MAX+plusⅡ入门与提高》,人民邮电出版社,2002
[5]杨崇志,《特殊新型电子元件手册》,辽宁科学技术出版社,1999
[6]彭介华,《电子技术课程设计指导》高等教育出版社.2000年出版.
[7]MarkZwolinski,DigitalSystemDesignwithVHDL,电子工业出版社,2002
[8]AlanB.MarcovitzIntroductiontologicDesign,电子工业出版社,2002
附录A、仿真时序波形图
附录B、VHDL源程序代码
libraryIEEE;
useIEEE.std_logic_1164.all;
entitytraffic_lightis
port(clk:
instd_logic;--时钟频率为250KHz.
start:
instd_logic;--交通灯控制:
'1'开,'0'关.
EMI:
instd_logic;--急救灯控制,'1'所有红灯亮.
ew_rled:
outstd_logic;--东西红灯控制,'0'开,'1'关.
ew_gled:
outstd_logic;--东西绿灯控制,'0'开,'1'关.
ew_yled:
outstd_logic;--东西黄灯控制,'0'开,'1'关.
ew_turnled:
outstd_logic;--东西左转灯控制,'0'开,'1'关
sn_rled:
outstd_logic;--南北红灯控制,'0'开,'1'关
sn_gled:
outstd_logic;--南北绿灯控制,'0'开,'1'关
sn_yled:
outstd_logic;--南北黄灯控制,'0'开,'1'关
sn_turnled:
outstd_logic;--南北左转灯控制,'0'开,'1'关
L:
outstd_logic_vector(2downto0);--显示器选取
dled:
outstd_logic_vector(7downto0));--显示器数据输出
endtraffic_light;
architecturecontroloftraffic_lightis
TYPEeastwestIS(ew_red,ew_green,ew_yellow0,ew_yellow1,ew_turnl);