EDA课程设计交通灯控制器Word文档格式.docx
《EDA课程设计交通灯控制器Word文档格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计交通灯控制器Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
一旦支道无车辆时,交通灯又立即回到“主干道绿灯,支道红灯”。
此外,主干道和支道每次通行时间为30s,而在两个状态交换过程出现的“主黄、支红”和“主红、支黄”状态,持续时间都为3s。
根据控制要求,可把交通灯控制系统分解为处理器(包含定时器及译码器)和控制器两大部分。
三﹑硬件电路设计
3.1原理图设计
⑴、交通灯部分电路
⑵、555多谐振荡器
产生1Hz时钟
石英晶体振荡器具有体积小、重量轻、可靠性高、频率稳定度高等优点,被应用于家用电器和通信设备中。
因其具有极高的频率稳定性,故主要用在要求频率十分稳定的振荡电路中作谐振元件。
用石英晶体振荡器作为脉冲产生器,能够使数字时钟达到很高的精度。
同时成本也相对较高。
这里是采用的是有555芯片组成的多谐振荡器来作为频率脉冲产生器,其输出的脉冲频率为1Hz。
555芯片组成的多谐振荡器要输出符合要求的频率脉冲,其对电阻和电容的精度要求较高。
不太容易输出严格符合要求的频率脉冲。
由公式得:
T≈0.7(R2
+
2R1)C2
f
=
1/
T≈1.44/(R2
计算得:
C2
1000uF;
R2
440Ω;
R1
500Ω
⑶、数码显示部分电路
⑷、ZLG7290
I2C接口键盘及LED驱动器
1.I2C串行接口提供键盘中断信号方便与处理器接口
;
2.可驱动8位共阴数码管或64只独立LED和64个按键;
3
.控扫描位数可控任一数码管闪烁;
4
.提供数据译码和循环、移位、段寻址等控制;
5
.8个功能键,可检测任一键的连击次数;
6.无需外接元件即直接驱LED可扩展驱动电流和驱动电压
7
.提供工业级器件;
3.2PCB图设计
⑴交通灯PCB图
⑵数码管PCB图
3.3控制器设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。
此外,当检测到特殊情况(HOLD=‘1’)发生时,无条件点亮红灯的二极管。
本控制器可以有两种设计方法,一种是利用时钟烟的下降沿读取前级计数器的计数值,然后作出反应;
另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。
这两种方法各有所长,必须根据所用器件的特性进行选择:
比如有些FPGA有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;
而有些CPLD的组合逻辑资源则比较多,用第二种方法可能更好。
⑴、分位译码器设计--1
因为控制器输出的到计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如25分为2和5,7分为0和7)。
与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。
控制器中,引入了寄存器。
为了让读者开拓眼界,分位电路就用组合逻辑电路实现。
⑵、下图为交通灯控制器的顶层文件连接图
四、程序设计
4.1主程序设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJTDKZIS
PORT(CLK,SM,SB:
INBIT;
MR,MY,MG,BR,BY,BG:
OUTBIT);
ENDJTDKZ;
ARCHITECTUREARTOFJTDKZIS
TYPESTATE_TYPEIS(A,B,C,D);
SIGNALSTATE:
STATE_TYPE;
BEGIN
CNT:
PROCESS(CLK)--定时器cnt进程
VARIABLES:
INTEGERRANGE0TO29;
--变量S为秒定时器
VARIABLECLR,EN:
BIT;
--clr低电平清零端,en高电平计数使能端
IF(CLK'
EVENTANDCLK='
1'
)THEN--若clk上升沿到
IFCLR='
0'
THENS:
=0;
--同步清零
ELSIFEN='
THENS:
=S;
--由en=’0’停止计数
ELSES:
=S+1;
ENDIF;
CASESTATEIS
WHENA=>
MR<
='
;
MY<
MG<
--A状态:
主干道绿灯亮
BR<
BY<
BG<
支道红灯亮
IF(SBANDSM)='
THEN--若两个道都有车
IFS=29THEN--若又采到“29s标志位”信号
STATE<
=B;
CLR:
EN:
--则为B状态、且清零、停止计数
ELSE--否则
=A;
--继续A状态计数
ELSIF(SBAND(NOTSM))='
THEN--若只有支道有车
WHENB=>
--B状态:
主黄
支红
IFS=3THEN--若采到3s标志位信号
=C;
--则为C状态、且清零、停止计数
--继续B状态计数
WHENC=>
--C状态:
主红
支绿
IF(SMANDSB)='
THEN--若两个道都有车
IFS=29THEN--若有采到“29s标志位”信号
STATE<
=D;
--则为D状态、且清零、停止计数
ELSE--否则
STATE<
--继续C状态计数
ENDIF;
ELSIFSB='
THEN--若支道无车
='
WHEND=>
--D状态:
BR<
支黄
IFS=3THEN--若又采到“3s标志位”信号
--则为A状态、且清零计数、停止计数
--继续D状态计数
ENDIF;
ENDCASE;
ENDPROCESSCNT;
ENDART;
五、实验结果
5.1程序仿真图
六﹑心得体会
短短两个星期的EDA课程设计很块就结束了,虽然在之前的学习过程中还存在着没有弄懂的问题,但是通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
EDA设计我感觉程序调试最重要,试验软件、硬件熟悉其次。
我在编完各模块程序之后,编译查错最初有十几个错误,有输入错误、语法错误。
一遍一遍的变异查错,直到没有错误。
必须注意工程名和实体名一致,不然一般会出错。
在没有错误之后可以进行波型仿真。
若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。
都通过可以进行管脚配对,把程序烧入芯片,在实物机上看结果,从显示中得出还需改正的地方,再去改程序。
必须注意没改一次都要编译,重新输入。
在设计的过程中还应该多联系下实际情况,要了解实际情况下交通信号灯的工作情况,才能更好的完成此次的课程设计。
在今后的工作和学习中,我们不能仅仅把目光停留在课本上,要多理论联系实际。
有的时候,理论上是正确的东西放到现实中去,可能由于种种因素的制约,并不能达到实际的效果,还需要我们进行相应的修改才能完成要求。
这次的课程设计使我巩固了以前学习到的知识,还使我掌握了以前没有掌握的知识,同时锻炼了自己的能力。
七、附录
1、顶层设计代码
library
ieee;
use
ieee.std_logic_1164.all;
ieee.std_logic_arith.all;
ieee.std_logic_unsigned.all;
ENTITY
JiaoTongDeng
is
port(clr,clk,i,j,k:
in
std_logic;
rm,ym,gm,rf,yf,gf:
out
recount:
NEXT_S:
std_logic);
end
entity
JiaoTongDeng;
architecture
JTD
of
component
fenpingqi
port(CLR,CLK:
q:
buffer
component;
kongzhi
port(clk,i,j,k:
count_down
port(clk,reset,
ena_1Hz,
load:
std_logic_vector(7
downto
0);
seg7:
std_logic_vector(15
next_state:
signal
Q,
recount_1,signal
next_state_1:
begin
u1:
port
map(CLR=>
clr,CLK=>
clk,q=>
Q);
u2:
map(i=>
i,j=>
j,k=>
k,clk=>
Q,rm=>
rm,ym=>
ym,gm=>
gm1,rf=>
rf,
yf=>
yf,gf=>
gf);
u3:
map(RE,CLK,ena_1Hz_1,recount_1,load,S,next_state_1);
NEXT_S<
=next_state_1;
JTD;
2、交通灯控制器代码
(clk,i,j,k:
kongzhi;
arc
type
state_type
(a,b,c,d);
state:
state_type;
x:
std_logic_vector(2
Begin
x<
=i&
j&
k;
cnt:
process
(clk)
variable
s:
integer
range
0
to
49;
g:
nclr,en:
bit;
if
="
001"
then
=29;
elsif
010"
=39;
100"
=49;
else
if;
(clk'
event
and
clk='
)
nclr='
en='
=s;
=s+1;
case
state
when
a=>
rm<
ym<
gm<
rf<
yf<
gf<
s=g
<
=b;
nclr:
en:
Else
state<
=a;
b=>
s=3
=c;
c=>
=d;
d=>
case;
cnt;
arc;
3、分位译码电路设计
ENTITYFenweiIS
PORT
(Numin:
INintegerRANGE0TO45;
NumA,NumB:
OUTIntegerRANGE0to9
);
END;
ARCHITECTUREbehaviorOFFenweiIS
process(Numin)
IFNumin>
=40THEN
NumA<
=4;
NumB<
=Numin-40;
ELSIFNumin>
=30THEN
=3;
=Numin-30;
=20THEN
=2;
=Numin-20;
=10THEN
=1;
=Numin-10;
ELSE
=Numin;
ENDIF;
ENDPROCESS;
八﹑参考文献
[1]潘松,黄继业.2006.EDA技术使用教程.北京:
科学出版社.
[2]黄任;
2005;
VHDL入门.解惑.经典实例.经验总结.北京:
北京航空航天大学出版社.
[3]徐志军,徐光辉.2002.CPLD/FPGA的开发与应用.北京:
电子工业出版社.
[4]褚振勇.FPGA设计与应用.西安:
西安电子科技大学出版社.