《交通灯拔控制器设计.ppt》由会员分享,可在线阅读,更多相关《交通灯拔控制器设计.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、交通灯控制器设计交通灯控制器设计n应用场合:繁忙的高速路与较少使用的农场路相交应用场合:繁忙的高速路与较少使用的农场路相交n设计要求:探测器沿着农场路放置,只要有车辆等待着穿越设计要求:探测器沿着农场路放置,只要有车辆等待着穿越十字路口,就发出信号十字路口,就发出信号C C。交通灯按照如下方式操作:若农场路无车辆,则在高速交通灯按照如下方式操作:若农场路无车辆,则在高速路保持绿灯。在探测农场路有车辆,高速路上的交通灯应由路保持绿灯。在探测农场路有车辆,高速路上的交通灯应由绿到黄,再到红,并允许农场路方向灯变绿,绿灯亮一段时绿到黄,再到红,并允许农场路方向灯变绿,绿灯亮一段时间,由绿变黄再到红。
2、这时即使还有车辆穿越高速路,高速间,由绿变黄再到红。这时即使还有车辆穿越高速路,高速路的绿灯也要亮一段时间路的绿灯也要亮一段时间假设:把两个黄灯时间设相同假设:把两个黄灯时间设相同5S5S 将高速绿灯最短时间和农场将高速绿灯最短时间和农场路绿灯最长时间设置为相同路绿灯最长时间设置为相同10S10S 仅需一个计数器,能对两个时仅需一个计数器,能对两个时间间隔发生信号:一个间隔短、一间间隔发生信号:一个间隔短、一个间隔长个间隔长理解问题理解问题n确定输入、输出、控制器的状态配置确定输入、输出、控制器的状态配置q输入信号输入信号Reset:Reset:将控制器置于初始状态将控制器置于初始状态 clk
3、:clk:系统时钟信号系统时钟信号C C:探测农场路上两个方向的车辆:探测农场路上两个方向的车辆q输出信号输出信号HGHG、HYHY、HRHR:分别点亮高速路上的绿灯、黄灯、红灯:分别点亮高速路上的绿灯、黄灯、红灯FGFG、FYFY、FRFR:分别点亮农场路上的绿灯、黄灯、红灯:分别点亮农场路上的绿灯、黄灯、红灯转换过程时间显示转换过程时间显示q状态状态 按照输出组合唯一原则,仅有按照输出组合唯一原则,仅有4 4种不同的输出,因此控种不同的输出,因此控制器有制器有4 4个不同的状态个不同的状态HGHG:高速路亮绿灯(农场路亮红灯):高速路亮绿灯(农场路亮红灯)HY HY:高速路亮黄灯(农场路亮
4、红灯):高速路亮黄灯(农场路亮红灯)FG FG:农场路亮绿灯(高速路亮红灯):农场路亮绿灯(高速路亮红灯)FY FY:农场路亮黄灯(高速路亮红灯):农场路亮黄灯(高速路亮红灯)基于基于Spartan-3E开发板开发板交通灯控制器设计交通灯控制器设计n为方便实验,探测器由按键代替。当按下为方便实验,探测器由按键代替。当按下FPGAFPGA开开发板上按键时,产生的触发信号相当于检测到农发板上按键时,产生的触发信号相当于检测到农场路上有车。场路上有车。n由于由于FPGAFPGA板上板上ledled资源有限,农场和高速路上的资源有限,农场和高速路上的交通灯由两个交通灯由两个LEDLED管代替,管代替,
5、HGHG状态显示状态显示0000,HYHY状状态显示态显示0101,FGFG状态显示状态显示1010,FYFY状态显示状态显示1111n Spartan-3ESpartan-3E开发板有两个开发板有两个7 7段数码管,显示状态段数码管,显示状态为转换过程剩余的时间为转换过程剩余的时间。系统模块图(硬件电路)系统模块图(硬件电路)n控制器有限状态机将控制器有限状态机将Reset,CLK,TL(Reset,CLK,TL(相对长时间已到点相对长时间已到点)和和TS(TS(相对相对短的时间已经到点短的时间已经到点)以及经过同步之后的以及经过同步之后的C C(people)people)信号等作为输信号
6、等作为输入,并产生入,并产生ST(ST(复位定时器,开始对长和短时间间隔进行计数复位定时器,开始对长和短时间间隔进行计数)信号信号n定时器子系统将定时器子系统将Reset,CLKReset,CLK和和STST信号作为输入,产生信号作为输入,产生TLTL和和TSTS为输出为输出n车辆传感器子系统具有一个异步输入车辆传感器子系统具有一个异步输入C C,而它的输出为,而它的输出为C C同步信号同步信号n交通灯译码器将编码后的交通灯控制信号转换成不同的信号,分别交通灯译码器将编码后的交通灯控制信号转换成不同的信号,分别驱动独立的交通灯驱动独立的交通灯问题分解问题分解n车辆传感器车辆传感器n输出译码和交
7、通灯显示输出译码和交通灯显示n定时器(短时间间隔定时器(短时间间隔TSTS和长时间间隔和长时间间隔TLTL定时器)定时器)n控制器的有限状态机控制器的有限状态机 次态和输出组合逻辑次态和输出组合逻辑 状态寄存器(状态寄存器(n n个状态位,其中个状态位,其中n n由状态编码决定)由状态编码决定)车辆探测器车辆探测器n嵌在路上的双掷开关用来判断是否有车辆到达嵌在路上的双掷开关用来判断是否有车辆到达n因为车辆可在任意时刻到达,车辆探测器是异步工作因为车辆可在任意时刻到达,车辆探测器是异步工作的,为了将车辆识别信号同步化,该信号必须通过一的,为了将车辆识别信号同步化,该信号必须通过一个同步触发器,该
8、触发器由系统时钟控制个同步触发器,该触发器由系统时钟控制车辆探测器(车辆探测器(sensor.v模块)模块)n输入信号为输入信号为clk,reset_n,peopleclk,reset_n,people,其中,其中peoplepeople信号来自按键。信号来自按键。n输出信号为输出信号为people_validpeople_valid,表示检测信号有效。,表示检测信号有效。n键盘检测原理:当按键按下时,输入电平由高变低,按键松键盘检测原理:当按键按下时,输入电平由高变低,按键松开后,输入电平有低变高,如此会产生一个下降沿和一个上开后,输入电平有低变高,如此会产生一个下降沿和一个上升沿,只要扑捉
9、到这两个沿,就可以确定按键按下。升沿,只要扑捉到这两个沿,就可以确定按键按下。n键盘防抖原理:在按键被按下的瞬间,由于物理上的原因,键盘防抖原理:在按键被按下的瞬间,由于物理上的原因,导致按键在被按键的瞬间的过程中其实是处于高电平和低电导致按键在被按键的瞬间的过程中其实是处于高电平和低电平之间进行抖动,加上本实验的时钟频率很高,容易产生信平之间进行抖动,加上本实验的时钟频率很高,容易产生信号采集错误,导致检测失败,无法得到正确的结果。若要正号采集错误,导致检测失败,无法得到正确的结果。若要正确防抖,需要在检测到按键上升沿后延迟一小段信号在进行确防抖,需要在检测到按键上升沿后延迟一小段信号在进行
10、上升沿和下降沿检测。上升沿和下降沿检测。实验三实验三 按键检测实验按键检测实验交通灯译码器交通灯译码器n使用使用2 2:4 4译码器译码器交通灯状态显示模块交通灯状态显示模块(segled.v)Spartan-3E Spartan-3E开发板上提供两个开发板上提供两个LEDLED七段数码管,可以显示数字。七段数码管,可以显示数字。开发板上采用的是共阴的,即:低点亮。开发板上采用的是共阴的,即:低点亮。在在Spartan-3ESpartan-3E开发板上开发板上LEDLED数码管不是直接连在数码管不是直接连在FPGAFPGA上,而是通上,而是通过过74HC59574HC595的的8bit8bit
11、的串转并芯片连接到的串转并芯片连接到FPGAFPGA上的,这样连接的目的上的,这样连接的目的是可以更有效的使用是可以更有效的使用FPGAFPGA的的IOIO管脚,然后两个数码管再通过选通管脚,然后两个数码管再通过选通管脚选通。管脚选通。农场和高速路农场和高速路上的交通灯上的交通灯4 4种种状态由两个状态由两个LEDLED管代替。管代替。HGHG状态显示状态显示0000,HYHY状态显示状态显示0101,FGFG状态显示状态显示1010,FYFY状态显示状态显示0000交通灯状态显示模块交通灯状态显示模块(segled.v)n输入信号有:输入信号有:clk,reset_n,traffic_sta
12、teclk,reset_n,traffic_state,data_sel_tempdata_sel_temp,其中其中traffic_statetraffic_state为信号灯,直接驱动为信号灯,直接驱动LEDLED,data_sel_tempdata_sel_temp为送到两位数码中要显示的时间为送到两位数码中要显示的时间n模块输出信号分别为:模块输出信号分别为:led_b0,ledb1,led_data,led_oe_n,led_rck,led_srckled_b0,ledb1,led_data,led_oe_n,led_rck,led_srck。led_b0,led_b1led_b0,
13、led_b1作为选通数码管信号,高电平有效。作为选通数码管信号,高电平有效。led_dataled_data,串行输入数据信号,串行输入数据信号led_oe_n,led_oe_n,选通选通74HC59574HC595,低电平有效。低电平有效。led_rckled_rck,串行数据转并信号,串行数据转并信号led_srck,led_srck,数据串行输入数据串行输入 74HC595 74HC595移位信号。移位信号。led1,led2led1,led2,显示红绿黄灯,显示红绿黄灯间隔定时器间隔定时器n设计的目的是在设计的目的是在STST信号进行设置之后,产生信号进行设置之后,产生TLTL和和TS
14、TS信信号。使用一个计数器和外部译码器逻辑。当号。使用一个计数器和外部译码器逻辑。当STST信号为信号为真时,计数器清零,而当计数器的计数值到达一个适真时,计数器清零,而当计数器的计数值到达一个适当的阈值时,外部逻辑就使得当的阈值时,外部逻辑就使得TLTL或或TSTS信号为真。假设信号为真。假设计数到计数到01110111时,时,TSTS为真,当到达为真,当到达11111111时,时,TLTL为真为真时钟分频与计时模块时钟分频与计时模块(timer.v)n输入信号输入信号clk,reset_n,STclk,reset_n,ST,traffic_statetraffic_state.其中其中ST
15、ST为计数为计数器复位后重新启动信号,器复位后重新启动信号,traffic_statetraffic_state为为当前显示状态当前显示状态n输出信号为输出信号为TSTS,TLTL,data_sel_tempdata_sel_temp,当,当TSTS为为1 1,表示短时,表示短时间计时已到,当间计时已到,当TLTL为为1 1,表示长时间计时已到。,表示长时间计时已到。data_sel_tempdata_sel_temp表示定时器剩余的定时时间值(用于显示)。表示定时器剩余的定时时间值(用于显示)。时钟分频与计时模块时钟分频与计时模块(timer.v)/purpose:Divide the 66
16、.666667MHZ clk to 1HZ,generate the TS and TL signal。used for controlling the display time of traffic lightmodule timer(TS,TL,ST,clk,reset_n,traffic_state,data_sel_temp);output TS;output TL;output 7:0 data_sel_temp;reg 7:0 data_sel_temp;input ST;input clk;input reset_n;input 1:0 traffic_state;reg 3:0
17、 value;reg 24:0 counter;reg clk1hz;wire time10s;wire time5s;时钟分频与计时模块时钟分频与计时模块(timer.v)always(posedge clk or negedge reset_n)beginif(reset_n=1b0)begincounter=25d0;clk1hz=1;endelse if(counter25d33333333)counter=counter+1;else begin counter =25d0;clk1hz =clk1hz;endend/Divide the 66.666667MHZ clk to 1H
18、Zalways(posedge clk1hz or negedge reset_n or posedge ST)begin if(reset_n=1b0)value=0;else if(ST)value=0;else value=5)?1b1:1b0;assign TL=(value=10)?1b1:1b0;assign time10s=(traffic_state0=1b0)&ST;/绿灯延时绿灯延时10Sassign time5s=(traffic_state0=1b1)&ST;/黄灯延时黄灯延时5Sreg time10s_delay;reg time5s_delay;always(neg
19、edge reset_n or posedge clk)begin if(reset_n=1b0)begin time10s_delay=0;time5s_delay=0;end else begin time10s_delay=time10s;time5s_delay=time5s;endendreg 7:0 data_sel_temp1;/根据状态转换设定定时时间根据状态转换设定定时时间always (negedge reset_n or posedge clk)begin if(reset_n=1b0)data_sel_temp1=8h10;else if(time10s_delay)d
20、ata_sel_temp1=8h10;else if(time5s_delay)data_sel_temp1=8h05;else data_sel_temp1=8h00;endreg ST_delay;/对输入对输入ST信号进行延迟两个周期信号进行延迟两个周期always(negedge reset_n or posedge clk)begin if(reset_n=1b0)ST_delay=0;else ST_delay=ST;endreg ST_delay1;always(negedge reset_n or posedge clk)begin if(reset_n=1b0)ST_dela
21、y1=0;else ST_delay1=ST_delay;endalways(negedge reset_n or posedge clk1hz or posedge ST_delay1)begin if(reset_n=1b0)data_sel_temp=8h10;else if(ST_delay1)/定时器启动信号,根据状态设定初始值定时器启动信号,根据状态设定初始值 data_sel_temp=data_sel_temp1;else if(data_sel_temp=8h00)data_sel_temp=8h00;else if(data_sel_temp=8h10)data_sel_t
22、emp=8h10-8h07;else data_sel_temp=data_sel_temp-1b1;end /原因对两个数码管显示为原因对两个数码管显示为16进制,显示进制,显示10H后,下一个为后,下一个为09Hendmodule交通灯状态机的设计交通灯状态机的设计n其中其中people_validpeople_valid是作为系统检测到的是作为系统检测到的信号信号C C(即按键)有效的提示,提供给(即按键)有效的提示,提供给FSMFSM模块作为输入。模块作为输入。nTSTS:相对短的时间已经到点。:相对短的时间已经到点。nTLTL:相对长的时间已经到点:相对长的时间已经到点。该系统的核心
23、部分,为整个系统逻该系统的核心部分,为整个系统逻辑功能实现的模块,是一有限状态控辑功能实现的模块,是一有限状态控制器。制器。输入信号为输入信号为clk,reset_n,people_validclk,reset_n,people_valid,TSTS,TLTL。输出信号:输出信号:traffic_state1:0traffic_state1:0,即交通灯的工作状态,作为显示模块和,即交通灯的工作状态,作为显示模块和定时模块的输入。定时模块的输入。STST:复位定时器,并开始对长和短时间间隔进行计数。交通灯:复位定时器,并开始对长和短时间间隔进行计数。交通灯一切换状态,立刻置一切换状态,立刻置S
24、TST为高电平,是计时器复位并重新计时。为高电平,是计时器复位并重新计时。交通灯状态机的设计交通灯状态机的设计n使用外部计数器后的米利型状态图尝试使用外部计数器后的米利型状态图尝试ResetTSTS/ST(TLC)TLC/STTSTS/ST(TL+C)TL+C/STHGFGFYHY 状态机说明:系统启动对状态机说明:系统启动对计数器进行复位,并设置长计计数器进行复位,并设置长计数时间到(数时间到(TL=1TL=1),当检测到),当检测到peoplepeople(C C)信号,将)信号,将STST置置1 1对对计数器进行复位,计数器进行复位,HGHG转换为转换为HYHY,当计数到短时间间隔,置,
25、当计数到短时间间隔,置STST为为1 1开始进行长时间计数,转开始进行长时间计数,转换到换到FGFG,若,若TLTL为为1 1或或peoplepeople(C C)=0=0,退出到,退出到FYFY,最后若最后若TSTS为为1 1,短时间计时到,短时间计时到,切换到切换到HGHG,并且,并且STST置置1 1,对计,对计时器复位并计数到时器复位并计数到TLTL。次态逻辑和输出次态逻辑和输出n有限状态机具有有限状态机具有6 6个输入:个输入:ResetReset、C C、TLTL、TSTS以及当前状态位(以及当前状态位(Q1Q1和和Q0Q0)n有限状态机具有有限状态机具有7 7个输出:个输出:2
26、2个次态位个次态位P1P1、P0P0,STST信号信号,H1,0 (编码后的高编码后的高速路交通灯信号速路交通灯信号)和和F1,0(编码后的农编码后的农场路交通灯信号场路交通灯信号)n采用随机状态编码:采用随机状态编码:HG=00HG=00,HY=10HY=10,FG=01FG=01,FY=11FY=11。将这些状态填充至状。将这些状态填充至状态表,就能得到编码后的状态表,就态表,就能得到编码后的状态表,就可产生次态逻辑和输出逻辑可产生次态逻辑和输出逻辑InputsPresent StateNext StateOutputsCTLTSSTHF0HG(00)HG(00)00010 0HGHG00
27、010 11HGHY10010 0HY(10)HY(10)00110 1HYFG1011010FG(01)FG (01)010 000FGFY110 001FGFY110 000FY(11)FY (11)010 011FYHG110 01ResetTSTS/ST(TLC)TLC/STTSTS/ST(TL+C)TL+C/STHGFGFYHY由状态图到状态表由状态图到状态表InputsPresent StateNext StateOutputsCTLTSSTHF0HGHG00010 0HGHG00010 11HGHY10010 0HYHY00110 1HYFG1011010FGFG010 000F
28、GFY110 001FGFY110 000FYFY010 011FYHG110 01ResetTSTS/ST(TLC)TLC/STTSTS/ST(TL+C)TL+C/STHGFGFYHY交通灯状态机的设计交通灯状态机的设计/purpose:Finite state machine used for implementing the logic of traffic lightmodule fsm_ctrl(people_valid,clk,reset_n,TS,TL,ST,traffic_state);Input people_valid;input TS;input TL;input clk
29、;input reset_n;output ST;output 1:0 traffic_state;reg 1:0 traffic_state;reg 1:0 fsm_next_state;reg ST;reg people_check;parameter HG=2b00,HY=2b01,FG=2b10,FY=2b11;/traffic light state controlalways(posedge clk or negedge reset_n)begin if(reset_n=1b0)traffic_state=HG;else traffic_state=fsm_next_state;e
30、ndalways(traffic_state or TL or TS or people_check)begin case(traffic_state)HG:if(people_check&TL)fsm_next_state=HY;else fsm_next_state=HG;HY:if(TS)fsm_next_state=FG;else fsm_next_state=HY;FG:if(TL|(!people_check)fsm_next_state=FY;else fsm_next_state=FG;FY:if(TS)fsm_next_state=HG;else fsm_next_state
31、=FY;endcase /end caseend /end alwayswire ST_temp;assign ST_temp=(traffic_state=HG)&people_check&TL)|(traffic_state=HY)&TS)|(traffic_state=FG)&(TL|!people_check)|(traffic_state=FY)&TS);always(posedge clk or negedge reset_n)begin if (reset_n=1b0)ST=0;else ST=ST_temp;endwire check_rst;assign check_rst=
32、(reset_n=1b0|(traffic_state=FY);always (posedge check_rst or posedge people_valid)begin if(check_rst)people_check=0;else people_check=1;/people_check is used for hold the /information people_valid deteced by sensor end endmodule顶层模块顶层模块traffic_top.v输入信号有:输入信号有:clk,reset_n,peopleclk,reset_n,peopleclk
33、:clk:系统时钟,频率为系统时钟,频率为66.666667MHZ66.666667MHZ。reset_nreset_n:系统异步复位信号,将控制器置于初始状态:系统异步复位信号,将控制器置于初始状态,低电平有效。低电平有效。People:People:检测信号输入,由外部按键按下产生一低电平信号提供检测信号输入,由外部按键按下产生一低电平信号提供顶层模块顶层模块traffic_top.vmodule traffic_top(clk,reset_n,people,led_data,led_oe_n,led_srck,led_rck,led_b0,led_b1,led1,led2);input
34、clk,reset_n,people;output led_data,led_oe_n,led_srck,led_rck,led_b0,led_b1,led1,led2;wire people_valid,TL,TS,ST;wire 1:0 traffic_state;wire 7:0 data_sel_temp;fsm_ctrl U1(.clk(clk),reset_n(reset_n),.people_valid(people_valid),.traffic_state(traffic_state),.TS(TS),.TL(TL),.ST(ST);Segled U2(.clk(clk),.
35、traffic_state(traffic_state),.reset_n(reset_n),.led_data(led_data),.led_oe_n(led_oe_n),.led_srck(led_srck),.led_rck(led_rck),.led_b0(led_b0),.led_b1(led_b1),.led1(led1),.led2(led2),.data_sel_temp(data_sel_temp);Timer U3(.TS(TS),.TL(TL),.ST(ST),.clk(clk),.reset_n(reset_n),.traffic_state(traffic_state),.data_sel_temp(data_sel_temp);sensor U4(.clk(clk),.reset_n(reset_n),.people(people),.people_valid(people_valid);endmodule