,,,,
(1.南京航空航天大學機電學院,江蘇 南京 210016;2.上海航天控制技術研究所,上海 201109)
隨著工控的發展,伺服驅動器進入高精度時代,多軸控制的應用越來越廣泛,如數控機床[1]、多自由度機器人[2]、汽車系統[3]和3D打印[4]等。多軸控制實時性與同步性問題是影響運動控制精度的重要因素,因此有必要對其進行深入的研究。
針對上述問題,國內外學者們做了相關研究。熊晶洲等[5]采用虛擬主軸法,在虛擬主軸耦合下,實現了位移/載荷比例條件下的四軸同步運動,利用雙向加載試驗系統進行了試驗驗證。Jeong等[6]引入最大誤差比較方法,使得位置同步誤差最小,實驗結果表明該方法有效提高了四軸控制系統同步性。孫瑞芳等[7]在此基礎上提出偏差耦合同步控制策略,通過擴展交叉耦合方案,將系統中的每個單元的反饋信號與其他單元的反饋信號進行比較,并將每個軸得到的反饋信息作為補償傳遞到各軸控制器中,從而提高系統的同步性能。Sato等[8]提出了一種可以補償伺服延遲的前饋控制器,通過多軸加工的仿真,驗證該方法在包括旋轉軸的多軸同步運動中的有效性。張愷玉等[9]提出了一種基于CAN總線的多軸電機同步的方法,通過算法控制定時器產生脈沖,從而實現多軸的同步。張高維等[10]提出了確定性調度配合延時補償的方法,利用卡爾曼濾波算法,采用時隙劃分調度測量保證數據交換的確定性,通過RBF對系統延時預測值進行補償,使系統跟隨延時自動調整,試驗證明該方法有效提高了同步精度。
本文提出一種基于嵌入式Linux平臺的EtherCAT主站方案。該方案主要完成嵌入式Linux平臺的實時嵌入式操作系統設計,改寫BeagleBone平臺的繼承網卡驅動,采用分布時鐘動態同步機制實現多軸同步的實時性以及同步性能,最后通過兩軸伺服控制平臺進行了試驗驗證。
方案采用BeagleBone開發板作為設計的硬件平臺。基于嵌入式Linux的主站設計方案主要分為3個層面,分別是用戶層、內核層和執行層。設計方案如圖1所示。

圖1 基于嵌入式Linux的EtherCAT主站方案
用戶層包括主站對總線上的從站描述文件的解析,xml描述文件包含從站ID信息、從站相關可操控的對象字典,以及用戶應用層控制程序。
內核層包括內核實時化,采用實時內核對Linux標準內核進行實時化改造,構建實時操作系統,并通過測試系統的實時任務調度延時來測試系統的實時性。其次在實時系統上移植IgH主站框架,在實時任務中調用IgH主站的API函數。IgH是EtherCAT協議的實現,可完成總線的通信工作,包括總線上數據的收發解析,以及同步時鐘的動態補償。在內核層,網卡驅動是極其重要的一環,將網卡設備直接提交給主站管理,并且在EtherCAT數據傳輸中,數據不經過網絡堆棧,由于任務的強實時性,數據幀的回收是可預知的,可關閉一些中斷。
執行層是從站上的伺服驅動設備,并連接有相應的電機以及其他IO模塊設備,提供輸入輸出信號。執行層通過網線接收來自總線上的數據幀,從數據幀上獲取針對自己的任務執行數據,或者是將需要上傳的數據放入數據幀中傳回給主站模塊。
EtherCAT總線主站要求Linux系統具有較強的實時性,但標準內核的Linux操作系統并不是硬實時操作系統,所以需要對Linux內核的實時性改造。本設計采用Xenomai實時內核,構造Linux+Xenomai的雙內核系統,Xenomai的中斷管道管理機制能有效管理任務優先級以及中斷事件,并且為實時應用的開發提供豐富的接口和功能。經過改造后的系統內核架構如圖2所示。

圖2 實時系統內核框架
在Linux標準內核中嵌入Xenomai實時核的流程是:通過Xenomai腳本將它與Linux內核聯系起來,并打上必要的補丁;在Linux內核的配置中,需要使能Xenomai,并且關閉Linux內核中CPU頻率縮放等功能的配置;交叉編譯Linux內核以及Xenomai實時核,將編譯完成的鏡像、庫等文件移植到開發板上。
分布時鐘是EtherCAT協議中最重要的功能。在工控領域和運動領域,需要多軸之間具有高精度的同步性能。IgH的分布時鐘[11]功能使得總線上的所有設備使用相同的系統時鐘tsys_ref,產生SYNC信號,從而控制設備同步執行各自的任務。總線上的每個設備都有自己的本地時鐘tlocal(n),系統會計算初始時鐘偏差Toffset(n)并將其補償寫進總線上的從站設備,使得設備全部同步到參考時鐘。假設從站本地時鐘大于參考時鐘,則有
tlocal(n)=tsys_ref+Toffset(n)
(1)
從站之間的時鐘差主要是由傳輸延時Tdelay(n)和初始偏移量造成,假設數據幀到達參考時鐘(從站0)的時刻是T1時刻,到達第n個從站時的時刻為T2(n),則有tlocal=T2(n),此時關系為
T2(n)-T1=Toffset(n)+Tdelay(n)
(2)
整理上述等式,可得
Toffset(n)=T2(n)-T1-Tdelay(n)
(3)
數據幀經過總線上所有的從站后返回,當數據幀再次經過第n個從站時,時刻為T(n),最后數據幀再次到達參考時鐘,時刻為T4。假設線纜上傳輸時間一樣,所有從站處理數據幀時間一樣,則傳輸延時可計算得
Tdelay(n)=[(T4-T1)-(T3(n)-T2(n))]/2
(4)
同時由于設備的本地時鐘存在偏移以及偏移累加,系統會定時刷新總線上設備的時鐘,保證設備間的同步性能。
EtherCAT主站的驅動模塊就是網卡的驅動模塊[12],主站將數據報文包裝成以太網的格式,通過網卡接收和發送數據報文。IgH框架中網卡驅動部分主要有2種形式:第1種是通用網卡驅動,即可支持所有網卡驅動,但是在實時性上效果比較差;第2種是本地網卡驅動,這是一類針對特定網卡做出特定的驅動修改,以適應高效的傳輸速率和極端的傳輸延時。2種網卡驅動的區別如圖3所示,本研究采用第2種網卡驅動方式。
本文設計基于ARM集成網卡,并對此網絡芯片驅動進行優化。如圖4所示,優化的主要內容是:首先,將網卡設備的打開關閉等動作交給主站模塊,取消設備在內核系統中的注冊;其次,EtherCAT設備不經過網絡堆棧,所以屏蔽所有的網絡堆棧接口函數;同時,由于EtherCAT協議的實時性,使得總線上的數據幀的回收時間可預知,所以關閉原網卡驅動程序中的中斷函數,改寫成定時輪詢函數;最后,主站在每次發送完成功后并不釋放socket緩沖區。在每次發送時,重新將數據幀填滿socket,然后將其傳遞給hard_start_xmit()回調函數。

圖3 通用網卡驅動與本地網卡驅動

圖4 網卡驅動設計流程
采用集成TI網卡的BeagleBone開發板,硬件上運行自行設計的主站系統作主站平臺。搭建一主兩從的伺服控制平臺,兩軸采用串聯線型頭結構,如圖5所示。

圖5 兩軸伺服控制平臺
5.1.1 系統任務調度測試及延時測試
在Xenomai內核模式下,運行測試程序latency,設定周期1 ms,測試時長5 min,測試系統的任務調度延時性[13]。測試結果:最大調度延時為36.397 μs(3.640%),最小調度延時為1.952 μs(0.195%)。
在從站傳輸延時測試中,從主站發送下來的數據幀在從站間的傳輸,由于從站之間的物理傳輸介質以及從站對數據幀的處理需要時間,導致從站接收數據幀有一定的延時。測試總線伺服驅動器以及另外3個IO模塊,測試結果如圖6所示。

圖6 從站傳輸延時結果
5.1.2 伺服從站控制抓包測試
在從站控制測試中,設置任務周期1 ms,上位機主站針對所有從站發送從站控制指令,通過Wireshark抓包測試,測試數據包中的數據信息以及程序控制周期。從幾萬次的抓包結果中,隨機選取100組數據,得到如圖7所示的結果。結果顯示抓包周期間隔在任務周期1 ms上下浮動20 μs,占比2%。同時對數據幀進行分析,可知操作計數器WCK的值正確變化,即讀操作+1,寫操作+2,數據幀中正確顯示對伺服從站的控制數據。

圖7 總線數據幀抓包測試
本測試是在改造后的網絡芯片驅動下,采用Rohde & Schwarz示波器,任務周期為1 ms,測試伺服從站同步引腳sync0中斷信號之間的同步時間差,測試時長1 min,采樣10萬余次,測試結果如圖8所示。
由圖8可知:同步誤差負峰值為-56.571 ns,如B點所示;正峰值為13.155 ns,如A點所示;C點同步時間差是0 ns,表示完全同步。其中,最大同步誤差對應負峰值56.571 ns,并且測試結果給出了平均同步時間差20.178 ns。此測試數據具有良好的說服力,即主站具有優秀的同步性能。

圖8 從站同步性測試
本文設計并實現了基于嵌入式Linux平臺的EtherCAT主站方案,進行了基于Xenomai的Linux實時操作系統改造,完成了ARM集成網卡的網絡芯片驅動設計改造。搭建了一主二從試驗平臺,并進行了相關試驗驗證。結果表明,所設計的嵌入式Linux平臺下的EtherCAT主站具有優越的實時性以及同步性能。