交通信号控制器设计报告.docx
- 文档编号:27947630
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:17
- 大小:116.95KB
交通信号控制器设计报告.docx
《交通信号控制器设计报告.docx》由会员分享,可在线阅读,更多相关《交通信号控制器设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
交通信号控制器设计报告
交通灯控制器设计报告
专业:
勘查技术与工程
班级:
勘查
学号:
姓名:
日期:
2009-12-23
一、设计要求:
……………………………………………………3
二、设计思路:
……………………………………………………3
三、硬件电路设计:
……………………………………………4
四、程序设计:
……………………………………………………6
五、实验总结:
……………………………………………………12
六、参考文献:
……………………………………………………12
一、设计要求
利用EDA/SOPC实验开发平台提供的八位七段管码显示模块以及EP2C35核心板,实现交通灯信号控制器。
设交通灯信号控制器用于主干道的交叉路口,要求是优先保证主干道的畅通,因此,平时处于“主干道绿灯,支道红灯”状态。
(1)当处于“主干道绿灯,支道红灯”状态
A.主干道有车要求通行,支道也有车要求通行时,若主干道通行时间大于等于30秒,切换到“主黄,支红”,4秒后切换到“主红,支绿”状态。
B.主干道无车要求通行,支道有车要求通行时,立即切换到“主黄,支红”,4秒后切换到“主红,支绿”。
C.其它情况保持“主绿,支红”。
(2)当处于“主干道红灯,支道绿灯”状态
A.支道有车要求通行时,保持“主红,支绿”状态,但最多保持30秒然后自动切换到“主红,支黄”状态,4秒后切换到“主绿,支红”状态。
B.支道无车要求通行时,立即切换到“主红,支黄”,4秒后切换到“主绿,支红”。
C.其它情况保持“主绿,支红”。
(3)利用八位七段管码显示模块其中的2位实现时间显示。
(4)扩展要求:
自主设计(如改变各交通灯亮灭的时间,丰富控制逻辑等)
二、设计思路
1.从题目要求中不难看出交通灯一共有四个状态,分别为主绿,支红;主黄,支红;主红,支绿;主红,支黄。
根据题目要求得各状态之间转换关系如图
(1)所示
图
(1)
注:
SM=1,主干道有车;SM=0,主干道无车;
SR=1,支干道有车;SR=0,支干道无车;
num灯亮时间;
根据设计要求和系统所具有的功能,并参考相关的文献资料,经行方案设计,可以画出如图
(2)所示的交通信号灯控制器的系统框图。
图
(2)
三﹑硬件电路设计
(1)分频器
分频器实现的是将高频时钟信号转换成低频的时钟信号,用于触发控制器、计数器和扫描显示电路。
本实验一共用两个分频器,分别实现的是把50MHz分为1Hz,512Hz的时钟信号,前者用于触发控制器、计数器,后者用于扫描显示电路。
其模块如图(3)、图(4)所示。
图(3)分频器模块(50MHz分位1Hz)图(4)分频器模块(50MHz分位512Hz)
(2)控制器设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。
本控制器的设计方法为利用时钟沿的上升沿读取前级计数器的计数值,然后作出反应。
其模块如图(5)所示。
图(5)控制器模块
(3)计数器设计
这里选用的计数器的计数范围为0-64。
计到64秒后,在下一个时钟上升沿回复到0,开始下一轮计数。
此外,当检测到reset=‘1’发生时,计数器异步清零。
其模块如图(6)所示。
图(6)计数器模块
(4)分位译码电路设计
因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如27分为2和7,6分为0和6)。
其模块如图(7)所示。
图(7)分位译码模块
(5)数码管驱动设计
串行连接,即每个数码管对应的引脚都接在一起(如每个数码管的a引脚都接到一起,然后再接到FPGA上的一个引脚上),通过内置的3-8译码器来选择控制相应数码管的亮、灭(实验箱为共阴极数码管)。
其模块如图(8)所示。
图(7)数码管驱动模块
(6)管脚锁定
信号名称
对应FPGA管脚名
说明
50MHz
L1
基准时钟
Segout1[0]
J4
七段数码管a
Segout1[1]
H6
七段数码管b
Segout1[2]
H5
七段数码管c
Segout1[3]
H4
七段数码管d
Segout1[4]
H3
七段数码管e
Segout1[5]
G7
七段数码管f
Segout1[6]
G6
七段数码管g
Led_sel[0]
G5
数码管选择控制端0
Led_sel[1]
G3
数码管选择控制端1
Led_sel[2]
F4
数码管选择控制端2
MR
D3
主干道红灯
MY
D4
主干道黄灯
MG
D5
主干道绿灯
BR
E3
支干道红灯
BY
E4
支干道黄灯
BG
F3
支干道绿灯
SM
E15
主干道通车请求开关
SR
B14
支干道通车请求开关
表
(1)管脚锁定表
根据管脚锁定表,锁定各管脚。
下图为交通灯控制器的顶层文件连接图(锁定管脚)
图(8)交通灯控制器的顶层文件连接图(锁定管脚)
四、程序设计
(1)分频器的设计
A、50MHz分为1Hz的时钟信号
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(clk:
instd_logic;
finout:
outstd_logic);
endfenpin;
architecturebhvoffenpinis
signaltmp:
INTEGERRANGE0TO49999999;
begin
process(clk)
begin
ifclk'eventandclk='1'then
iftmp=49999999thentmp<=00000000;
elsetmp<=tmp+1;
endif;
iftmp<25000000thenfinout<='0';
elsefinout<='1';
endif;
endif;
endprocess;
endbhv;
B、50MHz分为512Hz的时钟信号
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpin123is
port(clk:
instd_logic;
clkfen:
outstd_logic);
endfenpin123;
architecturefenpinoffenpin123is
signalclk_mid:
std_logic;
begin
process(clk)
variabledata:
integerrange0to48828;
ifclk'eventandclk='1'then
ifdata=48828then
data:
=0;
clk_mid<=notclk_mid;
else
data:
=data+1;
endif;
endif;
clkfen<=clk_mid;
endprocess;
endfenpin;
(2)控制器设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH;
ENTITYtrafficIS
PORT(
CLK,SM,SB:
INBIT;
MR,MY,MG,BR,BY,BG:
OUTBIT;
reset:
OUTstd_logic;
CountNum:
inINTEGERRANGE0TO64;
Num:
outINTEGERRANGE0TO31
);
ENDtraffic;
ARCHITECTUREBEHAVOFtrafficIS
TYPESTATE_TYPEIS(A,B,C,D);
SIGNALSTATE:
STATE_TYPE;
BEGIN
CNT:
PROCESS(CLK,SM,SB,CountNum)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
CASESTATEIS
WHENA=>MR<='0';MY<='0';MG<='1';--主绿支红
BR<='1';BY<='0';BG<='0';
RESET<='0';
IF(SBANDSM)='1'THEN
IFCountNum<=29THEN
Num<=30-CountNum;
ELSE
STATE<=B;RESET<='1';
ENDIF;
ENDIF;
IF(SBAND(NOTSM))='1'THEN
STATE<=B;RESET<='1';
ENDIF;
WHENB=>MR<='0';MY<='1';MG<='0';--主黄支红
BR<='1';BY<='0';BG<='0';
RESET<='0';
IFCountNum<=3THEN
Num<=4-CountNum;
ELSE
STATE<=C;RESET<='1';
ENDIF;
WHENC=>MR<='1';MY<='0';MG<='0';--主红支绿
BR<='0';BY<='0';BG<='1';
RESET<='0';
IF(SBANDSM)='1'THEN
IFCountNum<=29THEN
Num<=30-CountNum;
ELSE
STATE<=D;RESET<='1';
ENDIF;
ENDIF;
IFSB='0'THEN
STATE<=D;RESET<='1';
ENDIF;
WHEND=>MR<='1';MY<='0';MG<='0';--主红支黄
BR<='0';BY<='1';BG<='0';
RESET<='0';
IFCountNum<=3THEN
Num<=4-CountNum;
ELSE
STATE<=A;RESET<='1';
ENDIF;
WHENOTHERS=>STATE<=A;
ENDCASE;
ENDIF;
ENDPROCESSCNT;
ENDBEHAV;
(3)计数器设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYcounterIS
PORT(clk:
INSTD_LOGIC;
reset:
instd_logic;
countNum:
BuFFeRINTEGERRANGE0TO64);
END;
ARCHITECTUREbehaviorOFcounterIS
BEGIN
process(reset,Clk)
BEGIN
IFReset='1'THEN
countNum<=0;
ELSIFrising_edge(Clk)THEN
IFcountNum=64THEN
countNum<=0;
ELSE
countNum<=countNum+1;
ENDIF;
ENDIF;
ENDPROCESS;
END;
(4)分位译码电路设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH;
ENTITYFENWEIIS
PORT
(Numin:
INintegerRANGE0TO31;
NumA,NumB:
OUTIntegerRANGE0to9
);
END;
ARCHITECTUREbehaviorOFFENWEIIS
BEGIN
process(Numin)
BEGIN
IFNumin>=30THEN
NumA<=3;
NumB<=Numin-30;
ELSIFNumin>=20THEN
NumA<=2;
NumB<=Numin-20;
ELSIFNumin>=10THEN
NumA<=1;
NumB<=Numin-10;
ELSE
NumA<=0;
NumB<=Numin;
ENDIF;
ENDPROCESS;
END;
(5)数码管驱动设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYbcd_dataIS
PORT
(bcd_data:
inSTD_LOGIC_VECTOR(3downto0);
segout:
outSTD_LOGIC_VECTOR(6downto0));
END;
ARCHITECTUREbehaviorOFbcd_dataIS
BEGIN
process(bcd_data)
BEGIN
casebcd_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<="1011111";
when"0111"=>segout<="1110000";
when"1000"=>segout<="1111111";
when"1001"=>segout<="1111011";
whenothers=>null;
ENDCASE;
ENDPROCESS;
END;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_unsigned.ALL;
ENTITYdtsmIS
PORT(clk:
inSTD_LOGIC;
NumA,NumB:
inSTD_LOGIC_VECTOR(3downto0);
segout1:
outSTD_LOGIC_VECTOR(6downto0);
led_sel:
outSTD_LOGIC_VECTOR(2downto0));
ENDdtsm;
architecturebhvofdtsmis
componentbcd_datais
port(bcd_data:
inSTD_LOGIC_VECTOR(3downto0);
segout:
outSTD_LOGIC_VECTOR(6downto0));
endcomponent;
signalx:
STD_LOGIC_VECTOR(3downto0);
signalQ:
STD_LOGIC;
begin
p1:
process(clk)
begin
ifclk'eventandclk='1'then
ifQ='1'THENQ<='0';
ELSEQ<='1';
ENDIF;
endif;
endprocess;
p2:
process(Q)
begin
caseQis
when'0'=>led_sel<="010";x<=NumB;
when'1'=>led_sel<="001";x<=NumA;
whenothers=>null;
endcase;
endprocess;
u1:
bcd_dataPORTmap(bcd_data=>x,segout=>segout1);
end;
五﹑实验总结
本次数电课程设计我选题为交通灯,经过一周多时间的编程与下载测试,收获颇多。
其中我感觉程序调试最重要,试验软件、硬件熟悉其次,必须认识到失败是成功之母,多下载,多查错,多修改。
我在编完各模块程序之后,编译查错最初有十几个错误,一遍一遍的编译查错,直到没有错误,其中必须注意文件名和实体名一致,不然一般会出错。
编译无错,进行管脚配对之后,就可以下载测试了,我一共下载测试了5次,最后一次取得圆满成功。
前几次下载测试有问题,有状态转换问题,时间显示问题,测试完都认真的检查了程序,修改不对的地方,然后再重新编译,再去下载,直到成功。
通过此次课程设计我对QuartusII7.0软件更加熟悉,对VHDL语言有了更深一步的掌握,为了这次课程设计,我在图书馆查找了大量的相关资料,极大地拓宽了我的知识面,锻炼了能力,综合素质得到较大提高。
最后在调试结果出来后,无比的兴奋,无比的自豪.总之,此次课程设计的收获,我将在以后的学习和生活中终身受益。
在此,衷心感谢3为老师耐心的指导!
六﹑参考文献
(1)【美】DouglasL.Perry原著杨承恩,谭克俊,颜德文译
VHDL编程实例(第四版).电子工业出版社。
(2)武俊鹏,孟昭林,付小晶.数字电路与可编程技术实验教程.哈尔滨工业大学出版社。
(3)潘松,黄继业.2006.EDA技术使用教程.北京:
科学出版社。
(4)黄任;2005;VHDL入门.解惑.经典实例.经验总结.北京:
北京航空航天大学出版社。
(5)褚振勇.FPGA设计与应用.西安:
西安电子科技大学出版社。
(6)邹彦,庄严,邹宁,王宇鸿.EDA技术与数字系统设计.电子工业出版社。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通信号 控制器 设计 报告