交通灯控制电路的设计Word文档格式.docx
- 文档编号:17036179
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:15
- 大小:23.24KB
交通灯控制电路的设计Word文档格式.docx
《交通灯控制电路的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《交通灯控制电路的设计Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
考虑交通灯的功能,一个十字路口至少需8组交通灯:
东西南北各两组,一组指挥转弯,一组指挥直行。
而设计的关键是控制交通灯的亮灭。
考虑南北、东西方向灯的亮灭规律相同,故可以考虑用四组交通灯来模拟实际的八组交通灯:
可用计数器控制时间,在不同的时间显示不同的灯。
根据设计分析,可以采用如下方案实现交通灯显示:
通过计数来计时,不同的时间输出不同的使能信号,使各方向的不同交通灯显示不同的颜色。
夜间车少需交通灯,则红灯、绿灯灭,黄灯闪烁使司机明白前方为十字路口,小心行驶。
倒计时显示需设计不同的倒计时计数器,显示不同方向交通灯的显示时间,通过数码管显示时间,使行人方便。
总体方案
(1)
结构图
(2)主要模块
交通灯设计主要分以下几个模块:
时钟分频模块,交通灯亮灭控制模块,交通灯显示模块,倒计时计数模块,倒计时显示模块。
①
时钟分频模块可以将10MHz的信号,用一个二进制计数器,对其进行分频,从而得到适合的频率。
选一个合适的作为时间计数器的扫描信号,另外再选一个作为数码管选通电路的触发信号。
本方案是用一个24位的计数器,倒计时计数的周期比较慢,而数码管比较快所以可以将分得的23位和10位分别给两者作为扫描信号。
②
交通灯亮灭控制模块,是通过时间的变化来传输的。
条件达到时即进行状态转换。
用一个120的计数器,当时间递减到达93、90、63、60、33、30、3时发生相应的交通灯亮灭的转变。
而时间为0时,重新置为120。
③
交通灯显示模块,利用LP2900装置的LED灯,将LED__COM端共阴点即P49=’1’,就可以启动。
由交通灯控制模块来控制交通灯的亮灭变换。
④
倒计时计数模块及显示模块主要用于记录显示时间,以方便行人,可以用数码管显示,要注意的是需要将二进制数通过修正关系转化成BCD码。
而当使能信号置0复位时,时间也要清零。
本设计所用的修正关系,如下表所示。
二进制转化BCD码修正关系
十进制数
二进制数
BCD码
修正值(十进制/二进制)
00000000
0000,0000
0/00000000
9
00001001
0000,1001
10
00001010
0001,0000
6/00000110
19
00010011
0001,1001
20
00010100
0010,0000
12/00001100
29
00011101
0010,1001
30
00011110
0011,0000
18/00010010
39
00100111
0011,1001
40
00101000
0100,0000
24/00011000
49
00110001
0100,1001
50
00110010
0101,0000
30/00011110
59
00111011
0101,1001
60
00111100
0110,0000
36/00100100
(3)状态转换
状态转换中,任一状态的EN=1的前提,若EN=0均复位为S8状态。
且每个状态下的时间没有到达时,都保持原有状态。
通过这样的分析很容易得出交通灯之间的亮灭转换和时间的变化。
若发生紧急情况就将交通灯的使能端置0,是所有的交通灯都工作在黄灯状态,保证道路的安全。
(4)所需要的外围电路
实验所需部件及功能
管脚号
基本功能
本实验中具备功能
P56
开关,按下时输出高电平;
没按下时输出为低电平
开关按下时:
交通灯停止工作,黄灯闪烁;
弹起时,交通灯正常工作
P49
发光二极管使能端,
高电平有效
P47
石英晶振输出端,产生10MHz周期信号
做分频器的输入端,用来产生待测信号、开关门信号,即时基、时标信号
P2、3、4、5、9、10、12、13、14、15、16、138
12只发光二极管,
高电平发亮
模拟交通灯,不同时刻不同的灯亮
P30、31、32
数码管扫描管脚,三管脚为不同的数时,选择不同的数码管,实现动态显示
三、
各模块的设计
顶层模块的设计
10MHz作为脉冲信号,需要分频,NS、NSL、EW、EWL分别为南北、东西方向的直行和左转灯;
GA为7段LED数码管所对应的段;
P49为LED__COM端共阴点;
P32选择数码管的扫描管脚。
(2)
分频模块
10MhzshiFPGA芯片内部提供的脉冲振荡源,通过24位的计数器可以分得所需的频率。
可以将FREQ10赋给数码管选通显示模块的扫描信号,将FREQ23赋给倒计时交通灯显示模块的扫描信号。
(3)
倒计时计数模块
EN=0,赋初值TIME=120;
EN=1,TIME=TIME-1;
且当TIME=0时,将TIME重新赋初值120。
构成的就是一个8位M120的递减计数器。
(4)
交通灯显示模块
TIME的条件达到时,NS、NSL、EW、EWL灯发生相应的变化。
(5)
74LS138数码管选通模块
数据输入端
译码输出
P32
(2)
P32
(1)
P32(0)
Y
Y0=0
Y1=0
Y2=0
Y3=0
Y4=0
Y5=0
Y6=0
Y7=0
(6)
数码管显示模块
十六进制码
共阴极7段显示码
DATA3
DATA2
DATA1
DATA0
G
F
E
D
C
B
A
1010~~1111
四、
具体实现及结果
实验目的
利用FPGA实现交通灯基本复习了这一学期所学习及实验的VHDL语言和各种技巧。
如:
分频器、计数器、译码器(74LS138译码器、7段LED数码管显示器)等知识。
对实体、端口、结构体、进程、元件例化语句等也是很好的复习,同时锻炼了自己的逻辑思维能力,分析能力和c语言的基本知识。
实验环境
本实验的逻辑设计平台是LP2900装置,它是力浦电子有限公司在1999年推出的新产品。
能为逻辑设计提供设计、仿真及验证环境。
LP2900是以XilinxXCS10TQ144芯片为核心设计出来多功能逻辑电路设计实验平台。
分为CPLD芯片板、电源、PC并口下载接口电路与I/O组件实验板等四部分。
有10000门。
而我本次实验所用资源为:
四组红黄绿LED、四个共阴极七段显示器、一个数据开关、一个脉冲电路。
即为下图所示。
实验内容及步骤
本实验的实现,只用了两个模块——分频和计数模块,主要的实验程序都是在计数模块里面实现的。
我先设计了一个用24位计数器是的分频模块,得到合适的扫描信号赋值给下一个模块,作为进程的信号敏感表。
这样使计时的时间更加合理。
主要有分频器—>
计数器—>
交通灯的状态显示模块—>
时间显示模块。
用到的符号的含义如下表所示。
符号
功能或含义
CLK
时钟控制信号
EN
使能信号,控制交通灯是否工作
NNS
南北方向直行灯
NNSL
南北方向左转灯
EEW
东西方向直行灯
EEWL
东西方向左转灯
P32
数码管选通信号
LED共阴极点
GA
7段LED数码管
CP
倒计时扫描信号
CP1
数码管扫描信号
FREQ
分频后的24位频率
V
M5计数器选择数码管
DATA
传送给数码管的数据
NBCD
南北方向交通灯有效状态时间
NBCD1
NBCD2
南北方向交通灯有效状态时间BCD码
EBCD
东西方向交通灯有效状态时间
EBCD1
EBCD2
东西方向交通灯有效状态时间BCD码
TIME
倒计时时间符号
4、
实验结果及分析
软件仿真结果
这与在LP2900装置上仿真所用的信号是不相等的,为了方便看到结果,我将分频后得到的低两位分别作为交通灯状态转换倒计时扫描信号和数码管选通扫描信号。
即CP<
=FREQ(0),CP1<
=FREQ
(1)。
结果分析
上图所示显示初始状态以及其它八个状态之间的转化和时间关系。
虽然图是有所剪切,倒计时不是很完整,但可以通过灯的变化很明显的找出对应的时间。
南北方向的时间变化为:
27—>
3—>
57—>
27……;
东西方向的时间变化为:
57……;
整个时间的计数:
从120开始递减到0后又重新赋值;
南北直行方向的灯的状态为:
黄—>
绿—>
红—>
绿……;
南北左转方向的灯的状态为:
红……;
东西直行方向的灯的状态为:
红……。
(3)状态转换图
五、结论
1、能实现的功能
交通灯的状态转换和倒计时时间的显示,基本能实现东西、南北直行和转弯灯的显示功能。
2、不足之处
(1)我所用的是一个大的计数器来实现交通灯的控制电路的设计,若能使用双进程状态机描述会使程序更加简练,而且状态之间的转化关系更加明朗。
(2)另外,在现实中晚上没有行人,可以不用交通灯控制,只需要黄灯亮着提醒人们前方有路口即可。
那就需要一个始终显示模块,指定的时间内回到初始状态也就是我用的EN=0是的状态。
只是人为控制,若有24小时的计时会使交通灯的控制智能化。
(3)有些城市的交通灯中也有右转灯,这个程序中有很多地方仍然需要改进。
附录:
程序清单
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;
entitytrafficis
port(
clk:
inSTD_LOGIC;
en:
p49:
outSTD_LOGIC;
nnsl:
outSTD_LOGIC_VECTOR(2downto0);
eewl:
nns:
eew:
ga:
outSTD_LOGIC_VECTOR(6downto0);
p32:
outSTD_LOGIC_VECTOR(2downto0)
);
endtraffic;
architecturetraffic_archoftrafficis
signalcp,cp1:
std_logic;
signalfreq:
std_logic_vector(23downto0);
signalv:
std_logic_vector(2downto0);
signaldata:
std_logic_vector(3downto0);
signalnsl,ewl,ns,ew:
std_logic_vector(2downto0);
signalnbcd,nbcd1,nbcd2,ebcd,ebcd1,ebcd2:
std_logic_vector(7downto0);
signaltime:
std_logic_vector(7downto0);
begin
frequence:
block
--div_fren
process(clk)
begin
ifclk'
eventandclk='
1'
thenfreq<
=freq+1;
endif;
endprocess;
cp<
=freq(23);
cp1<
=freq(10);
endblockfrequence;
state:
--state
begin
process(en,cp)
ifen='
0'
then
ns<
="
010"
;
nsl<
ew<
ewl<
--s8
time<
01111000"
elsifcp'
eventandcp='
then
time<
=time-1;
if
time=120
then
ns<
001"
nsl<
100"
--s0
elsiftime=93
--s1
elsiftime=90
--s2
elsiftime=63
--s3
elsiftime=60
--s4
elsiftime=33
--s5
elsiftime=30
--s6
elsiftime=
3
--s7
0
thentime<
endif;
iftime<
=120andtime>
93thennbcd<
=time-93;
ebcd<
=time-63;
elsiftime<
=93
andtime>
90then
nbcd<
=time-90;
=90
63then
=63
60then
=time-60;
=60
33then
=time-3;
=time-33;
=33
30then
=time-30;
=30
3
=3
0
=time;
nnsl<
=nsl;
eewl<
=ewl;
nns<
=ns;
eew<
=ew;
nbcd1<
=nbcd;
ebcd1<
=ebcd;
--binarycoverttobcd
ifnbcd1>
=50andnbcd1<
=60thennbcd2<
=nbcd1+30;
elsifnbcd1>
=40andnbcd1<
=50thennbcd2<
=nbcd1+24;
=30andnbcd1<
=40thennbcd2<
=nbcd1+18;
=20andnbcd1<
30then
nbcd2<
=nbcd1+12;
=10andnbcd1<
20then
=nbcd1+6;
elsenbcd2<
=nbcd1;
ifebcd1>
=50andebcd1<
=60thenebcd2<
=ebcd1+30;
elsifebcd1>
=40andebcd1<
=50thenebcd2<
=ebcd1+24;
=30andebcd1<
=40thenebcd2<
=ebcd1+18;
=20andebcd1<
ebcd2<
=ebcd1+12;
=10andebcd1<
=ebcd1+6;
elseebcd2<
=ebcd1;
process(cp1)
--M6,chooseLED
ifcp1'
event
and
cp1='
if
v=5
then
v<
000"
else
=v+1;
end
if;
process;
process(v,cp1,en)
ifv="
andv="
011"
data<
0000"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 控制电路 设计