交通灯控制系统终结版.docx
- 文档编号:27375092
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:24
- 大小:217.39KB
交通灯控制系统终结版.docx
《交通灯控制系统终结版.docx》由会员分享,可在线阅读,更多相关《交通灯控制系统终结版.docx(24页珍藏版)》请在冰豆网上搜索。
交通灯控制系统终结版
河南机电高等专科学校
《可编程逻辑器件原理与应用》
课程设计报告
交通控制器系统设计
专业班级:
医电131
姓名:
徐长伟
学号:
130411116
时间:
2015年6月
成绩:
交通灯控制系统的设计
摘要:
随着时代的发展交通事故也急剧增加,为了改善交通秩序减少交通事故,交通灯起着越来越重要的作用。
交通灯安装在各个路口上,需要交通灯控制器来对它进行控制,所以设计交通灯控制器有着至关重要的作用。
随着EDA技术的大力发展,FPGA等数字可编程器件的出现,数字出租车计费器的设计也就变得更加简单,而且性能更稳定、能实现较复杂的功能,且运用EDA软件可方便的在计算机上实现设计与仿真。
本设计基于VHDL(FPGA)语言是电子设计领域中最具活力和发展前途的一项技术,未来必定会取代部分落伍的数字元元件。
随着电子技术的不断发展与进步,集成电路的设计方法也在不断地更新。
键关词:
交通灯、控制器、VHDL语言。
1概述
现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。
前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronicdesignautomatic,EDA)技术。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。
而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所设置的功能。
因此,键信息输入是与软件结构密切相关的过程。
根据键盘的结构不同,采用不同的编码方法。
但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。
现在是一个知识爆炸的新时代。
新产品、新技术层出不穷,电子技术的发展更是日新月异。
可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。
在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。
因此我们需要一个定时系统来提醒这些忙碌的人。
数字化的钟表给人们带来了极大的方便。
近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。
多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。
2课程设计要求
随着各种交通工具的发展和交通指挥的需要,交通灯的诞生大大改善了城市交通状况。
要求设计一个交通灯控制器,控制十字路口主、支两条道路的红、绿、黄三色灯,指挥车辆和行人的安全通行。
具体要求:
设计一个十字路口的交通灯控制器,能显示十字路口东西、南北两个方向红、黄、绿灯的指示状态。
用两组红、黄、绿三种颜色的灯分别作为东西、南北两个方向红、黄、绿等。
变化规律为:
东西绿灯亮,南北红灯亮——东西黄灯亮,南北红灯亮——东西红灯亮,南北绿灯亮——东西红灯亮,南北黄灯亮——东西绿灯亮,南北红灯亮······,这样循环下去。
南北方向是主干道车道,东西方向是支干道车道,要求两条交叉道路上的车辆交替运行,主干道每次通行时间为30秒,支干道每次通行时间为20秒,时间可设置修改。
绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。
要求交通灯控制器有复位功能,并要求所有交通灯的状态变化在时钟脉冲上升沿处。
3总体构思
根据交通灯系统设计要求,可以用一个有限状态机来实现这个交通灯控制器。
首先根据功能要求,明确两组交通灯的状态,这两组交通灯总共共有四种状态,我们用ST0,ST1,ST2,ST3来表示:
St0表示主路绿灯亮,支路红灯亮;St1表示主路黄灯亮,支路红灯亮;St2表示主路红灯亮,支路绿灯亮;St3表示主路红灯亮,支路黄灯亮。
(1)根据上述四种状态描述列出的状态转换表如表3-1所示。
表3-1交通灯控制器状态转换表
当前状态
下一状态
转换条件
St0
St1
主路绿灯亮了25秒
St1
St2
主路黄灯亮了5秒
St2
St3
主路绿灯亮了15秒
St3
St0
支路黄灯亮了5秒
St0orst1orst2orst3
St0
复位信号使能
(2)根据状态转换表得到交通灯控制器的状态转移图如图3-1所示。
图3-1交通灯控制器的状态转移图
(3)交通灯控制系统的本质就是一个如图3-2所示的控制器模块。
图3-2交通灯控制器结构示意图
其中,clk为时钟信号,时钟上升沿有效。
Rst为复位信号,高电平有效。
lgt1_red,lgt1_yellow、lgt1_green,分别表示主干道的红灯,黄灯,绿灯显示信号,高电平有效。
lgt2_red,lgt2_yellow,lgt2_green分别表示支路的红灯,黄灯,绿灯显示信号,
4硬件电路的设计
硬件电路的设计包括状态控制模块、分频器模块、转换器模块、TOP文件模块的图形设计。
(1)状态控制模块的图形符号如图4-1所示。
图4-1状态控制模块图形
(2)分频器的图形模块如图4-2所示。
图4-2分频器模块图形
实现频率由5MHZ到1Hz的转变,达到我们素需要的1S的要求。
(3)转换器的图形模块如图4-3所示。
图4-3转换器模块图形
实现BCD码转化成数码块中显示的数字。
(4)TOP文件的图形模块如图4-4所示。
图4-4TOP文件模块图形
5软件设计
软件的设计包括对控制状态模块、分频器、转换器和顶层模块的设计,以下分别为控制状态模块、分频器、转换器和顶层模块的代码。
(1)状态控制模块的代码如下。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtraffic_ctrlIS
GENERIC(
green1_cnt:
INTEGER:
=25;--定义主通道绿灯亮的时间,这里为25秒
yellow1_cnt:
INTEGER:
=5;--定义主通道黄灯亮的时间,这里为5秒
green2_cnt:
INTEGER:
=15;--定义支路绿灯亮的时间,这里为15秒
yellow2_cnt:
INTEGER:
=5--定义支路黄灯亮的时间,这里为5秒
);
PORT(
CLK:
INSTD_LOGIC;--时钟信号
rst:
INSTD_LOGIC;--复位信号
lgt1_red:
OUTSTD_LOGIC;--主通道红灯控制信号
lgt1_yellow:
OUTSTD_LOGIC;--主通道黄灯控制信号
lgt1_green:
OUTSTD_LOGIC;--主通道绿灯控制信号
lgt2_red:
OUTSTD_LOGIC;--支路红灯控制信号
lgt2_yellow:
OUTSTD_LOGIC;--支路黄灯控制信号
lgt2_green:
OUTSTD_LOGIC--支路绿灯控制信号
);
ENDENTITYtraffic_ctrl;
ARCHITECTURErt1OFtraffic_ctrlIS--定义结构体
TYPESTATESIS
(st0,st1,st2,st3);--定义控制器各种状态
SIGNALstate:
states:
=st0;--初始化状态
SIGNALcnt:
integerrange0to30:
=1;--定义计数器
SIGNALcnt_enb:
std_logic:
='0';--初始化计数器使能信号
BEGIN
PROCESS(CLK,rst)
BEGIN
IF(rst='1')THEN--复位信号为高电平则执行复位操作
state<=st0;
cnt<=1;
ELSIF(rising_edge(CLK))THEN--时钟上升沿
IF(cnt_enb='1')THEN--计数器计数
cnt<=cnt+1;
ELSE
cnt<=1;
ENDIF;
CASEstateIS
WHENst0=>--主通道绿灯亮了一段时间适时转换状态st1
IF(cnt=green1_cnt)THEN
state<=st1;
ELSE
state<=st0;
ENDIF;
WHENst1=>--主通道黄灯亮了一段时间适时转换状态st2
IF(cnt=yellow1_cnt)THEN
state<=st2;
ELSE
state<=st1;
ENDIF;
WHENst2=>--支路绿灯亮了一段时间适时转换状态st3
IF(cnt=green2_cnt)THEN
state<=st3;
ELSE
state<=st2;
ENDIF;
WHENst3=>--支路黄灯亮了一段时间适时转换状态st0
IF(cnt=yellow2_cnt)THEN
state<=st0;
ELSE
state<=st3;
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(state)
BEGIN
CASEstateIS
WHENst0=>--st0表示主路绿灯亮,支路红灯亮
lgt1_red<='0';
lgt1_yellow<='0';
lgt1_green<='1';
lgt2_red<='1';
lgt2_yellow<='0';
lgt2_green<='0';
cnt_enb<='1';
IF(cnt=green1_cnt)THEN
cnt_enb<='0';
ENDIF;
WHENst1=>--st1表示主路黄灯亮,支路红灯亮
lgt1_red<='0';
lgt1_yellow<='1';
lgt1_green<='0';
lgt2_red<='1';
lgt2_yellow<='0';
lgt2_green<='0';
cnt_enb<='1';
IF(cnt=yellow1_cnt)THEN
cnt_enb<='0';
ENDIF;
WHENst2=>--st2表示主路红灯亮,支路绿灯亮
lgt1_red<='1';
lgt1_yellow<='0';
lgt1_green<='0';
lgt2_red<='0';
lgt2_yellow<='0';
lgt2_green<='1';
cnt_enb<='1';
IF(cnt=green2_cnt)THEN
cnt_enb<='0';
ENDIF;
WHENst3=>--st3表示主路红灯亮,支路黄灯亮
lgt1_red<='1';
lgt1_yellow<='0';
lgt1_green<='0';
lgt2_red<='0';
lgt2_yellow<='1';
lgt2_green<='0';
cnt_enb<='1';
IF(cnt=yellow2_cnt)THEN
cnt_enb<='0';
ENDIF;
ENDCASE;
ENDPROCESS;
ENDrt1;
(2)分频器的代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfenpinIS
PORT(CLK:
INSTD_LOGIC;
OUTCLK:
BUFFERSTD_LOGIC);
ENDfenpin;
ARCHITECTUREoneOFfenpinIS
SIGNALCLK1,CLK2:
STD_LOGIC;
BEGIN
PROCESS(CLK)
VARIABLEcnt:
INTEGERrange0to4;--500khz50M/500k=100
BEGIN
IFclk'eventANDclk='1'THEN
IFcnt=4THENOUTCLK<=notOUTCLK;cnt:
=0;
ELSEcnt:
=cnt+1;
ENDIF;
ENDIF;
ENDPROCESS;
--PROCESS(CLK1)
--VARIABLEcnt:
INTEGERrange0to49;--5khz500k/5k=100
--BEGIN
--IFCLK1'eventANDCLK1='1'THEN
--IFcnt=49THENCLK2<=notCLK2;cnt:
=0;
--ELSEcnt:
=cnt+1;
--ENDIF;
--ENDIF;
--ENDPROCESS;
--PROCESS(CLK2)
--variablecnt:
integerrange0to49;--50hz5k/50=100
--BEGIN
--IFCLK2'eventANDCLK2='1'THEN
--IFcnt=49THENCLK4<=notCLK4;cnt:
=0;
--ELSEcnt:
=cnt+1;
--ENDIF;
--ENDIF;
--ENDPROCESS;
--PROCESS(CLK3)
--variablecnt:
integerrange0to24;--1hz50/50=1
--BEGIN
--IFCLK3'eventANDCLK3='1'THEN
--IFcnt=24THENOUTCLK<=notOUTCLK;cnt:
=0;
--ELSEcnt:
=cnt+1;
--ENDIF;
--ENDIF;
--ENDPROCESS;
ENDone;
(3)转换器的代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_arith.ALL;
ENTITYzhuanhuanIS
PORT(clk:
instd_logic;
zhitime:
inSTD_LOGIC_VECTOR(6DOWNTO0);
zhutime:
inSTD_LOGIC_VECTOR(6DOWNTO0);
outtime:
outSTD_LOGIC_VECTOR(7DOWNTO0);
scan:
outSTD_LOGIC_VECTOR(0to7));
ENDzhuanhuan;
ARCHITECTUREbehaviorOFzhuanhuanIS
SIGNALdata1:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALdata2:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALdata:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALdatatime1:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALdatatime10:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALdatatime2:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALdatatime20:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
datatime10<=data1(7downto4);
datatime1<=data1(3downto0);
datatime20<=data2(7downto4);
datatime2<=data2(3downto0);
WITHzhitimeSELECT
data1<="00000000"WHEN"0000000",
"00000001"WHEN"0000001",
"00000010"WHEN"0000010",
"00000011"WHEN"0000011",
"00000100"WHEN"0000100",
"00000101"WHEN"0000101",
"00000110"WHEN"0000110",
"00000111"WHEN"0000111",
"00001000"WHEN"0001000",
"00001001"WHEN"0001001",
"00010000"WHEN"0001010",
"00010001"WHEN"0001011",
"00010010"WHEN"0001100",
"00010011"WHEN"0001101",
"00010100"WHEN"0001110",
"00010101"WHEN"0001111",
"00010110"WHEN"0010000",
"00010111"WHEN"0010001",
"00011000"WHEN"0010010",
"00011001"WHEN"0010011",
"00100000"WHEN"0010100",
"00100001"WHEN"0010101",
"00100010"WHEN"0010110",
"00100011"WHEN"0010111",
"00100100"WHEN"0011000",
"00100101"WHEN"0011001",
"00100110"WHEN"0011010",
"00100111"WHEN"0011011",
"00101000"WHEN"0011100",
"00101001"WHEN"0011101",
"00110000"WHENothers;
WITHzhutimeSELECT
data2<="00000000"WHEN"0000000",
"00000001"WHEN"0000001",
"00000010"WHEN"0000010",
"00000011"WHEN"0000011",
"00000100"WHEN"0000100",
"00000101"WHEN"0000101",
"00000110"WHEN"0000110",
"00000111"WHEN"0000111",
"00001000"WHEN"0001000",
"00001001"WHEN"0001001",
"00010000"WHEN"0001010",
"00010001"WHEN"0001011",
"00010010"WHEN"0001100",
"00010011"WHEN"0001101",
"00010100"WHEN"0001110",
"00010101"WHEN"0001111",
"00010110"WHEN"0010000",
"00010111"WHEN"0010001",
"00011000"WHEN"0010010",
"00011001"WHEN"0010011",
"00100000"WHEN"0010100",
"00100001"WHEN"0010101",
"00100010"WHEN"0010110",
"00100011"WHEN"0010111",
"00100100"WHEN"0011000",
"00100101"WHENothers;
process(clk,datatime20,datatime2,datatime10,datatime1)
variablecnt:
std_logic_vector(1downto0);
begin
ifclk'eventandclk='1'then
cnt:
=cnt+1;
endif;
casecntis
when"00"=>data<=datatime2;scan<="11111110";
when"01"=>data<=datatime20;scan<="11111101";
when"10"=>data<=datatime1;scan<="10111111";
when"11"=>data<=datatime10;scan<="01111111";
endcase;
endprocess;
process(data)
begin
casedatais
when"0000"=>outtime<="11111100";
when"0001"=>outtime<="01100000";
when"0010"=>outtime<="11011010";
when"0011"=>outtime<="11110010";
when"0100"=>outtime<="01100110";
when"0101"=>outtime<="10110110";
when"0110"=>outtime<="10111110";
when"0111"=>outtime<="11100000";
when"1000"=>outtime<="11111110";
when"1001"=>outtime<="11110110";
whenothers=>outtime<="00000000";
endcase;
endprocess;
ENDbehavior;
(4)顶层模块的代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYtopIS
PORT(CLK:
INSTD_LOGIC;
rst:
INSTD_LOGIC;
lgt1_red:
OUTSTD_LOGIC;
lgt1_y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 控制系统 终结