摘 要: 采用軟件控制方式的道路交通信號(hào)機(jī)在死機(jī)時(shí)往往失去其綠沖突保護(hù)功能。根據(jù)“綠沖突矩陣”的檢測(cè)原理,本文提出一種道路交通信號(hào)控制機(jī)的信號(hào)沖突檢測(cè)方案,采用自頂向下的設(shè)計(jì)方法,通過(guò)FPGA實(shí)現(xiàn)系統(tǒng)的各個(gè)功能模塊。該系統(tǒng)可以獨(dú)立地檢測(cè)綠燈信號(hào)沖突這種道路交通的異常情況,并能立即做出處理。仿真及實(shí)際測(cè)試結(jié)果表明,該系統(tǒng)時(shí)序分配與程序設(shè)計(jì)合理,工作穩(wěn)定可靠,并能夠提高信號(hào)機(jī)嵌入式系統(tǒng)的實(shí)時(shí)性。
關(guān)鍵詞: 綠沖突;FPGA;綠沖突矩陣;校驗(yàn)
0 引言
隨著各國(guó)城市化進(jìn)程的不斷發(fā)展,智能交通系統(tǒng)在城市道路交通控制中得到了廣泛的應(yīng)用。智能道路交通信號(hào)機(jī)是智能交通系統(tǒng)的重要組成部分,也是解決城市交通問(wèn)題的關(guān)鍵設(shè)備。信號(hào)機(jī)中的綠沖突檢測(cè)可以提高智能交通系統(tǒng)的安全性和可靠性。由于過(guò)去的綠沖突保護(hù)控制方式相對(duì)簡(jiǎn)單,通常是用簡(jiǎn)單的繼電器互鎖或者信號(hào)燈的接線實(shí)現(xiàn)[1],隨著多相位、多時(shí)段控制方式和線控、面控方式的發(fā)展,目前的綠沖突檢測(cè)多通過(guò)信號(hào)機(jī)的控制軟件實(shí)現(xiàn)。然而,當(dāng)這類信號(hào)機(jī)出現(xiàn)死機(jī)導(dǎo)致信號(hào)沖突時(shí),其保護(hù)功能就失效。因此研究一種新的綠沖突檢測(cè)電路在智能交通控制中具有十分重要的現(xiàn)實(shí)意義。
本文研究的綠沖突檢測(cè)電路采用FPGA實(shí)現(xiàn)。FPGA適合于組合邏輯和時(shí)序邏輯電路設(shè)計(jì),并且具有并發(fā)執(zhí)行的功能,相對(duì)于微控制器的程序設(shè)計(jì)更加穩(wěn)定可靠[2]。同時(shí),基于FPGA的綠沖突檢測(cè)電路實(shí)現(xiàn)信號(hào)機(jī)的綠沖突檢測(cè)功能,可以減輕信號(hào)機(jī)CPU的負(fù)擔(dān),提高系統(tǒng)的實(shí)時(shí)性。
1 綠沖突
綠沖突是指規(guī)定不允許同時(shí)放行的信號(hào)燈組中的綠色信號(hào)燈同時(shí)點(diǎn)亮[3]。就目前的交通信號(hào)控制機(jī)來(lái)說(shuō),產(chǎn)生綠沖突的原因大概有以下幾類:
?。?)系統(tǒng)軟故障
此類綠沖突通常是由于交通信號(hào)機(jī)里面的控制系統(tǒng)出現(xiàn)死機(jī)或者是一些數(shù)據(jù)處理錯(cuò)誤等軟故障造成的。不僅如此,如果交通信號(hào)機(jī)在較為惡劣的電磁環(huán)境下工作,也會(huì)受到電磁干擾而出現(xiàn)短暫的綠沖突現(xiàn)象。
?。?)硬件故障
由于信號(hào)機(jī)的硬件變質(zhì)、損壞或者溫度變化、受潮等原因造成的綠沖突。這種情況如果發(fā)生,就可能長(zhǎng)時(shí)間持續(xù)下去,只能對(duì)信號(hào)機(jī)進(jìn)行維修或者更換里面的部件[4-5]。
2 基于綠沖突矩陣的校驗(yàn)原理
本文設(shè)計(jì)的綠沖突檢測(cè)是基于綠沖突矩陣的檢測(cè)原理,沖突矩陣的行和列分別對(duì)應(yīng)一個(gè)信號(hào)燈組,為一對(duì)稱矩陣,如圖1所示。
在圖1(a)中假設(shè)有G0、G1、G2三個(gè)綠燈信號(hào),設(shè)G0和G1同時(shí)點(diǎn)亮視為沖突,G1和G2同時(shí)點(diǎn)亮視為沖突,則圖中對(duì)應(yīng)沖突的位置填入1,G0和G2同時(shí)點(diǎn)亮不視為沖突的位置填0,如圖所示,本文稱之為綠沖突矩陣數(shù)據(jù),因此,綠沖突矩陣數(shù)據(jù)中的位信息1就是某綠燈對(duì)子不允許同時(shí)點(diǎn)亮的定義。校驗(yàn)過(guò)程如下:
當(dāng)輸入的信號(hào)為G0G1G2=010時(shí)(1表示綠燈亮,0表示綠燈滅):
?。?)G0為0,不與G0所在的行校驗(yàn),轉(zhuǎn)下一行;
?。?)G1為1,進(jìn)行校驗(yàn),將輸入信號(hào)“010”與G1所在的行“101”相與,即010&101=0,數(shù)據(jù)正確;
(3)G2為0,同理不需要校驗(yàn)。
當(dāng)G0G1G2=110,即G0和G1同時(shí)亮?xí)r,與G0所在行相與后結(jié)果非0,說(shuō)明G0和G1信號(hào)沖突,此時(shí),信號(hào)機(jī)應(yīng)立即切斷所有綠燈信號(hào),轉(zhuǎn)而執(zhí)行黃閃信號(hào)。
本文設(shè)計(jì)的綠沖突檢測(cè)電路對(duì)應(yīng)15路綠燈信號(hào)G0~G14,如東西方向的直行綠燈、左轉(zhuǎn)綠燈、右轉(zhuǎn)綠燈、掉頭綠燈、行人綠燈等。在本文中綠沖突矩陣數(shù)據(jù)是以字節(jié)為單位的,所以15路信號(hào)對(duì)應(yīng)的綠沖突矩陣數(shù)據(jù)分成4塊,每一塊有8字節(jié),按照?qǐng)D1(b)的編號(hào)順序通過(guò)FPGA串口寫進(jìn)FPGA的ROM中。其中第一塊數(shù)據(jù)用于校驗(yàn)G0~G7綠信號(hào)之間的沖突,第二塊數(shù)據(jù)用于校驗(yàn)G8~G14與G0~G7綠信號(hào)之間的沖突,第三塊數(shù)據(jù)用于校驗(yàn)G8~G14綠信號(hào)之間的沖突。第四塊數(shù)據(jù)也是用于校驗(yàn)G8~G14與G0~G7綠信號(hào)之間的沖突,因此不需要寫進(jìn)ROM。在校驗(yàn)的過(guò)程中還應(yīng)排除Gx與Gx自身的比對(duì),如圖1(b)中斜方向所示。
3 總體方案
根據(jù)綠沖突矩陣的檢測(cè)原理,采用自頂向下的設(shè)計(jì)方法將檢測(cè)電路分為以下幾個(gè)模塊:(1)信號(hào)燈的燈組驅(qū)動(dòng)電路,通過(guò)SPI方式在正常狀態(tài)下接收信號(hào)控制機(jī)的燈組數(shù)據(jù),在黃閃狀態(tài)下接收沖突檢測(cè)電路發(fā)送的信號(hào)燈黃閃數(shù)據(jù)。(2)沖突檢測(cè)電路采用Xilinx的FPGA芯片XC3S50,通過(guò)SPI模塊接收信號(hào)燈的狀態(tài)數(shù)據(jù)。(3)數(shù)據(jù)接收結(jié)束后復(fù)位時(shí)鐘分頻模塊,時(shí)鐘分頻模塊產(chǎn)生其他模塊所需時(shí)鐘,所有模塊都是在統(tǒng)一的時(shí)鐘線上運(yùn)行,以免發(fā)生時(shí)序混亂。(4)沖突檢測(cè)模塊,在檢測(cè)時(shí)序期間對(duì)SPI接收的數(shù)據(jù)即信號(hào)燈的狀態(tài)數(shù)據(jù)進(jìn)行綠沖突校驗(yàn),校驗(yàn)是根據(jù)上文所說(shuō)的綠沖突矩陣比對(duì)各綠燈信號(hào)狀態(tài),該綠沖突矩陣數(shù)據(jù)存放在FPGA的IP核所生成的ROM里面。(5)黃閃延時(shí)判斷模塊,沖突檢測(cè)模塊的檢測(cè)結(jié)果經(jīng)過(guò)黃閃延時(shí)判斷模塊進(jìn)行延時(shí)檢測(cè)并確認(rèn)是否有沖突。如果沒(méi)有沖突,則燈組驅(qū)動(dòng)繼續(xù)接收信號(hào)控制機(jī)的燈組數(shù)據(jù);如果有沖突,則黃閃標(biāo)志置位,切斷MCU的SPI通道,沖突檢測(cè)電路通過(guò)SPI開(kāi)始發(fā)送黃閃數(shù)據(jù)至燈組驅(qū)動(dòng),從而讓燈組驅(qū)動(dòng)切換至黃閃狀態(tài)。總體方案如圖2所示。
4 各模塊設(shè)計(jì)
4.1 SPI模塊
SPI協(xié)議(Serial Peripheral Interface),即串行外圍設(shè)備接口,是一種高速全雙工的通信總線。SPI總線包含4條總線,分別為NSS、SCK、MOSI、MISO,F(xiàn)PGA SPI時(shí)序如圖3所示。從圖中可以看出,F(xiàn)PGA在時(shí)鐘的下降沿采集燈組的數(shù)據(jù),在上升沿發(fā)送數(shù)據(jù)。數(shù)據(jù)的傳輸是從低位開(kāi)始,接收的燈組信號(hào)存到三組16位寄存器P0、P1、P2。P0、P1、P2的數(shù)據(jù)格式一樣,如圖4所示,分別表示不同的道路方向。G是綠燈信號(hào),Y是黃燈信號(hào),R是紅燈信號(hào),下標(biāo)表示不同的形式,如左轉(zhuǎn)、右轉(zhuǎn)等。另有一組4位的寄存器YS用于存放黃閃數(shù)據(jù),當(dāng)處于黃閃狀態(tài)時(shí),YS寄存器的值以時(shí)鐘分頻模塊控制的時(shí)鐘頻率進(jìn)行0/1交替改變,并通過(guò)SPI發(fā)送至燈組驅(qū)動(dòng),從而控制燈組驅(qū)動(dòng)進(jìn)入黃閃狀態(tài),SPI模塊如圖5所示。
4.2 時(shí)鐘分頻模塊
時(shí)鐘分頻模塊相當(dāng)于整個(gè)電路的驅(qū)動(dòng)模塊,所有沖突檢測(cè)模塊都是在時(shí)鐘分頻模塊提供的時(shí)鐘下工作。如圖6所示,輸入的系統(tǒng)時(shí)鐘CLKIN被分頻為BUSY、CHCK、ADR3、ADR2、ADR1、ADR0,頻率為62.5 Hz~2 kHz。分頻器是通過(guò)計(jì)數(shù)器實(shí)現(xiàn)的,計(jì)數(shù)的方式如式(1)所示[6],當(dāng)計(jì)數(shù)到波形翻轉(zhuǎn)時(shí)間點(diǎn)時(shí)將波形輸出取反。BUSY和CHCK的功能如表1所示,當(dāng)BUSY為1時(shí),沖突檢測(cè)電路通過(guò)SPI開(kāi)始接收燈組狀態(tài)數(shù)據(jù),如果處于黃閃狀態(tài),則同時(shí)發(fā)送黃閃數(shù)據(jù)。ADR3~ADR0是ROM校驗(yàn)表的地址,可以尋址16個(gè)16位綠沖突矩陣數(shù)據(jù)。CLK4HZ是黃燈閃爍的頻率,RD信號(hào)是ROM的讀數(shù)據(jù)信號(hào),頻率是4 kHz。由于RD讀信號(hào)和ADR地址信號(hào)不能同時(shí)跳變,否則數(shù)據(jù)將會(huì)不穩(wěn)定,從而讀不到正確的數(shù)據(jù),因此需要將RD信號(hào)與ADR0的地址錯(cuò)開(kāi),如圖7所示,程序設(shè)計(jì)是通過(guò)16 kHz時(shí)鐘分頻得到4 kHz,但是在復(fù)位時(shí)計(jì)數(shù)器從1開(kāi)始計(jì)數(shù),最后將4 kHz取反后輸出到RD信號(hào)。
4.3 沖突檢測(cè)模塊
綠沖突檢測(cè)模塊是本文設(shè)計(jì)的核心模塊,其檢測(cè)周期定為4 ms。在檢測(cè)周期開(kāi)始時(shí),先將P0、P1、P2三燈組中的15路綠燈信號(hào)讀入8位寄存器G_SIG0、G_SIG1,其位置排列如圖8所示。綠沖突檢測(cè)就是尋找綠沖突矩陣數(shù)據(jù)中定義的同時(shí)點(diǎn)亮的綠燈對(duì)子,如果找到一個(gè)或一個(gè)以上的對(duì)子就判定發(fā)生了綠沖突。因此,尋找過(guò)程就是一個(gè)循環(huán)處理過(guò)程。首先判斷G_SIG0或G_SIG1中的i位是否為1(i為0~14),如果i為1,說(shuō)明i位的綠燈亮;其次,把G_SIG0或G_SIG1中的i位值清零。i位清零后,如果G_SIG0或G_SIG1中的值不為零,說(shuō)明有與Gi成對(duì)的綠燈對(duì)子存在。把這個(gè)數(shù)值與綠沖突矩陣數(shù)據(jù)中Gi對(duì)應(yīng)的數(shù)據(jù)相與,若結(jié)果不為零,說(shuō)明有與Gi成對(duì)但不允許同時(shí)點(diǎn)亮的綠燈對(duì)子存在,即存在綠沖突,循環(huán)處理結(jié)束,準(zhǔn)備輸出黃閃。如果結(jié)果為零,i加1,進(jìn)行下一輪比對(duì)處理。
按照沖突矩陣的數(shù)據(jù)格式,需將G0~G15分別與第2節(jié)中描述的綠沖突矩陣數(shù)據(jù)的三塊數(shù)據(jù)進(jìn)行校驗(yàn),F(xiàn)PGA程序設(shè)計(jì)如圖9所示。在每次讀信號(hào)到來(lái)時(shí),F(xiàn)PGA讀入2字節(jié)數(shù)據(jù),隨后地址信號(hào)ADR加1計(jì)數(shù),地址ADR 0~3的區(qū)域?yàn)榈谝粔K數(shù)據(jù),4~7的區(qū)域?yàn)榈诙K數(shù)據(jù),8~11的區(qū)域?yàn)榈谌龎K數(shù)據(jù)。在滿足時(shí)序(BUSY為0,CHCK為1)與不黃閃的條件下,讀入的第一塊數(shù)據(jù)用于綠燈狀態(tài)G0~G7與自身的比對(duì),第二塊數(shù)據(jù)用于綠燈狀態(tài)G0~G7與綠燈狀態(tài)G8~G14的比對(duì),第三塊數(shù)據(jù)用于綠燈狀態(tài)G8~G14與自身的比對(duì)。如果比對(duì)處理結(jié)果判定為綠沖突,則將綠沖突臨時(shí)標(biāo)志置1,否則將臨時(shí)標(biāo)志清0。
4.4 黃閃延時(shí)判斷模塊
當(dāng)信號(hào)燈閃爍時(shí),每隔250 ms就要改變一次狀態(tài),即0和1的交替變化,這樣沖突臨時(shí)標(biāo)志必然也會(huì)變化,從而導(dǎo)致錯(cuò)誤判斷。因此需要加入延時(shí)判斷,在BUSY上跳變的時(shí)候?qū)εR時(shí)標(biāo)志進(jìn)行判斷,若是1則計(jì)數(shù)器累積加1,否則清0計(jì)數(shù)器。當(dāng)累計(jì)到19時(shí)(BUSY周期16 ms,即計(jì)數(shù)時(shí)間超過(guò)300 ms),才可確認(rèn)為沖突信號(hào),觸發(fā)黃閃信號(hào),程序如圖10所示。
延時(shí)判斷必須在臨時(shí)標(biāo)志被清0之前,從圖11的時(shí)序圖中可以看出,臨時(shí)標(biāo)志位變化是在BUSY上升沿之前,清0在BUSY上升沿之后,因此延時(shí)判斷的觸發(fā)信號(hào)為BUSY的上升沿。
4.5 其他模塊
實(shí)際上,信號(hào)沖突檢測(cè)電路還包括紅綠沖突檢測(cè)、紅燈滅與綠燈滅檢測(cè)電路,這些電路在邏輯上相對(duì)簡(jiǎn)單,本文不做描述。另外,利用Xilinx FPGA的IP核生成的ROM模塊以及RS232串口模塊在本文所列出的相關(guān)參考文獻(xiàn)中有詳細(xì)的介紹,這里也不再描述[7-8]。
5 仿真與測(cè)試
通過(guò)Xilinx的ISE開(kāi)發(fā)軟件編寫Test Fixture測(cè)試文件對(duì)各個(gè)模塊進(jìn)行仿真測(cè)試,查看各個(gè)模塊的波形時(shí)序正確后,對(duì)頂層模塊進(jìn)行整體仿真。仿真結(jié)果表明,本設(shè)計(jì)時(shí)序邏輯正確,當(dāng)2個(gè)燈組的綠燈狀態(tài)違反綠沖突矩陣數(shù)據(jù)定義時(shí)能正確檢測(cè)出沖突,進(jìn)而進(jìn)入黃閃。最后利用STM32主控板和FPGA開(kāi)發(fā)板以及自己焊接的LED信號(hào)燈電路對(duì)程序進(jìn)行實(shí)際驗(yàn)證測(cè)試,如圖12所示。測(cè)試表明,信號(hào)燈在沒(méi)有沖突的時(shí)候能正常運(yùn)行,沖突時(shí)則進(jìn)入黃閃狀態(tài)。
6 結(jié)論
本文詳細(xì)介紹了基于FPGA的綠沖突檢測(cè)電路各個(gè)模塊的原理與設(shè)計(jì),經(jīng)過(guò)嚴(yán)密的時(shí)序分析以及Verilog語(yǔ)言編程,實(shí)現(xiàn)了各個(gè)模塊的基本功能,并通過(guò)了功能仿真與實(shí)際的硬件測(cè)試。結(jié)果表明該系統(tǒng)可以正確檢測(cè)出各種綠信號(hào)沖突并立即做出處理,使得智能交通系統(tǒng)更加安全可靠。利用FPGA設(shè)計(jì)的功能模塊經(jīng)過(guò)編譯后生成實(shí)際的時(shí)序邏輯電路,更加穩(wěn)定可靠,而且后期還可以進(jìn)行功能更改與完善,方便維護(hù)。
參考文獻(xiàn)
[1] 尹征琦,朱勁,劉智勇.綠沖突的智能保護(hù)及其實(shí)現(xiàn)[J].公路交通科技,1998,15(3):26-29.
[2] 梁赫西,謝虎城,王建,等.基于FPGA的智能車牌定位識(shí)別系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2014,40(11):32-35.
[3] 高雨,葉煒,沈國(guó)江.多相位智能交通控制器的設(shè)計(jì)[J].江南大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,5(5):556-560.
[4] 史忠科,黃輝先.交通控制系統(tǒng)導(dǎo)論[M].北京:科學(xué)出版社,2003.
[5] 王錕,張衛(wèi)華,衛(wèi)立陽(yáng).基于綠間隔矩陣的信號(hào)配時(shí)計(jì)算方法研究及應(yīng)用[J].交通科技,2014(2):132-134.
[6] 王水魚(yú),馮曉靖.一種新型delta-sigma小數(shù)分頻器的FPGA實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2013,32(5):25-27,31.
[7] 徐文波,田耕.Xilinx FPGA開(kāi)發(fā)實(shí)用教程(第二版)[M].北京:清華大學(xué)出版社,2012.
[8] 劉東華.Xilinx系列FPGA芯片IP核詳解[M].北京:電子工業(yè)出版社,2013.