前言
車載定位系統作為車載信息系統的重要部分,利用GPS等裝置,以一定精度實現車輛定位,包含位置、速度和行車方向等車輛姿態信息。繼一些國家之后,我國一些科研院所和高校也開始研究自己的車載定位系統,市場空前的繁榮。但是傳統系統功能單一、集成度不高。隨著ARM處理器在全球范圍的流行,32位的RISC嵌入式處理器已經成為嵌入式應用和設計的主流。同時嵌入式Linux是一個非常好的免費的操作系統內核,具有穩定、良好的移植性、優秀的網絡功能、完備的各種文件系統的支持、以及標準豐富的API等特點。因此,本文提供了一套具有先進性及工程實用性的車載定位系統整體解決方案,使得系統的性能、集成度和可擴展性大大提高。
1 系統的硬件設計
1.1 系統的整體硬件設計
本文車載信息系統由以下幾部分組成:主控制部分、定位部分、通信部分、數據采集部分、顯示部分,如圖1所示。
圖1 車載定位系統總體硬件設計方案
主控制部分采用了三星公司基于ARM920T的S3C2410和Linux的嵌入式系統平臺,完成整個系統的控制。其主要包括電源電路、時鐘電路、復位電路、存儲模塊電路、JTAG接口電路、串行口電路、LCD接口、SPI接口以及按鍵電路的設計。主控模塊通過串行口、SPI接口、LCD接口與擴展模塊相連接構成整個硬件系統。
1.2 GPS模塊的硬件設計與制作
定位部分采用了自行設計和制作了基于瑞士U-BLOX公司LEA-4S芯片的GPS接收模塊。在此給出了GPS接收模塊的整體設計,如圖2所示。
圖2GPS接收模塊的整體設計
u-blox的GPS部分分為兩部分。采取數字/模擬分開設計的方法,有效提高了模塊的抗干擾能力。在硬件的設計制作過程中。也是分為兩步,即模塊部分和數字部分。模擬部分主要由天線接入端及天線供電部分/檢測電路構成。
天線選用3v供電的有源天線,增益27dB左右,噪聲系數1.5dB左右。天線接入模塊較為復雜,從GPS有源天線接收的信號頻率高選1.575C,屬于微渡范圍。PCB設計需要滿足天線座到模塊RF_IN端的阻抗匹配為50Ω。
模塊供電電源穩壓電路為5v轉3v的五腳LDO,對電壓穩定精度較高,要求輸出紋波在50mV以下,電流為150mA左右,這里選用精工的SOT-23-5封裝的LDO S-1112 3.0V,能滿足電源供應的要求。后備3V可充電微型鋰電池則為數據保存作用。
選擇電路為波特率的選擇及速率選擇?;蚴菃铀俣戎惖倪x擇,一般可以用默認值。
數字部分硬件相對簡單,LEA-4S為兩路TTL電平輸出,分別為9600/11520波特率,分別支持國際通用GPS協議NMEA及u-blox公司的UBX二進制格式。在本設計中,通過串口O提取ASCII碼,串口數據通過MAX232電平轉換為RS232電平。另外,將GPS模塊的發送端和接收端經電平轉換后與審口DB9交叉相連。
2軟件平臺的搭建
系統的軟件平臺的搭建其實就是嵌入式linux操作系統的移植移植工作,主要包括4步:建立交叉編譯環境,移植引導程序,編譯內核,生成根文件系統。
交叉編譯工具主要由gcc,binutils和glibc這幾部分組成。由于重新建立一個交叉編譯工具鏈比較復雜也沒有任何意義,所以本文使用已經做好的工具鏈。因此建立交叉編譯環境的過程實際就是對工具包cross-3.3.2.tar.bz2解包的過程。
本文移植的Bootloader是韓國Mizi公司開發的vivi.首先在根目錄下創建一個armsys2410目錄,對vivi_armsys.tgz執行解壓命令。解壓完成后進人vivi_armsys.執行命令makememmonfig,然后選擇"Load on Alternate Configuration File"菜單,再寫入arch/def-co-igs/smdk2410,進行vivi的裁剪。執行make命令進行編譯,在vivi_armsys目錄下生成vivi二進制文件。最后將其燒寫到Flash.
內核的編譯通過命令make menueorffig進行內核的配置;通過命令make dep建立依賴關系;通過命令make zlmage建立內核。得到Linux內核壓縮映像zhnage.最后通過vivi命令提示模式下使用下載命令,將壓縮映像文件zlmge裝載到flash存儲器中。
Linux支持多種文件系統。cramfs是Linus Torvalds撰寫的只具備最基本特性的文件系統。本文使用mkcramfs工具對主機里已有cramfs文件系統進行制作和壓縮。最后也要燒寫到flash的相應部分。
3 GPS模塊驅動程序的開發
Linux將設備分為最基本的兩大類,字符設備和塊設備。字符設備是單個字節為單位進行順序讀寫操作,通常不使用緩沖技術;而塊設備則是以固定大小的數據塊進行存儲和讀的。
GPS模塊驅動程序是在UART驅動程序的基礎上加入對GPS模塊初始化和對GPS模塊輸出數據處理的部分,構建一個獨立的驅動模塊,在導航系統進實時導航工作模式時掛接到系統內核中,實現GPS功能。
3.1 初始化/清除模塊
在初始化程序段中要完成對GPS設備的注冊,設備節點的創建和對串口相關寄存器的初始化。部分代碼如下:
3.2 兩個數據結構定義
模塊驅動的最終目的就是取得GPS信息,因此規范GPS數據是對數據傳遞的可靠性和速率都是有益的。
struct GPS_DATA{
unsigned int hour;//小時,24小時制
unsigned int minute;//分
unsigned long Second;//秒,精度小數點后三位
unsigned long latitude;//緯度
unsigned char southornorth;//緯度屬于南北的標志碼
unsigned long longitude;//經度
unsigned char eastorwest;//經度屬于東西的標志碼
};//其中包括了在導航系統中所需的幾個重要數據。
另外還有對驅動模塊文件操作結構的定義。即:
static struct file_operations gps_fops={ead:gps_read,
rite:gps_write,
octl:gps_ioctl,
open:gps_open,
elease:gps_release,
};//定義了設備操作映射函數結構。
3.3 驅動程序的模塊操作
在導航系統進入GPS導航模式時,系統首先是將GPS模塊注冊到操作系統中,實現初始化過程,再通過gps_open函數打開設備,此過程中完成對中斷、緩沖區以及定時器等資源的申請,為GPS數據讀取做準備。通過gps_write()向模塊寫命令字來是自主地選擇工作模式,gps_ioctl()則是選擇串口傳輸模式,使之與GPS模塊傳輸模式相匹配。之后的應用程序將創立一個獨立的進程為進行GPS數據的讀取gps_read(),該進程沒有數據時進程會一直處于睡眠等待數據,有數據來,進入中斷處理模塊,完成數據的分析,生成GPS_DATA數據結構,供導航使用。這個進程是隨著導航模式的切換而終止的,此時除了關閉進程外,還需要用gps_release()釋放申請的所有資源,并關閉設備。
3.4應用程序的實現
GPS模塊通過串口輸出NMEAO183語句,而應用程序主要完成對GPS數據的采集與解析。NMEA0183輸出語句多達十余種,任意一種定位語句都包含一定的定位數據,由于以"$GPRMC"開頭的語句包含了本系統所需的所有定位信息,本系統只需研究該類型。該類型定位數據的各個符號位的含義如下所示。
表1 $GPRMC幀基本格式的描述
應用程序的整體設計流程如圖3所示。
圖3 軟件設計整體框圖
從圖3可以看出,系統開始運行后首先對串口的初始化就是對GPS模塊韌始化,包括設置波特率、數據位、校驗位等,然后開始接收GPS數據。即從串口讀數據。井將讀到的數據保存到BUF中;接著進入數據的解析和提取階段。通過BUF等不等于"c"判斷是苦為$GPRMC;若是,則開始提取經緯度、時間等信息并存入結構體GPS_DATA中。最后通過LCD顯示出來。
4 結束語
本文給出了基于ARM9和嵌入式操作系統Linux下,GPS定位系統的整體解決方案。包括了系統的整體設計,GPS模塊制作方案,開發平臺搭建以及GPS驅動程序和應用程序的設計。較市場上的車載定位系統相比,本設計在功能性、可擴展性和穩定性上都有所提高。由本系統作為基礎,車載定位系統的下一步工作將可以專注于應用程序的編寫,包括提高GPS定位精度的算法,以及開發更加友好的人機交互界面。
-
嵌入式
+關注
關注
5095文章
19189瀏覽量
307987 -
Linux
+關注
關注
87文章
11351瀏覽量
210504 -
操作系統
+關注
關注
37文章
6900瀏覽量
123810
發布評論請先 登錄
相關推薦
基于ARM的車載GPS定位終端的設計
基于ARM9與Linux操作系統的彩色液晶驅動設計
基于ARM9的智能車載系統設計
![基于<b class='flag-5'>ARM9</b>的智能<b class='flag-5'>車載</b><b class='flag-5'>系統</b>設計](https://file1.elecfans.com//web2/M00/A5/95/wKgZomUMORyAW89CAAC89whgDzg380.jpg)
基于Linux的ARM9遠程客車監控系統
![基于<b class='flag-5'>Linux</b>的<b class='flag-5'>ARM9</b>遠程客車監控<b class='flag-5'>系統</b>](https://file.elecfans.com/web2/M00/49/49/pYYBAGKhtEOAYmGZAAAOIY20sqU202.jpg)
基于ARM9和NANDFlash對uboot和Linux內核進行修改
![基于<b class='flag-5'>ARM9</b>和NANDFlash對uboot和<b class='flag-5'>Linux</b>內核進行修改](https://file1.elecfans.com//web2/M00/A7/35/wKgZomUMQwWAEiAlAAANXgJGR0Y995.jpg)
如何使用ARM9與WindowsCE進行車輛GPS定位信息采集系統的資料說明
![如何使用<b class='flag-5'>ARM9</b>與WindowsCE進行車輛<b class='flag-5'>GPS</b><b class='flag-5'>定位</b>信息采集<b class='flag-5'>系統</b>的資料說明](https://file.elecfans.com/web1/M00/85/F1/o4YBAFx3pNmAaajKAADwTsarF6E700.png)
基于Linux操作系統和S3C2410微處理器實現GPS實時導航系統的設計
![基于<b class='flag-5'>Linux</b><b class='flag-5'>操作系統</b>和S3C2410微處理器<b class='flag-5'>實現</b><b class='flag-5'>GPS</b>實時導航<b class='flag-5'>系統</b>的設計](https://file.elecfans.com/web1/M00/B5/A8/pIYBAF5lrceAV3tFAABZ--XIKqY194.png)
評論