十字路口交通信号灯控制电路设计
时间:2020-11-10 13:13:53 来源:勤学考试网 本文已影响 人
等级:
等级:
课 程 设 计
课程名称
嵌入式系统课程设计
课题名称
十字路口交通信号灯的控制电路设计
专 业
电子信息工程
班 级
电信1381
学 号
201313020109
姓 名
彭坚
指导老师
贺富朋
2016年12月6日
电气信息学院
课程设计任务书
课题名称
十字路口交通信号灯的控制电路设计
姓 名
彭坚
专业
电子信息工程
班级
1381
学号
09
指导老师
贺富朋
课程设计时间
2016年12月4日-2016年12月16日(15、16周)
教研室意见
意见: 审核人:
一、任务及要求
CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。并最终完成电路的编程调试。具体要求如下:
1. 设计制作一块十字路口的交通信号灯的控制电路的专用芯片。
2. A方向和B方向各设置红(R)、黄(Y)、绿(G)三盏灯,三盏灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的方式显示出来。
3. 两个方向各灯的时间可方便地进行设置和修改。假设A方向为主干道,车流量大,A方向通行时间比B方向长。设A方向每次至少通行t1秒,B方向每次至多通行t2秒,黄灯亮t秒。
二、进度安排
第一周:
周一:集中布置课程设计相关事宜。
周二~周三:子模块程序设计,顶层电路程序设计。
周四~周日:子模块,顶层电路仿真。
第二周:周一~周三:编程下载,系统调试。
周四~周五:设计报告撰写。周五进行答辩和设计结果检查。
三、参考资料
1. 张 原编著,可编程逻辑器件设计及应用,机械工业出版社。
2.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
3. 刘洪喜,陆颖编著. VHDL电路设计实用教程 清华大学出版社
目录
一、总体设计思路………………………………………………………………………1
二、设计过程 ……………………………………………………………………………1
三、单元电路设计………………………………………………………………………2
3.1顶层设计…………………………………………………………………………3
3.2模块设计…………………………………………………………………………3
四、设计与仿真…………………………………………………………………………8
4.1编译………………………………………………………………………………8
4.2生成元器件……………………………………………………………………8
4.3连接原理图……………………………………………………………………10
五、系统仿真设计与仿真 …………………………………………………………10
5.1系统仿真………………………………………………………………………10
5.2引脚锁定………………………………………………………………………12
5.3调试结果………………………………………………………………………12
六、心得体会 …………………………………………………………………………13
一、设计总体思路
由于设计要求两个方向各灯的时间可方便地进行设置和修改。假设A方向为主干道,车流量大,A方向通行时间比B方向长。设A方向每次至少通行t1秒,B方向每次至多通行t2秒,黄灯亮t秒。一条为主干道A,一条为乡间公路B。组成十字路口,。有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;交通灯由绿→红有4秒黄灯亮的间隔时间,由红→绿没有间隔时间;系统有MRCY、MRCG、MYCR、MGCR四个状态;
特殊时期发出信号S=1,其余时间S=0;平时系统停留在MGCR(主干道通行)状态,一旦S信号有效,经MYCR(黄灯状态)转入MRCG(乡间公路通行)状态,但要保证MGCR的状态不得短于一分钟;即A每次至少通行60S。
一旦S信号无效,系统脱离MRCG状态。随即经MRCY(黄灯状态)进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于20秒钟。即B每次至多通行20S。
二 设计过程
2.1 交通灯工作原理分析:
根据交通灯控制器的功能与要求,将其总体电路分为状态控制,倒计时,数码管显示,信号灯显示模块。外部两路脉冲振荡器的频率选为1 kHz和1 Hz的信号,1khz信号用于显示模块的扫描,1 Hz信号用做倒计时模块的计数脉冲。由于实验箱只能接一个信号源故加入分频模块。
2.2 计时电路应满足下列条件:
1)当S=1,且计数器已完成60计数时,计数器进入模4计数,随后进入模20计数,再进入模4计数,再回到模60计数。
2)当计数器进行摸20计数时,一旦S变为0,计数器立马进入模4计数,再进入模60计数。
3)完成模20计数后,不论S为0或1,计数器进入模4计数,再进入模60计数。
4)若计数器未完成模60计数,不论S如何变话,计数器将继续进行模60计数。
2.3 使用文本设计底层文件,并生成相应元器件,再使用原理图设计顶层文件
三、单元电路设计
3.1 顶层文件的设计
顶层原理图设计可以依据系统框图进行,由状态控制计数模块,数码管显示分频模块和交通灯显示模块(jtdjs,jtdfp,jtdxs)三部分组成。
3.2 各模块设计文件
JTDJS:
计数控制
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JTDJS IS
PORT(CLK1,S,RESET:IN STD_LOGIC;
b:BUFFER STD_LOGIC;
tim:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END JTDJS;
ARCHITECTURE behav OF JTDJS IS
TYPE STA IS(mgcr,mycr,mrcg,mrcy);
SIGNAL STATE:STA;
BEGIN
PROCESS(CLK1)
-- VARIABLE b:STD_LOGIC:='0';
VARIABLE a:STD_LOGIC:='0';
VARIABLE th,tl:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RESET='0' THEN STATE<=mgcr; th:="0000" ;tl:="0000";a:='0';b<='0';
ELSIF CLK1'EVENT AND CLK1='1' THEN
CASE STATE IS
WHEN mgcr =>IF S='1' AND b='1' THEN STATE<=mycr;a:='0';th:="0000";tl:="0100";b<='0';
-- ELSIF S='0' AND b='1' THEN STATE<=mgcr;a:='0';--th:="0110";tl:="0000";
ELSE
IF a='0' THEN
th:="0110";tl:="0000";a:='1';
else
IF NOT(th="0000" AND tl="0010") then
IF tl="0000" then
tl:="1001";th:=th-1;
else tl:=tl-1;
END IF;
ELSE th:="0000";tl:="0001";a:='0';b<='1';
END IF;
END IF;
END IF;
WHEN mycr => IF a='0' THEN
th:="0000";tl:="0100";a:='1';
else
IF NOT(th="0000" AND tl="0010") then
tl:=tl-1;
ELSE th:="0000";tl:="0001";a:='0';STATE<=mrcg;
END IF;
END IF;
WHEN mrcg =>IF S='1' THEN
IF a='0' THEN
th:="0010";tl:="0000";a:='1';
else
IF NOT(th="0000" AND tl="0010") then
IF tl="0000" then
tl:="1001";th:=th-1;
else tl:=tl-1;
END IF;
ELSE th:="0000";tl:="0001";a:='0';STATE<=mrcy;
END IF;
END IF;
ELSE a:='0';STATE<=mrcy;th:="0000";tl:="0100";
END IF;
WHEN mrcy =>IF a='0' THEN
th:="0000";tl:="0100";a:='1';
else
IF NOT(th="0000" AND tl="0010") then
tl:=tl-1;
ELSE th:="0000";tl:="0001";a:='0';STATE<=mgcr;
END IF;
END IF;
END CASE;
tim <= th & tl;
END IF;
end process;
END behav;
JTDFP
(b)数码管显示分频
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JTDFP IS
PORT (CLK : IN STD_LOGIC;
JIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
SG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
sel0,sel1,sel2 : OUT STD_LOGIC;
CLK1:buffer STD_LOGIC );
END JTDFP;
ARCHITECTURE behav OF JTDFP IS
SIGNAL Q : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL P,R: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CONT8: STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL CONT : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL YM : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
F:PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN CONT<=CONT+1;
IF CONT=100 THEN CLK1<='1';CONT<=;
ELSE CLK1<='0';
END IF;
END IF;
END PROCESS;
C:PROCESS( CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF CONT8<"001" THEN CONT8 <=CONT8+1;
ELSE CONT8<=(OTHERS=>'0');
END IF;
END IF;
CASE CONT8 IS
WHEN "000" => sel0<='0';sel1<='1';sel2<='0';A<=JIN(3 downto 0);
WHEN "001" => sel0<='1';sel1<='0';sel2<='0';A<=JIN(7 downto 4);
WHEN OTHERS =>NULL;
END CASE;
END PROCESS ;
D:PROCESS(A)
BEGIN
CASE A IS
WHEN "0000" =>SG<= ;WHEN "0001" =>SG<= ;
WHEN "0010" =>SG<=; WHEN "0011" =>SG<=;
WHEN "0100"=>SG<=; WHEN "0101" =>SG<=;
WHEN "0110" =>SG<=; WHEN "0111" =>SG<=;
WHEN "1000" =>SG<=; WHEN "1001" =>SG<=;
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
END behav;
JTDXS
(c)交通灯显示
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JTDXS IS
PORT(CLK1,S,B,RESET:IN STD_LOGIC;
COUNT: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
MG,MY,MR,CG,CY,CR:OUT STD_LOGIC);
END JTDXS ;
ARCHITECTURE behav OF JTDXS IS
TYPE STATES IS(mgcr,mycr,mrcg,mrcy);
SIGNAL STATE:STATES;
BEGIN
PROCESS(STATE,CLK1, S,RESET)
BEGIN
IF RESET='0'
THEN STATE<=mgcr;MG<='1';CR<='1';MY<='0';MR<='0';CG<='0';CY<='0';
ELSIF CLK1'EVENT AND CLK1='1' then
CASE STATE IS
WHEN mgcr=>IF B='1' AND S='1'THEN
STATE<=mycr;MY<='1';CR<='1';MG<='0';MR<='0';CG<='0';CY<='0';
ELSE STATE<=mgcr;MG<='1';CR<='1';MY<='0';MR<='0';CG<='0';CY<='0';
END IF;
WHEN mycr=>IF COUNT= THEN
STATE<=mrcg;MR<='1';CG<='1';MG<='0';MY<='0';CR<='0';CY<='0';
ELSE STATE<=mycr;MY<='1';CR<='1';MG<='0';MR<='0';CG<='0';CY<='0';
END IF;
WHEN mrcg=>IF COUNT= OR S='0'THEN
STATE<=mrcy;MR<='1';CY<='1';MY<='0';MG<='0';CR<='0';CG<='0';
ELSE STATE<=mrcg;MR<='1';CG<='1';MG<='0';MY<='0';CR<='0';CY<='0';
END IF;
WHEN mrcy=>IF COUNT= THEN
STATE<=mgcr;MG<='1';CR<='1';MR<='0';MY<='0';CY<='0';CG<='0';
ELSE STATE<=mrcy;MR<='1';CY<='1';MY<='0';MG<='0';CR<='0';CG<='0';
END IF;
END CASE;
END IF;
END PROCESS;
END behav;
四、设计和仿真
4.1 编译
1)输入完程序之后逐个编译
2)逐个编译无错之后进行全程编译
4.2 将以上模块生成元器件
计数控制(d) 数码管显示分频(e) 交通灯显示(f)
4.3将以上各器件连接成实验原理图
(g)
五、系统仿真设计和仿真
5.1系统仿真
1)建立新的波形激励文件
2)在波形编辑器窗口添加节点
3)通过Edit->End Time 来设定仿真结束时间
4)在CLOCK窗口中设置clk的时钟周期为1us
点击save保存
仿真波形与调试结果
通过Tools下的Simulator Tools项进行仿真,然后观察输出波形。仿真波形如下:
(h)
S=1乡间公路状态(既MGCR60S-MYCG4S-MRCG20S-MGCY4S-MGCR60S)
(i)
S=0转S=1立即进入MYCR4S-MRCG20S
5.2引脚锁定
(j)
5.3调试结果:
有开关K1控制S的值,当K1断开时实验箱交通灯处于MGCR状态,数码管在倒数60计数。合上K1后S由0转入1状态,数码管继续倒数60计数且交通灯仍处于MGCR状态,60计数完成后随即转入MYCG4S-MRCG20S-MGCY4S-MGCR60S的循环状态直到S再次由1变成0,数码管立即停止计数进入倒数4S的黄灯状态,4S结束后交通灯进入MGCR状态,按下reset键数码管从顶端重新开始计时。
六、心得体会
通过此次课程设计,使我更加扎实的掌握了有关SOPC以及EDA方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了常用元件的识别和测试;熟悉了常用软件quartusII。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。对于这一次的收获,自己发现问题解决问题的能力有所提升。还有就是对自己细心程度的提升。我们从书本上学到的知识应用于实践,再次巩固了我的动手能力,提高了我的思考能力。虽然设计过程中遇到了很多困难,但是在解决这些问题的过程无疑是对自身专业素质的提高。当最终仿真成功的时候也是对自己的一种肯定。此次的设计不仅增强了自己在专业设计方面的信息,鼓舞了自己,更是一次兴趣的培养。
电气信息学院课程设计评分标准
环节
项目
评价
优
良
中
及格
不及格
实践环节(70%)
设计方案合理性与创造性
编程完成情况
电路模块仿真调试结果
硬件测试过程及结果
解决问题能力及答辩情况
纪律和出勤情况
设计报告(30%)
1 设计报告内容完整、规范
2 设计步骤规范、正确
3 仿真调试结果正确、波形清楚
4 硬件测试过程规范、结果正确
综合评价
课程设计成绩评定为:
□优 □良 □中 □及格 □不及格
指导老师签名:________________
日 期:________________