摘 要: 針對(duì)實(shí)際應(yīng)用中高精度時(shí)間同步的需求,需要設(shè)計(jì)一種支持多種授時(shí)格式的授時(shí)服務(wù)器,,提出了一種基于UM-220T北斗模塊,、ARM處理器和CPLD的時(shí)間統(tǒng)一服務(wù)器。該服務(wù)器能夠?qū)崿F(xiàn)網(wǎng)絡(luò)時(shí)間協(xié)議(NTP)和IRIG-B碼協(xié)議,。給出了實(shí)現(xiàn)過程和測(cè)試結(jié)果,。
關(guān)鍵詞: 北斗;NTP,;IRIG-B,;ARM
現(xiàn)代高技術(shù)戰(zhàn)爭(zhēng)需要高精度的時(shí)間同步。普通的獨(dú)立時(shí)鐘通過晶振提供信號(hào),,晶振的頻率精度和穩(wěn)定性都比較差,,一般約為10-4~10-5,每天的累計(jì)誤差可達(dá)十幾秒,,需要定期調(diào)整[1],。對(duì)于聯(lián)網(wǎng)的主機(jī),使用網(wǎng)絡(luò)時(shí)間協(xié)議(NTP)對(duì)時(shí),,精度高,、使用方便[1-2]。但由于武器裝備的特殊性,,不方便接入互聯(lián)網(wǎng),,同時(shí)很多裝備需要進(jìn)行機(jī)動(dòng),無法接入專用網(wǎng)絡(luò),,為滿足時(shí)間同步要求,,可在系統(tǒng)內(nèi)架設(shè)專用的時(shí)間同步服務(wù)器,為系統(tǒng)內(nèi)的眾多主機(jī)提供授時(shí)服務(wù),。時(shí)間同步服務(wù)器需要高精度的時(shí)鐘源,,導(dǎo)航衛(wèi)星授時(shí)精度高、獲取容易,、易機(jī)動(dòng)[3],,滿足授時(shí)要求。本文基于實(shí)際應(yīng)用需求,,構(gòu)建以我國自主導(dǎo)航系統(tǒng)——北斗系統(tǒng)為源的時(shí)間統(tǒng)一服務(wù)器,,能進(jìn)行系統(tǒng)內(nèi)主機(jī)的網(wǎng)絡(luò)對(duì)時(shí),同時(shí)還可提供IRIG-B碼用于專用設(shè)備對(duì)時(shí),。
1 NTP和IRIG-B授時(shí)協(xié)議
網(wǎng)絡(luò)時(shí)間協(xié)議NTP(Network Time Protocol)是互聯(lián)網(wǎng)普遍使用的時(shí)間同步協(xié)議,,在全世界各地都分布有NTP服務(wù)器,,對(duì)于聯(lián)網(wǎng)的計(jì)算機(jī)可以通過NTP協(xié)議進(jìn)行授時(shí),授時(shí)精度對(duì)于廣域網(wǎng)可以達(dá)到10 ms,,對(duì)于局域網(wǎng)可以達(dá)到250μs[1],。
NTP協(xié)議使用時(shí)間戳來進(jìn)行對(duì)時(shí),對(duì)于Server/Client模式,,設(shè)客戶端發(fā)出請(qǐng)求的時(shí)間戳為T1,,服務(wù)端接收到的時(shí)間戳為T2,服務(wù)端響應(yīng)時(shí)間戳為T3,,客戶端接收到的時(shí)間戳為T4,,設(shè)客戶端與服務(wù)器之間的往返時(shí)間相同,,則服務(wù)器與客戶端的時(shí)間偏差θ=[(T2-T1)-(T4-T3)]/2,,網(wǎng)絡(luò)延遲σ=[(T2-T1)+(T4-T3)]/2??蛻舳送ㄟ^時(shí)間偏差和網(wǎng)絡(luò)延遲來調(diào)整本地時(shí)間,。
IRIG-B簡(jiǎn)稱B碼,是IRIG串行碼的一種,,碼元速率為100 pps,,通過碼元的寬度來區(qū)分0、1和參考標(biāo)志,。0,、1的寬度分別為2 ms和5 ms,參考標(biāo)志為8 ms,。B碼發(fā)送時(shí),、分、秒,、天和年,,使用BCD碼進(jìn)行發(fā)送[4]。IRIG-B可以達(dá)到比較高的精度,,參考文獻(xiàn)[5-6]中采用GPS的1 pps信號(hào)進(jìn)行同步的IRIG-B碼發(fā)生器的前沿精度略微低于1 pps信號(hào),。
2 系統(tǒng)結(jié)構(gòu)
系統(tǒng)框圖如圖1所示,主要包括北斗模塊,、ARM系統(tǒng),、CPLD和網(wǎng)絡(luò)接口4個(gè)部分。北斗模塊接收北斗衛(wèi)星信號(hào),,輸出1 pps和NMEA0183導(dǎo)航授時(shí)電文,。網(wǎng)絡(luò)接口進(jìn)行NTP數(shù)據(jù)包的收發(fā),同時(shí)也是系統(tǒng)的控制終端,。IRIG-B發(fā)生器通過VHDL在CPLD內(nèi)部實(shí)現(xiàn),,與ARM系統(tǒng)通過SPI總線相連,,接收ARM系統(tǒng)提供的時(shí)鐘信號(hào),在1 pps信號(hào)的同步下生成B碼,。ARM系統(tǒng)是本系統(tǒng)的核心,,運(yùn)行Linux操作系統(tǒng),在此基礎(chǔ)上運(yùn)行功能所需的應(yīng)用程序,,包括NTP對(duì)時(shí)程序和IRIG-B碼發(fā)生器控制程序,。
3 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)北斗模塊選用UM220-T,該模塊是和芯星通推出的一款專用于電信,、電力,、軍事的高精度授時(shí)模塊,具有GPS/BD2雙模模式,,輸出兼容NMEA0183協(xié)議,,在NMEA0183的基礎(chǔ)上增加了北斗專用語句。其1PPS信號(hào)的標(biāo)準(zhǔn)差1?滓=20 ns,,滿足本應(yīng)用要求,。
系統(tǒng)硬件設(shè)計(jì)部分主要包括原理圖和PCB的設(shè)計(jì)。PCB設(shè)計(jì)的主要注意事項(xiàng)包括模擬,、數(shù)字電源的隔離,、差分線的等長和阻抗匹配。硬件實(shí)物圖如圖2所示,。
4 軟件設(shè)計(jì)
系統(tǒng)的主要功能需通過軟件實(shí)現(xiàn),,軟件設(shè)計(jì)內(nèi)容主要包括Linux系統(tǒng)移植、NTP服務(wù)器程序的移植,、B碼發(fā)生器控制應(yīng)用程序的編寫和IRIG-B碼發(fā)生器的VHDL實(shí)現(xiàn),。
4.1 NTP服務(wù)器軟件移植
ntp.org提供和維護(hù)一個(gè)開源的NTP程序,該源程序功能全面,、運(yùn)行穩(wěn)定,,得到了廣泛的應(yīng)用。上文中提到北斗模塊采用兼容的NMEA0183協(xié)議,,增加了北斗專用語句,。原生NTP程序包不支持北斗專用語句,需對(duì)其源代碼進(jìn)行修改才能使用,。
在Linux系統(tǒng)下從www.ntp.org下載源代碼到本地工作目錄,,在工作目錄下新建src目錄,將源代碼解壓到src目錄下,,打開src/ntp-x.x.x/ntpd/refclock_nmea.c文件,,將文件中的如下代碼:
strncmp(cp,"$GPRMC",6)==0…strncmp(cp,"$GPGGA",6)==0…strncmp(cp,"$GPGLL",6)==0…strncmp(cp,"$GPXXX",6)==0
修改為:
strncmp(cp,"$GPRMC",6)==0||strncmp(cp,"$GNRMC",6)==0||strncmp(cp,"$BDRMC",6)==0)
strncmp(cp,"$GPGGA",6)==0||strncmp(cp,"$GNGGA",6)==0||strncmp(cp,"$BDGGA",6)==0)
strncmp(cp,"$GPGLL",6)==0||strncmp(cp,"$GNGLL",6)==0||strncmp(cp,"$BDGLL",6)==0)
strncmp(cp,"$GPXXX",6)==0||strncmp(cp,"$GNXXX",6)==0||strncmp(cp,"$BDXXX",6)==0)
NMEA0138協(xié)議通過每一行的頭來區(qū)分該行數(shù)據(jù)。對(duì)NTP源程序修改以增加北斗專用語句頭,,"$GNRMC",、"$GNGGA",、"$GNGLL"、"$GNXXX"表示現(xiàn)在是北斗/GPS雙模,,"$BDRMC",、"$BDGGA"、"$BDGLL",、"$BD-
XXX"表示現(xiàn)在是北斗單模,。對(duì)上述修改文件保存退出。在工作目錄下新建編譯腳本,,命名為run,,內(nèi)容為:
export CC=arm-linux
./configure --host=arm-linux --enable-NMEA
make
保存退出。腳本指定編譯器為arm-linux-gcc,,用于ARM平臺(tái)的交叉編譯,,同時(shí)打開NMEA接受支持,用于接收北斗模塊信號(hào),。運(yùn)行腳本,,編譯得到目標(biāo)文件,包括3個(gè)文件夾bin,、lib、share,,把得到的文件拷貝至ARM文件系統(tǒng)相應(yīng)的文件夾內(nèi),。NTP服務(wù)器通過文件/etc/ntp.conf進(jìn)行配置,配置文件通過server:127:127:20.u 打開NMEA0138作為時(shí)鐘源,,u是NMEA的參數(shù)設(shè)置,,包括串口的波特率和使用NMEA的哪條語句作為時(shí)間碼,具體配置參照參考文獻(xiàn)[7],。
測(cè)試使用一臺(tái)客戶機(jī)進(jìn)行,,測(cè)試結(jié)果如圖3所示,圖中第1列為服務(wù)器列表,,使用國際標(biāo)準(zhǔn)NTP服務(wù)器作為對(duì)比,,其中GPS_NMEA(0)為本設(shè)計(jì)的嵌入式時(shí)間同步服務(wù)器,bogon為客戶端本地時(shí)鐘,,圖中加星號(hào)的為系統(tǒng)自動(dòng)默認(rèn)選擇的服務(wù)器,,從圖中可以看出本服務(wù)器性能理想,滿足授時(shí)需求,。
4.2 IRIG-B碼發(fā)生器設(shè)計(jì)
為滿足系統(tǒng)內(nèi)專用設(shè)備的需求,,設(shè)計(jì)IRIG-B碼發(fā)生器,把北斗時(shí)間碼轉(zhuǎn)換成IRIG-B碼,。IRIG-B碼直接采用北斗模塊的1 pps信號(hào)作為系統(tǒng)同步時(shí)鐘,,授時(shí)精度與北斗模塊相同,。
IRIG-B碼發(fā)生器系統(tǒng)框圖如圖4所示,系統(tǒng)由100 MHz時(shí)鐘輸入作為本地時(shí)鐘,,通過內(nèi)部分頻模塊產(chǎn)生100 Hz和1 kHz的頻率信號(hào),,IRIG-B碼時(shí)序如圖5所示,其中碼元速率為1 pps,,故分頻產(chǎn)生100 Hz信號(hào)作為碼元時(shí)鐘,,脈沖寬度分別為8 ms、2 ms和5 ms,,分頻產(chǎn)生1 kHz用于控制脈沖寬度,。發(fā)生器通過SPI接口與ARM系統(tǒng)相連,接受ARM系統(tǒng)控制,。
ARM系統(tǒng)通過NTP程序使本地時(shí)鐘同步于北斗時(shí)鐘,,另一個(gè)進(jìn)程運(yùn)行IRIG-B碼發(fā)生器控制程序,在1PPS信號(hào)同步下取得本地時(shí)鐘,,轉(zhuǎn)換成IRIG-B碼格式,,通過SPI接口發(fā)送到CPLD內(nèi)部,程序流程圖如圖6所示,。
4.3 IRIG-B碼實(shí)測(cè)結(jié)果
IRIG-B碼發(fā)生器的測(cè)試結(jié)果如圖7所示,,從圖中可以看出,B碼輸出嚴(yán)格同步于1 pps信號(hào),,時(shí)序符合IRIG-B碼規(guī)范,。
采用ARM+CPLD體系構(gòu)建時(shí)間統(tǒng)一服務(wù)器,采用Linux和成熟穩(wěn)定的開源程序,,降低了系統(tǒng)的開發(fā)難度,,提高了系統(tǒng)的可靠性,采用CPLD硬件實(shí)現(xiàn)IRIG-B碼發(fā)生器,,時(shí)序精度高,,滿足高精度IRIG-B碼授時(shí)要求。目前本裝置已應(yīng)用到實(shí)際項(xiàng)目中,。
參考文獻(xiàn)
[1] 黃沛芳.基于NTP的高精度時(shí)鐘同步系統(tǒng)實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,,2009,35(7):122-127.
[2] 宋妍,,朱爽.基于NTP的網(wǎng)絡(luò)時(shí)間服務(wù)系統(tǒng)的研究[J].計(jì)算機(jī)工程與應(yīng)用,,2003,39(36):147-149.
[3] 王文瑜.基于北斗衛(wèi)星的授時(shí)系統(tǒng)研制[D].北京:北京郵電大學(xué),,2008.
[4] Standard I.200-04-IRIG serial time code formats[S]. Timing Committee.Telecommunications and Timing Group. Range Commanders Council,,US Army White Sands Missile Range,NM.
[5] 姚軍.利用GPS實(shí)現(xiàn)高精度IRIG-B碼的設(shè)計(jì)[J].遙測(cè)遙控,,1997,,18(2):33-37.
[6] 高林,,胡永輝,侯雷.基于ARM+FPGA的IRIG-B碼產(chǎn)生器的研制[J].時(shí)間頻率學(xué)報(bào),,2012,,35(4):218-227.
[7] POGO,KELLY W.Generic NMEA GPS receiver[EB/OL].[2013-10-29].http://www.eecis.udel.edu/~mills/ntp/html/drivers/driver20.html.