您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 基于Verilog-HDL的交通灯控制器
交通灯控制器专业:电子信息科学与技术_班级:学号:学生姓名:指导教师:黄双林_1摘要交通灯是城市交通监管系统的重要组成部分,对于保证机动车辆的安全运行,维持城市道路的顺畅起到了重要作用。目前很多城市交叉路口的交通灯实行的是定时控制,灯亮的时间是预先设定好的,在时间和空间方面的应变性能较差,一定程度上造成了交通资源的浪费,加重了道路交通压力。本文在EDA技术的基础上,利用FPGA的相关知识设计了交通灯控制系统,可以根据实际情况对灯亮时间进行自由调整,通过数码管显示等待时间,点阵显示运行状态,蜂鸣器提示紧急状况,很好地维护了道路的交通规则。整个设计系统通过QuartusⅡ软件中的VerilogHDL语言进行代码编写,并下载到FPGA器件中进行硬件调试,验证了设计的交通信号灯控制电路完全可以实现预定的功能,具有一定的实用性。关键字:交通灯、定时控制、FPGA、VerilogHDL一、设计原理根据交通灯循环顺序表可以得到如表1的循环状态表,遇到紧急状况的时候,这时候有东西通行、南北通行和全部禁行三种情况,紧急状态结束后条件满足的情况下状态依次往后跳转。状态东西方向南北方向时间0红灯亮绿灯亮20s1黄灯亮绿灯亮10s2绿灯亮红灯亮20s3绿灯亮黄灯亮10s表1交通灯循环状态表1.方案比较方案一:直接用GPIO口驱动双色点阵;方案二:用两块3-8译码器控制双色点阵,一个控制红色,另一个控制绿色;方案三:用一块4-16选择器控制双色点阵;通过比较方案一需要24个GPIO,方案二需要14个GPIO口,而方案三只需要12个GPIO口,考虑到IO口的数量限制和资源的优化,故选择方案三,硬件部分还包括Led灯和蜂鸣器,用洞洞板搭建好了硬件电路。22.系统框架图1状态机状态转换图随着现代生活节奏的加快,人们出门便更多地选择自家的交通工具,这无疑加大了交通流量,如何控制十字路口的红绿灯,便显得相当的重要。简单的,有效地控制红绿灯,是减小客流量,甚至减少交通事故的重要保障。而此次课题,我选择了交通灯控制电路,能熟悉VerilogHDL硬件描述语言在现实生活中的重要意义,为以后的学习和工作打好基础。二、总体设计1.主体结构根据确定的系统设计方案,运用模块化的设计思路,我们在QuartusII13.0软件系统中设计了整个交通灯控制器的逻辑结构。交通灯控制器包括分频模块、交通灯模块、蜂鸣器控制模块、数码管显示模块、点阵显示模块和时间调整模块。50M的系统时钟分频到1Hz、2Hz和1KHz用于计时,点阵显示当前处于哪种状态,数码管显示模块提示等待的时间,按键调整时间用于调整时间减少客流量,紧急开关用于发生突发事故是禁止车辆通行。特殊运行状态结束后,控制器恢复原来的状态,继续运行。通过各个模块程序之间的端口合理连接和协调,成功设计出交通灯控制器的电路。3图2交通灯控制原理图2.分模块的设计(1)分频模块分频模块的功能是将50MHz的时钟频率分频到1Hz、2Hz和1KHz,输出给其他模块调用。在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的。因此,为了避免意外事件的发生,电路必须给出一个稳定的时钟才能让系统正常的工作。因此时钟发生模块最主要的功能就是产生一些稳定的输出信号,并将其用做后面几个电路的使能控制与同步信号。always@(posedgeClk)beginif(cnt1==26'd25_000_000)//分频产生1Hz时钟begincnt1=26'd0;Clk_1Hz=~Clk_1Hz;endelsecnt1=cnt1+1;if(cnt2==15'd25000)//分频产生1KHz时钟4begincnt2=15'd0;Clk_1k=~Clk_1k;endelsecnt2=cnt2+1'b1;if(cnt3==23'd12_499_999)//分频产生2Hz时钟begincnt3=23'd0;Clk_2Hz=~Clk_2Hz;endelsecnt3=cnt3+1'b1;end(2)数码管显示模块数码管显示模块的功能是将当前倒计时的数值输出显示,控制数码管显示,提示车辆应该等待的时间。always@(posedgeClk_1k)begincase(Mode)//模式切换2'd0:Time=Time1;2'd1:Time=Time2;default:Time=Time3;endcaseDel=~Del;//选择十位和个位if(Key3'd0)Seg=8'd0;elseSeg=(Del==2'b01)?(seg[Time/10]):(seg[Time%10]);End(3)蜂鸣器模块如果实现发生紧急事件,如救护车、警车、抢险车通过,蜂鸣器响5声关闭,特别地,全部禁行的优先级比东西禁行和南北禁行的优先级要高,可以覆盖掉这两种方式,同时蜂鸣器也会响5声关闭,可以提醒其他车辆禁止通行。always@(posedgeClk_1Hz)beginif(Key3'd0)beginif(Key[0]==1'b0&&Key1'b1)Flag3=1'b0;if(Flag24'd10)beginBeep=~Beep;Flag2=Flag2+1'b1;5endelseif(Key[0]==1'b1&&Flag3==1'b0)beginFlag3=1'b1;Flag2=4'd0;endelseFlag2=4'd10;endelsebeginBeep=1'b0;Flag2=4'd0;endend(4)点阵模块点阵可以显示当前状态,使用的时双色点阵,正常运行时显示绿色的“PASS笑脸”字样,刹车时显示红色的“STOP哭脸”字样,模式切换时显示红色“MODE爱心”字样。always@(posedgeClk_1k)beginCol=Num;if(Key3'd0||Mode2'd0)beginif(Key==3'd0&&Mode2'd0)Row=data2[Num+count];//MODE爱心elseRow=data1[Num+count];//STOP哭脸if(Num=4'd7)Num=4'd0;elseNum=Num+1'b1;endelsebeginRow=data[Num+count-8];//PASS笑脸if(Num==4'd15||Num8)Num=4'd8;elseNum=Num+1'b1;endif(cnt==10'd200)//计数,控制点阵移屏速度begincnt=10'd0;if(count==6'd47)count=6'd0;elsecount=count+1'b1;endelsecnt=cnt+1'b1;end6(5)按键模块第一个按键是模式切换按键,同时Led1、Led2会点亮,提示时选择的是长时间,第二下是短时间,第三下恢复到正常状态。第二、三个按键分别是控制数码管显示的等待时间增加、减少。always@(posedgeClk_2Hz)beginif(key[2]==1'b0)//模式切换Mode=Mode+1'b1;if(Mode==2'd3)Mode=3'd0;if(key[1]==1'b0)//时间增加if(Mode==2'd1)//长、短时间选择if(Time2==8'd99)Time2=8'd0;elseTime2=Time2+1'b1;elseif(Mode==2'd2)if(Time3==8'd99)Time3=8'd0;elseTime3=Time3+1'b1;if(key[0]==1'b0)//时间减少if(Mode==2'd1)//长、短时间选择if(Time2==8'd0)Time2=8'd99;elseTime2=Time2-1'b1;elseif(Mode==2'd2)if(Time3==8'd0)Time3=8'd99;elseTime3=Time3-1'b1;end(6)交通灯模块四个方向的Led显示运行状态,东西方向的灯对应相同,南北方向的灯对应相同。正常运行是按照交通灯规则执行,刹车开关按下时东西禁行时,东西方向红灯,南北方向绿灯;东西南北禁行时,东西方向绿灯,南北方向红灯;全禁行时,东西和南北方向都是红灯;模式切换时,Led灯熄灭。always@(posedgeClk_1Hz)beginif(Key[2]==1'b1)//东西通行beginLed=6'b110000;//东西方向绿灯亮Led1=6'b000011;//南北方向红灯亮endif(Key[1]==1'b1)//南北通行begin7Led=6'b000011;//东西方向红灯亮Led1=6'b110000;//南北方向绿灯亮endif(Key[0]==1'b1)//全部禁行beginLed=6'b000011;//东西方向红灯亮Led1=6'b000011;//南北方向红灯亮endif(Key3'd0)Flag=1'b1;//标志,用于恢复初始状态elseif(Flag==1'b1)//恢复初始状态beginFlag=1'b0;Time1=Time2;Led=6'b110000;Led1=6'b000011;endelsebeginif(Status==2'd0)//状态0if(Time1==8'd0)beginLed=6'b001100;//黄灯亮Led1=6'b000011;//红灯亮Status=2'd1;//转到状态1Time1=Time3;//短时间endelseTime1=Time1-1'b1;if(Status==2'd1)//状态1if(Time1==8'd0)beginLed=6'b000011;//红灯亮Led1=6'b110000;//绿灯亮Status=2'd2;//转到状态2Time1=Time2;//长时间endelseTime1=Time1-1'b1;if(Status==2'd2)//状态2if(Time1==8'd0)beginLed=6'b000011;//红灯亮Led1=6'b001100;//黄灯亮Status=2'd3;//转到状态3Time1=Time3;//短时间endelseTime1=Time1-1;if(Status==2'd3)//状态3if(Time1==8'd0)beginLed=6'b110000;//绿灯亮8Led1=6'b000011;//红灯亮Status=2'd0;//返回状态0Time1=Time2;//长时间endelseTime1=Time1-1'b1;case(Mode)2'd0:Led2=3'b000;//正常模式2'd1:Led2=3'b110;//长时间模式default:Led2=3'b101;//短时间模式endcaseif(Mode2'd0)beginFlag1=1'b1;Led=6'd0;Led1=6'd0;endelseif(Flag1==1'b1)beginFlag1=1'b0;Time1=Time2;Led=6'b110000;//绿灯亮Led1=6'b000011;//红灯亮endendend3.工程总体结构所设计的交通信号灯控制电路,主要适用于在两条干道汇合点形成的十字交叉路口,路口设计两组红绿灯分别对两个方向上的交通运行状态进行管理。所设计的这个系统的主要逻辑设计由一片型号为EP4CE115F29C7芯片完成,编写的VerilogHDL源程序在经过编译和功能仿真测试后,针对下载芯片进行管脚配置,下载到芯片中,进行相应的硬件调试,调试结果与软件仿真的结果相吻合,验证了设计完成了预定功能。基于VerilogHDL设的交通灯控制器,外围电路少、功耗低、可靠性高,便于系统功能的修改,设计效率高。图3总的电路图结构9三、问题和解决方案1.在QuartusII软件上进行仿真时,发现不能得到预期的效果,分析得知由于分频过大的原因,导致时序出现问题。经过同学的讨
本文标题:基于Verilog-HDL的交通灯控制器
链接地址:https://www.777doc.com/doc-6139529 .html