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