時間同步在工程應用、科學研究、民生等領域都有廣泛的應用。時間是生活和工程中最重要的參數之一,有的時候相距幾米的不同電子設備需要協同動作,需要同步時鐘;某些時候相距幾千公里的兩臺設備需要進行科學測量需要同步時鐘;有的時候掛在不同的教室的時鐘需要精確到100毫秒以內,為了能夠統一考試時間。目前來說可以通過無線電波、衛星、網絡實現時間的同步。雖然網絡時間同步精度有限,但是網絡時間同步是最簡單和最經濟的方式。

網絡時間同步一般通過NTP(Network Timer Protocol)協議來完成時間的獲取,互聯網上有多個NTP時間服務器,可以選定一個服務器。NTP模塊通過向NTP時間服務器獲得時間來讓自己的時間和時間服務器同步,NTP的協議并沒有那么簡單,除了網絡協議本身復雜外,它還需要計算路徑傳輸的時間差。ZLSN2043S模塊已經可以自動實現NTP協議并同步時鐘,用戶如果需要獲得NTP模塊的內部時間可以通過單片機串口發送串口指令即可獲得。
用此方案用戶不同的單片機(單片機1、單片機2、單片機3)之間的時間相對誤差可以控制在2ms以內,基本可以滿足普通時間同步的需求。
卓嵐提供的時間同步產品,從NTP芯片到成品設備,種類繁多。
| 類型 | 型號 |
|---|---|
| NTP單芯片(集成Phy) | ZLAN1043 ? |
| 以太網NTP時間模塊 | ZLSN2043S ? |
| Wifi NTP時間模塊 | ZLSN7046T ? |
| NTP時間設備(RS232/485接口) | ZLAN5143 ? |
注意ZLAN1043的固件版本要在1.578及以上,ZLAN7144需要在1.490及以上。
以上已經介紹了NTP時間同步的網絡和硬件結構圖,下面主要介紹軟件方面如何配置NTP模塊,以及單片機如何通過串口獲得當前的時間。
配置文件用于設置使用互聯網上哪個時間服務器。在計算機上新建一個空的目錄ntp_web目錄,然后新建一個空的ntp.txt文件,內容如下:
[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 | 第一個時間服務器的IP或者域名(最多為29個字符)。最多有3個服務器可以設置,但是必須從NTP_SERVER1開始寫,如果只有一個就寫NTP_SERVER1,只有2個就寫NTP_SERVER1和NTP_SERVER2。 |
| RE_ARUIRE_TIME | 如果已經成功獲得時間,那么每隔多少毫秒重新獲得時間。范圍是0~2147483647。如果設置為0,則表示永遠不再重新獲得時間。不重新獲得時間時,系統靠CPU內部的時鐘來計算時間。 建議對于精度比較高的地方10分鐘重新讓NTP獲得時間,即ntp.txt中的RE_ARUIRE_TIME=60000。如果采用通過串口發送指令獲得時間的用法,RE_ARUIRE_TIME可以設置為0。 |
保存好配置文件后,通過設備編輯→固件和配置界面下載這個目錄,下載后重啟設備生效。

只有下載了ntp.txt的模塊才會啟用NTP功能,否則不具有NTP功能。
以對應的波特率(通過zlvircom可以通過網口設置設備波特率,默認為115200bps)向模塊的串口發送固定的指令:ed f2 a3 56 ca db 91 84 b0 d7 92 02 0a 51 4a。則模塊會返回10個字節的數據,如果沒有返回或者返回的數據全部是0,說明時間未獲得或者其它錯誤。

返回時間格式為:年-月-日-時-分-秒-毫秒-星期。其中年和毫秒占用2字節,V1.580以上版本毫秒才有意義。例如返回數據:07 e3 05 04 0f 24 29 00 00 06,則表示2019年5月4日15點35分41秒,00 00 為毫秒數。06為星期六的意思。發送指令后,一般返回時指令會在100ms內返回給串口。
注意使用通過串口獲得時間比主動向串口發送時間具有更高的精度,不同模塊的時間誤差在2ms時間內。另外如果需要精確到絕對時間,需要減去串口按照指定波特率發送以上10個字節的時間。
在上述ntp.txt目錄下新建一個httpd.txt的文件,httpd.txt內容請咨詢卓嵐工程師。保存后,和ntp.txt文件一起使用下載工具下載到設備內部。這樣設備會每隔1秒鐘向串口主動輸出時間。輸出的日期格式為字符串“2019-05-13 22:23:31”,不包含字符串末尾的0。其中年4位、其它都是2位。日期和時間中間用空格分開。
同時也支持毫秒的輸出格式為:“2019-05-13 22:23:31.123”。其中123為毫秒。請盡量使用高波特率輸出時間。
