1. 程式人生 > >Ethercat解析(十一)之分佈時鐘

Ethercat解析(十一)之分佈時鐘

這裡寫圖片描述

驅動程式碼中,同步時鐘涉及到如下幾個概念:
⑴ 本地時鐘:每一個支援DC的從站都有一個納秒級解析度的本地時鐘暫存器。

每次從機上電,則暫存器從0開始計時,這就意味著不同的從機因為上電開機的時間不同而本地時鐘也會有差異,所以需要對從機的本地時鐘對比參考時鐘進行偏移補償。再者,從機的時鐘一般由時鐘單元為參考,所以每個從機的時鐘頻率也會有極小的誤差,但是由於這種極小的誤差在長時間的工作中會累積,所以想要完全的時鐘同步,也要對這種時鐘漂移進行補償。

⑵ 應用時間:應用層為匯流排提供的基礎時間。
用途:
① 配置從站的時鐘偏移;
② 為從站的同步脈衝發生器設定開始時間;
③ 為主站時鐘同步參考時鐘;
偏移補償:對於偏移補償,每個從站都有偏移補償暫存器,偏移補償值加上從站本地時鐘的初始值就是參考時鐘的值,數學表示式為:
這裡寫圖片描述


漂移補償:所謂的漂移誤差就是由於DC從站使用各自本地時鐘源,它們的計時週期存在一定的漂移,這將導致時鐘執行不同步。因為支援DC從站的一個特殊機制使得漂移補償成為可能,這個機制就是當有一個寫系統時間暫存器操作的時候,內部時間控制環路(internal time control loop)去比較寫入時間(減去傳輸延遲)和當前的系統時間,比較的誤差將作為時間控制暫存器的輸入,依次來增加或減緩本地時鐘,從而消除漂移誤差。

傳輸延遲:乙太網幀在由從站到從站的傳輸過程中需要一些時間,假如不作處理,傳輸的這個時間將會不斷的積累,最終可能達到毫秒級誤差,因此我們必須在漂移補償的時候將傳輸延遲考慮在內。支援DC的EtherCAT從站提供了一個測量傳輸延遲的方案:對於從站的四個埠都配有一個接收時間暫存器,大部分當資料幀到達每個從站後,從站都會分別儲存每個埠接收到的乙太網幀的時刻。主站通過讀取記錄的這個時間值來計算EtherCAT幀在從站之間和從站到參考時鐘的傳輸延遲並把從站到參考時鐘的傳輸延遲寫入傳輸延遲暫存器中,通過這種方法,漂移補償可以達到納秒級同步。

檢測同步:支援DC的從站提供了32位系統時間暫存器(地址為0x092c),該暫存器以符號幅度碼(sign-and-magnitude coding)的形式存放著本地時間與參考時鐘之間的差值(納秒級解析度)。在linux中,可以使用命令列工具檢視該暫存器的值,具體操作為:

$watch -n0 "ethercat reg_read -p4 -tsm32 0x92c"

同步訊號:同步時鐘僅僅是總線上同步事件的一個必要條件,每個支援DC從站有兩個可程式設計同步事件,事件觸發的同步訊號以備供應用層呼叫。每個同步事件可根據應用要求既可以只觸發一次也可以迴圈觸發。程式設計同步訊號是一種所謂的設定”AssignActivate“字和設定同步訊號的週期和轉變時間的問題。”AssignActivate“字的設定方式跟具體的從站有關,而且必須從XML檔案中對描述從站對”AssignActivate“字的設定,在典型的同步訊號的配置可以找到”OpModes“。