毛飛龍, 周 凱, 榮 海
(清華大學(xué) 機械工程系,北京 100084)
磁懸浮電主軸與傳統(tǒng)電主軸相比,消除了摩擦力,能夠以超高的轉(zhuǎn)速運行,是未來的發(fā)展方向。磁懸浮電主軸在高速運行時,位置和電流變化都非常快,位置和電流變化頻率都在上千赫茲。為了采集磁懸浮電主軸位置和電流信息,并下達控制指令,磁懸浮電主軸控制器與計算機之間必須要有快速且確定的通信。
現(xiàn)有磁懸浮控制系統(tǒng)與計算機之間大多使用串口或RS485進行通信,但是串口或RS485通信速度比較慢,難以滿足磁懸浮電主軸快速通信的需求。也有使用PCI總線,通過采集卡進行通信[1],但是PCI總線不夠靈活,抗干擾能力差,兼容性也不夠好。而實時以太網(wǎng)具有實時、快速、抗干擾能力強和兼容性好等優(yōu)點,滿足磁懸浮電主軸快速且確定的通信需求。EtherCAT是一種廣泛應(yīng)用的實時以太網(wǎng)協(xié)議,由德國倍福公司提出,現(xiàn)已成為國際標準[2]。EtherCAT具有延遲低,通信周期短,配置靈活等優(yōu)點[3]。
在Windows和普通Linux系統(tǒng)下,實時性難以保證,對Linux進行改造可以使其成為實時操作系統(tǒng)。目前應(yīng)用廣泛的Linux實時化方案有RT-Linux、RTAI和Xenomai等[4]。RT-Linux已經(jīng)停止對開源版本的支持。RTAI專注于獲得最低的延遲,而Xenomai注重可擴展性、靈活性和可維護性,在此基礎(chǔ)上達到盡可能低的延遲[5]。本文選擇RTAI實時化Linux系統(tǒng)以達到盡可能低的延遲。
本文通過采用EtherCAT實時以太網(wǎng)協(xié)議,在實時Linux系統(tǒng)RTAI上實現(xiàn)系統(tǒng)主站,在FPGA上實現(xiàn)系統(tǒng)從站,來保證系統(tǒng)實時性。
系統(tǒng)的總體架構(gòu)如圖1所示。系統(tǒng)分為兩部分,一部分是主站,位于計算機上,另一部分是從站位于以FPGA為核心的電主軸控制器上。
圖1 系統(tǒng)總體架構(gòu)
主站負責發(fā)起網(wǎng)絡(luò)通信、存儲實驗數(shù)據(jù)以及與人交互等功能。為了保證實時性,主站在基于RTAI的Linux下實現(xiàn)。RTAI采用雙內(nèi)核機制,在Linux內(nèi)核基礎(chǔ)上增加了一個RTAI實時內(nèi)核。RTAI內(nèi)核的中斷優(yōu)先級高于Linux內(nèi)核,硬件產(chǎn)生的中斷先經(jīng)過RTAI內(nèi)核處理后才會交給Linux內(nèi)核,這樣能保證RTAI內(nèi)核良好的硬實時性能[6]。
主站與電主軸控制器通過EtherCAT實時以太網(wǎng)協(xié)議進行通訊。EtherCAT網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 EtherCAT網(wǎng)絡(luò)結(jié)構(gòu)
EtherCAT網(wǎng)絡(luò)中有一臺主站,負責發(fā)起網(wǎng)絡(luò)操作。從設(shè)備通常有兩個網(wǎng)口,當從設(shè)備從前一節(jié)點收到網(wǎng)絡(luò)數(shù)據(jù),在接收的同時,要將數(shù)據(jù)向下一節(jié)點發(fā)送。一個節(jié)點引入的延遲很小[7]。這樣的結(jié)構(gòu)能夠避免傳統(tǒng)以太網(wǎng)的沖突,不用進行CSMA/CD沖突檢測,從而保證網(wǎng)絡(luò)的確定性與實時性。
主站程序由網(wǎng)卡驅(qū)動模塊、EtherCAT協(xié)議棧模塊、電主軸控制模塊和用戶層程序組成。網(wǎng)卡驅(qū)動模塊、EtherCAT協(xié)議棧模塊和電主軸控制模塊在內(nèi)核層,要求實時性。用戶層程序在用戶層,對實時性沒有要求。
網(wǎng)卡驅(qū)動模塊直接控制網(wǎng)卡進行數(shù)據(jù)的收發(fā),與普通的Linux網(wǎng)卡驅(qū)動相比,為了保證實時性,屏蔽了網(wǎng)卡的所有中斷,采用輪詢方式,通過不斷查詢網(wǎng)卡的狀態(tài)來控制網(wǎng)卡的收發(fā)。另外,為了防止Linux系統(tǒng)的干擾,影響實時性,網(wǎng)卡驅(qū)動模塊不再向Linux上層網(wǎng)絡(luò)進行注冊,也不再調(diào)用Linux上層網(wǎng)絡(luò)的接口,而是直接向EtherCAT協(xié)議棧進行注冊,調(diào)用EtherCAT協(xié)議棧的接口完成以太網(wǎng)的收發(fā)。
EtherCAT協(xié)議棧采用開源的IgH EtherCAT Master。IgH EtherCAT Master是符合IEC / PAS 62407標準的EtherCAT主站,設(shè)計為Linux內(nèi)核模塊,具有性能好,占用資源少等特點[8]。
電主軸控制模塊使用RTAI提供的接口定時,周期性的通過EtherCAT協(xié)議棧模塊向從站發(fā)送并接收以太網(wǎng)幀。電機控制模塊負責EtherCAT協(xié)議棧初始化、從站初始化以及過程數(shù)據(jù)PDO的周期性發(fā)送等功能。
上面三個模塊都在Linux內(nèi)核層中,設(shè)計了用戶層程序以方便與人交互和存取數(shù)據(jù)。用戶層程序與電機控制模塊通過RT-FIFO進行數(shù)據(jù)交換。RT-FIFO是RTAI提供的用于實時進程和非實時進程之間通信的接口,不影響實時進程的性能[9]。
如圖3所示是從站硬件設(shè)計核心板,設(shè)計兩個網(wǎng)口以實現(xiàn)EtherCAT協(xié)議,通過剩余的引腳來連接電流傳感器、位置傳感器以及驅(qū)動電路。
FPGA是整個模塊的控制核心,采用了Altera公司的Cyclone III系列FPGA,其型號為EP3C5E144C8N。晶振頻率為20MHz,可以通過FPGA內(nèi)部PLL轉(zhuǎn)換成需要的時鐘頻率。AS配置芯片采用EPCS16,內(nèi)部空間約為16M,除去FPGA配置占用的空間,剩余的空間可以供EtherCAT IP核使用。
網(wǎng)絡(luò)收發(fā)PHY芯片型號為Microchip公司的KS8721BL/SL ,100M全雙工,連接FPGA接口為MII。RJ45接口自帶網(wǎng)絡(luò)隔離變壓器,提高了抗干擾能力。
圖3 從站硬件電路
本文實現(xiàn)了一個小型的EtherCAT IP核,該IP核實現(xiàn)的功能有:0~8個現(xiàn)場總線內(nèi)存管理單元(FMMU);0~8個同步管理器(SyncManagers);可以配置大于等于一個網(wǎng)口;實現(xiàn)了過程數(shù)據(jù)接口(PDI);實現(xiàn)了從站信息接口(SII);內(nèi)存大小可以根據(jù)FPGA的資源情況靈活配置。
下面以常見的雙網(wǎng)口配置為例,介紹該IP核的實現(xiàn)。EtherCAT IP核的整體功能框圖如圖4所示。
網(wǎng)口1從前一級節(jié)點收到以太網(wǎng)數(shù)據(jù)后,經(jīng)過網(wǎng)口單元的緩沖,時鐘域變換,CRC校驗等處理后送到過程數(shù)據(jù)單元(PDU)處理單元。PDU處理單元解析到PDU,確認PDU目標地址為當前模塊后,根據(jù)PDU的命令類型,將PDU轉(zhuǎn)變?yōu)閷?nèi)部地址空間的訪問,送給同步管理器。同步管理器負責協(xié)調(diào)EtherCAT主站和本地端處理器對本地內(nèi)存和寄存器的讀寫。本地端處理器通過PDI接口來進行對本地內(nèi)存和寄存器的讀寫。同步管理器處理完后將結(jié)果返回給PDU處理單元,PDU處理單元將結(jié)果更新到PDU中,然后處理下一個PDU。PDU處理單元處理完所有PDU,在以太網(wǎng)幀末尾添加CRC校驗。PDU處理單元在處理同時,將數(shù)據(jù)通過網(wǎng)口2發(fā)往下一級節(jié)點[10]。
圖4EtherCAT IP核整體功能框圖
PDU處理單元是整個IP核功能的核心。PDU處理單元將以太網(wǎng)幀分拆成獨立的PDU,然后將PDU映射為對內(nèi)存或寄存器的讀寫,交給同步管理器。其處理流程如圖5所示[11]。
網(wǎng)口單元連接外部PHY芯片與PDU處理單元,負責網(wǎng)絡(luò)數(shù)據(jù)的跨時鐘轉(zhuǎn)換和CRC校驗,網(wǎng)口單元對IP核數(shù)據(jù)處理的可靠性具有重要作用。
對于MII接口的PHY芯片,接受數(shù)據(jù)以rxc時鐘為基準,發(fā)送數(shù)據(jù)以txc時鐘為基準。rxc和txc兩個時鐘由PHY從外部引腳送到FPGA,與FPGA 中PLL產(chǎn)生的時鐘相比,這兩個時鐘不穩(wěn)定,為了保證數(shù)據(jù)處理的可靠性,要將數(shù)據(jù)轉(zhuǎn)換到clk時鐘域進行處理。網(wǎng)口單元通過異步FIFO來保證數(shù)據(jù)在rcx/txc時鐘域與clk時鐘域之間可靠轉(zhuǎn)換。
為了保證發(fā)送和接收數(shù)據(jù)的有效性,本文實現(xiàn)了一個位寬為8位的CRC校驗?zāi)K,核心部分通過組合邏輯來實現(xiàn),方便整合到網(wǎng)絡(luò)數(shù)據(jù)串行接收和發(fā)送過程。
同步管理器提供緩存和郵箱兩種模式訪問內(nèi)存,還要保證PDU處理單元和PDI接口對內(nèi)存和寄存器的可靠訪問。
緩存模式由3個內(nèi)存區(qū)域?qū)崿F(xiàn),3個內(nèi)存區(qū)域中的一個用于寫入,一個分配給使用者用于讀取,第3個保留最后寫入數(shù)據(jù)。這種模式始終允許雙向讀寫操作。郵箱模式使用一個內(nèi)存區(qū)域?qū)崿F(xiàn),通信具有互鎖特性,一端寫入數(shù)據(jù),然后這個存儲直到被另一端讀取之前一直鎖定,不能再寫入[11]。這兩個模式的實現(xiàn)嚴格按照國家標準GB/T 31230.4-2014的要求實現(xiàn)。
在訪問內(nèi)存和寄存器時,PDU處理單元和PDI接口在出現(xiàn)同時寫入或者一方寫入,一方讀取等情況時容易產(chǎn)生錯誤。所以同一時間在一方進行讀寫時,另一方應(yīng)該等待。該過程由mcyc_o總線周期來保證,mcyc_o為高時有效,表示有一方在申請操作總線。由于要保證網(wǎng)絡(luò)的實時性,所以優(yōu)先PDU處理單元的讀寫操作,PDU處理單元要進行寄存器讀寫時會將mcyc_o總線周期信號拉高,這時PDI接口要訪問寄存器時,同步管理器會通知PDI接口等待,直到PDU處理單元操作完成將mcyc_o總線周期信號拉低后,PDI接口才能訪問寄存器。
圖5 PDU處理單元流程圖
系統(tǒng)搭建好后,成功實現(xiàn)計算機與磁懸浮電主軸控制器的通信,表明該IP核能夠正確地解析EtherCAT協(xié)議并做出正確的回應(yīng)。
如圖6所示,在Quartus II自帶的邏輯分析儀下可以看到IP核總共引入的延遲為0.63μs,具有良好的實時性。
圖6 EtherCAT IP核收發(fā)時序
從站FPGA使用晶振并通過PLL得到周期為10ns的高精度時鐘信號,以此時鐘信號為基準實現(xiàn)一個32位的計數(shù)器。主站按照一定的頻率通過網(wǎng)絡(luò)讀取從站的計數(shù)值,并與理論值相比較得到網(wǎng)絡(luò)通信周期的誤差。
通信周期為100μs時,誤差分布如圖7所示,誤差大小絕大部分在1μs以內(nèi)。
圖7 通信周期為100μs時的周期誤差
通信周期為20μs時,誤差分布如圖8所示,相比100μs通信周期,大誤差的出現(xiàn)增多,但絕大部分誤差大小仍在在1μs以內(nèi)。
圖8 通信周期為20μs時的周期誤差
圖9是通過網(wǎng)絡(luò)在通信周期為100μs時采集的磁懸浮電主軸軸承位置和電流的頻譜。從圖中可以看到通過本文設(shè)計的通信系統(tǒng)采集的數(shù)據(jù)能夠還原出2.5kHz頻率以內(nèi)的信號。這說明本文設(shè)計的通信系統(tǒng)能有效地采集磁懸浮電主軸的位置電流信號。
圖9 磁懸浮電主軸位置和電流頻譜
圖10是通過網(wǎng)絡(luò)在通信周期為20μs時采集的磁懸浮電主軸電機在7500rpm轉(zhuǎn)速下的電流曲線。磁懸浮電主軸電機采用四相8/6結(jié)構(gòu)的開關(guān)磁阻電機,在7500rpm轉(zhuǎn)速下電流切換頻率達到3kHz,通過本文設(shè)計的通信系統(tǒng),仍然可以得到完整的電流曲線。這為電機的控制和調(diào)試提供了方便。
圖10 磁懸浮電主軸電機電流曲線
本文提出了基于EtherCAT的高速電主軸通信系統(tǒng),在實時Linux系統(tǒng)RTAI下構(gòu)建了EtherCAT主站,在FPGA上實現(xiàn)了EtherCAT從站IP核進而構(gòu)建了高速電主軸控制器。通過實驗驗證了通信系統(tǒng)的功能,通信周期可以達到20μs,具有優(yōu)異的實時性能。