01 同步方案
激光雷達與GPS時間同步主要有三種方案,即PPS+GPRMC、PTP、gPTP
PPS+GPRMC
GNSS輸出兩條信息,一條是時間周期為1s的同步脈沖信號PPS,脈沖寬度5ms~100ms;一條是通過標準串口輸出GPRMC標準的時間同步報文。
同步脈沖前沿時刻與GPRMC報文的發送在同一時刻,誤差為ns級別,誤差可以忽略。GPRMC是一條包含UTC時間(精確到秒),經緯度定位數據的標準格式報文。
PPS秒脈沖為物理電平輸出,接收及處理PPS信號的時間在ns級別,依舊可以忽略。但GPRMC數據一般通過波特率9600的串口發送,發送、接收、處理時間tx在ms級別,是時間同步的關鍵。
以下是使用PPS+GPRMC進行時間同步的原理。
(1)設備收到PPS秒脈沖信號后,將內部以晶振為時鐘源的系統時間里的毫秒及以下時間清零,并由此開始計算毫秒時間。
(2)當收到GPRMC數據后,提取報文里的時、分、秒、年、月、日UTC時間。
(3)將收到秒脈沖到解析出GPRMC中UTC時間所用的時間tx,與UTC整秒時間相加,同步給系統時間,至此已完成一次時間同步。下一秒再進行相同的過程,每秒準確校準一次。
聰明的人可能已經恍然大悟,激光雷達需要進行時間同步,就做兩根線接上這兩個物理接口就妥了,這種方式是可以的,也是很多廠商在用的方案,但是PPS+GPRMC存在如下問題。
(1)PPS是一個低功率的脈沖電平信號,驅動電流少的只有0.5mA,多的也就20mA,帶幾個同步節點(激光雷達和其他需要時間同步的節點),十幾個就很困難了。
(2)PPS是無屏蔽的單線脈沖信號,十幾根PPS線穿梭在車內,極易受到車內惡劣電磁環境的干擾,屆時根本無法區分出是干擾脈沖還是同步脈沖。
(3)GPRMC通過RS232串口發送同步報文,RS232是一種1對1的全雙工通信形式,也可以通過主從形式實現1對幾數據傳輸。但對十幾,實屬罕見,只能通過試驗驗證到底可不可行。但至少線束工程師是打死不愿答應的。
(4)當時鐘源丟失的時候,所有需要時間同步的設備都一下子沒有了主心骨,每個小弟都可以自立門戶,沒有二當家的及時站出來,主持大局。這對功能安全要求極高的自動駕駛系統來說,根本無法接受。
PTP
因此基于單純的PPS和GPRMC實現整個自動駕駛系統的時間同步,具有理論可行性,但并不具有實際可操作性。
而基于網絡的高精度時間同步協議PTP(Precision Time Protocol,1588 V2),同步精度可以達到亞微秒級。這對于主干網絡為以太網的全域架構來說,簡直是萬事具備,只欠各域控制器的硬件PHY芯片支持了。
PTP是一種主從式的時間同步系統,采用硬件時間戳,因此可以大幅減少軟件處理時間。同時PTP可運行在L2層(mac層)和L4層(UDP層),運行在L2層網絡時,直接在MAC層進行報文解析,不用經過四層UDP協議棧,從而大幅減少協議棧駐留時間,進一步提高時間同步精度,對于自動駕駛系統來說非常友善。
全域架構下的一種架構方案如下圖。
設備中運行PTP協議的網絡端口稱為PTP端口,PTP主端口用來發布時間,PTP從端口用來接收時間。同時定義了三種時鐘節點,邊界時鐘節點(BC,Boundary Clock)、普通時鐘節點(OC,Ordinary Clock)和透明時鐘節點(TC,Transparent clock)。
(1)邊界時鐘節點擁有多個PTP端口,其中一個用來同步上游設備時間,其余端口用來向下游設備發送時間。當邊界時鐘節點的上游時間同步設備是GNSS接收機時,此時的邊界時鐘節點就是一個主時鐘節點(最優時鐘)。
(2)普通時鐘節點只有一個PTP端口,用來同步上游時鐘節點的時間。
(3)透明時鐘,人如其名,具有多個PTP端口,收到什么時間,轉發什么時間,不進行協議解析,內部不參與時間同步。PTP通過在主從設備之間交互同步報文,并記錄下報文發送時間,從而計算網絡傳輸延遲和主從設備間時鐘的偏差。
PTP定義了四條同步報文:Sync、Follow_Up、Delay_Req、Delay_Resp,精確同步過程如下。
(1)PTP主端口向從端口發送Sync報文,同步記錄下Sync發送的時間t1。從端口收到Sync報文后,記錄下收到的時間t2。
(2)緊接著主端口將t1時間放到Follow_Up報文發送給從端口,從端口收到此報文后就可以解析出t1,并由此得到第一個方程式:t1+網絡延時+時鐘偏差=t2。
(3)從端口向主端口發送Delay_Req報文,同步記錄下Delay_Req發送的時間t3。主端口收到報文后,記錄下收到的時間t4。
(4)緊接著主端口將t4時間放到Delay_Resp報文發送給從端口,從端口收到此報文后就可以解析出t4,并由此得到第一個方程式:t3+網絡延時-時鐘偏差=t4。兩個未知數,兩個方程組,應用初中數學知識可以解出:網絡延時=[(t2-t1)+(t4-t1)]/2,時鐘偏差=[(t2-t1)-(t4-t3)]/2。
gPTP
gPTP(generalized Precision Time Protocol,廣義精確時間同步協議),基于PTP(IEEE 1588v2)協議進行了一系列優化,形成了更具有針對性的時間同步機制,可以實現μs級的同步精度。
gPTP定義有兩種設備類型,Time-aware-end Station和Time-aware Bridge。每種設備都具有本地時鐘,本地時鐘都是通過晶振的振蕩周期進行度量的,設備內部硬件計數器負責對振蕩周期進行計數。設備中用來發布時間同步報文的網絡端口稱為主端口,用來接收時間同步報文的端口稱為從端口。
(1)Time-aware-end Station,既可以作為主時鐘,也可以作為從時鐘。
(2)Time-aware Bridge,既可以作為主時鐘,也可以作為橋接設備,類似交換機。橋接類設備在收到gPTP報文后,會請報文搓個澡,然后再送出去。而報文在橋接設備內搓澡消耗的時間,稱為駐留時間。gPTP要求橋接設備必須具有測量駐留時間的能力。
下圖展示了一個簡單的gPTP系統,包含一個時鐘源、1個主時鐘,2個橋接設備,4個從時鐘。主時鐘是系統內的時間基準,一般具有更高精度的本地時鐘,同時需要能夠被高精度準時鐘源授時。主時鐘在系統內可以動態分配,也可以預先分配(對于車載固定拓撲應用場景,多采用預先分配的原則)。
gPTP中規定的主時鐘動態分配機制為BMCA(Best Master Clock Algorithm,最佳主時鐘選擇算法)。系統上電喚醒之后,系統所有設備都可以通過發送一條報文來參與主時鐘競選,報文中含有各自設備的時鐘信息。每一個參選設備都會比較自己的時鐘信息和其它設備的時鐘信息,并判斷是否具有優勢,如果不具有,則退出競選,直到綜合能力最強的武林盟主誕生。
02 同步過程
gPTP定義有兩類報文,事件類型報文(包括Sync、Pdelay_Req、Pdelay_Resp三條)和一般類型報文(包括Follow_UP、Pdelay_Resp_Follow_UP二條)。gPTP定義設備工作在網絡七層模型中的第二層數據鏈路層的MAC(Media Acess Control,媒介訪問控制)子層。
當設備MAC層接收或發送事件類型報文時,會觸發對硬件計數器進行采樣,從而獲得時鐘振蕩周期計數值,結合時鐘振蕩頻率及基準時間,可獲得此時的時間戳。而一般類型報文僅用來攜帶信息,不會觸發內部硬件計數器的采樣操作。
時鐘偏差測量
gPTP定義的五條報文中,Sync和Follow_UP為一組報文,周期發送,主要用來測量時鐘偏差。Sync由主端口發送,在報文離開主端口MAC層時,觸發主端口記錄此時的時間戳t1。從端口MAC層收到Sync報文后會記錄此時的時間戳t2。隨后,主端口將t1值附到Follow_UP報文里發送給從端口。
如果沒有網絡傳輸延遲或延遲、可以忽略,則從端口將本地時鐘值加上時鐘偏差(t1-t2的值)就完成時間同步,也就沒有后面的碎碎念了。但是對于μs級時間同步精度的gPTP來說,傳輸延遲顯然無法視若不見。
傳輸延遲測量
gPTP采用P2P(Peer to Peer)的方法來測量傳輸延遲。在P2P方法中,測量的是相鄰設備間的傳輸延遲,報文不允許跨設備傳輸,這也就要求gPTP網絡內的所有設備都需要支持gPTP功能。同時定義一組獨立的報文專門負責傳輸延遲測量,分別為周期發送的Pdelay_Req、Pdelay_Resp和Pdelay_Resp_Follow_UP。
從端口首先發送Pdelay_Req報文,標志傳輸延遲測量的開始,在報文離開從端口MAC層時,觸發從端口記錄此時的時間戳t3。主端口MAC層收到Pdelay_Req報文后會記錄此時的時間戳t4,隨后,主端口通過Pdelay_Resp報文將值t4發送給從端口,同時在Pdelay_Resp報文離開主端口的MAC層時,觸發主端口記錄此時的時間戳t5,從端口MAC層收到Pdelay_Resp報文后記錄此時的時間戳t6。隨后,相同的套路,主端口通過Pdelay_Resp_Follow_Up報文將值t5發送給從端口。至此,一次傳輸延遲測量過程已經結束。在假設路徑傳輸延遲是對稱的前提下,可由如下公式計算相鄰設備間的傳輸延遲。
頻率同步
上文的傳輸延遲測量是基于從端口與主端口的時鐘振蕩頻率一致的前提下得到的。現在我們考慮一下如果主從端口時鐘振蕩頻率不一致的時候,會導致什么靈異事件發生。假設從端口的時鐘振蕩頻率是25MHz,則一個時鐘振蕩周期是40ns。主端口的時鐘振蕩頻率是100MHz,則一個時鐘時鐘振蕩周期是10ns。
假設在一次傳輸延遲測量過程中,從端口在t6和t3時刻記錄的振蕩周期差值若為200個振蕩周期。由于主端口的時鐘頻率是從端口的4倍,因此從端口收到t5和t4時刻的振蕩周期差值大概800個。以從端口的40ns一個時鐘振蕩周期為基準進行計算的話,傳輸延遲則為-24μs([200x40-800x40]/2)。傳輸不僅沒有延遲,反而提前知道了,從端口大仙無疑了。
除了主從端口時鐘振蕩頻率的先天不一致,溫度、老化等原因也會導致晶振振蕩頻率的不穩定。為了解決頻率不同步的問題,gPTP通過頻率同步來實現從端口對主端口的時鐘振蕩頻率同步。
頻率同步復用傳輸延遲測量過程的Pdelay_Resp和Pdelay_Resp_Follow_UP報文。通過采用兩組答復,最終可以獲得t5,t6,t9,t10的值,由下面公式可得主從端口的頻率比。
主從端口頻率同步的情況下,頻率比等于1。如果大于1,說明主端口走得快,如果小于1,說明主端口走的慢。從端口根據頻率比的值,調整自己的時基,從而獲得正確的時間戳。