本項目主要是在信邁科技TI OMAPL138 C6748 DSP上移植SOEM。主要工作有作業系統和硬體層的适配。
下面先簡要介紹下概念。
EtherCAT
是一個以以太網為基礎的開放架構的現場總線系統,
EtherCAT
資料部分封裝在以太網幀中,主站發送以太網幀在以太網上傳輸。 EtherCAT 隻需要實體層,資料鍊路層和應用層,
OSI
七層協定體系結構中 的另外四層都不是必需的。EtherCAT
幀結構也可以封裝在
IP/UDP
資料報中,進而上傳到從站的應用層由從站控制器的硬體進行處理[16]
。如圖
2.1
所示。
傳輸延遲測量算法的基本步驟如下:
a .主站廣播一個測量幀,所謂測量幀,就是寫端口
時間寄存器任意值即
可。向每一個從站寫 0
到寄存器
DCTIME0
中。
b .當這個測量幀達到每一個從站的端口
n(n=0,1,2,3
)以及
ESC
處理器的時
候,就會在相應的時間戳寄存器中記下到達時的本地時鐘數值。
c .主站讀取各從站端口本地時間,并依據網絡拓撲分析,計算出每一個從
站的傳輸延遲時間。
d .主站最後将計算出來的結果寫入到相應從站的系統時間延遲寄存器中
ECT_REG_DCSYSDELAY 。
如前面論述,如果所有從站使用相同的時鐘源,或者各個從站的時鐘源頻
率嚴格一緻,則就不存在漂移補償了。為了盡力消除漂移對同步的影響,則必
須進行漂移補償。而時間控制環就是用來進行漂移補償的。時間控制環模型如
圖 2.14
所示:
時間控制環是一個負回報回路。每一個從站都有一個這樣的時間控制環。
圖中的 i 表示從站
i
,即給出的是從站
i
的時間控制環。其基本原理是将本地系
統時間與參考時鐘的系統時間進行比較。根據比較結果,補償單元或者加快本
地時鐘,或者減慢本地時鐘。
為了保證時間控制環的的運作, EtherCAT 引入了如下幾個機制:
a .從站提供一個系統時間寄存器 ECT_REG_DCSYSTIME
。該寄存器的寫
通路有特殊的含義:将參考時鐘的時間數值寫入到這個寄存器,則該從站 ESC
會将寫入的數值與該從站自己的系統時間副本進行比較,将比較結果送入補償
單元,進而調整該 ESC 從站的本地時鐘快慢,使得本地系統時間與參考系統時
間最終趨于一緻。
b .一讀多寫指令: FRMW
或
ARMW
指令,用于時間控制環的漂移校正。
指定參考時鐘從站的配置位址或者實體序号,對 ECT_REG_DCSYSTIME 寄存
器執行一讀多寫操作。
該指令幀經過參考時鐘從站 時,位址命中,則執行讀
ECT_REG_DCSYSTIME 寄存器。讀的結果,即是該指令幀達到該參考時鐘從站
處理器時的系統時間,即 T systime(1)
= T
ref
,假設參考時鐘從站是
1
。此後,每當經
過一個從站,使用讀取到的 T ref
數值,寫入到該從站的 ECT_REG_DCSYSTEM
寄存器。具體就是将此刻本地系統時間與參考時鐘進行比較: T systime(i)
- T
ref
,由
于當該指令幀達到從站 i ,需要耗時
T
delay(i)
,是以,與參考時間
T
ref
對等的該從
站的系統時間應該為: T systime(i)
- T
delay(i)
。是以,準确的比較公式為:
Δ t = [T systime(i)
- T
delay(i)
] - T
ref
(
2.6
)
T delay(i) :第
i
個從站的傳輸延遲,
T
ref
:參考時鐘系統時間
參考圖 2.14 ,這個正是時間控制環的前端輸入。計算結果送給補償單元。
補償單元根據Δ t 的數值來調整本地時鐘的快慢:
Δ t=0 ,則說明從站
i
與參考時鐘完全一緻,就不用調節了。
Δ t>0 ,說明從站
i
本地時鐘走的太快,則将其調慢一點。
Δ t<0 ,說明從站
i
本地時鐘走的太慢,則将其調快一點。
時鐘調快或者調慢,無法通過硬體來實作,因為硬體時鐘源已經固定,所
以,須通過軟體邏輯來完成。比如,假設每 10ns 中斷一次,則每中斷一次,本
地時間加 10 。那麼現在根據Δ
t
,如果Δ
t>0
,則本地時間
+9
;如果Δ
t<0
,則本
地時間 +11 ,這樣就相當于調整了本地時間的快慢。經過補償單元調節後,其輸
出是調整後的 T local(i)
,該值與
T
offset(i)
之和,就是本地系統時間副本
T
systime(i)
。
經過一次補償後,從站 i 的系統時間副本更加接近于參考時鐘。因為一個
MW 指令幀,所有從站都經過一次補償。是以,相當于全網段的時間同步往前
精确一步。顯然,補償不能夠一次完成,應該隔一段時間就需要全網段補償一
次。 EtherCAT 建議兩種漂移補償方式:靜态補償和動态補償。
靜态補償在系統初始化的時候進行。當測量并配置完畢各個從站的系統時
間偏差,以及傳輸延遲後,則可以啟動靜态補償。一次執行 N 次的一讀多寫指
令。讀取參考時鐘從站的系統時間,将參考時鐘寫入後續從站中,如 Sanyo
MOTIONR 就希望執行 15000
的漂移補償
[41]
。
動态漂移補償在系統正常運作的時候,由于漂移因素的存在,必須定期執
行漂移補償,否則,随着時間的推移,各個從站的系統時鐘必定向不同步的方
向邁進。但是在系統正常運作時,就不能如在初始化階段那樣任性了,尤其是
像多軸機器人複合運動的時候,随時都在執行過程資料的更新。在這樣的情況
下,漂移補償必須周期性進行。
一個簡單的方式就是将漂移補償指令子封包嵌入到過程資料的發送幀中。
因為過程資料是周期執行的,是以兩者有很高的契合度。本文實驗正是使用這
樣的方式:每當發送一個過程資料幀,則附加一個漂移補償子封包。在執行周
期性過程資料的同時做漂移補償操作。
過程資料的發送周期非常短,如 1ms 甚至更低,是以相當于每
1ms
執行一