您的当前位置:首页正文

交通信号灯控制器EDA设计

2022-03-16 来源:客趣旅游网
交通信号灯控制器

1 设计任务及要求

交通灯是城市交通中不可缺少的重要工具,是城市交通秩序的重要保障。十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。

一个十字路口的交通一般分为两个方向,每个方向具有红灯、绿灯和黄灯3种,另外每个方向还具有左转灯,因此每个方向具有4个灯。

这个交通灯还为每一个灯的状态设计了倒计时数码管显示功能。可以为每一个灯的状态设置一个初始值,灯状态改变后,开始按照这个初始值倒计时。倒计时归零后,灯的状态将会改变至下一个状态。

实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。它不顾当前道路上交通车辆数的实际情况变化,其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。 设计任务:

(1) 交通灯从绿变红时,有5秒黄灯亮的间隔时间; (2) 交通灯红变绿是直接进行的,没有间隔时间;

(3) 主干道上的绿灯时间为45秒,支干道的绿灯时间为25秒; (4) 在任意时间,显示每个状态到该状态结束所需的时间。 设计要求:

编辑版word

采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。

2设计原理及总体框图

交通灯控制器原理框图如下图所示,包括置数模块、计数模块、主控制器模

块和译码器模块。置数模块将交通灯的点亮时间预置到置数电路中,计数模块以秒为单位倒计时,当计数值减为零时,主控电路改变输出状态,电路进入下一个状态的倒计时。其中,核心部分是主控制模块。

红 绿 黄 红 绿 黄 清零 主控制器 特殊状态 定时计数器 置数器 译码器 图2.1原理框图

显示器

编辑版word

图2.2 实验电路

3 程序设计

VHDL是一种标准的硬件电路设计语言,目前已成为广大电路设计人员设计

数字系统首选的开发工具。基于VHDL硬件电路语言的编程与实际应用技巧,VHDL硬件电路语言在微机、通信、编码、存储器以及电子电路等方面的具体设计应用,具有实际的指导意义。

VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。VHDL主要用于描述数字系统的结构,行为,功能和接口。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。 (1)交通灯控制器JTDKZ设计模块与程序

编辑版word

图3.1 JTDKZ模块

源程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JTDKZ IS

PORT(CLK,SM,SB: IN STD_LOGIC; MR,MY,MG,BR,BY,BG: OUT STD_LOGIC); END JTDKZ;

ARCHITECTURE ART OF JTDKZ IS TYPE STATE_TYPE IS(A,B,C,D); SIGNAL STATE:STATE_TYPE; BEGIN

CNT:PROCESS(CLK) IS

VARIABLE S:INTEGER RANGE 0 TO 45; VARIABLE CLR,EN:BIT; BEGIN

IF(CLK'EVENT AND CLK='1')THEN

编辑版word

IF CLR='0'THEN S:=0;

ELSIF EN='0' THEN S:=S; ELSE S:=S+1; END IF; CASE STATE IS

WHEN A=>MR<='0';MY<='0';MG<='1'; BR<='1';BY<='0';BG<='0'; IF(SB AND SM)='1'THEN IF S=45 THEN

STATE<=B;CLR:='0';EN:='0'; ELSE

STATE<=A;CLR:='1';EN:='1'; END IF;

ELSIF(SB AND (NOT SM))='1'THEN STATE<=B;CLR:='0';EN:='0'; ELSE

STATE<=A;CLR:='1';EN:='1'; END IF;

WHEN B=>MR<='0';MY<='1';MG<='0';

编辑版word

BR<='1';BY<='0';BG<='0'; IF S=5 THEN

STATE<=C;CLR:='0';EN:='0'; ELSE

STATE<=B;CLR:='1';EN:='1'; END IF;

WHEN C=>MR<='1';MY<='0';MG<='0'; BR<='0';BY<='0';BG<='1'; IF(SM AND SB)='1'THEN IF S=25 THEN

STATE<=D;CLR:='0';EN:='0'; ELSE

STATE<=C;CLR:='1';EN:='1'; END IF;

ELSIF SB='0' THEN STATE<=D;CLR:='0';EN:='0'; ELSE

STATE<=C;CLR:='1';EN:='1'; END IF ;

WHEN D=>MR<='1';MY<='0';MG<='0'; BR<='0';BY<='1';BG<='0'; IF S=5 THEN

编辑版word

STATE<=A;CLR:='0';EN:='0'; ELSE

STATE<=D;CLR:='1';EN:='1'; END IF; END CASE; END IF;

END PROCESS CNT; END ARCHITECTURE ART;

(2)显示控制单元CSKZ设计模块与程序

图3.2 显示控制单元CSKZ模块

源程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CSKZ IS

PORT(EN45,EN25,EN05M,EN05B:IN STD_LOGIC; AIN45M,AIN45B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

编辑版word

AIN25M,AIN25B,AIN05:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUTM,DOUTB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ENTITY CSKZ;

ARCHITECTURE ART OF CSKZ IS BEGIN

PROCESS(EN45,EN25,EN05M,EN05B) IS BEGIN

IF EN45='1' THEN

DOUTM<=AIN45M(7 DOWNTO 0);DOUTB<=AIN45B(7 DOWNTO 0);

ELSIF EN05M ='1'THEN

DOUTM<=AIN05(7 DOWNTO 0);DOUTB<=AIN05(7 DOWNTO 0); ELSIF EN25='1' THEN

DOUTM<=AIN25M(7 DOWNTO 0); DOUTB<=AIN25B(7 DOWNTO 0); ELSIF EN05B='1' THEN

DOUTM<=AIN05(7 DOWNTO 0);DOUTB<=AIN05(7 DOWNTO 0); END IF ; END PROCESS;

END ARCHITECTURE ART;

(3)倒计时45s——CNT45s设计模块与程序

编辑版word

图3.3 CNT45s模块

源程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT45S IS

PORT(SB,CLK,EN45:IN STD_LOGIC;

DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END CNT45S;

ARCHITECTURE ART OF CNT45S IS

SIGNAL CNT6B:STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN

PROCESS(SB,CLK,EN45) IS BEGIN

IF SB='0' THEN CNT6B<=CNT6B-CNT6B-1; ELSIF(CLK'EVENT AND CLK='1')THEN IF EN45='1'THEN CNT6B<=CNT6B+1;

ELSIF EN45='0'THEN CNT6B<=CNT6B-CNT6B-1;

编辑版word

END IF; END IF; END PROCESS; PROCESS(CNT6B)IS BEGIN CASE CNT6B IS

WHEN\"000000\"=>DOUT45M<=\"01000101\";DOUT45B<=\"01010000\"; WHEN\"000001\"=>DOUT45M<=\"01000100\";DOUT45B<=\"01001001\"; WHEN\"000010\"=>DOUT45M<=\"01000011\";DOUT45B<=\"01001000\"; WHEN\"000011\"=>DOUT45M<=\"01000010\";DOUT45B<=\"01000111\"; WHEN\"000100\"=>DOUT45M<=\"01000001\";DOUT45B<=\"01000110\"; WHEN\"000101\"=>DOUT45M<=\"01000000\";DOUT45B<=\"01000101\"; WHEN\"000110\"=>DOUT45M<=\"00111001\";DOUT45B<=\"01000100\"; WHEN\"000111\"=>DOUT45M<=\"00111000\";DOUT45B<=\"01000011\"; WHEN\"001000\"=>DOUT45M<=\"00110111\";DOUT45B<=\"01000010\"; WHEN\"001001\"=>DOUT45M<=\"00110110\";DOUT45B<=\"01000001\"; WHEN\"001010\"=>DOUT45M<=\"00110101\";DOUT45B<=\"01000000\"; WHEN\"001011\"=>DOUT45M<=\"00110100\";DOUT45B<=\"00111001\"; WHEN\"001100\"=>DOUT45M<=\"00110011\";DOUT45B<=\"00111000\"; WHEN\"001101\"=>DOUT45M<=\"00110010\";DOUT45B<=\"00110111\"; WHEN\"001110\"=>DOUT45M<=\"00110001\";DOUT45B<=\"00110110\"; WHEN\"001111\"=>DOUT45M<=\"00110000\";DOUT45B<=\"00110101\";

编辑版word

WHEN\"010000\"=>DOUT45M<=\"00101001\";DOUT45B<=\"00110100\"; WHEN\"010001\"=>DOUT45M<=\"00101000\";DOUT45B<=\"00110011\"; WHEN\"010010\"=>DOUT45M<=\"00100111\";DOUT45B<=\"00110010\"; WHEN\"010011\"=>DOUT45M<=\"00100110\";DOUT45B<=\"00110001\"; WHEN\"010100\"=>DOUT45M<=\"00100101\";DOUT45B<=\"00110000\"; WHEN\"010101\"=>DOUT45M<=\"00100100\";DOUT45B<=\"00101001\"; WHEN\"010110\"=>DOUT45M<=\"00100011\";DOUT45B<=\"00101000\"; WHEN\"010111\"=>DOUT45M<=\"00100010\";DOUT45B<=\"00100111\"; WHEN\"011000\"=>DOUT45M<=\"00100001\";DOUT45B<=\"00100110\"; WHEN\"011001\"=>DOUT45M<=\"00100000\";DOUT45B<=\"00100101\"; WHEN\"011010\"=>DOUT45M<=\"00011001\";DOUT45B<=\"00100100\"; WHEN\"011011\"=>DOUT45M<=\"00011000\";DOUT45B<=\"00100011\"; WHEN\"011100\"=>DOUT45M<=\"00010111\";DOUT45B<=\"00100010\"; WHEN\"011101\"=>DOUT45M<=\"00010110\";DOUT45B<=\"00100001\"; WHEN\"011110\"=>DOUT45M<=\"00010101\";DOUT45B<=\"00100000\"; WHEN\"011111\"=>DOUT45M<=\"00010100\";DOUT45B<=\"00011001\"; WHEN\"100000\"=>DOUT45M<=\"00010011\";DOUT45B<=\"00011000\"; WHEN\"100001\"=>DOUT45M<=\"00010010\";DOUT45B<=\"00010111\"; WHEN\"100010\"=>DOUT45M<=\"00010001\";DOUT45B<=\"00010110\"; WHEN\"100011\"=>DOUT45M<=\"00010000\";DOUT45B<=\"00010101\"; WHEN\"100100\"=>DOUT45M<=\"00001001\";DOUT45B<=\"00010100\"; WHEN\"100101\"=>DOUT45M<=\"00001000\";DOUT45B<=\"00010011\";

编辑版word

WHEN\"100110\"=>DOUT45M<=\"00000111\";DOUT45B<=\"00010010\"; WHEN\"100111\"=>DOUT45M<=\"00000110\";DOUT45B<=\"00010001\"; WHEN\"101000\"=>DOUT45M<=\"00000101\";DOUT45B<=\"00010000\"; WHEN\"101001\"=>DOUT45M<=\"00000100\";DOUT45B<=\"00001001\"; WHEN\"101010\"=>DOUT45M<=\"00000011\";DOUT45B<=\"00001000\"; WHEN\"101011\"=>DOUT45M<=\"00000010\";DOUT45B<=\"00000111\"; WHEN\"101100\"=>DOUT45M<=\"00000001\";DOUT45B<=\"00000110\"; WHEN OTHERS=>DOUT45M<=\"01000110\";DOUT45B<=\"01010001\"; END CASE; END PROCESS;

END ARCHITECTURE ART;

(4)倒计时25s——CNT25s设计模块与程序

图3.4 CNT25s模块

源程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT25S IS

编辑版word

PORT(SB,SM,CLK,EN25:IN STD_LOGIC; DOUT25M,DOUT25B:OUT DOWNTO 0));

END ENTITY CNT25S;

ARCHITECTURE ART OF CNT25S IS

SIGNAL CNT5B:STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN

PROCESS(SB,SM,CLK,EN25)IS BEGIN

IF SB='0' OR SM='0'THEN CNT5B<=CNT5B-CNT5B-1; ELSIF SM='0'THEN CNT5B<=CNT5B-CNT5B-1; ELSIF(CLK'EVENT AND CLK='1')THEN IF EN25='1'THEN CNT5B<=CNT5B+1;

ELSIF EN25='0'THEN CNT5B<=CNT5B-CNT5B-1; END IF; END IF; END PROCESS; PROCESS(CNT5B)IS BEGIN CASE CNT5B IS

WHEN\"00000\"=>DOUT25B<=\"00100101\";DOUT25M<=\"00110000\"; WHEN\"00001\"=>DOUT25B<=\"00100100\";DOUT25M<=\"00101001\";

STD_LOGIC_VECTOR(7

编辑版word

WHEN\"00010\"=>DOUT25B<=\"00100011\";DOUT25M<=\"00101000\"; WHEN\"00011\"=>DOUT25B<=\"00100010\";DOUT25M<=\"00100111\"; WHEN\"00100\"=>DOUT25B<=\"00100001\";DOUT25M<=\"00100110\"; WHEN\"00101\"=>DOUT25B<=\"00100000\";DOUT25M<=\"00100101\"; WHEN\"00110\"=>DOUT25B<=\"00011001\";DOUT25M<=\"00100100\"; WHEN\"00111\"=>DOUT25B<=\"00011000\";DOUT25M<=\"00100011\"; WHEN\"01000\"=>DOUT25B<=\"00010111\";DOUT25M<=\"00100010\"; WHEN\"01001\"=>DOUT25B<=\"00010110\";DOUT25M<=\"00100001\"; WHEN\"01010\"=>DOUT25B<=\"00010101\";DOUT25M<=\"00100000\"; WHEN\"01011\"=>DOUT25B<=\"00010100\";DOUT25M<=\"00011001\"; WHEN\"01100\"=>DOUT25B<=\"00010011\";DOUT25M<=\"00011000\"; WHEN\"01101\"=>DOUT25B<=\"00010010\";DOUT25M<=\"00010111\"; WHEN\"01110\"=>DOUT25B<=\"00010001\";DOUT25M<=\"00010110\"; WHEN\"01111\"=>DOUT25B<=\"00010000\";DOUT25M<=\"00010101\"; WHEN\"10000\"=>DOUT25B<=\"00001001\";DOUT25M<=\"00010100\"; WHEN\"10001\"=>DOUT25B<=\"00001000\";DOUT25M<=\"00010011\"; WHEN\"10010\"=>DOUT25B<=\"00000111\";DOUT25M<=\"00010010\"; WHEN\"10011\"=>DOUT25B<=\"00000110\";DOUT25M<=\"00010001\"; WHEN\"10100\"=>DOUT25B<=\"00000101\";DOUT25M<=\"00010000\"; WHEN\"10101\"=>DOUT25B<=\"00000100\";DOUT25M<=\"00001001\"; WHEN\"10110\"=>DOUT25B<=\"00000011\";DOUT25M<=\"00001000\"; WHEN\"10111\"=>DOUT25B<=\"00000010\";DOUT25M<=\"00000111\";

编辑版word

WHEN\"11000\"=>DOUT25B<=\"00000001\";DOUT25M<=\"00000110\"; WHEN

OTHERS=>DOUT25B<=\"00100110\";DOUT25M<=\"00110001\";

END CASE; END PROCESS; END ARCHITECTURE ART;

(5)倒计时5s——CNT05s的设计模块与程序

图3.5 CNT05s的模块

源程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT05S IS

PORT(CLK,EN05M,EN05B:IN STD_LOGIC;

DOUT5:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END CNT05S;

ARCHITECTURE ART OF CNT05S IS

SIGNAL CNT3B:STD_LOGIC_VECTOR(2 DOWNTO 0);

编辑版word

BEGIN

PROCESS(CLK,EN05M,EN05B)IS BEGIN

IF(CLK'EVENT AND CLK='1')THEN IF EN05M='1'THEN

CNT3B<=CNT3B+1;

ELSIF EN05B='1'THEN

CNT3B<=CNT3B+1;

ELSE

CNT3B<=\"000\";

END IF; END IF; END PROCESS; PROCESS(CNT3B) BEGIN CASE CNT3B IS

WHEN\"000\"=>DOUT5<=\"00000101\"; WHEN\"001\"=>DOUT5<=\"00000100\"; WHEN\"010\"=>DOUT5<=\"00000011\"; WHEN\"011\"=>DOUT5<=\"00000010\"; WHEN\"100\"=>DOUT5<=\"00000001\"; WHEN OTHERS=>DOUT5<=\"00000000\";

编辑版word

END CASE; END PROCESS;

END ARCHITECTURE ART;

4 编译及仿真

Max+plusII(或写成Maxplus2,或MP2) 是Altera公司推出的的第三代PLD开发系统。使用MAX+PLUSII的设计者不需精通器件内部的复杂结构。设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计转自动换成最终所需的格式。Maxplus2的设计流程归纳为1.设计输入 2.设计编译 3.设计仿真 4.下载

图4.1显示控制单元CSKZ仿真结果

图4.2 CNT45s仿真结果

图4.3 CNT25s仿真结果

编辑版word

图4.4 CNT05s仿真结果

图4.5 实验结果仿真图

5 硬件调试与结果分析

开始时,支干道没有车辆行驶。主干道处于常通行状态,支干道处于禁止状态;

当支干道有车来时,主干道亮绿灯,经行45秒倒计时,支干道亮红灯,经行25秒倒计时;

主干道45秒倒计时结束后跳变到黄灯,进行5秒倒计时,支干道继续亮红灯,进行倒计时;

主干道5秒倒计时结束后跳变到红灯,经行45秒倒计时,支干道跳变到绿灯,进行25秒倒计时;

支干道25秒倒计时结束后跳变到黄灯,进行5秒倒计时,主干道继续亮红

编辑版word

灯,进行倒计时。

6 参考文献

[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005. [2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006. [3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

[4] 曹昕燕,周凤臣,聂春燕. EDA技术与课程设计. 北京:清华大学出版社,2006 [5] 孙延鹏,尹常永. VHDL与可编程逻辑器件应用. 北京:航空工业出版社,2006 [6] 王松武,于 鑫,武思军. 电子创新设计与实践. 北京:国防工业出版社,2005 [7] 潘松,王国栋.VHDL实用教程[M].四川:电子科学大学出版社,2001

心得体会

通过这次课程设计,我进一步加深了对电子设计自动化的了解。并进一步熟练了对Max+plusII软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。通过本次设计,我系统的了解了交通灯的设计流程,尤其是硬、软件的设计方法,掌握了延时程序的基本功能及编程方法,掌握了它的一般原理。而且也开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力。这次课程设计要求我们熟练掌握EDA理论、数字系统设计等相关知识,独立思考完成自己的设计。此次的课程设计不仅使我把课本上的理论知识和实践有机的结合,积累更多更丰富的经验与基础。

(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,

供参考,感谢您的配合和支持)

编辑版word

因篇幅问题不能全部显示,请点此查看更多更全内容