GPS高度測量-物聯(lián)網綜合課程設計_第1頁
GPS高度測量-物聯(lián)網綜合課程設計_第2頁
GPS高度測量-物聯(lián)網綜合課程設計_第3頁
GPS高度測量-物聯(lián)網綜合課程設計_第4頁
GPS高度測量-物聯(lián)網綜合課程設計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第2章詳細設計方案2.1課程設計環(huán)境搭建嵌入式開發(fā)環(huán)境一般為Linux環(huán)境,通常的嵌入式系統(tǒng)的軟件開發(fā)采用一種交叉編譯調試的方式。交叉編譯調試環(huán)境建立在宿主機(即一臺PC機)上,對應的開發(fā)板叫做目標板。宿主機和目標板的處理器一般不相同,宿主機為x86處理器,而目標板如凌陽的A8實驗箱為三星S5PV210,其為ARMA8架構的處理器。GNU編譯器提供這樣的功能,在編譯器編譯時可以選擇開發(fā)所需的宿主機和目標機從而建立開發(fā)環(huán)境。所以在進行嵌入式開發(fā)前第一步的工作就是要安裝一臺裝有指定操作系統(tǒng)的PC機作宿主開發(fā)機,對于嵌入式Linux,宿主機上的操作系統(tǒng)一般要求為Linux的各種發(fā)行版,本次課程設計采用Ubuntu10.10,同時安裝gcc交叉編譯器。環(huán)境搭建流程如圖:2.1.1Ubuntu10.10的安裝嵌入式Linux的PC開發(fā)環(huán)境有幾個方案:基于PC機Windows操作系統(tǒng)下Cygwin2.在Windows下安裝虛擬機后,再在虛擬機中安裝Linux操作系統(tǒng)3.直接安裝Linux操作系統(tǒng)以上三種方案各有千秋,方案一容易存在兼容性問題;方案二在PC配置比較低的情況下會比較慢,但是既可以使用Windows上的一些軟件又可以使用到比較好的Linux環(huán)境,熟悉Windows的用戶用此方案比較順手;方案三無法使用Windows上的一些常用軟件,并且不熟悉的人操作起來比較困難。簽于此筆者建議初學者選擇方案二。方案二首先要在Windows上安裝一個虛擬機軟件,常用的虛擬機軟件為Vmware。然后再在Vmware上安裝Ubuntu10.10。在安裝完Ubuntu10.10后還要安裝嵌入式Linux的交叉編譯器和開發(fā)庫以及ARM-Linux的所有源代碼,這些包安裝后的總共需要空間大約為800M。2.1.2通過網線和串口將PC和A8實驗箱進行連接通過操作PC機的超級終端登陸實驗箱的系統(tǒng),通過網線連接是有兩種方案:1.實驗箱的以太網接口與PC的網卡直接相連。2.將實驗箱與路由器相連。當在實驗室通過方案2連接PC機和A8實驗箱時,容易出現(xiàn)ip沖突等問題,所以直接將用網線將實驗箱的以太網接口和PC的網卡直接相連。此時需要將A8實驗箱和PC機設置在同一網段才能正常通信。具體步驟如下:通過超級終端建立連接并登陸到A8實驗箱的系統(tǒng)中(賬號:root,密碼:111111)登陸成功2)對A8實驗箱的IP進行配置,并重啟網絡服務器。(主要用到的Linux語句:ipconfigeth0-i00-m-g和servicenetworkrestart)更改IP并重啟網絡服務器3)更改主機電腦的IP(注意將宿主機和實驗箱IP設置在同一網段)更改宿主機IP2.1.3GPS模塊的連接實驗箱引出了GPS接口J33,直接把GPS模組插接到該接口上,即可實現(xiàn)對GPS模組的控制。其中GPS模組的復位信號由實驗箱GPJ4_0來控制,通信由實驗箱的UART2來完成。按照APM7101的通訊要求,UART通訊波特率為4800或者9600bps。2.1.4軟件設計與實現(xiàn)軟件實現(xiàn)是本設計的重點,使用的是嵌入式C語言編程,采用模塊化的設計思想,根據(jù)系統(tǒng)要求和相關的硬件電路。本設計中,程序首先通過GPJ4_0輸出GPS模組開啟所需時序,從而打開GPS模組,接下來即可通過UART2等待從GPS模組中讀取GPS信息,并將這些這些信息進行解析,即可得到所需信息。本設計的程序流程如下圖所示:圖軟件程序流程圖具體的軟件程序流程為:打開Linux下相應的設備掛載點,開啟GPS模塊并進行初始化。本設計中,程序通過GPJ4_0輸出GPS模組開啟所需時序,從而打開GPS模組,接下來可通過UART2等待從GPS模組中讀取GPS信息,并將這些信息進行解析,即可得到所需信息。打開并設置UART2屬性。為了實驗箱能夠正確地與PC進行通信,必須按照制定要求格式對通信串口進行初始化操作。本設計選擇實驗箱主電路板上的UART2串口進行與PC的通信,并設置通信波特率為115200、數(shù)據(jù)位為8位、無奇偶校驗位、1位停止位和無數(shù)據(jù)流控制。具體實現(xiàn)過程可以通過向設備中發(fā)送起始信號,設備地址和寫信號,然后發(fā)送內部寄存器的地址和數(shù)據(jù),發(fā)送結束后便發(fā)送停止信號。讀取GPS信息并解析。GPS模組返回的信息遵循NMEA協(xié)議格式。為了正確無誤地讀取GPS模組中返回的信息,我們必須按照NMEA消息格式對緩沖區(qū)中的消息進行讀取并存儲并通過函數(shù)GetComma(intnum,char*str)得到指定序號的逗號位置,以解析各個定義段?;綨MEA指令是一個ASCII字符串,它以‘$‘字符開始、以<CR><LF>序列結束。NMEA標準消息以“GP”開始,接著是三個字符的消息標識碼。消息頭和后面的內容通過逗號進行分隔,消息以校檢碼結束(校檢碼由一個‘*’和兩個16位的校驗字組成。校驗碼字段并不用逗號進行分隔。目前,校驗碼得到的方式是從‘$’到‘*’之間的字符進行逐位計算。)2.2實施方案按照設計原理及設計思路在PC機上編寫程序,保存成.c源代碼文件,并將文件拷貝到Ubuntu系統(tǒng)中。在Ubuntu操作系統(tǒng)中打開一個終端,進入到源程序所在目錄下,在Ubuntu中進行交叉編譯,運行命令行(通過ls查看查看到GPS216文件):arm-linux-gcc-oGPS216GPS.c在PC機,通過ftp協(xié)議訪問實驗箱的IP地址,將編譯好的GPS216文件傳輸?shù)綄嶒炏渲小T诔壗K端中,賦予文件可執(zhí)行權限并運行。(授權語句:chmod+xGPS216)第3章調試及結果分析3.1調試3.1.1軟件測試3.1.2硬件調試3.2結果當根據(jù)實驗原理設計并運行后,超級終端可以出現(xiàn)如下實驗結果:參考文獻[1]青島東合信息技術有限公司.無線傳感器網絡技術原理及應用[M].西安:西安電子科技大學出版社,2013[2]凌陽愛普科技有限公司.物聯(lián)網多網技術綜合教學開發(fā)平臺實驗指導書[M],2013[3]王小強,歐陽俊,黃寧淋.ZigBee無線傳感器網絡設計與實現(xiàn)[M].北京:化學工業(yè)出版社,2012[4]凌陽愛普科技有限公司.A8實驗箱綜合教學開發(fā)平臺實驗指導書[M],2013[5]王毓銀.數(shù)字電路邏輯設計.高等教育出版社,1999[6]梁德厚.數(shù)字電路技術及應用.機械工業(yè)出版社,2004[7]楊松華.數(shù)字電子技術基礎.西安電子科技大學出版社,2000沈陽航空航天大學課程設計報告附錄(關鍵部分程序清單)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>#include<unistd.h>#include<termios.h>#include<fcntl.h>#include<sys/stat.h>#include<sys/time.h>#include<sys/types.h>#include<sys/ioctl.h>typedefstruct{ intyear; intmonth; intday; inthour; intminute; intsecond; chartime_c[10];//ACSII形式的時間}date_time;typedefstruct{ date_timeD; //時間 charstatus; //接收狀態(tài) doublelatitude; //緯度 charlatitude_c[11]; //ASCII形式的緯度 doublelongitude; //經度 charlongitude_c[11];//ASCII形式的經度 charNS; //南北極 charEW; //東西 doublespeed; //速度 charspeed_c[10]; //ASCII形式的速度 doublehigh; //高度}GPS_INFO;intGPS_Read(intfd,char*Data_Buff,intlen);intGetComma(intnum,char*str);voidUTC2BTC(date_time*GPS);doubleGet_Double_Number(char*s);voidGet_Char(char*s);charbuf_t[128];intmain(){ structtermiosoptions,oldoptions; //定義串口屬性結構體變量,其中options用于重新設置串口屬性,oldoptions用于原設置,用于恢復到原來的屬性 GPS_INFOGPS; unsignedintDegree=0; floatCent; charbuf[1024]; intlen=1024; intnByte; intrdadByte; inti=0; intfd; fd=open("/dev/gpJ4",O_RDWR); //openGPJ4 ioctl(fd,0x01,0);//setGPJ4_0output ioctl(fd,0x10,0);//GPJ4_0outputlowlevel usleep(30000); ioctl(fd,0x11,0);//GPJ4_0outputhighlevel fd=open("/dev/s3c2410_serial2",O_RDWR);//openserial2 tcgetattr(fd,&oldoptions);//獲得當前的串口設置信息 tcgetattr(fd,&options); cfsetispeed(&options,B9600);//設置輸入波特率為115200 cfsetospeed(&options,B9600);//設置輸出波特率為115200 options.c_cflag&=~PARENB;//設置串口屬性為:數(shù)據(jù)位為8位,停止位為1位,無奇偶校驗 options.c_cflag&=~CSTOPB; options.c_cflag|=CSTOPB; options.c_cflag&=~CSIZE; options.c_cflag&=~CS8; options.c_cflag|=CS8; options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);//設置串口為Raw模式 options.c_oflag&=~OPOST; tcsetattr(fd,TCSANOW,&options);//將上述設置生效 while(1) { GPS_Read(fd,buf,len); if(GPS_Parse(buf,&GPS)) { if(GPS.status=='A') //如果接收到有效的數(shù)據(jù) { printf("時間:%2d:%2d:%2d\n", //顯示時間 GPS.D.hour,GPS.D.minute,GPS.D.second); printf("日期:%d年%02d月%02d日\n", //顯示日期 GPS.D.year,GPS.D.month,GPS.D.day); printf("此時的海拔高度為:%10.4f\n",GPS.high); Degree=GPS.latitude/100; //計算緯度的"度"和"分" Cent=GPS.latitude-(Degree*100); printf("緯度:"); //顯示緯度 if(GPS.NS=='N') printf("北緯(N)%d度%lf分",Degree,Cent); if(GPS.NS=='S') printf("南緯(S)%d度%lf分",Degree,Cent); printf("\n"); Degree=GPS.longitude/100; //計算經度的"度"和"分" Cent=GPS.longitude-(Degree*100); printf("經度:"); //顯示經度 if(GPS.EW=='E') printf("東經(E)%d度%lf分",Degree,Cent); if(GPS.EW=='W') printf("西經(W)%d度%lf分",Degree,Cent); printf("\n\n\n"); } } }}/*******************************************GPS_Read:readMSGfromGPSmodule ********************************************/intGPS_Read(intfd,char*Data_Buff,intlen){ intcount=0; intFlag=0; while(Flag==0) { read(fd,Data_Buff,1); if(*Data_Buff=='\n') { Flag=1; count=0; } Data_Buff++; } return0;}/*********************************************************GPS_Parse:changeMFSfromGPStosturctGPS_INFO**********************************************************/intGPS_Parse(constchar*line,GPS_INFO*GPS){ inttmp; charc; char*buf; buf=(char*)line; c=buf[5]; if(c=='C'){//"GPRMC" GPS->D.hour=(buf[7]-'0')*10+(buf[8]-'0'); GPS->D.minute=(buf[9]-'0')*10+(buf[10]-'0'); GPS->D.second=(buf[11]-'0')*10+(buf[12]-'0'); tmp=GetComma(9,buf); GPS->D.day=(buf[tmp+0]-'0')*10+(buf[tmp+1]-'0'); GPS->D.month=(buf[tmp+2]-'0')*10+(buf[tmp+3]-'0'); GPS->D.year=(buf[tmp+4]-'0')*10+(buf[tmp+5]-'0')+2000; Get_Char(&buf[7]); strcpy(GPS->D.time_c,buf_t); // GPS->status =buf[GetComma(2,buf)]; #defineddd GPS->latitude=Get_Double_Number(&buf[GetComma(3,buf)]); printf("GPS->latitude=%f\n",GPS->latitude); GPS->NS=buf[GetComma(4,buf)]; Get_Char(&buf[GetComma(3,buf)]);strcpy(GPS->latitude_c,buf_t); GPS->longitude=Get_Double_Number(&buf[GetComma(5,buf)]); GPS->EW=buf[GetComma(6,buf)]; Get_Char(&buf[GetComma(5,buf)]); strcpy(GPS->longitude_c,buf_t); UTC2BTC(&GPS->D); return1; }if(c=='A'){//"$GPGGA"GPS->high=Get_Double_Number(&buf[GetComma(9,buf)]);return1;}return0;}/**********************************************************************Get_Double_Number:changestringbeforethefrist','todouble**********************************************************************/doubleGet_Double_Number(char*s){ charbuf[128]; inti; doublerev; i=GetComma(1,s); i=i-1; strncpy(buf,s,i); buf[i]=0; rev=atof(buf); returnrev;}/*******************************************Get_Char:getcharbeforefrist","********************************************/voidGet_Char(char*s){ inti; i=GetComma(1,s); i=i-1; if(i>9)i=9; strncpy(buf_t,s,i); buf_t[i]='\n';}/*******************************************GetComma:getpoistionofnum-th","********************************************/intGetComma(intnum,char*str){ inti,j=0; intlen=strlen(str); for(i=0;i<len;i++) { if(str[i]==',')j++; if(j==num)returni+1; } return0;}/*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論