【摘 要】項(xiàng)目采用基于NMEA-0183協(xié)議的GPS模塊作定位的數(shù)據(jù)采集部分,設(shè)計(jì)制作出一套能夠?qū)崿F(xiàn)校園定位的系統(tǒng)模型,為日后學(xué)校繼續(xù)深入研究校園GPS應(yīng)用指明研究方向,奠定算法基礎(chǔ),以便日后加以改進(jìn)后能正式投入應(yīng)用,或應(yīng)用于校園導(dǎo)航或應(yīng)用于校園車輛監(jiān)控。
【關(guān)鍵詞】GPS;校園巡航定位系統(tǒng);設(shè)計(jì)
一、GPS校園巡航定位系統(tǒng)硬件設(shè)計(jì)方案
我們設(shè)計(jì)了一套硬件系統(tǒng),發(fā)送模塊作為手持終端,接收模塊接收手持終端傳來的數(shù)據(jù)并送至PC,在PC軟件界面中觀察手持終端的位置信息,從而實(shí)現(xiàn)定位功能。硬件設(shè)計(jì)方案如下圖所示:
(1)接收在線數(shù)據(jù)。此模塊通過打開現(xiàn)存在的串口,從而實(shí)時的接收下位機(jī)上傳的定位數(shù)據(jù)。對現(xiàn)有串口進(jìn)行打開的時候,必須設(shè)置波特率,校驗(yàn)位,停止位等相關(guān)參數(shù)。(2)接收離線數(shù)據(jù)。此模塊是用于讀取已經(jīng)采集的定位數(shù)據(jù),只能進(jìn)行離線數(shù)據(jù)的解析。(3)提取經(jīng)緯度。軟件只針對GPRMC的定位信息進(jìn)行解析,其他類型的定位信息過濾掉。從而提取出有效的經(jīng)緯度。(4)顯示位置。通過提取到的有效經(jīng)緯度,根據(jù)已知點(diǎn)的經(jīng)緯度,從而計(jì)算出現(xiàn)有經(jīng)緯度在地圖上的位置,從而顯示出來
二、項(xiàng)目研究過程中的難點(diǎn)及解決途徑,應(yīng)用的關(guān)鍵技術(shù)
1.硬件設(shè)計(jì)過程中遇到的問題及解決方法。硬件程序設(shè)計(jì)中的難點(diǎn)是數(shù)據(jù)傳輸方面的問題,GPS模塊與單片機(jī)進(jìn)行通信把信息數(shù)據(jù)傳入單片機(jī),單片機(jī)把數(shù)據(jù)放入其外部緩存,無線數(shù)據(jù)傳輸模塊再將數(shù)據(jù)從單片機(jī)緩存區(qū)中取出放入自己的數(shù)據(jù)寄存器然后打包發(fā)送,這之間遇到的問題是數(shù)據(jù)傳輸過程中的格式問題。NRF905在進(jìn)行數(shù)據(jù)傳輸時是先把數(shù)據(jù)放入數(shù)組里再進(jìn)行傳輸并且它只能以十六進(jìn)制的數(shù)據(jù)形式發(fā)送數(shù)據(jù),而GPS模塊接收到的數(shù)據(jù)雖然是16進(jìn)制的,但沒有添加0x標(biāo)志,這樣NRF905發(fā)送出的數(shù)據(jù)就會是亂碼。我們采取的解決方案就是把接收到的數(shù)據(jù)進(jìn)行從16進(jìn)制到ASCII碼的整形,這樣數(shù)據(jù)就有了統(tǒng)一格式,問題也得到了解決。其次就是時序匹配的問題,單片機(jī)從串口接收GPS數(shù)據(jù)的速度是很快的,一次5串GPS代碼,而且每串代碼從80位到96位長度不等,屬于一種批量不定長數(shù)據(jù)傳輸,而NRF905的最大發(fā)送數(shù)據(jù)的位寬是32位,而且發(fā)送數(shù)據(jù)前要進(jìn)行SPI總線讀寫時序配置,這樣就會有一個數(shù)據(jù)發(fā)送的延遲。所以我們需要切割數(shù)據(jù),并且注意發(fā)送速度與接收速度的匹配,如果發(fā)的太快,接收部分接收到的數(shù)據(jù)就會是亂碼,如果發(fā)的太慢就會丟失有效數(shù)據(jù),降低數(shù)據(jù)的有效率(因?yàn)閱纹瑱C(jī)的片外數(shù)據(jù)緩存是有限制的,一旦占滿了就會被新的數(shù)據(jù)覆蓋,也就是說數(shù)據(jù)如果不及時取出就會被新的數(shù)據(jù)覆蓋,而新的數(shù)據(jù)不一定是有效數(shù)據(jù))。我們通過不斷更改延時直到傳輸不會再一直出現(xiàn)亂碼。
2.軟件設(shè)計(jì)過程中遇到的問題及解決方法。在軟件設(shè)計(jì)過程中,最棘手的問題是打開現(xiàn)存的串口,并且接收下位機(jī)發(fā)送給PC的定位數(shù)據(jù)方面。先期由于沒有接觸過串口編程,所以在這個模塊方面還是摸索了很長時間,最后通過查閱資料,終于解決了問題?,F(xiàn)列舉此模塊代碼如下: BOOL SetSerielPort
(char * szPort,int rate,int checkBits,int bitSize,int stopbits)
{
BOOL istrue=FALSE;
m_hCom=CreateFile(szPort,
GENERIC_READ|GENERIC_WRITE,0,NULL,OP
EN_EXISTING,F(xiàn)ILE_ATTRIBUTE_NORMAL|
FILE_FLAG_OVERLAPPED,NULL);
if( m_hCom == INVALID_HANDLE_VALUE )
{
MessageBox(“串口com創(chuàng)建失敗”);
return FALSE;
}
DCB dcb;
ZeroMemory(dcb,sizeof(DCB));
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate=rate;
dcb.ByteSize=bitSize;
dcb.Parity=checkBits;
dcb.StopBits=stopbits;
dcb.fBinary=TRUE;
dcb.fParity=FALSE;
istrue=SetCommState(m_hCom,dcb);
if (!istrue)
{
MessageBox(“串口設(shè)置失敗”);
m_hCom=NULL;
return FALSE;
}
COMMTIMEOUTS comTimeOut;
comTimeOut.ReadIntervalTimeout=10;
// 將超時參數(shù)寫入設(shè)備控制
istrue=SetCommTimeouts(m_hCom,comTimeOut);
if(!istrue)
{
MessageBox(“超時時間設(shè)置失?。 保?;
m_hCom=NULL;
return FALSE;
}
SetupComm(m_hCom,1024,512);
istrue=PurgeComm(m_hCom,PURGE_TXABORT|PURGE
_RXABORT|PURGE_TXCLEAR|PURGE_RXABORT);
if(!istrue)
{
MessageBox(“緩沖區(qū)數(shù)據(jù)清除失?。 保?;
m_hCom=NULL;
return FALSE;
}
return TRUE;
三、研究成果的前景展望
如果考慮改進(jìn)系統(tǒng)以便在校園內(nèi)投入使用,可以考慮更換傳輸模塊,把局域無線數(shù)據(jù)傳輸模塊更換為基于網(wǎng)絡(luò)的無線數(shù)據(jù)傳輸模塊并做相應(yīng)的開發(fā)研究,本系統(tǒng)是可以作為一個校園車輛定位系統(tǒng)而投入實(shí)際使用的,至于上位機(jī)軟件也是可以根據(jù)需要而更換數(shù)據(jù)庫的。