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