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