當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]介紹了采用GPSOEM接收板的精確授時(shí)功能來實(shí)現(xiàn)精密時(shí)鐘系統(tǒng)的設(shè)計(jì)思路和方法,給出基本的硬件電路和軟件流程并基于ATmega128單片機(jī)上實(shí)現(xiàn)GPS時(shí)鐘的提取并在LCD上顯示。

摘  要:介紹了采用GPSOEM接收板的精確授時(shí)功能來實(shí)現(xiàn)精密時(shí)鐘系統(tǒng)的設(shè)計(jì)思路和方法,給出基本的硬件電路和軟件流程并基于ATmega128單片機(jī)上實(shí)現(xiàn)GPS時(shí)鐘的提取并在LCD上顯示。
關(guān)鍵詞:GPS  ATmega128  高精度時(shí)鐘  液晶顯示

1.引言

GPS(Global Positioning System)全球定位系統(tǒng)是利用美國(guó)的24顆GPS地球衛(wèi)星所發(fā)射的信號(hào)而建立的導(dǎo)航、定位、授時(shí)的系統(tǒng)。目前,GPS系統(tǒng)廣泛地應(yīng)用在導(dǎo)航、大地測(cè)量、精確授時(shí)、車輛定位及防盜等領(lǐng)域。

GPS授時(shí)功能是其主要功能之一。時(shí)間信號(hào)的準(zhǔn)確與否,直接關(guān)系到人們的日常生活、工業(yè)生產(chǎn)和社會(huì)發(fā)展。GPS時(shí)鐘為滿足精密定位和導(dǎo)航的需要,在系統(tǒng)設(shè)計(jì)與實(shí)驗(yàn)之初就建立了自己專用的時(shí)間系統(tǒng),該系統(tǒng)簡(jiǎn)寫為GPST,它由GPS主控站的高精度原子鐘守時(shí)和授時(shí)。由于計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)、通信技術(shù)、GPS定位技術(shù)等相關(guān)技術(shù)的發(fā)展,以及GPS OEM板價(jià)格的降低,GPS時(shí)鐘已經(jīng)具備了為各個(gè)應(yīng)用領(lǐng)域提供高精度授時(shí)的可能性。

本文旨在通過利用GPS所提供的精確授時(shí)功能,采用單片機(jī)技術(shù),設(shè)計(jì)適合于需要精確授時(shí)的高精度時(shí)鐘系統(tǒng),并通過LCD進(jìn)行顯示。

2.GPS授時(shí)原理

GPS時(shí)間系統(tǒng)是由GPS系統(tǒng)定義和使用的時(shí)間系統(tǒng)。衛(wèi)星定位系統(tǒng)以時(shí)間為基本觀測(cè)量,由于衛(wèi)星高速飛行,因此要求時(shí)間系統(tǒng)必須十分精確,否則就會(huì)帶來很大的距離誤差。GPS時(shí)間系統(tǒng)以原子頻率標(biāo)準(zhǔn)作為時(shí)間基準(zhǔn),以1980年1月6日0時(shí)作為起點(diǎn)。它不存在跳秒,它的時(shí)間與協(xié)調(diào)時(shí)秒以下的差異可以保持在100微妙內(nèi),并定期公布誤差,在星歷文件中發(fā)布的衛(wèi)星鐘差就是相對(duì)GPS時(shí)間系統(tǒng)的鐘差。

GPS 授時(shí)的基本原理是: 衛(wèi)星不間斷地發(fā)送自身的星歷參數(shù)和時(shí)間信息, 用戶接收到這些信息后,經(jīng)過計(jì)算求出接收機(jī)的三維位置、三維方向以及運(yùn)動(dòng)速度和時(shí)間信息。這里只需要 GPS 授時(shí)系統(tǒng)的時(shí)間信息。若設(shè)(x,y,z)為接收機(jī)的位置, (xn,yn,zn)為已知衛(wèi)星的位置, 則解下列方程就可以得 x,y,z到和標(biāo)準(zhǔn)時(shí)間 T:

(x-x1)2+(y-y1)2+ (z-z1)2 =C2(T+ T-T1 - 1)

(x-x2)2+(y-y2)2+ (z-z2)2 =C2(T+ T-T2 - 2)

(x-x3)2+(y-y3)2+ (z-z3)2 =C2(T+ T-T3 - 3)

(x-x4)2+(y-y4)2+ (z-z4)2 =C2(T+ T-T4 - 4)

其中△T為用戶時(shí)鐘與 GPS主鐘標(biāo)準(zhǔn)時(shí)間的時(shí)差;Tn 為衛(wèi)星 n 所發(fā)射信號(hào)的發(fā)射時(shí)間; 為衛(wèi)星 n 上的原子鐘與GPS主鐘標(biāo)準(zhǔn)時(shí)間的時(shí)差[1]。

3.本系統(tǒng)構(gòu)成及硬件軟件實(shí)現(xiàn)

3.1 本設(shè)計(jì)采用GPS板介紹

本設(shè)計(jì)采用THALES-NACIGATION公司生產(chǎn)的A12 GPSOEM接收板,它采用了先進(jìn)半導(dǎo)體設(shè)計(jì)手段,具有尺寸小、功耗低、性能穩(wěn)定、性價(jià)比高等優(yōu)良特性。利用它可以方便、快速地開發(fā)出各種GPS應(yīng)用系統(tǒng)。其主要性能指標(biāo)如下:

接收通道——12通道并行接收,可同時(shí)跟蹤12顆衛(wèi)星;

授時(shí)精度——小于400ns,無累計(jì)誤差;

數(shù)據(jù)更新時(shí)間——1s;

體積和重量——39mm×60mm×10mm,約重40g;

數(shù)據(jù)輸出格式——NMEA-0183 v2.0;RTCM-sc104 v2.0;

環(huán)境工作溫度——-30℃~+80℃;

正常工作參數(shù)——電壓5(1±0.05)V;電流70mA。

圖1  GPSOEM板A12

GPSOEM板提供硬件接口如表1所示:

管腳

信號(hào)類型

功能

1

VCC

電源

2

V_ANT

天線電源接口

 3

V_BACK

備用電源

4

GND

5

RTCM

接收信號(hào)口B

6

RXD

接收信號(hào)口A

7

TXD

發(fā)送信號(hào)接口A

8

1PPS

1個(gè)脈沖輸出/秒

表 1   GPS輸出接口定義

其輸出數(shù)據(jù)邏輯電平為 TTL 電平,這樣能夠很方便地與單片機(jī)相連。格式位默認(rèn)為:波特率4800,8個(gè)數(shù)據(jù)位,1個(gè)停止位,無奇偶校驗(yàn)位。GPS輸出數(shù)據(jù)采用NME-0813格式輸出,數(shù)據(jù)代碼采用ASCII碼字符,本設(shè)計(jì)采用NME-0813中RMC格式,下面是GPS輸出的一組數(shù)據(jù):$GPRMC,140736.00,A,3800.9040,N,11226.5364,E,00.0,355.6,121106,04,W,D*3B,其中140736.00代表14時(shí)07分36.00秒,121106代表06年11月12日,根據(jù)系統(tǒng)需要,我們需要提取這個(gè)數(shù)據(jù)。GPS所得時(shí)間為格林尼治時(shí)間(零時(shí)區(qū)),要得到北京時(shí)間(東八區(qū))一定要將提取到的世界時(shí)加上 8 h 才是北京時(shí)間。

3.2 系統(tǒng)組成及其實(shí)現(xiàn)

系統(tǒng)選用ATmega128單片機(jī),它有豐富的外部資源,利用它的USART1與GPS接收機(jī)通信:

   

其總體硬件連接如圖2所示。

圖2  GPS時(shí)鐘實(shí)現(xiàn)的結(jié)構(gòu)

       液晶顯示器采用含控制器S1D15G14的3510i彩色液晶顯示,S1D15G14附帶有LCD電源驅(qū)動(dòng)電路的LCD驅(qū)動(dòng)器,可在單片上實(shí)現(xiàn)彩色顯示,能顯示4096色,分辨率是98x67。它與單片機(jī)ATmega128采用串口連接。

主程序提取GPS數(shù)據(jù)采用查詢方式[2],

圖3   程序流程圖

GPS時(shí)鐘在ATmega128上軟件實(shí)現(xiàn)[3] (其中LCD函數(shù)為顯示函數(shù)):

              if(USART1_Receive() == '$')            // USART1_Receive()為串口接收函數(shù)

              {  while((gps_data_buff[counter ++] = USART1_Receive()) != '*'); 

              data = 1;  j = 0; i = 0 ;             //接收數(shù)據(jù)放入gps_data_buff[ ]數(shù)組當(dāng)中

                     for (i=0;i<69;i++)  

                     {if(gps_data_buff[i] == ',')

                            {     data ++ ; j = 0;

                            }

                            switch(data)

                            {     case 1: break;

                                   case 2: time[j ++] = gps_data_buff[i + 1];time[j] = '