多串口船舶導(dǎo)航數(shù)據(jù)轉(zhuǎn)換器的低成本實現(xiàn)
由于接收信號強(qiáng)弱差別、設(shè)備使用狀況差異等因素,船舶導(dǎo)航過程中會出現(xiàn)信號不穩(wěn)、輸出中斷等問題,給船舶導(dǎo)航帶來極大不便。而電羅經(jīng)和GPS是遠(yuǎn)洋船舶上常用的導(dǎo)航設(shè)備,合理地配合使用這兩種設(shè)備可以有效地增加導(dǎo)航的可靠性。
為實現(xiàn)電羅經(jīng)和GPS的配合使用,使用單片機(jī)設(shè)計了一種新型的船舶導(dǎo)航數(shù)據(jù)轉(zhuǎn)換器[1]。在只有一種可靠導(dǎo)航數(shù)據(jù)的情況下,轉(zhuǎn)換器可以實時地進(jìn)行兩種數(shù)據(jù)格式的轉(zhuǎn)換,保證電羅經(jīng)和GPS設(shè)備的正常工作,為船舶航行提供可靠導(dǎo)航。
2 串口擴(kuò)展方案比較分析
數(shù)據(jù)轉(zhuǎn)換器有兩個輸入端,分別與電羅經(jīng)和GPS設(shè)備連接,且均為RS422接口[2]。GPS信號是標(biāo)準(zhǔn)NMEA-0183格式,并包括兩種語句,其中HDT語句輸出航向信號,ROT語句輸出航向變化率信號。而電羅經(jīng)信號只有一種格式,它包括了航向數(shù)據(jù)信號和航向變化率信號。
數(shù)據(jù)轉(zhuǎn)換器對輸入信號進(jìn)行選擇,當(dāng)輸入信號為電羅經(jīng)時,轉(zhuǎn)換器將電羅經(jīng)的航向語句直接輸出到接口為RS422的電羅經(jīng)導(dǎo)航設(shè)備終端,同時將輸入的數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)NMEA-0183格式的HDT與ROT語句數(shù)據(jù)輸出到接口為RS232的GPS導(dǎo)航設(shè)備終端。而輸入信號為GPS時,轉(zhuǎn)換器將GPS的航向語句直接輸出到接口為RS232的GPS導(dǎo)航設(shè)備終端,同時將輸入的HDT與ROT數(shù)據(jù)轉(zhuǎn)換為電羅經(jīng)數(shù)據(jù)格式輸出到接口為RS422的電羅經(jīng)導(dǎo)航設(shè)備終端。數(shù)據(jù)轉(zhuǎn)換器的功能框圖如圖1所示。
圖1 數(shù)據(jù)轉(zhuǎn)換器的功能框圖
為實現(xiàn)數(shù)據(jù)的轉(zhuǎn)換,就需要數(shù)據(jù)轉(zhuǎn)換器至少具備三個標(biāo)準(zhǔn)的UART串口。有多種設(shè)計方案都能滿足這一要求且不盡相同,成本、指標(biāo)、可靠性等都存在差異。根據(jù)目前的串口器件設(shè)計,歸納起來主要有以下幾種比較常用的多串口設(shè)計方案[3]。
(1) 多串口單片機(jī)。其中雙串口的單片機(jī)的價格在30~70元左右,三串口的單片機(jī)價格更加昂貴,直接增加了系統(tǒng)設(shè)計的成本。同時,由于各單片機(jī)的指令不同,以及由于串口功能的擴(kuò)展帶來的陌生寄存器的使用都增加了設(shè)計人員的工作量和難度。
(2) 軟件模擬串口。其主要優(yōu)點是成本低,但是可靠性和串口指標(biāo)都無法控制,存在缺點:一是采樣次數(shù)低,一般只能做到2次/BIT,這樣數(shù)據(jù)的正確性就難以保證;二是不能實現(xiàn)高波特率通訊,軟件模擬串口一般不能實現(xiàn)高于4800 bps的波特率。
(3) 專用IC器件。使用專用串口擴(kuò)展芯片,例如TI等公司開發(fā)的16C554系列串口擴(kuò)展芯片,通過并行口擴(kuò)展串行口,功能比較強(qiáng)大、通訊速度高;成都國騰微電子有限公司推出的GM8123/25系列串口擴(kuò)展芯片,通過串行口擴(kuò)展串行口,可簡單方便地實現(xiàn)全硬件擴(kuò)展。但總而言之,串口擴(kuò)展芯片價格普遍較高。
根據(jù)數(shù)據(jù)轉(zhuǎn)換器的設(shè)計要求,考慮降低成本,最后選取可通過RS232接口在線編程的飛利浦單片機(jī)P89C669作為數(shù)據(jù)轉(zhuǎn)換的主處理器。并充分利用P89C669豐富的IO口,通過AT89C2051來擴(kuò)展數(shù)據(jù)轉(zhuǎn)換器所需要的第三個串口,以低成本實現(xiàn)了串口擴(kuò)展[4]。
3 UART的低成本實現(xiàn)方案
3.1 單片機(jī)IO口的分配、連線
P89C669[5]是基于Philips半導(dǎo)體新51MX(存儲器擴(kuò)展)內(nèi)核的Flash微控制器代表。它包含96k字節(jié)的Flash程序存儲器、2k字節(jié)的片內(nèi)數(shù)據(jù)RAM、1個可編程計數(shù)器陣列(PCA)、可配置成不同時間范圍的看門狗定時器(通過SFR的位設(shè)置)、2個增強(qiáng)型UART以及字節(jié)型I2C總線串行接口等。
P89C669主要實現(xiàn)電羅經(jīng)和GPS信號數(shù)據(jù)的接收、轉(zhuǎn)換和發(fā)送,AT89C2051主要用來擴(kuò)展串口[5],具體的IO分配如下。AT89C2051的P1口與P89C669的P0口相連,作為數(shù)據(jù)通信總線;單片機(jī)AT89C2051的P3.3引腳接P89C669的P3.2引腳,作為AT89C2051向P89C669的發(fā)送請求信號( );AT89C2051的P3.2引腳接P89C669的P2.7引腳,作為P89C669向AT89C2051請求中斷的控制信號;AT89C2051的P3.4引腳接P89C669的P2.6引腳,作為P89C669對AT89C2051讀寫操作的控制信號( );AT89C2051的P3.5引腳接P89C669的P2.5引腳,作為P89C669向AT89C2051寫入指令或數(shù)據(jù)的控制信號( )。AT89C2051與P89C669之間的連接圖如圖2所示。
500)this.style.width=500;" border="0" />
圖2 P89C669與AT89C2051的硬件連接圖
3.2 單片機(jī)P89C669與AT89C2051通信程序的設(shè)計
單片機(jī)P89C669與AT89C2051之間的數(shù)據(jù)通信流程圖如圖3所示,具體實現(xiàn)如下。
(1) P89C669方面
① P89C669發(fā)送數(shù)據(jù)。首先,程序初始化后P89C669將AT89C2051有關(guān)的晶振信息、波特率等參數(shù)以命令字形式傳送給AT89C2051,AT89C2051接收后查表求解進(jìn)行串口波特率設(shè)置。然后P89C669將接收完畢的數(shù)據(jù)存入緩沖區(qū),并檢測 引腳,若為高電平則等待,直到變?yōu)榈碗娖綍r通過并口將數(shù)據(jù)傳給AT89C2051。在AT89C2051將接收緩沖區(qū)數(shù)據(jù)發(fā)送出去的同時檢測緩沖區(qū),如果緩沖區(qū)不滿則將 引腳置低,反之則高。
② P89C669接收數(shù)據(jù)。AT89C2051接收到數(shù)據(jù)后用 引腳產(chǎn)生邊沿信號向P89C669發(fā)出請求,P89C669收到請求信號后執(zhí)行讀取數(shù)據(jù)程序。
圖3 P89C669方面的程序流程圖
(2) AT89C2051方面
AT89C2051是作為IC芯片用來進(jìn)行串口擴(kuò)展的,在初始化階段接收上位機(jī)傳來的數(shù)據(jù)進(jìn)行初始化設(shè)置,然后循環(huán)等待接收上位機(jī)發(fā)送的數(shù)據(jù)[6]。AT89C2051將并口傳來的數(shù)據(jù)存在并口接收緩沖區(qū),并復(fù)制到串口發(fā)送緩沖區(qū),激活串口使用中斷方式發(fā)送;將串口傳來的數(shù)據(jù)存在串口接收緩沖區(qū),并復(fù)制到并口發(fā)送緩沖區(qū),同時改變 的電位,向上位機(jī)發(fā)出請求。在船舶導(dǎo)航數(shù)據(jù)轉(zhuǎn)換器中,AT89C2051主要是用來串口發(fā)送電羅經(jīng)信號,它與P89C669的通信流程圖如圖4所示。
4 結(jié)束語
文中應(yīng)用AT89C2051擴(kuò)展串口后,系統(tǒng)共有三個串行口。其中,一個串口用來選擇接收電羅經(jīng)或者GPS信號用以數(shù)據(jù)轉(zhuǎn)換;一個串口經(jīng)過MAX3232實現(xiàn)TTL電平與RS-232電平轉(zhuǎn)換后可連接微機(jī)的串行口,從而簡單方便地實現(xiàn)單片機(jī)P89C669的在線編程,它同時也作為GPS信號的輸出接口;另一個串口主要用來輸出電羅經(jīng)信號。
該電路與采用專用芯片的電路相比,并不復(fù)雜,而且編程設(shè)計較簡單,綜合考慮是一種比較經(jīng)濟(jì)實用的低成本設(shè)計方法。
創(chuàng)新點:
文章本著低成本的指導(dǎo)思想進(jìn)行設(shè)計。首先,選用可在線編程的P89C669單片機(jī)為主處理器,省去編程器,降低了成本;其次,采用價格便宜的AT89C2051單片機(jī)與充分利用P89C669單片機(jī)豐富的IO口進(jìn)行串口擴(kuò)展。最終,實現(xiàn)了多串口船舶導(dǎo)航數(shù)據(jù)轉(zhuǎn)換器的低成本實現(xiàn)。