交通灯控制电路的设计Word文档格式.docx

上传人:b****4 文档编号:17036179 上传时间:2022-11-28 格式:DOCX 页数:15 大小:23.24KB
下载 相关 举报
交通灯控制电路的设计Word文档格式.docx_第1页
第1页 / 共15页
交通灯控制电路的设计Word文档格式.docx_第2页
第2页 / 共15页
交通灯控制电路的设计Word文档格式.docx_第3页
第3页 / 共15页
交通灯控制电路的设计Word文档格式.docx_第4页
第4页 / 共15页
交通灯控制电路的设计Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

交通灯控制电路的设计Word文档格式.docx

《交通灯控制电路的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《交通灯控制电路的设计Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

交通灯控制电路的设计Word文档格式.docx

考虑交通灯的功能,一个十字路口至少需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= 

--s7

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 

=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"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1