時(shí)間同步在工程應(yīng)用、科學(xué)研究、民生等領(lǐng)域都有廣泛的應(yīng)用。時(shí)間是生活和工程中最重要的參數(shù)之一,有的時(shí)候相距幾米的不同電子設(shè)備需要協(xié)同動(dòng)作,需要同步時(shí)鐘;某些時(shí)候相距幾千公里的兩臺(tái)設(shè)備需要進(jìn)行科學(xué)測(cè)量需要同步時(shí)鐘;有的時(shí)候掛在不同的教室的時(shí)鐘需要精確到100毫秒以?xún)?nèi),為了能夠統(tǒng)一考試時(shí)間。目前來(lái)說(shuō)可以通過(guò)無(wú)線電波、衛(wèi)星、網(wǎng)絡(luò)實(shí)現(xiàn)時(shí)間的同步。雖然網(wǎng)絡(luò)時(shí)間同步精度有限,但是網(wǎng)絡(luò)時(shí)間同步是最簡(jiǎn)單和最經(jīng)濟(jì)的方式。
網(wǎng)絡(luò)時(shí)間同步一般通過(guò)NTP(Network Timer Protocol)協(xié)議來(lái)完成時(shí)間的獲取,互聯(lián)網(wǎng)上有多個(gè)NTP時(shí)間服務(wù)器,可以選定一個(gè)服務(wù)器。NTP模塊通過(guò)向NTP時(shí)間服務(wù)器獲得時(shí)間來(lái)讓自己的時(shí)間和時(shí)間服務(wù)器同步,NTP的協(xié)議并沒(méi)有那么簡(jiǎn)單,除了網(wǎng)絡(luò)協(xié)議本身復(fù)雜外,它還需要計(jì)算路徑傳輸?shù)臅r(shí)間差。ZLSN2043S模塊已經(jīng)可以自動(dòng)實(shí)現(xiàn)NTP協(xié)議并同步時(shí)鐘,用戶如果需要獲得NTP模塊的內(nèi)部時(shí)間可以通過(guò)單片機(jī)串口發(fā)送串口指令即可獲得。
用此方案用戶不同的單片機(jī)(單片機(jī)1、單片機(jī)2、單片機(jī)3)之間的時(shí)間相對(duì)誤差可以控制在2ms以?xún)?nèi),基本可以滿足普通時(shí)間同步的需求。
卓嵐提供的時(shí)間同步產(chǎn)品,從NTP芯片到成品設(shè)備,種類(lèi)繁多。
類(lèi)型 | 型號(hào) |
---|---|
NTP單芯片(集成Phy) | ZLAN1043 ? |
以太網(wǎng)NTP時(shí)間模塊 | ZLSN2043S ? |
Wifi NTP時(shí)間模塊 | ZLSN7046T ? |
NTP時(shí)間設(shè)備(RS232/485接口) | ZLAN5143 ? |
注意ZLAN1043的固件版本要在1.578及以上,ZLAN7144需要在1.490及以上。
以上已經(jīng)介紹了NTP時(shí)間同步的網(wǎng)絡(luò)和硬件結(jié)構(gòu)圖,下面主要介紹軟件方面如何配置NTP模塊,以及單片機(jī)如何通過(guò)串口獲得當(dāng)前的時(shí)間。
配置文件用于設(shè)置使用互聯(lián)網(wǎng)上哪個(gè)時(shí)間服務(wù)器。在計(jì)算機(jī)上新建一個(gè)空的目錄ntp_web目錄,然后新建一個(gè)空的ntp.txt文件,內(nèi)容如下:
[NTP]
NTP_SERVER1=a1.a2.a3.a4
NTP_SERVER2=b1.b2.b3.b4
NTP_SERVER3=c1.c2.c3.c4
RE_ARUIRE_TIME=0
名字 | 含義 |
---|---|
NTP_SERVER1 | 第一個(gè)時(shí)間服務(wù)器的IP或者域名(最多為29個(gè)字符)。最多有3個(gè)服務(wù)器可以設(shè)置,但是必須從NTP_SERVER1開(kāi)始寫(xiě),如果只有一個(gè)就寫(xiě)NTP_SERVER1,只有2個(gè)就寫(xiě)NTP_SERVER1和NTP_SERVER2。 |
RE_ARUIRE_TIME | 如果已經(jīng)成功獲得時(shí)間,那么每隔多少毫秒重新獲得時(shí)間。范圍是0~2147483647。如果設(shè)置為0,則表示永遠(yuǎn)不再重新獲得時(shí)間。不重新獲得時(shí)間時(shí),系統(tǒng)靠CPU內(nèi)部的時(shí)鐘來(lái)計(jì)算時(shí)間。 建議對(duì)于精度比較高的地方10分鐘重新讓NTP獲得時(shí)間,即ntp.txt中的RE_ARUIRE_TIME=60000。如果采用通過(guò)串口發(fā)送指令獲得時(shí)間的用法,RE_ARUIRE_TIME可以設(shè)置為0。 |
保存好配置文件后,通過(guò)設(shè)備編輯→固件和配置界面下載這個(gè)目錄,下載后重啟設(shè)備生效。
只有下載了ntp.txt的模塊才會(huì)啟用NTP功能,否則不具有NTP功能。
以對(duì)應(yīng)的波特率(通過(guò)zlvircom可以通過(guò)網(wǎng)口設(shè)置設(shè)備波特率,默認(rèn)為115200bps)向模塊的串口發(fā)送固定的指令:ed f2 a3 56 ca db 91 84 b0 d7 92 02 0a 51 4a。則模塊會(huì)返回10個(gè)字節(jié)的數(shù)據(jù),如果沒(méi)有返回或者返回的數(shù)據(jù)全部是0,說(shuō)明時(shí)間未獲得或者其它錯(cuò)誤。
返回時(shí)間格式為:年-月-日-時(shí)-分-秒-毫秒-星期。其中年和毫秒占用2字節(jié),V1.580以上版本毫秒才有意義。例如返回?cái)?shù)據(jù):07 e3 05 04 0f 24 29 00 00 06,則表示2019年5月4日15點(diǎn)35分41秒,00 00 為毫秒數(shù)。06為星期六的意思。發(fā)送指令后,一般返回時(shí)指令會(huì)在100ms內(nèi)返回給串口。
注意使用通過(guò)串口獲得時(shí)間比主動(dòng)向串口發(fā)送時(shí)間具有更高的精度,不同模塊的時(shí)間誤差在2ms時(shí)間內(nèi)。另外如果需要精確到絕對(duì)時(shí)間,需要減去串口按照指定波特率發(fā)送以上10個(gè)字節(jié)的時(shí)間。
在上述ntp.txt目錄下新建一個(gè)httpd.txt的文件,httpd.txt內(nèi)容請(qǐng)咨詢(xún)卓嵐工程師。保存后,和ntp.txt文件一起使用下載工具下載到設(shè)備內(nèi)部。這樣設(shè)備會(huì)每隔1秒鐘向串口主動(dòng)輸出時(shí)間。輸出的日期格式為字符串“2019-05-13 22:23:31”,不包含字符串末尾的0。其中年4位、其它都是2位。日期和時(shí)間中間用空格分開(kāi)。
同時(shí)也支持毫秒的輸出格式為:“2019-05-13 22:23:31.123”。其中123為毫秒。請(qǐng)盡量使用高波特率輸出時(shí)間。