版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Motorola Oncore M12 編程指南該文章包括:兩篇網(wǎng)絡(luò)文章,MOTOROLA 快速應(yīng)用指南,以及自己編寫的源代碼,已經(jīng)測(cè)試通過!1 GPS相關(guān)術(shù)語介紹歷書: 包含軌道信號(hào)/時(shí)鐘糾錯(cuò)/大氣延時(shí)參數(shù),這些數(shù)據(jù)有利與衛(wèi)星的快速捕獲,歷書上的軌道信息比星歷表的精度要低,但是更有效(1-2年).C/A碼: 碼片速率1.023MHz,L1,1575.42Mhz,1023碼長(zhǎng)度. 每個(gè)bit時(shí)間為977ns,對(duì)應(yīng)的距離是293m.P碼: 調(diào)制在L1和L2 GPS信號(hào)上的保護(hù)/精度碼.P碼為很長(zhǎng)的碼(1014bits),碼片速率為10.23MHz,38周重復(fù)一次.每個(gè)衛(wèi)星這
2、個(gè)碼的獨(dú)有的一周碼長(zhǎng)部分.每周重置一次.在反欺騙下,P碼加密成Y碼.只給授權(quán)用戶使用,由美國(guó)國(guó)防部控制.差分處理: 單差測(cè)量是同一 衛(wèi)星上的即時(shí)信號(hào)相位差,同時(shí)由兩個(gè)接收機(jī)測(cè)量. 雙差測(cè)量是指差分一個(gè)衛(wèi)星的單差和另一個(gè)參考衛(wèi)星的單差.三差是指前后不同時(shí)期雙差的差分.GDOP 幾何DOP-三維坐標(biāo)加上時(shí)鐘偏移PDOP 位置DOP-三維坐標(biāo)HDOP 水平DOP-二維水平坐標(biāo)VDOP 垂直DOP-只有高度TDOP 時(shí)間DOP-只有時(shí)鐘偏移RD
3、OP 相對(duì)DOP-歸一化到60sDoD 美國(guó)國(guó)防部,負(fù)責(zé)GPS的發(fā)展,部署和操作.基本頻率:GPS的基本頻率是10.23MHz.L1=154F=1575.42MHz, L2=120F=1227.60MHz.GPS: Global Positioning System,包括空間部分(24顆分布在6個(gè)不同軌道平面的 NAVSTAR衛(wèi)星),控制部分(5個(gè)監(jiān)察站,1個(gè)主控制中心,3個(gè)注入站),用戶部分(GPS接收機(jī)).GMT:Greenwich Mean TimeKalman Filt
4、er:用來在噪聲環(huán)境下跟蹤時(shí)變信號(hào)的數(shù)值方法如果這個(gè)信號(hào)可以由隨時(shí)間慢變化的一些參量來標(biāo)志,卡爾曼濾波就能告訴我們引入什么樣的粗測(cè)量方法來最好的估計(jì)這邊時(shí)間函數(shù)的參量.L1,L2 : L1信號(hào)載波為1575.42MHz,調(diào)制了C/A碼,P碼和NAV消息. L2信號(hào)載波為1227.60MHz,調(diào)制了P碼和NAV消息. 在反欺騙時(shí),P碼變?yōu)榧用艿腨碼,只對(duì)認(rèn)證用戶開放.
5、160; L波段:390MHz到1550MHz復(fù)用信道:按不同衛(wèi)星信道排列的接收信道以同步于衛(wèi)星消息比特率(50bits/s)傳送.這樣,一個(gè)完整的序列將在20ms的整數(shù)倍里完成.NAD-83 北美數(shù)據(jù)庫(kù),1983.NAVDATA: 1500bit導(dǎo)航消息以50bps的速率在L1和L2上由不同衛(wèi)星廣播.導(dǎo)航消息包括系統(tǒng)時(shí)間,時(shí)鐘糾正參數(shù),電離層延時(shí)模型參數(shù),衛(wèi)星的星歷和狀態(tài).NAVSTAR: NAVigation Satellite Timing and Ranging.PRN: 偽隨機(jī)噪聲Pseudolite【虛擬衛(wèi)星】虛擬衛(wèi)星(
6、Pseudo-Satellite)的縮寫。是一種地面上的差分型全球定位系統(tǒng)接收器,它可模擬全球定位系統(tǒng)衛(wèi)星的信號(hào)。其信號(hào)的資料部份可能亦包含差分修正信息,以提供接收器作為修正GPS誤差之用。RTCM:海軍服務(wù)委員會(huì)的無線技術(shù)委員會(huì)被建立來定義一個(gè)差分?jǐn)?shù)據(jù)鏈路來傳送GPS糾正消息,從一個(gè)監(jiān)察站到現(xiàn)場(chǎng)用戶.RTCM SC-104建議定義了糾正消息格式和16種不同的糾正消息類型.Swithching Channel: TRAIM: Time Receiver Autonomous Integrity Monitoring.這是一個(gè)利用冗余衛(wèi)星來聯(lián)系觀察完整
7、性和時(shí)間分辨率的算法.這個(gè)算法只用在UT Oncore.世界時(shí)(Universal Time): UTO 從觀察恒星和宇宙與恒星的固定數(shù)值關(guān)系來推導(dǎo)出來的世界時(shí).(3分56.555秒).UT1 修正極點(diǎn)移動(dòng)的UTOUT2 按地球旋轉(zhuǎn)率來修正UTO的季節(jié)性變化UTC 世界協(xié)調(diào)時(shí),統(tǒng)一的原子時(shí)系統(tǒng),與UT2只有一個(gè)小偏移.由美國(guó)海軍觀察站維護(hù)(USNO).GPS時(shí)與UTC的關(guān)系:UTC-GPS=UTC off
8、set(11 seconds in 1996).2 GPS 原理NAVSTAR GPS The NAVigation Satellite Timing and Ranging(NAVSTAR)GPS 是一個(gè)全天氣,基于無線的衛(wèi)星導(dǎo)航系統(tǒng).它使用戶可以在全世界準(zhǔn)確的確定3維位置/速度/和時(shí)間.整個(gè)系統(tǒng)包括三個(gè)組成部分:空間部分,地面部分和用戶部分.空間部分 空間部分由一個(gè)操作在高度在20183Km的12小時(shí)軌道衛(wèi)星星座組成.由24顆分布在6個(gè)軌道平面的衛(wèi)星構(gòu)成星座.每個(gè)平面以傾角55度等分于赤道上。GPS導(dǎo)航消息
9、0; 信號(hào)傳輸在兩個(gè)L波段頻率,L1和L2,通過雙頻接收機(jī)可以糾正電離曾的延時(shí).3 GPS接收機(jī)描述Oncore 接收機(jī)通過串行口提供位置/速度/時(shí)間/和衛(wèi)星跟蹤狀態(tài)信息.UT Oncore專門應(yīng)用于精確定時(shí)應(yīng)用.M12+: 12通道,3V供電,使RAM一直處于帶電狀態(tài),以維持衛(wèi)星星歷數(shù)據(jù),用戶操作參數(shù),歷書信息和其他的一些信息.為了防止信息的丟失,我們使用了一個(gè)外部電源,標(biāo)準(zhǔn)3VforM12+(BATT).同時(shí)也是為了保持real-time-clock(RTC)值.天線檢測(cè)電路 天線檢測(cè)電路用來檢測(cè)是否存在天線和是否有效(通過電流),
10、能檢測(cè)欠電流(開路狀態(tài)),過電流(短路或超過最大接收機(jī)極限).M12+ 和M12+ TIMER ONCORE 接收機(jī)電氣特性1PPS 信號(hào)定義0到3V脈沖(M12+), 1PPS時(shí)間標(biāo)志同步于脈沖上升沿的中點(diǎn).上升時(shí)間大約20到30ns.脈沖寬度大約為200ms+/-1msReal-Time Clock(RTC) 當(dāng)接收機(jī)上電后,RTC保持的值是不正確的(除非預(yù)置或有外部后備電源).在主電源和后備電源短開的情況下,為了保證更快到達(dá)first fix,時(shí)間,日期和GMT偏移將被輸入.接口協(xié)議描述Motorola Oncore接收機(jī)有兩個(gè)TTL串行
11、數(shù)據(jù)端口.第一個(gè)端口配置為數(shù)據(jù)通信設(shè)備(DCE)端口,它在Oncore 接收機(jī)和系統(tǒng)控制器之間提供主要的控制和數(shù)據(jù)路徑.第二個(gè)端口為RTCM DGPS 校正輸入(M12+/GT+).連接Oncore到RS-232時(shí),必須要轉(zhuǎn)換電路.IO端口操作在中斷控制下。輸入的數(shù)據(jù)存放在緩沖區(qū)(由Oncore 接收機(jī)的操作程序服務(wù)),每1S服務(wù)一次緩沖區(qū)。2 TTL 輸出串行接口信號(hào)RXD和TXD是規(guī)則的TTL信號(hào),電壓范圍是0-3v或0-5v,TTL輸出串行接口信號(hào),RXD和TXD用于用戶連接.一個(gè)地信號(hào)需要用來完善串行接口.由于直接連接到微處理器,所以除了內(nèi)部保護(hù)措施外沒有其他的保護(hù)和信號(hào)條件.RXD和
12、TXD是穩(wěn)定TTL信號(hào),電壓范圍為0-3V 或是0-5V. 對(duì)于輸入信號(hào),最小輸入高電壓是2V,最大輸入高電壓是5V.最小輸入低電壓是0,最大輸入低電壓是0.8V. 對(duì)于輸出信號(hào),最小輸出高電壓是2.4V,最大輸出低電壓是0.5V.RS-232與TTL 3V 轉(zhuǎn)換電路 MC145407.Motorola 二進(jìn)制格式介紹Oncore接收機(jī)使用的二進(jìn)制數(shù)據(jù)消息包含可變個(gè)數(shù)二進(jìn)制字符.這些二進(jìn)制消息以ASCII 字符開頭,以<CR><LF>結(jié)尾.后的前兩個(gè)ASCII字符(字節(jié))標(biāo)志了剩余二進(jìn)制數(shù)據(jù)的特殊結(jié)構(gòu)和格式.在<CR><LF>
13、;前的一個(gè)字節(jié)是所有消息的單字節(jié)校驗(yàn)和.每個(gè)消息有下列組成部分:消息開始:-(兩個(gè)16進(jìn)制40s)標(biāo)志二進(jìn)制消息的開始.消息ID:(A. Z(az,AZ)-ASCII大字母后跟在小字母或是大字母.兩個(gè)字母一起標(biāo)志了消息的類型和暗示了正確的消息長(zhǎng)度和格式.二進(jìn)制數(shù)據(jù)序列:依賴于控制命令的可變字節(jié)數(shù)的二進(jìn)制數(shù)據(jù).校驗(yàn)和: C-獨(dú)一性-后校驗(yàn)和前的二進(jìn)制數(shù)據(jù).消息結(jié)尾標(biāo)志<CR><LF>-carriage return line feedOncore接收機(jī)對(duì)沒一個(gè)命令都有一個(gè)響應(yīng)返回.它每秒從輸入緩沖中讀取輸入命令字符串.
14、如果完整的命令已經(jīng)被接收,它就執(zhí)行這個(gè)命令指示的功能.在輸入命令上進(jìn)行輸入字符串校驗(yàn).一個(gè)二進(jìn)制消息在接收到和<CR><LF>,消息長(zhǎng)度正確,校驗(yàn)和有效的情況下被認(rèn)為完整接收. 必須留意正確的格式和輸入命令,特別是參數(shù)的個(gè)數(shù)和有效范圍.一個(gè)CSC開始符號(hào),一個(gè)有效的校驗(yàn)和,一個(gè)終止符號(hào)(回車換行),正確的消息長(zhǎng)度和有效參數(shù)范圍是Oncore接收機(jī)收到有效輸入命令的唯一指示.一個(gè)無效的消息可以翻譯成一個(gè)有效的unintended消息.對(duì)于多參數(shù)命令,如果一個(gè)輸入?yún)?shù)超出范圍,接收機(jī)將拒絕整個(gè)命令.每一個(gè)改變參數(shù)類型輸入命令都有一個(gè)相應(yīng)的響應(yīng)消息來指示參數(shù)配置改變.為了查看
15、接收機(jī)的當(dāng)前狀態(tài),可以輸入一個(gè)至少有一個(gè)超出范圍參數(shù)的輸入命令.對(duì)含超出范圍參數(shù)的格式正確的輸入命令的響應(yīng)是輸出接收機(jī)的原始未變值.對(duì)于包含位置/速度/時(shí)間的狀態(tài)消息的更新速率可以選擇(典型的是1s),或是可以置為每來一個(gè)詢問輸出一個(gè)數(shù)據(jù).數(shù)據(jù)在連續(xù)輸出模式下的輸出速率與消息中數(shù)據(jù)的 類型有關(guān).支持NMEANMEA-0183 Specification Revision 2.0.1.消息
16、描述GPGGA GPS Fix DataGPGLL 幾何位置(經(jīng)緯度)GPGSA GPS
17、 DOP and Active satellitesGPGSV GPS Satellites in ViewGPRMC Remcommended Minimum specific GPS/Transit DataGPVTG
18、0; Track made good and ground speedGPZDA Time and Date我們可以獨(dú)立使能每一個(gè)消息輸出.并且控制信息的輸出速率.如果后備電源已經(jīng)應(yīng)用或是接收機(jī)有電源選項(xiàng),GT Oncore接收機(jī)將在掉電后保持輸出配置,在開機(jī)后重新保持
19、原來的配置.如果沒有后備電源,每次重起后都設(shè)定為默認(rèn)狀態(tài)(Motorola 二進(jìn)制格式9600baud).NMEA消息格式:Beginning with ASCII $(hex 24) ,end with ASCII<CR><LF>(十六進(jìn)制0D和OA).5個(gè)字符地址出現(xiàn)在ASCII $后.前兩個(gè)字符是talker ID(對(duì)GPS設(shè)備是GP),后3個(gè)字符是語句格式或是消息ID(上面已經(jīng)列出).NMEA消息不是固定長(zhǎng)度的.中間的域由逗號(hào)來分界.NMEA消息的最大長(zhǎng)度為79個(gè)字符.校驗(yàn)和由XORing 每個(gè)字符的8個(gè)數(shù)據(jù)比特得到,字符包括$和*或checksum(CS)之間
20、的,但是不包含$和*(CS).高低校驗(yàn)和半位元組以ASCII字符格式傳送.上面列出的輸出消息有Motorola NMEA格式消息控制.輸入消息符合NMEA規(guī)范,$PMOTG,*CS<CR><LF>.P字符標(biāo)志了消息為proprietary format.MOT標(biāo)志了生產(chǎn)設(shè)計(jì)廠商Motorola.G是GPS.在多于一個(gè)輸出消息在同一秒中被調(diào)度時(shí),GPS接收機(jī)將試圖按字節(jié)來發(fā)送每秒中的字節(jié)數(shù)。對(duì)于多輸出消息情況,如果下一個(gè)發(fā)送消息的滿足字節(jié)長(zhǎng)度目標(biāo),這個(gè)消息將被輸出。例如:如果有334個(gè)消息準(zhǔn)備輸出,用戶請(qǐng)求另外80個(gè)字節(jié)消息,那么414個(gè)字節(jié)將被實(shí)際的傳送。如果用戶請(qǐng)求另
21、外70個(gè)字節(jié)消息,那么將不產(chǎn)生輸出消息。對(duì)于發(fā)送消息的優(yōu)先級(jí)只是簡(jiǎn)單的字母排序。NMEA從基本的串行口輸入輸出,命令格式的詳細(xì)介紹請(qǐng)參考輸入/輸出部分。RTCM SC104格式概述RTCM差分GPS支持M12+和GT+Oncore2.X firmware 支持差分修正的RTCM SC-104格式。校驗(yàn)和的產(chǎn)生命令名稱:位置/狀態(tài)/數(shù)據(jù)輸出消息(8通道)Motorola 二進(jìn)制格式命令:EamC<CR><LF>在這個(gè)消息中,m是指響應(yīng)消息速率(例如.1=每秒一次,2=兩秒一次等等),C是校驗(yàn)和。在計(jì)算校驗(yàn)和時(shí),只用到Eam。只有在多比特中只含有一個(gè)1時(shí)異或操作產(chǎn)生1。設(shè)置
22、m為1,我們有把這個(gè)命令通過PC機(jī)控制軟件輸入:Ea01.在PC控制軟件中,ea01被看做是十六進(jìn)制,校驗(yàn)和被自動(dòng)計(jì)算.接收機(jī)將在每秒報(bào)告8個(gè)通道的位置/狀態(tài)/數(shù)據(jù)消息.這與輸入ps81控制命令等效.ASCII位置消息(Eq)的校驗(yàn)和以同樣的方式計(jì)算.8bit 校驗(yàn)和被轉(zhuǎn)換成十進(jìn)制值(0到255)進(jìn)行發(fā)送.NMEA校驗(yàn)和(可選)也以同樣的方式進(jìn)行計(jì)算.8bit標(biāo)志了在$和之間的字符.高4bit和低4bit校驗(yàn)和轉(zhuǎn)換成ASCII字符進(jìn)行發(fā)送.毫秒與度之間的轉(zhuǎn)化Oncore 接收機(jī)的基本輸出消息是位置/狀態(tài)/數(shù)據(jù)消息(Ea).在這個(gè)消息中,經(jīng)緯度以具有毫弧秒(milliarcsecond)來報(bào)告,
23、所以得進(jìn)行它與度之間的轉(zhuǎn)換.arcminute弧分 角度的單位,等于一度的1/60。 arcsecond弧秒 角度的單位,等于一度的1/3600(或者一弧分的1/60)。經(jīng)緯度一度有60個(gè)弧分或是3600個(gè)弧秒或3600 000個(gè)毫弧秒.為了把位置和負(fù)毫弧秒轉(zhuǎn)換成常規(guī)的度/分/秒格式,我們采用下列程序:1 把毫弧秒除以3600 0002 商的整數(shù)部分為度3 把余數(shù)乘上604 乘積的整數(shù)部分為分5 乘上積的余數(shù)部分606 乘積的整數(shù)部分為秒7 乘積的小數(shù)部分為分秒.Motorola 二進(jìn)制輸入輸出時(shí)間處理Oncore接收機(jī)M12+Timing Oncore
24、l 3V供電 使用時(shí)鐘粒度消息性能l本系統(tǒng)采用了G35_II LCD套件作為顯示器,G35_II的液晶屏尺寸為3.5英寸,分辨率為320×240,顏色為16灰度。S3C44B0X的PC口和PD口作為L(zhǎng)CD驅(qū)動(dòng)接口,使用4位象素灰度模式查找表和8位單掃描方式進(jìn)行顯示。本終端的顯示器以顯示數(shù)據(jù)發(fā)送接收情況和數(shù)據(jù)流量信息為主。3 S3C44B0X與M12模塊的接口程序設(shè)計(jì)接收終端使用S3C44B0X的COM0口向M12模塊發(fā)出控制指令和接收定位信息。M12模塊支持Motorola二進(jìn)制格式和NMEA0183格式兩種的數(shù)據(jù)輸
25、出模式。在Motorola二進(jìn)制模式下,M12以9 600 bs的速率輸出數(shù)據(jù)和接收指令;在NMEA0183,M12以4 800 bs的速率輸出數(shù)據(jù)和接收指令。默認(rèn)狀態(tài)下,M12模塊工作在Motorola二進(jìn)制模式下。為了獲取更高的數(shù)據(jù)傳輸速度,本研究使用M12模塊默認(rèn)的工作模式,即Motorola二進(jìn)制模式。在該模式下,串行數(shù)據(jù)傳輸格式為:8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn)和硬件流控制。S3C44B0X以通過向M12發(fā)送AT指令的方式對(duì)其進(jìn)行控制。根據(jù)Motorola GPS Products-Oncore UsersGuide所列舉的內(nèi)容,Motorola的AT IO指令一共有69條,其中
26、M12模塊所支持的指令有51條。利用這些指令可以很方便的對(duì)M12模塊進(jìn)行日期時(shí)間設(shè)定、自定義坐標(biāo)設(shè)定和定位信息讀取等操作。在接收終端中,只需要讀取M12模塊的定位信息,因此程序中只用到5l條指令中的1條指令:該指令用于控制M12模塊輸出定位信息。其中“”是IO指令的前綴;“Eq”是指令的關(guān)鍵字;“m”是M12模塊輸出(響應(yīng))信息模式選擇,其數(shù)值可以是0255之間的整數(shù),當(dāng)“m”為0時(shí),響應(yīng)信息只輸出一次,當(dāng)“m”為1時(shí),響應(yīng)信息每秒鐘輸出一次,當(dāng)“m”為2時(shí),響應(yīng)信息每2 s輸出一次,如此類推,當(dāng)“m”為255時(shí),響應(yīng)信息每255 s輸出一次;“C”是指令的校驗(yàn)和(Checksum)數(shù)據(jù);“&
27、lt;CR>”是回車符;“<LF>”是換行符。為了便于采集定位數(shù)據(jù),將“m”的數(shù)值設(shè)置為0,使M12模塊每接收一次指令就回復(fù)一次定位數(shù)據(jù)。M12模塊在默認(rèn)狀態(tài)下只能接受以Motorola二進(jìn)制形式輸入的指令。所謂的 Motorola二進(jìn)制形式是指將指令的前綴、關(guān)鍵字和后綴(回車和換行)變換成相應(yīng)的ASCII碼后,加上模式“m”與校驗(yàn)和“C”組合成的二進(jìn)制指令代碼。本研究中所用到的“EqmC”指令格式轉(zhuǎn)換如下:其中,校驗(yàn)和“C”是指“E”、“q”和“m”三個(gè)的校驗(yàn)和,即0x45、0x71和0x00之間的校驗(yàn)和(將0x45和0x71按位異或的結(jié)果再和0x00進(jìn)行按位異或),結(jié)果為
28、0x34。輸入指令時(shí),只需要按照9 600 bs、8位數(shù)據(jù)位、1位停止位、無奇偶校驗(yàn)和硬件流控制的串口格式,將0x40、0x40、0x45、0x71、0x00、0x34、0x0D和0x0A八個(gè)數(shù)從M12模塊的串口連續(xù)輸入進(jìn)去即可,M12模塊在接收到其可識(shí)別的指令之后會(huì)在1 s之內(nèi)做出響應(yīng)。在接收和識(shí)別指令“EqmC”之后,M12模塊在接收到正常的GPS衛(wèi)星信號(hào)時(shí)會(huì)以相同的串口數(shù)據(jù)格式和速率輸出以下格式的定位信息:該信息是按照ASCII碼的形式輸出的,每段信息均以逗號(hào)相隔。根據(jù)Motorola GPS Products-Oncore UsersGuide對(duì)于該信息的解釋,該信息按照所描述的內(nèi)容可
29、以拆分成7大部分,其拆分示意格式如下:其中,第1部分信息為日期信息?!癿m”是指月,數(shù)值為0112;“dd”是指日,數(shù)值為0131;“yy”是指年,數(shù)值為9818。第2部分信息是UTC(Universal Coordinated Time) 時(shí)間信息。其中,“hh”為時(shí),數(shù)值為0023;“mh”為分,數(shù)值為0059;“s”是秒,數(shù)值為0060。第3部分信息是緯度信息。其中,“dd”是度,數(shù)值為0090;“mm.mmmm”是分,數(shù)值為00.000 059.999 9;n為方向,他有兩個(gè)取值,一是“N”,代表北緯,二是“S”代表南緯。第4部分信息是經(jīng)度信息。其中,“ddd”是度,數(shù)值為000180
30、;“mm.mmmm”是分,數(shù)值為00.000 059.999 9;w為方向,他有兩個(gè)取值,一是“W”,代表西經(jīng),二是“E”,代表東經(jīng)。第5部分信息是海拔高度。其中,“s”是符號(hào),有“+”和“-”兩個(gè)取值;“hhhh.h”是以米為單位的高度數(shù)據(jù)。海拔高度信息的數(shù)值范圍為:-1 000.0+18 000.0。第6部分信息是速度信息。其中“sss.s”是以節(jié)為單位的速度數(shù)據(jù),其數(shù)值為000.0999.9;“hhh.h”為以度為單位前進(jìn)方位角數(shù)據(jù),其數(shù)值為000.0359.9。第7部分是接收終端的狀態(tài)信息。其中,“m”是定位工作模式信息,取值為0或1,0代表單機(jī)模式(Autono-mous),1代表差
31、分模式(Differential);“t”是定位類型信息,取值為03,0代表無定位,1代表2D定位,2代表3D定位,3代表廣播模式;“dd.d”是幾何因子信息,取值為00.099.9;“nn”使用中的衛(wèi)星數(shù)目,數(shù)值為0037;“rrrr”為參考站識(shí)別碼,數(shù)值為0 0001 023;“aa”以秒為單位的差分?jǐn)?shù)據(jù)時(shí)間,數(shù)值為0060;“CC”為校驗(yàn)和。GPS接收終端只需要M12模塊提供經(jīng)緯度位置,所以需要通過程序提取上述的7大部分信息中第3和第4部分信息。S3C44B0X與M12模塊接口的COM0初始化代碼如下:S3C4480X與M12的接口程序流程如圖4所示。S3C44B0X首先做出判斷,確認(rèn)其
32、收到的是預(yù)期的定位信息,然后將定位信息(經(jīng)緯度數(shù)據(jù))截取下來,整理成可供顯示數(shù)據(jù)信息后在LCD上顯示經(jīng)緯度數(shù)據(jù),最后將串口的接收緩沖區(qū)清空,以免下次接收信息時(shí)出錯(cuò)。由于M12模塊在1 s之內(nèi)只能響應(yīng)一條指令,所以接收終端的數(shù)據(jù)信息最快1 s更新一次。4 結(jié) 語本文講述了一個(gè)基于S3C44B0X和M12模塊的GPS數(shù)據(jù)接收終端的設(shè)計(jì)。通過在華南農(nóng)業(yè)大學(xué)工程學(xué)院土槽實(shí)驗(yàn)室的GPS基準(zhǔn)點(diǎn)(坐標(biāo)為:東經(jīng)113°20538 541,北緯23°09581 834)的靜態(tài)定位實(shí)驗(yàn)測(cè)定(持續(xù)進(jìn)行了約50 min,采集到3 125組經(jīng)緯度數(shù)據(jù),靜態(tài)定位數(shù)據(jù)分布如圖5所示),M12模塊的單擊靜
33、態(tài)定位精度為<7.81 m,符合其用戶手冊(cè)上所標(biāo)的無SA政策下<25 m的精度范圍。接收終端運(yùn)行穩(wěn)定,定位信息每1 s更新一次,可作為對(duì)精度要求不高的民用地理定位。/* ProjMain.c*/#include <in.h>#include <ioLib.h>#include <stdio.h>#include <taskLib.h>#include <sioLib.h>#include <string.h>int g_nCOM1_FD,com2_Fd;/*1.小端法(Little-Endian)就是低位字節(jié)排
34、放在內(nèi)存的低地址端即該值的起始地址,高位字節(jié)排放在內(nèi)存的高地址端。 2.大端法(Big-Endian)就是高位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,低位字節(jié)排放在內(nèi)存的高地址端。3.網(wǎng)絡(luò)上的數(shù)據(jù)流是字節(jié)流,對(duì)于一個(gè)多字節(jié)數(shù)值,在進(jìn)行網(wǎng)絡(luò)傳輸?shù)臅r(shí)候,先傳遞哪個(gè)字節(jié)?也就是說,當(dāng)接收端收到第一個(gè)字節(jié)的時(shí)候,它是將這個(gè)字節(jié)作為高位還是低位來處理呢? 網(wǎng)絡(luò)字節(jié)序定義:收到的第一個(gè)字節(jié)被當(dāng)作高位看待,這就要求發(fā)送端發(fā)送的第一個(gè)字節(jié)應(yīng)當(dāng)是高位。而在發(fā)送端發(fā)送數(shù)據(jù)時(shí),發(fā)送的第一個(gè)字節(jié)是該數(shù)字在內(nèi)存中起始地址對(duì)應(yīng)的字節(jié)??梢姸嘧止?jié)數(shù)值在發(fā)送前,在內(nèi)存中數(shù)值應(yīng)該以大端法存放。 網(wǎng)絡(luò)字節(jié)序說是大端字節(jié)序。 *
35、/網(wǎng)絡(luò)字節(jié)序到主機(jī)字節(jié)序(大端到小端) 4個(gè)字節(jié)#define ntohl(x)(x) & 0x000000ff) << 24) | (x) & 0x0000ff00) << 8) | (x) & 0x00ff0000) >> 8) | (x) & 0xff000000) >> 24)/主機(jī)字節(jié)序到網(wǎng)絡(luò)字節(jié)序(小端到大端),4個(gè)字節(jié)#define htonl(x)(x) & 0x000000ff) << 24) | (x) & 0x0000ff00) << 8) | (x)
36、& 0x00ff0000) >> 8) | (x) & 0xff000000) >> 24)/網(wǎng)絡(luò)字節(jié)序到主機(jī)字節(jié)序(大端到小端), 2個(gè)字節(jié) #define ntohs(x)(x) & 0x00ff) << 8) | (x) & 0xff00) >> 8)/主機(jī)字節(jié)序到網(wǎng)絡(luò)字節(jié)序(小端到大端),2個(gè)字節(jié)#define htons(x)(x) & 0x00ff) << 8) | (x) & 0xff00) >> 8)/HA數(shù)據(jù)返回?cái)?shù)據(jù)typedef struct tagM12
37、_HaUCHAR ucMonth; /月 UCHAR ucDay; /日USHORT unYear; /年UCHAR ucHour; /時(shí)UCHAR ucMinute; /分UCHAR ucSecond; /秒U(xiǎn)LONG ulMillisecond; /毫秒 -11個(gè)字節(jié)float fLatitude; /緯度, 南北方向, 緯度(mas) -324,000,000.324,000,000 (-90°.90°)float fLongitude; /經(jīng)度,東西方向, 經(jīng)度(mas) -648,000,000.648,000,000 (-180°.180°)
38、float fGPSHight; /GPS高度(cm)-100,000.1,800,000 (-1000.00.18,000.00m)float fAltitude; /海拔高度(cm)-100,000.1,800,000 (-1000.00.18,000.00m)float fLatitudeUnfilter; /緯度, 南北方向, 緯度(mas) -324,000,000.324,000,000 (-90°.90°)float fLongitudeUnfilter; /經(jīng)度,東西方向, 經(jīng)度(mas) -648,000,000.648,000,000 (-180
39、6;.180°)float fGPSHightUnfilter; /GPS高度(cm)-100,000.1,800,000 (-1000.00.18,000.00m)float fAltitudeUnfilter; /海拔高度(cm)-100,000.1,800,000 (-1000.00.18,000.00m) -32個(gè)字節(jié) USHORT un3DSpeed; /3D速度(cm/s) 0.51,400(0.514.00m/s)USHORT un2DSpeed; /2D速度(cm/s) 0.51,400(0.514.00m/s)USHORT un2DHeading; /2D方向 0.
40、3,599 (0.0.359.9度) (正北為0,分辨率為0.1)USHORT unDOP; /幾何因子, dd 當(dāng)前DOP (0.1分辨率) 0.999 (0.0至99.9 DOP)UCHAR ucVisibleSatellites; /可見衛(wèi)星數(shù) 0.12UCHAR ucTrackedSatellites; / 跟蹤衛(wèi)星數(shù) 0.8 -10個(gè)UCHAR ucSkip101;M12_Ha;/*/*Function : 解析M12發(fā)送過來的命令/*Input : pszBuf,要解析的字符串, nBufLen,要解析的字符串長(zhǎng)度/*Output : 無/*RetValue : 無/*Author
41、 : qcj_21 at 2010-10-18 18:14:35/*/void ParseCommand(char *pszBuf,int nBufLen)BOOL bFlag = TRUE;int i = 0;int j = 0;char szArray1024 = 0; M12_Ha Ha;if( (pszBuf0='') && (pszBuf1='') )/處理Bb命令if( (pszBuf2='B') && (pszBuf3='b') )i = 0;while(i < nBufLen)
42、if( (*(pszBuf+i+2)='') && (*(pszBuf+i+2+1)='') )memcpy(szArray, pszBuf+2, i-2);memmove(pszBuf, pszBuf+i, nBufLen-i);elsei+;continue;memcpy(szArray, pszBuf+2, i-2);printf("Bb: i = %d, Begin-n", i);for(j = 0; j < i; j+)printf("%c,", pszBufj);printf("
43、n");/printf("Bb: End-nn");/處理Hb命令if( (pszBuf2='H') && (pszBuf3='b') )i = 0;while(i < nBufLen)if( (*(pszBuf+i+2)='') && (*(pszBuf+i+2+1)='') )memcpy(szArray, pszBuf+2, i-2);memmove(pszBuf, pszBuf+i, nBufLen-i);elsei+;continue;memcpy(sz
44、Array, pszBuf+2, i-2);printf("Hb: i = %d, Begin-n", i);for(j = 0; j < i; j+)printf("%c,", pszBufj);printf("n");/printf("Hb: End-nn");/處理Ha命令if( (pszBuf2='H') && (pszBuf3='a') )i = 0;while(i < nBufLen)if( (*(pszBuf+i+2)='')
45、 && (*(pszBuf+i+2+1)='') )memcpy(szArray, pszBuf+2, i-2);memmove(pszBuf, pszBuf+i, nBufLen-i);elsei+;continue;memcpy(szArray, pszBuf+2, i-2);memset(&Ha, 0, sizeof(M12_Ha);memcpy(&Ha, szArray+2, sizeof(M12_Ha);printf("Ha, %d-%d-%ld, i=%dn", Ha.ucMonth, Ha.ucDay, ntoh
46、s(Ha.unYear), i);/處理Eq命令if( (pszBuf2='E') && (pszBuf3='q') )i = 0;while(i < nBufLen)if( (*(pszBuf+i+2)='') && (*(pszBuf+i+2+1)='') )memcpy(szArray, pszBuf+2, i-2);memmove(pszBuf, pszBuf+i, nBufLen-i);elsei+;continue;memcpy(szArray, pszBuf+2, i-2);pr
47、intf("Eq: i = %d, Begin-n", i);for(j = 0; j < i; j+)printf("%c,", pszBufj);printf("n");/printf("Eq: End-nn");int Rx1()int nReadCharsNum = 0; /get num Chars available to readchar chReadChar = 0;char szRecvBuf512 = 0;int i = 0;int nRecvLen = 0;M12_Ha Ha;UCHAR
48、 ucArray4 = 0;memset(&Ha, 0, sizeof(M12_Ha);while(1)i=0;taskDelay(500);ioctl(g_nCOM1_FD, FIONREAD, (int)&nReadCharsNum); /* 判斷com2接收數(shù)據(jù)緩沖區(qū)是否有數(shù)據(jù)到來 */nRecvLen = nReadCharsNum;if(nReadCharsNum > 0)while(nReadCharsNum > 0)read(g_nCOM1_FD, &chReadChar, 1);nReadCharsNum-;szRecvBufi+ = chR
49、eadChar;szRecvBufi = '0'printf("RecvLen=%d, Data:n", nRecvLen);for(i = 0; i < nRecvLen; i+)printf("%x,", szRecvBufi);printf("n");memcpy(char *)&Ha, szRecvBuf+4, sizeof(M12_Ha);Reverse(UCHAR *)&Ha.fLatitude, 4, ucArray);memcpy(&Ha.fLatitude, ucArra
50、y, 4);printf("%d-%d-%d %d-%d-%d, Lat=%f, Long=%f n", Ha.ucMonth, Ha.ucDay, ntohs(Ha.unYear), Ha.ucHour, Ha.ucMinute, Ha.ucSecond, Ha.fLatitude, Ha.fLongitude);/Ha:位置/狀態(tài)/數(shù)據(jù)(12通道)void aa()int nBufLen = 0;int i = 0;UCHAR szHexBuf128 = 0;UCHAR szBuf = "Ha0" /每發(fā)送一次,M12返回一次數(shù)據(jù) /40 40 45
51、 71 00 34 0D 0AULONG ucCheckSum = 0; nBufLen = strlen(char *)szBuf);sprintf(char *)szHexBuf, (char *)szBuf, "%x"); /將字符串轉(zhuǎn)化為十六進(jìn)制字符串輸出/計(jì)算校驗(yàn)和,比如:"Eq2",校驗(yàn)和只計(jì)算E q 2,ucCheckSum = szHexBuf2 szHexBuf3; /比如szHexBuf2為E,szHexBuf3為qfor(i = 4; i < nBufLen; i+)szHexBufi = atoi( (char *)(szB
52、uf+i) );ucCheckSum = ucCheckSum atoi( (char *)(szBuf+i) );szHexBufnBufLen+0 = ucCheckSum; /校驗(yàn)和szHexBufnBufLen+1 = 0x0D; /回車szHexBufnBufLen+2 = 0x0A; /換行write(g_nCOM1_FD, szHexBuf, nBufLen+3);printf("Ha, SendLen=%d, Data: ", nBufLen+3);for(i = 0; i < nBufLen+3; i+)printf("%x,",
53、 szHexBufi);printf("n");/"Cf"復(fù)位命令,設(shè)置為出廠狀態(tài)void cf()int nBufLen = 0;int i = 0;UCHAR szHexBuf128 = 0;UCHAR szBuf = "Cf" /每發(fā)送一次,M12返回一次數(shù)據(jù) /40 40 45 71 00 34 0D 0AULONG ucCheckSum = 0; nBufLen = strlen(char *)szBuf);sprintf(char *)szHexBuf, (char *)szBuf, "%x"); /將
54、字符串轉(zhuǎn)化為十六進(jìn)制字符串輸出/計(jì)算校驗(yàn)和,比如:"Eq2",校驗(yàn)和只計(jì)算E q 2,ucCheckSum = szHexBuf2 szHexBuf3; /比如szHexBuf2為E,szHexBuf3為qfor(i = 4; i < nBufLen; i+)szHexBufi = atoi( (char *)(szBuf+i) );ucCheckSum = ucCheckSum atoi( (char *)(szBuf+i) );szHexBufnBufLen+0 = ucCheckSum; /校驗(yàn)和szHexBufnBufLen+1 = 0x0D; /回車szHexBufnBufLen+2 = 0x0A; /換行write(g_nCOM1_FD, szHexBuf, nBufLen+3);/Gb: 時(shí)間信息(時(shí)間初始化設(shè)置)GbmdyyhmsshmC<CR><LF>void gb()int nBufLen = 0;int i = 0;UCHAR szHexBuf128 = 0;UCHAR szBuf128 = "Gb" UCHAR ucCheckSum = 0;USHORT unTemp = htons(2010);szBuf4 = 10; /月s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)本科一年級(jí)(歷史學(xué))中國(guó)近現(xiàn)代史綜合試題及答案
- 腦卒中基層醫(yī)生培訓(xùn)課件
- 分鏡頭腳本培訓(xùn)課件
- 青少年皮膚日常護(hù)理產(chǎn)品選擇
- 行政機(jī)關(guān)禮儀培訓(xùn)課件
- 客戶關(guān)系管理系統(tǒng)用戶信息收集表
- 胎兒電子監(jiān)護(hù)在家庭監(jiān)護(hù)中的潛力
- 2026年心血管內(nèi)科學(xué)正副高級(jí)職稱考試題庫(kù)及答案
- 部隊(duì)新聞報(bào)道員培訓(xùn)課件
- 娛樂場(chǎng)所安全管理規(guī)范與操作指南
- 禮品卡使用規(guī)范與制度
- 2026年蘇州高博軟件技術(shù)職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試備考試題帶答案解析
- 2026年廈門市外事辦公室翻譯崗位遴選專業(yè)能力測(cè)試含答案
- 2026年張家界航空工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試參考題庫(kù)附答案詳解
- 北師大版(2024)三年級(jí)數(shù)學(xué)上冊(cè) 期末專項(xiàng)復(fù)習(xí)一-數(shù)與代數(shù)(含答案)
- 校長(zhǎng)在期末教師大會(huì)上精彩發(fā)言:2026先善待自己再照亮學(xué)生的路
- 2026屆1月浙江鎮(zhèn)海中學(xué)首考模擬英語試卷
- 重慶酒吧市場(chǎng)行業(yè)分析報(bào)告
- DB42∕T 2390-2025 城市更新規(guī)劃編制技術(shù)規(guī)程
- 《企業(yè)會(huì)計(jì)準(zhǔn)則應(yīng)用指南(2025年版)》
- 請(qǐng)做飯人員合同協(xié)議
評(píng)論
0/150
提交評(píng)論