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