基于FPGA的交通系統(tǒng)遠(yuǎn)程網(wǎng)絡(luò)控制設(shè)計(jì)
摘要 為了緩解城市交通擁堵問題,提出一種基于FPGA平臺(tái)遠(yuǎn)程網(wǎng)絡(luò)控制的城市交通控制系統(tǒng)設(shè)計(jì)。系統(tǒng)采用TCP/IP傳輸協(xié)議實(shí)現(xiàn)控制中心發(fā)送控制信息給交通系統(tǒng)。控制中心采用Qt圖形化界面實(shí)現(xiàn),清楚直觀;交通系統(tǒng)依據(jù)控制信息選擇相應(yīng)配時(shí)方案進(jìn)行顯示。經(jīng)測試,該系統(tǒng)工作穩(wěn)定、控制精確、可靠性高,且成本較低。
本文引用地址:http://butianyuan.cn/article/201610/306122.htm關(guān)鍵詞 FPGA;TCP/IP;Qt;交通系統(tǒng);遠(yuǎn)程控制;車流量
隨著社會(huì)經(jīng)濟(jì)的快速發(fā)展和人民生活水平的不斷提高,城市中車流量呈現(xiàn)出急劇增長的趨勢,導(dǎo)致城市交通出現(xiàn)了巨大的壓力。因此,改善十字路口的交通信號(hào)燈運(yùn)行模式,提高十字路口的通行效率,對(duì)緩解城市交通堵塞有著重要的現(xiàn)實(shí)意義。而目前城市的交通控制,是固定的紅綠燈轉(zhuǎn)換周期,不靈活,在不同的時(shí)間段,十字路口的兩個(gè)方向會(huì)出現(xiàn)車流量大小不平衡的情況,同時(shí)白天與夜間的車流量相差也較大,如采用固定的定時(shí)機(jī)制將嚴(yán)重降低實(shí)際十字路口的通行效率。由此,有人提出使用地感線圈檢測車流量,根據(jù)車流量自動(dòng)配時(shí),但鋪設(shè)地感線圈成本過高,且容易出現(xiàn)誤差,公路網(wǎng)的現(xiàn)有網(wǎng)絡(luò)資源也未得到充分利用。
鑒于以上原因,本文提出了基于FPGA的遠(yuǎn)程控制交通系統(tǒng),能有效地利用公路網(wǎng)現(xiàn)有的網(wǎng)絡(luò)資源,動(dòng)態(tài)調(diào)節(jié)交通系統(tǒng)中車輛的通行時(shí)間,既提高了十字路口的車輛通行效率,又降低了成本。
1 系統(tǒng)總體設(shè)計(jì)與架構(gòu)
該系統(tǒng)主要由交通系統(tǒng)自動(dòng)配時(shí)模塊、顯示模塊和控制中心遠(yuǎn)程控制模塊組成,如圖1所示。
交通系統(tǒng)自動(dòng)配時(shí)模塊采用50 MHz時(shí)鐘源按照不同的配時(shí)方案進(jìn)行定時(shí)計(jì)數(shù),采用Altera公司的Cyclone IV代系列EP4CE15F17C8芯片作為主控芯片,利用Verilog HDL硬件語言完成整個(gè)交通燈定時(shí)配時(shí)控制模塊的設(shè)計(jì);交通系統(tǒng)顯示模塊是根據(jù)配時(shí)模塊選擇的方案對(duì)交通燈運(yùn)行狀態(tài)和數(shù)碼管數(shù)字顯示進(jìn)行控制顯示;控制中心遠(yuǎn)程控制模塊使用Qt界面編程技術(shù)和TCP/IP傳輸協(xié)議,使得遠(yuǎn)程操作方便直觀且控制信息傳輸可靠。
2 交通系統(tǒng)自動(dòng)配時(shí)模塊
此部分主要包括配時(shí)模塊設(shè)計(jì)和定時(shí)計(jì)數(shù)模塊設(shè)計(jì)兩部分,主要實(shí)現(xiàn)配時(shí)方案的預(yù)存與計(jì)時(shí)。
2.1 交通系統(tǒng)自動(dòng)配時(shí)模塊設(shè)計(jì)
十字路口的交通分為主干道和副干道兩個(gè)方向。主干道方向具有紅燈(R1)、黃燈(Y1)、直行綠燈(G1)和左轉(zhuǎn)綠燈(L1),副干道方向也具有紅燈 (R2)、黃燈(Y2)、直行綠燈(G2)和左轉(zhuǎn)綠燈(L2)。在交通高峰時(shí)期,十字路口兩個(gè)方向的燈必須按照合理的順序亮滅,根據(jù)十字路口的實(shí)際交通運(yùn)行情況,此時(shí)系統(tǒng)的工作情況如下:
主干道方向的交通燈工作順序?yàn)椋壕G燈→黃燈→左轉(zhuǎn)綠燈→黃燈→紅燈→黃燈。
副干道方向的交通燈工作順序?yàn)椋杭t燈→黃燈→綠燈→黃燈→左轉(zhuǎn)綠燈→黃燈。
在實(shí)際交通中,兩個(gè)方向交通信號(hào)燈的狀態(tài)有著密切的聯(lián)系,一個(gè)方向的交通信號(hào)燈狀態(tài)影響著另一個(gè)方向的交通信號(hào)燈狀態(tài),只有這樣才能協(xié)調(diào)好兩個(gè)方向的車流,若兩個(gè)方向的交通信號(hào)燈都各自獨(dú)立變化,交通系統(tǒng)則會(huì)產(chǎn)生混亂。
其一個(gè)周期的交通狀態(tài)對(duì)應(yīng)情況如表1所示,狀態(tài)從S0~S7,其中1表示燈亮,0表示燈滅。在文中編程實(shí)現(xiàn)時(shí),可將主干道和副干道的狀態(tài)分開進(jìn)行,所以針對(duì)主干道S4~S7狀態(tài)可合并,針對(duì)副干道S0~S3狀態(tài)可合并。
實(shí)際交通中,白天和夜間的車流量相差較大,同時(shí)白天期間的主副干道車流量也會(huì)出現(xiàn)不均衡的現(xiàn)象,這就要求準(zhǔn)備多套配時(shí)方案,以適應(yīng)不同的需求。針對(duì)白天正常情況下,主干道車流量大于副干道車流量時(shí),配時(shí)時(shí)間設(shè)置如表2所示,視為方案1;針對(duì)白天主干道車流量小于副干道車流量時(shí),配時(shí)時(shí)間如表3所示,視為方案2;針對(duì)夜間車流量較小的情況下,配時(shí)時(shí)間可如表4所示設(shè)置,視為方案3;當(dāng)發(fā)生交通事故或者有救護(hù)車、消防車等應(yīng)急車輛需要優(yōu)先通行時(shí),所有路口均將紅燈置亮,保證應(yīng)急車輛的通行。這3種配時(shí)方案的選擇是由控制中心綜合所得到的交通信息之后,通過網(wǎng)絡(luò)遠(yuǎn)程控制選擇。
2.2 定時(shí)計(jì)數(shù)模塊設(shè)計(jì)
系統(tǒng)使用50MHz時(shí)鐘晶振,所以1 s對(duì)應(yīng)50 000 000個(gè)時(shí)鐘節(jié)拍,每過50 000 000個(gè)時(shí)鐘節(jié)拍清零再重新計(jì)數(shù),之后根據(jù)各盞燈的持續(xù)時(shí)間作為預(yù)置數(shù)按照1 s為一個(gè)單位遞減計(jì)數(shù),減到1以后再根據(jù)運(yùn)行狀態(tài)和配時(shí)時(shí)間重新預(yù)置數(shù),依次循環(huán)。此模塊無需設(shè)計(jì)單獨(dú)的分頻模塊,整個(gè)系統(tǒng)可采用同一時(shí)鐘信號(hào),設(shè)計(jì)上更統(tǒng)一且不會(huì)出現(xiàn)時(shí)鐘不匹配的問題。
3 交通系統(tǒng)顯示模塊
顯示模塊部分主要涉及交通紅綠燈的顯示和數(shù)碼管的顯示兩部分,其中交通紅綠燈的顯示比較簡單,F(xiàn)PGA以4位Alamp變量控制主干道上的4盞燈,其中Alamp[0]控制左轉(zhuǎn)綠燈,Alamp[1]控制黃燈,Alamp[2]控制紅燈,Alamp[3]控制綠燈,其值為1則表示相應(yīng)的燈亮,如Alamp為4’b0001表示左轉(zhuǎn)綠燈亮;同時(shí)以4位Blamp變量控制副干道上的4盞燈,其設(shè)置與Alamp類似。每個(gè)燈的亮滅持續(xù)時(shí)間都是按照配時(shí)模塊設(shè)置的。
數(shù)碼管的顯示相比于交通紅綠燈的顯示更復(fù)雜,因?yàn)樾枰由霞哟a、動(dòng)態(tài)掃描等部分。整個(gè)交通信號(hào)燈系統(tǒng)實(shí)際需要4對(duì)共8個(gè)數(shù)碼管,由于相對(duì)的路口倒計(jì)時(shí)完全相同,所以為了節(jié)省邏輯資源,簡化設(shè)計(jì),可讓相對(duì)路口共用一對(duì)數(shù)碼管,所以只需對(duì)2對(duì)共4個(gè)數(shù)碼管。數(shù)碼管是共陽的,4個(gè)數(shù)碼管的段選信號(hào)均共用同樣的引腳,且均為低電平有效。文中主干道的倒計(jì)時(shí)時(shí)間設(shè)置為Number_Data1,副干道的倒計(jì)時(shí)時(shí)間設(shè)置為Number_Data2,數(shù)碼管的顯示設(shè)計(jì)思路如圖2所示。
由圖中可看出,通過“十位取位模塊”分別對(duì)Number_Data1和Number_Data2進(jìn)行取位的操作,將其十位和個(gè)位劃分;之后通過“SMG加碼模塊”,即數(shù)碼管顯示加碼模塊,轉(zhuǎn)換成數(shù)碼管顯示碼;最后由“同步動(dòng)態(tài)掃描模塊”驅(qū)動(dòng)點(diǎn)亮數(shù)碼管?,F(xiàn)針對(duì)每一個(gè)模塊進(jìn)行分析。
(1)十位取位模塊。就是利用數(shù)學(xué)運(yùn)算符“%”和“/”分別取得主副干道計(jì)時(shí)時(shí)間的十位和個(gè)位,將十位和個(gè)位分開進(jìn)行處理。
(2)SMG加碼模塊。就是分別將兩個(gè)路口倒計(jì)時(shí)時(shí)間的十位與個(gè)位的數(shù)字轉(zhuǎn)換成數(shù)碼管可顯示的碼型,每一個(gè)數(shù)字均是7段數(shù)碼管a,b,c,d,e,f,g每段置亮置滅組合而成的,數(shù)碼管顯示示意圖如圖3所示。
(3)同步動(dòng)態(tài)掃描模塊。同步動(dòng)態(tài)掃描模塊利用時(shí)分原理和人類的視覺暫留效應(yīng),由于每個(gè)數(shù)碼管點(diǎn)亮?xí)r間為1 ms,輪流驅(qū)動(dòng)點(diǎn)亮4個(gè)數(shù)碼管,人眼無法識(shí)別,所以目測為4個(gè)數(shù)碼管同時(shí)點(diǎn)亮。此模塊由兩部分組成,分別為行掃描模塊和列掃描模塊,由于FPGA是可并行操作的,所以這兩個(gè)模塊可并行執(zhí)行,達(dá)到真正的同步。列掃描模塊相當(dāng)于對(duì)數(shù)碼管進(jìn)行片選,每隔1 ms就使能不同的數(shù)碼管;而行掃描模塊是輸出不同的SMG碼,根據(jù)列掃描對(duì)數(shù)碼管的片選使能,輸出當(dāng)前數(shù)碼管的SMG碼。
4 控制中心遠(yuǎn)程監(jiān)控模塊
此模塊采用以太網(wǎng)技術(shù)將接收到的交通信息分析處理后,通過TCP/IP傳輸協(xié)議將控制信息發(fā)送給FPGA,F(xiàn)PGA根據(jù)控制信息選擇配時(shí)模塊當(dāng)中的一套配時(shí)方案,將顯示模塊中的交通紅綠燈和數(shù)碼管按照配時(shí)方案顯示出來。其中,F(xiàn)PGA控制整個(gè)交通系統(tǒng)作為服務(wù)端,控制中心作為客戶端,其界面采用Qt編程技術(shù)。
4.1 服務(wù)端設(shè)計(jì)
服務(wù)端采用SOPC技術(shù)構(gòu)建軟核,移植TCP/IP協(xié)議棧實(shí)現(xiàn)網(wǎng)絡(luò)通信。TCP/IP協(xié)議較為復(fù)雜,內(nèi)容較多,主要是適合PC機(jī)的通信,針對(duì)FPGA服務(wù)端設(shè)計(jì),文中采用精簡的TCP/IP協(xié)議,既能達(dá)到設(shè)計(jì)要求,也能簡化設(shè)計(jì)的復(fù)雜程度,其傳輸流程圖如圖4所示。
此協(xié)議棧中,需使用以下幾個(gè)主要函數(shù),實(shí)現(xiàn)數(shù)據(jù)接收:
(1)void init_ip_arp_udp_tcp(unsigned char * mymac,unsigned char * myip,unsigned char wwwp)。
此函數(shù)為初始化傳輸,主要用于填寫MAC、IP、端口參數(shù)。函數(shù)返回值為空。
(2)unsigned char eth_type_is_arp_and_my_ip(unsigned char * buf,unsigned int len)。
此函數(shù)為數(shù)據(jù)包解析,是否接收到指向本地IP的ARP請(qǐng)求,若是返回值為1,若不是則返回值為0。
(3)chareth_type_is_ip_and_my_ip(unsigned char* buf,unsigned int len)。
此函數(shù)為數(shù)據(jù)包解析,是否接收到發(fā)送給本地IP的IP數(shù)據(jù)包,若是返回值為1,若不是則返回值為0。
(4)unsigned int get_tcp_data_pointer(void)。
此函數(shù)為獲取有效數(shù)據(jù)位置,若有數(shù)據(jù)返回值為有效數(shù)據(jù)位置,若無數(shù)據(jù)則返回值為0。
4.2 客戶端設(shè)計(jì)
Qt是一款跨平臺(tái)的C++用戶界面應(yīng)用程序框架(C++GUI),能為應(yīng)用程序開發(fā)者提供藝術(shù)級(jí)圖形用戶界面所需的所有功能,可以在不同的系統(tǒng)平臺(tái)下使用,通用性好,具有良好的信號(hào)/槽封裝機(jī)制,還有豐富的API函數(shù),能夠降低用戶開發(fā)難度,其豐富的可擴(kuò)展性使得圖形化界面更加直觀。在客戶端設(shè)計(jì)中,為了能直觀地顯示IP地址、端口號(hào)以及接收到的交通信息等參數(shù),同時(shí)能更加方便地發(fā)送控制信息,控制中心客戶端采用Qt Creator工具實(shí)現(xiàn)了Qt界面設(shè)計(jì)。
這里使用QTextBrowser控件作為交通信息顯示框,QLineEdit控件輸入IP地址和端口號(hào),QPushButton控件觸發(fā)網(wǎng)絡(luò)連接和相關(guān)控制信息的發(fā)送。由于設(shè)計(jì)中需要使用QTcp So cket網(wǎng)絡(luò)套接字編程實(shí)現(xiàn)網(wǎng)絡(luò)通信傳輸,所以需要在工程的pro文件中添加“QT+=network”,并添加QTcpSocket頭文件,之后需要設(shè)置連接的IP地址和端口號(hào),創(chuàng)建QTcpSocker對(duì)象tcpclient,連接服務(wù)器語句為:tcpclient.connectToHost(* ip,port)。連接成功后,需點(diǎn)擊控制信息按鈕,發(fā)射信號(hào),從而觸發(fā)數(shù)據(jù)發(fā)送槽函數(shù)的執(zhí)行,其發(fā)送函數(shù)語句為:tcpclient.write(msg.toLoca18Bit())。控制中心的網(wǎng)絡(luò)傳輸流程如圖5所示。
為了實(shí)現(xiàn)更友好的界面顯示,這里在Qt程序中添加了中文顯示,具體設(shè)置語句如下:
QTextCodec::setCodecForLocale(QTextCodec::codecForName(“UTF-8”));
QTextCodec::setCodecForTr(QTextCodec::codec ForName(“UTF-8”));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(“UTF-8”)。
5 系統(tǒng)調(diào)試
將所有模塊搭建連接好之后,在控制中心界面處,輸入FPGA的IP地址及其間的端口號(hào),點(diǎn)擊“連接”,就建立起了FPGA與控制中心的通信,控制中心的圖形化界面如圖6所示。圖中左邊的文本框顯示的是交通信息,根據(jù)圖中交通信息可知先前主干道車流量大于副干道車流量,所以這里需要點(diǎn)擊“日間模式1”按鈕,F(xiàn)PGA控制交通系統(tǒng)選用方案1,其運(yùn)行結(jié)果如圖7所示。之后,圖中出現(xiàn)一個(gè)車輛的呼救信息,所以需點(diǎn)擊“緊急停止”按鈕,終止交通系統(tǒng)的運(yùn)行,處理事故,其運(yùn)行結(jié)果如圖8所示。
“日間模式2”按鈕對(duì)應(yīng)配時(shí)方案2的運(yùn)行效果,“夜間模式”按鈕對(duì)應(yīng)配時(shí)方案3的運(yùn)行效果,其實(shí)際測試結(jié)果正常,運(yùn)行穩(wěn)定,達(dá)到了控制中心遠(yuǎn)程精確控制交通系統(tǒng)的目的。
6 結(jié)束語
本設(shè)計(jì)以FPGA作為開發(fā)平臺(tái),使用Verilog HDL語言完成了交通系統(tǒng)自動(dòng)配時(shí)模塊和顯示模塊的設(shè)計(jì),同時(shí)采用SOPC技術(shù)在FPGA上構(gòu)建軟核實(shí)現(xiàn)控制中心通過網(wǎng)絡(luò)控制交通系統(tǒng),控制中心的界面采用Qt設(shè)計(jì),美觀、操作方便且通用性好。整個(gè)設(shè)計(jì)較好地利用了現(xiàn)有公路的網(wǎng)絡(luò)資源,配合智能車載系統(tǒng)車輛信息遠(yuǎn)程發(fā)送技術(shù),能精確有效地控制整個(gè)交通系統(tǒng),相比于其他依靠傳感器,控制交通系統(tǒng)運(yùn)行情況的設(shè)計(jì),其可靠性更高,然而成本卻相對(duì)較低。
評(píng)論