基于單片機(jī)的GPS/電子羅盤測姿定位系統(tǒng)
2.2 串行通信接口電路
在信息傳輸模塊中,由丁C8051F021引腳的信號電平為TTL類型,而上位機(jī)串口的異步串行通信是基于RS232標(biāo)準(zhǔn)的,兩者通信信號的邏輯電平不一致,必須進(jìn)行信號電平轉(zhuǎn)換。而MAX3232芯片能直接將單片機(jī)輸出的TTL電平轉(zhuǎn)換成上位機(jī)能接收的RS232電平,或?qū)C機(jī)輸出的RS232電平轉(zhuǎn)換成單片機(jī)能接收的TTL電平,故采用MAX3232來實(shí)現(xiàn)其中的電平轉(zhuǎn)換,從而實(shí)現(xiàn)系統(tǒng)的串行通信。本系統(tǒng)的串行通信硬件結(jié)構(gòu)框圖如圖3所示。
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)的軟件實(shí)現(xiàn)采用C語言,C語言具有功能豐富的標(biāo)準(zhǔn)函數(shù)庫,具有運(yùn)算速度快和可移植性強(qiáng)等特點(diǎn)。用C語言來編寫軟件會大大縮短開發(fā)周期,增強(qiáng)軟件的可讀性,便于改進(jìn)和擴(kuò)充。
對于串口的數(shù)據(jù)處理有兩種方法:一種是查詢的方法,另一種是中斷的方法。查詢的方法是不斷地檢測接收和發(fā)送標(biāo)志位,當(dāng)查詢到有數(shù)據(jù)進(jìn)入到SBUF時(shí)對SBUF數(shù)據(jù)進(jìn)行判斷,是否為所需的數(shù)據(jù),如果是則存儲到數(shù)據(jù)寄存器中。由于查詢方法在編寫程序時(shí)比較復(fù)雜,需要反復(fù)地查詢標(biāo)志位,但是相較于其他算法對于實(shí)現(xiàn)循環(huán)比較簡單。本系統(tǒng)對串口接收和發(fā)送的數(shù)據(jù)采用的是查詢的方法。
單片機(jī)信息處理流程如圖4所示。首先,待單片機(jī)初始化后,開啟中斷0,關(guān)閉中斷1,開始通過串口0接收電子羅盤信息。電子羅盤HMR33 00更新頻率為8 Hz,即每秒最多可更新8次。為了保證其穩(wěn)定輸出,每秒鐘提取4次電子羅盤信息。然后,以判斷回車來表示接收完一次羅盤信息,即hmr[i]=10。待接收完畢后,開啟中斷1,關(guān)閉中斷0,通過串口1接收GPS定位信息。iTrax03-02更新速率為1fix/s。提取定位信息時(shí),每秒鐘提取一次GPS信息。接收到一條完整的語句后將其放入GPS數(shù)據(jù)存儲區(qū)。同樣地,我們以判斷回車來表示接收完一次GPS信息,即gps[i]=10。
GPS信息接收完畢后,再開啟中斷0,關(guān)閉中斷1,接收電子羅盤信息。同時(shí),將采集到的姿態(tài)和定位信息通過串口0傳送給MAX3232后,不斷發(fā)送給上位機(jī)。在中斷0中接收電子羅盤的數(shù)據(jù)時(shí),需要提取的是其航向、俯仰和滾動(dòng)信息,應(yīng)判定接收到的數(shù)據(jù)是否為起始標(biāo)志位,若是則開始采集數(shù)據(jù),讀取第二位數(shù),進(jìn)行采集的同時(shí)保存數(shù)據(jù);如不是,則繼續(xù)判定。
由于采用的是非定長通信,因此,在采集數(shù)據(jù)的同時(shí)還要判定當(dāng)前位是否為結(jié)束標(biāo)志位,若是則進(jìn)行CRC校驗(yàn)。若正確則對得到的數(shù)據(jù)進(jìn)行HPR分離;若否則開始新的采集。同樣,在中斷1中應(yīng)在接收有效后,判斷是否接收到GGA語句,若是再進(jìn)行分析處理。也可直接發(fā)送指令給GPS接收機(jī),使GPS接收機(jī)只輸出所需要的語句信息。同樣的操作也適用于電子羅盤HMR3300。
4 實(shí)驗(yàn)驗(yàn)證
為了驗(yàn)證所設(shè)計(jì)系統(tǒng)的正確性和有效性,筆者進(jìn)行了地面跑車實(shí)驗(yàn)。將該系統(tǒng)固定于汽車內(nèi),實(shí)驗(yàn)過程中可見衛(wèi)星數(shù)為11顆,可用衛(wèi)星為7顆。實(shí)驗(yàn)后,將采集到的數(shù)據(jù)運(yùn)用MATLAB軟件進(jìn)行數(shù)據(jù)處理并對結(jié)果進(jìn)行了分析。跑車實(shí)驗(yàn)數(shù)據(jù)分析如圖5所示。結(jié)論如下:
評論