摘 要: 闡述了PC機(jī)和激光測距雷達(dá)雙路高速串行數(shù)據(jù)通訊接口卡的系統(tǒng)構(gòu)成。重點(diǎn)介紹了RS-422A高速串行通訊接口及收發(fā)控制、接口卡和PC機(jī)通信緩沖區(qū)的共享、卡上資源分配等關(guān)鍵性問題。
關(guān)鍵詞: RS-422 高速串行通信 接口卡 雙端口RAM FPGA
在我們智能自主式移動機(jī)器人項(xiàng)目的研制中,采用了兩路二維激光雷達(dá)來完成障礙物檢測、路標(biāo)檢測及地圖匹配等工作。我們采用的激光雷達(dá)均提供了一種RS-422串行通訊接口。雷達(dá)通過與PC機(jī)的握手通信完成初始化工作之后,便分別以40ms和80ms為工作周期將測距結(jié)果以500Kbps的速率發(fā)送至PC機(jī)。PC機(jī)收到每一幀數(shù)據(jù)后便開始隨后的處理工作。工作周期為80ms的激光雷達(dá)每幀數(shù)據(jù)長度為812字節(jié),工作周期為40ms的激光雷達(dá)每幀數(shù)據(jù)長度為412字節(jié)。
若采用目前市面上能提供的普通串行數(shù)據(jù)通信卡來完成PC機(jī)與激光雷達(dá)的數(shù)據(jù)通信有三個缺點(diǎn):
·商用通信卡很少能達(dá)到如此高的通訊速率;
·商用通信卡只能一個字節(jié)一個字節(jié)的接收,即使啟用卡上的FIFO一次也只能收取16個字節(jié),這樣必然消耗PC機(jī)很多寶貴的數(shù)據(jù)處理時間;
·由于PC機(jī)運(yùn)行的windows98系統(tǒng)是非任務(wù)搶斷型的操作系統(tǒng),在如此高的通訊速率要求下(兩路雷達(dá)數(shù)據(jù)同時到來時對PC機(jī)來說瞬時通訊速率為1Mbps),有時會導(dǎo)致系統(tǒng)丟失一幀數(shù)據(jù)中的某幾個字節(jié),從而使整幀數(shù)據(jù)成為廢幀,影響了系統(tǒng)的可靠工作。
因此,必須根據(jù)應(yīng)用要求,自行研制PC機(jī)和激光測距雷達(dá)雙路高速數(shù)據(jù)通信接口卡。
1 接口卡研制目標(biāo)和總體方案
針對激光測距雷達(dá)在智能自主式移動機(jī)器人中的應(yīng)用要求,我們對接口卡的設(shè)計提出了如下的總體目標(biāo):能夠順利地接收并存儲最多三幀的兩路雷達(dá)數(shù)據(jù),并按PC機(jī)命令要求,完成一定的簡單數(shù)據(jù)預(yù)處理后將結(jié)果轉(zhuǎn)送給PC機(jī),由PC機(jī)做進(jìn)一步的高級處理。
根據(jù)系統(tǒng)要求,板卡上的CPU決定選用80C196KD單片機(jī)。80C196KD是Intel公司繼MCS-96之后的一種高性能16位單片機(jī),它功能強(qiáng)、速度快、使用方便、抗干擾性能好,在工業(yè)控制、智能儀表、家電中都得到了廣泛應(yīng)用[1]。系統(tǒng)總體方案見圖1。
2 系統(tǒng)設(shè)計中的幾項(xiàng)關(guān)鍵技術(shù)
2.1 RS-422通訊接口及收發(fā)控制
RS-422A通信接口標(biāo)準(zhǔn)使用單一+5V電源供電,是一個平衡型接口。它采用差動發(fā)送、差動接收的工作方式,發(fā)送和接收電路使用各自獨(dú)立的平衡驅(qū)動器、接收器對,因而排除了各接收器地電勢差帶來的影響。使用RS-422A接口標(biāo)準(zhǔn)最大通信速率可達(dá)10Mb/s(對應(yīng)通信距離12m),最大通信距離可達(dá)1200m(對應(yīng)通信速率為10kb/s)。
對于500kb/s高速的串行通信,靠80C196KD自帶的串行通信接口已無法承擔(dān),必須采用專用的異步串行通信收發(fā)器(UART)來實(shí)現(xiàn)。下面先簡要介紹一下系統(tǒng)中采用的TI公司的UART產(chǎn)品16C550C。
TI公司生產(chǎn)的異步收發(fā)器(UART)TL16C550C是TL16C450的升級,它的主要功能與TL16C450完全相同,但是它片內(nèi)多了一塊16個字節(jié)的先進(jìn)先出(FIFO)存儲部件,用于緩解高速通信場合下CPU的繁忙程度。當(dāng)片內(nèi)的FIFO被激活時,最多允許在FIFO中存儲16個字節(jié)作為緩沖。為提高CPU讀數(shù)據(jù)的速度,該片支持DMA操作。
16C550C在外設(shè)或MODEM接收到串行數(shù)據(jù)時能自動完成串并轉(zhuǎn)換并存儲,在收到CPU發(fā)來的數(shù)據(jù)時能自動完成并串轉(zhuǎn)換并發(fā)送。在UART工作過程中CPU能隨時查詢到UART此時的工作狀態(tài)。它最高可支持1Mbps的串行通訊速率[2]。
RS-422接口通訊部分原理圖見圖2。
差動發(fā)送器采用SN75174,差動接收器則采用SN75175。由于系統(tǒng)要求的通信速度很高,因此一般的光電隔離器件如TLP521系列不能滿足要求,而應(yīng)采用高速光耦。美國General Instrument公司生產(chǎn)的高速光電耦合器6N137,由磷砷化鎵發(fā)光二極管和單片光敏集成檢測電路組成。通過光敏二極管接收信號并經(jīng)內(nèi)部高增益放大器把信號放大后,由集電極開路門作為輸出。該器件隔離電壓高,速度快,共模抑制性強(qiáng),完全能勝任高速通訊工作。
另外,為提高系統(tǒng)的抗干擾性,除了采取高速光電隔離以外,對每一路高速通訊口均采用了一個電源隔離模塊,這樣即使在外部通訊受到強(qiáng)干擾甚至短路的情況下,也能保證計算機(jī)的絕對安全。
激光測距雷達(dá)的數(shù)據(jù)由TL16C550C接收后,向80C196KD發(fā)出數(shù)據(jù)有效信號,由80C196KD來取走其緩沖區(qū)內(nèi)的數(shù)據(jù)。
2.2 接口卡和PC機(jī)通信緩沖區(qū)的共享
接口卡和PC機(jī)共享RAM的實(shí)現(xiàn)方式一般有以下三種方案:
· 采用雙端口RAM,該方式速度高,應(yīng)用方便,適用于共享數(shù)據(jù)區(qū)兩側(cè)需要頻繁高速地交換數(shù)據(jù)的場合,但成本稍高;
·采用單口RAM,并附加以一定的控制邏輯以保證某一時刻RAM的總線只和一個宿主相連接,以避免發(fā)生總線沖突。這種方式適用于交換數(shù)據(jù)量較小,次數(shù)也不頻繁的場合,尤其是不能有RAM兩側(cè)的宿主同時要占用RAM的情況;
·采用兩片單口RAM做輪換郵箱,并附加以一定的控制邏輯。當(dāng)郵箱一側(cè)的宿主向第一片RAM寫入數(shù)據(jù)時,郵箱另一側(cè)的宿主可從第二片RAM中讀數(shù)據(jù);當(dāng)郵箱一側(cè)的宿主需要向第二片RAM寫入數(shù)據(jù)時,郵箱另一側(cè)的宿主可又從第一片RAM中讀數(shù)據(jù)。如此反復(fù)完成數(shù)據(jù)的交換過程,中間總線的切換由硬件控制邏輯來保證。這種方式克服了方案2不能有RAM兩側(cè)的宿主同時占用RAM的缺點(diǎn),能實(shí)時地交換數(shù)據(jù),但控制邏輯較為復(fù)雜。
在本接口卡中,由于RAM一方面要及時存放兩路激光雷達(dá)的數(shù)據(jù),一方面又要隨時準(zhǔn)備PC機(jī)來獲取數(shù)據(jù),完全有可能發(fā)生PC機(jī)在讀RAM中某一路激光雷達(dá)數(shù)據(jù)的同時板卡必須接收另一路激光雷達(dá)的數(shù)據(jù)的情況,故而方案2顯然不行。而方案3的控制邏輯相對復(fù)雜而且芯片多,占用面積大。所以第一方案是最佳選擇。我們采用IDT公司的IDT7134雙端口RAM作為系統(tǒng)的共享數(shù)據(jù)存儲區(qū),容量為4KB[3]。
板卡與ISA總線的接口模塊采用ALTERA公司的現(xiàn)場可編程門陣列(FPGA)芯片EFP6016-144來實(shí)現(xiàn)。內(nèi)部邏輯的構(gòu)造采用ALTERA公司的硬件描述語言ADHL程序來實(shí)現(xiàn)。ADHL是一種模塊化的高級語言,它特別適合于描述復(fù)雜的組合邏輯、組運(yùn)算和狀態(tài)機(jī)、真值表和參數(shù)化的邏輯[4]。
參考PC機(jī)中IO端口使用情況可知,PC機(jī)中一般均為用戶板卡的使用留有端口,如2E0H~2EFH段和300H~30FH這一段均是用戶擴(kuò)展板卡可使用的IO端口地址。故本通信卡中狀態(tài)寄存器使用2E2H,控制寄存器使用2E3H,2E0H作為共享RAM中的數(shù)據(jù)讀寫端口,2E1H作為數(shù)據(jù)讀寫時的地址預(yù)置端口。各端口指向的寄存器各位的意義如下:
·狀態(tài)讀取端口 (地址:2E2H)
D0:L1-DATA,雷達(dá)1的數(shù)據(jù)有效;
D1:L2-DATA,雷達(dá)2的數(shù)據(jù)有效;
D2:196-BUSY,板卡CPU正忙;
D3:恒為1
D4:恒為1
D5:L1-W-ACK,C196已收到PC機(jī)寫入的雷達(dá)1的數(shù)據(jù);
D6:L2-W-ACK,C196已收到PC機(jī)寫入的雷達(dá)2的數(shù)據(jù);
D7:恒為1。
·控制端口 (地址:2E3H)
D0:L1-ACK,PC機(jī)對L1-DATA的應(yīng)答信號;
D1:L2-ACK,PC機(jī)對L2-DATA的應(yīng)答信號;
D2:L1-WR,PC機(jī)已對板卡寫入雷達(dá)1的控制信號;
D3:L2-WR,PC機(jī)已對板卡寫入雷達(dá)2的控制信號;
D4:WAKE-OUT,PC機(jī)給板卡CPU的喚醒信號;
D5:恒為0;
D6:PC-RESET,PC機(jī)對板卡的復(fù)位信號;
D7:恒為0。
·地址預(yù)置端口 (地址:2E1H,)
D7~D4:恒為0;
D3~D0:為板卡RAM的12位地址總線中的高4位,板卡RAM的低八位地址初始值為00H。
·數(shù)據(jù)讀寫端口(地址:2E0H)
PC機(jī)從該端口讀雷達(dá)數(shù)據(jù)或?qū)懤走_(dá)命令。
2.3 接口卡資源分配及PC機(jī)命令
板卡上4K的數(shù)據(jù)共享RAM的存儲區(qū)分配如下:
0000H~09FFH:共2.5KB容量,為串口I的接收數(shù)據(jù)存儲區(qū);
0A00H~0EFFH:共1.2KB容量,為串口II的接收數(shù)據(jù)存儲區(qū);
0F00H~0F80H:共128B容量,為串口I的發(fā)送命令存儲區(qū);
0F81H~0FFFH:共128B容量,為串口II的發(fā)送命令存儲區(qū)。
板卡能接收并處理的命令有三種:
所有命令都是01H有效,00H則無效。
2.4 板卡與雷達(dá)的握手通信協(xié)議
板卡與雷達(dá)的握手通信協(xié)議共分以下五個步驟:
·設(shè)定板卡自身的通訊波特率為9600;
·向雷達(dá)發(fā)送啟動安裝模式的命令,并等待雷達(dá)應(yīng)答數(shù)據(jù)返回。
·向雷達(dá)發(fā)送命令,設(shè)置雷達(dá)的通訊波特率為500Kbps;
·設(shè)置板卡自身的通訊速率為500Kbps;
·向雷達(dá)發(fā)送命令,設(shè)置其為“連續(xù)發(fā)送測試數(shù)據(jù)模式”,并等待雷達(dá)應(yīng)答數(shù)據(jù)返回。
此后雷達(dá)便開始以一定的時間周期將測試數(shù)據(jù)以500Kbps的通訊速率發(fā)送至板卡。
協(xié)議中具體的命令字節(jié)格式等跟雷達(dá)型號有關(guān),篇幅所限,在此不再說明。
3 接口卡工作過程
PC機(jī)上電后,板卡自動復(fù)位并通過“IDLPD #2”指令進(jìn)入掉電工作方式。當(dāng)激光雷達(dá)將要被初始化時,PC機(jī)通過將控制端口寄存器的D4位置1來“喚醒”板卡工作。然后向?qū)?yīng)串口命令區(qū)寫入雷達(dá)初始化命令,板卡將根據(jù)命令中雷達(dá)類型執(zhí)行相應(yīng)的初始化操作。初始化應(yīng)答過程如上所述。
初始化成功后,板卡便開始接收數(shù)據(jù),接收完后依據(jù)校驗(yàn)字對數(shù)據(jù)進(jìn)行CRC校驗(yàn)。正確無誤則去掉應(yīng)答數(shù)據(jù)的頭和尾,只剩下總數(shù)據(jù)字節(jié)數(shù)(16bit)和數(shù)據(jù),并根據(jù)PC機(jī)的要求對雷達(dá)掃描數(shù)據(jù)進(jìn)行數(shù)據(jù)平滑或數(shù)據(jù)加窗處理。處理后的數(shù)據(jù)存放在雙口RAM的相應(yīng)存儲區(qū)中,然后通過將對應(yīng)的L-DATA信號置高告知PC機(jī)前來取數(shù)據(jù)。
PC機(jī)通過查詢端口檢測到雷達(dá)數(shù)據(jù)有效后,即以對應(yīng)的L-ACK信號作為應(yīng)答。然后板卡和PC機(jī)分別撤消各自的信號。PC機(jī)可開始讀取對應(yīng)雷達(dá)的數(shù)據(jù)。當(dāng)PC機(jī)想從板卡共享RAM的某一地址開始讀寫數(shù)據(jù)時,先向2E1H端口寄存器寫入12位共享RAM地址的高4位,低八位使其自動為零。當(dāng)PC機(jī)讀寫完一個字節(jié)的數(shù)據(jù)時,通過FPGA構(gòu)造的片內(nèi)計數(shù)器,該EISA接口能自動將地址加一,指向RAM中的下一個字節(jié)單元。這樣,PC機(jī)在讀寫板卡RS-422接收的數(shù)據(jù)時,只需在讀寫之前設(shè)定一次地址,然后就可以連續(xù)不斷地從板卡中讀取成塊的數(shù)據(jù),從而大大提高了端口傳送數(shù)據(jù)的速度。
同樣,當(dāng)PC機(jī)向板卡寫入命令時,除向?qū)?yīng)串口命令區(qū)寫入命令外,置位相應(yīng)的L-WR信號,以告知板卡。板卡即以對應(yīng)L-WRACK信號作為應(yīng)答。隨后PC機(jī)和板卡分別撤消各自的信號。板卡取出命令解釋并執(zhí)行相應(yīng)的操作。
綜上所述,本文所設(shè)計的PC機(jī)與激光測距雷達(dá)高速串行通信接口卡具有如下特點(diǎn):
·具有雙路高達(dá)500Kbps的高速RS-422數(shù)據(jù)通信接口,可靠性好,通信效率極高;
·采用FPGA和雙端口RAM做ISA總線接口及高速共享數(shù)據(jù)緩沖區(qū),只占用很少的PC機(jī)端口資源就實(shí)現(xiàn)了板卡和PC機(jī)高速的數(shù)據(jù)通信和共享;
·劃分了主PC機(jī)和板卡的任務(wù)范圍,擬訂了命令代碼,能做到主從CPU一定程度地高速并行處理;
·上層PC機(jī)的接口軟件設(shè)計簡單方便,只需在WINDOWS下開一個線程監(jiān)視板卡的狀態(tài)端口即可,避免了編寫設(shè)備驅(qū)動程序的煩瑣工作。
該接口卡已成功地應(yīng)用在智能自主式移動機(jī)器人中主處理機(jī)和激光測距雷達(dá)的通信方面,取得了滿意的效果。
參考文獻(xiàn)
1 孫涵芳.Intel 16位單片機(jī).北京航空航天大學(xué)出版社
2 Texas Instruments. Analog and Mixed-Signal Products.August 1999
3 IDT Cooperation.IDT7134DS/LA and IDT 7142SA/LA High Speed 2k×8 Dual Port Static RAM
4 ALTERA Cooperation.Data Book.1998