摘要:針對指南針精度與顯示界面的問題,在ARM9的開發平臺上,設計了一款界面美觀且能夠實時顯示方位、溫度和時間的電子指南針。該系統採用了靈敏度和精度高的磁力傳感器MAG3110檢測方位,採用了智能型溫度傳感器DS18B20檢測溫度,並選擇了Linux Qt作為電子指南針圖形界面的開發平臺。實驗結果表明,指南針方位精度達±2°,溫度精度達±0.5℃,能夠使用在普通導航領域上。
本文引用地址:http://www.eepw.com.cn/article/201610/305807.htm0 引言
指南針在我國已有悠久的歷史,作為一個重要的導航工具,廣泛的運用在生活各領域。隨著半導體技術的飛速發展,如今的指南針不僅體積小,靈敏度和精確度都已得到很大的提高,而舒適清晰,簡單快捷的人機互動界面更是日益追求的目標。本文採用一款小體積、低功耗的數字磁力計MAG3110採集地磁場,它採用標準IIC串行接口,輸出數據速率達80 Hz,並且可自我消除誤差,並使用數字溫度傳感器S18B20,它具有線路簡單,體積小,測溫範圍為-55~+125℃,精度為±0.5℃。選擇這兩款數字晶片,可滿足靈敏度和精度的要求,選擇Linux Qt作為電子指南針GUI界面的設計可達到舒適清晰,美觀精巧的界面效果。
1 指南針圖形界面的選擇
現行比較流行的GUI有MiniGui,MicroWindows,OpenGUI,Qt/Embedded。MiniGuI是國內開發的圖形界面系統,圖形設備層次過於抽象,圖形功能不夠完善。MicroWindows源碼開放,但其許多圖形引擎算法低下,控制項或構件的實現還不是很完備,系統整體不夠完善。Open GUI比較適合X86平臺,內核採用彙編實現,移植性不好,不支持多進程,目前發展較緩慢。Qt/Embedded也是開源的,其庫採用C++封裝,完全面向對象。Qt/Embedded開發簡潔,界面美觀、色彩配比好,具有豐富的API,使用與Qt/Windows和Qt/X11完全一致的API接口,許多基於Qt的程序可以非常方便地移植到嵌入式設備上。本文選擇Qt作為指南針GUI界面的開發平臺。
2 指南針測量原理
本文設計的是二維電子指南針,其數學模型如圖1所示。x軸與指南針向前移動方向重合,y軸與指南針橫向方向重合,在不考慮磁傾角的情況下,地球磁場水平面分布,即只有圖中h磁北方向,因此z軸感測到的磁場為0。Hx,Hy分別為水平面兩個軸感測到的磁場強度分量。
定義指南針向前移動的方向(x軸方向)與磁北方向的夾角為地磁航向角β,其與地理北極的夾角為地理航向角ψ,由圖1可知ψ=β±γ,γ為磁偏角,已知磁偏角,求出地磁航向角β即可求得指南針的地理航向角。利用磁傳感器檢測到的Hx,Hy按公式:
β=arctan(Hx/Hy)
可求得地磁航向角。
3 系統硬體設計
3.1 硬體框架設計
本設計系統的硬體設計框架如圖2所示,採用ARM9作為處理器,使用MINI2440作為實驗板,外加溫度傳感器DS18B20和磁力傳感器MAG31 10模塊電路,可藉助ARM9開發平臺豐富的外圍接口資源進行開發與調試。如其LCD接口作為顯示模塊,JTAG接口作為調試模塊,USB接口作上傳或下載程序模塊等。
3.2 接口電路
3.2.1 磁力傳感器MAG3110接口電路
MAG3110是款數字晶片,採用標準I2C串行接口,其電路如圖3所示,SCL和SDA為I2C串行接口的時鐘和數據線。MAG3110內部集成了信號處理電路,A/D轉換電路,相比其他模擬晶片,其精度更高,誤差更小。
3.2.2 溫度傳感器DS18B20接口電路
DS18B20是單線器件,接口電路很簡單,數據輸入輸出就一根線,其電路如圖4所示,DQ為數據輸入輸出線。
4 系統軟體設計
4.1 軟體框架
如圖5所示為系統的軟體框架,在底層驅動添加了溫度傳感器DS18B20和磁傳感器MAG3110的驅動,在應用層,分別打開兩個驅動的設備節點採集它們的數據,在Qt環境下將DS18B20和MAG3110的數據處理並顯示。
4.2 軟體模塊的實現
4.2.1 溫度傳感器模塊實現
溫度傳感器底層採用字符驅動框架實現,其讀寫操作在系統調用函數read,write中實現。應用程式打開其設備節點,就可以讀取底層溫度傳感器的數據,其實現流程如圖6所示。
4.2.2 磁傳感器模塊實現
磁傳感器底層驅動採用I2C驅動框架。其讀寫操作在系統調用函數read,write中實現,應用層打開其設備節點就可讀取數據,其實現流程見圖6。
4.3 界面設計
4.3.1 QWT5.0.2庫移植
如圖7所示為指南針的界面。
Qt開發環境下沒有這樣的控制項,需要移植包含此控制項的庫(QWT5.0.2)。本設計需要移植到X86和ARM9平臺。如圖8所示,Qwtwidgets為移植到X86平臺上的庫,其中包括許多常用的儀表控制項,其中QwtCompass控制項就是圖7所示的控制項。