新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于單片機(jī)的GPS/電子羅盤測姿定位系統(tǒng)

基于單片機(jī)的GPS/電子羅盤測姿定位系統(tǒng)

作者: 時間:2012-05-23 來源:網(wǎng)絡(luò) 收藏

2.2 串行通信接口電路

在信息傳輸模塊中,由丁C8051F021引腳的信號電平為TTL類型,而上位機(jī)串口的異步串行通信是RS232標(biāo)準(zhǔn)的,兩者通信信號的邏輯電平不一致,必須進(jìn)行信號電平轉(zhuǎn)換。而MAX3232芯片能直接將輸出的TTL電平轉(zhuǎn)換成上位機(jī)能接收的RS232電平,或?qū)C機(jī)輸出的RS232電平轉(zhuǎn)換成能接收的TTL電平,故采用MAX3232來實(shí)現(xiàn)其中的電平轉(zhuǎn)換,從而實(shí)現(xiàn)的串行通信。本的串行通信硬件結(jié)構(gòu)框圖如圖3所示。

d.JPG

3 軟件設(shè)計

系統(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時對SBUF數(shù)據(jù)進(jìn)行判斷,是否為所需的數(shù)據(jù),如果是則存儲到數(shù)據(jù)寄存器中。由于查詢方法在編寫程序時比較復(fù)雜,需要反復(fù)地查詢標(biāo)志位,但是相較于其他算法對于實(shí)現(xiàn)循環(huán)比較簡單。本系統(tǒng)對串口接收和發(fā)送的數(shù)據(jù)采用的是查詢的方法。

e.JPG

信息處理流程如圖4所示。首先,待單片機(jī)初始化后,開啟中斷0,關(guān)閉中斷1,開始通過串口0接收信息。HMR33 00更新頻率為8 Hz,即每秒最多可更新8次。為了保證其穩(wěn)定輸出,每秒鐘提取4次信息。然后,以判斷回車來表示接收完一次羅盤信息,即hmr[i]=10。待接收完畢后,開啟中斷1,關(guān)閉中斷0,通過串口1接收信息。iTrax03-02更新速率為1fix/s。提取信息時,每秒鐘提取一次信息。接收到一條完整的語句后將其放入數(shù)據(jù)存儲區(qū)。同樣地,我們以判斷回車來表示接收完一次GPS信息,即gps[i]=10。

GPS信息接收完畢后,再開啟中斷0,關(guān)閉中斷1,接收電子羅盤信息。同時,將采集到的姿態(tài)和信息通過串口0傳送給MAX3232后,不斷發(fā)送給上位機(jī)。在中斷0中接收電子羅盤的數(shù)據(jù)時,需要提取的是其航向、俯仰和滾動信息,應(yīng)判定接收到的數(shù)據(jù)是否為起始標(biāo)志位,若是則開始采集數(shù)據(jù),讀取第二位數(shù),進(jìn)行采集的同時保存數(shù)據(jù);如不是,則繼續(xù)判定。

由于采用的是非定長通信,因此,在采集數(shù)據(jù)的同時還要判定當(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è)計系統(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é)論如下:

a.JPG



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉