張 靜
上海電氣集團股份有限公司 中央研究院 上海 200070
近年來,自動化行業(yè)發(fā)展迅速,機器人開始逐漸代替人進行相關工作。交流伺服驅動器作為機器人的關鍵零部件,在工業(yè)機器人、協作機器人,以及醫(yī)療與餐飲行業(yè)中的服務機器人領域,都有廣泛應用。機器人屬于由控制器控制多臺伺服驅動器的集成系統(tǒng),多臺伺服驅動器的通信實時性要求較高。
傳統(tǒng)的以太網硬件和標準傳輸控制協議(TCP)/網際協議(IP),如施耐德Modbus/TCP、羅克韋爾Ethernet/IP和西門子Profinet(第一版)等,已經不能滿足市場對于交流伺服驅動器通信功能的要求。在不改變以太網硬件基礎的前提下,Powerlink和Profinet(第二版)改善了過程數據的通信協議,但受硬件層限制,通信的實時性仍有欠缺。對此,倍福提出了EtherCAT,通過硬件集成來提高以太網的性能,同時運行過程數據通信協議和TCP/IP協議棧,保證數據鏈路層的實時性。EtherCAT具有拓撲結構靈活和系統(tǒng)配置簡單的特點,滿足交流伺服驅動器中通信功能實時性和成本低的要求。
隨著工業(yè)自動化的迅猛發(fā)展,以及EtherCAT具有較強的實時性和擴展性特點,市場上越來越多的交流伺服驅動器配置EtherCAT通信功能。為提高產品迭代更新的速率,筆者研究在現有交流伺服驅動器上實現EtherCAT通信功能。
EtherCAT由倍福于2003年提出,于2007年12月成為國際標準。作為一種實時以太網現場總線技術,EtherCAT采用主從介質訪問方式,主站控制所有從站發(fā)送或接收數據。主站可以選取基于個人計算機的軟件控制方法,如將TwinCAT上位機作為一個虛擬主站,但這一方法的實時性不佳,且開發(fā)費用較高。通過應用網絡接口控制器(NIC)卡或集成以太網媒體訪問控制(MAC)的板卡,在Linux系統(tǒng)中進行主站開發(fā),可以實現良好的開源性,且費用較低。
對于從站的開發(fā),倍福先后提出兩種從站接口控制器(ESC)——ET1100和ET1200。ESC實現了EtherCAT物理層與數據鏈路層的通信,通常具備兩個MAC地址,可擴展為兩個網口,從而方便級聯構成多種拓撲結構。
CoE(CANopen over EtherCAT)協議是專門針對交流伺服驅動器制定的協議。CoE協議中EtherCAT數據幀包含標準CANopen數據幀內容,數據幀格式如圖1所示。EtherCAT數據幀分為三個部分:以太網幀頭、EtherCAT數據區(qū)和幀校驗序列。一個完整的EtherCAT子報文由10 Byte子報文頭、最大可存儲1 486 Byte的數據區(qū)及2 Byte工作計數器(WKC)組成。
圖1 EtherCAT數據幀格式
在交流伺服驅動器中,周期性過程數據通信非常關鍵,所對應的變量為過程數據對象(PDO)變量。EtherCAT從站可運行于自由運行模式和同步運行模式,前者利用查詢的方式來處理PDO變量,后者在中斷服務函數中處理PDO變量。
筆者主要介紹同步運行模式下的PDO變量傳輸方式,以及EtherCAT主站對從站的讀寫操作。PDO通信流程如圖2所示。EtherCAT主站對從站進行寫操作時,內存管理單元FMMU0復制至同步管理器通道SM2緩存器中,同時觸發(fā)過程數據接口(PDI)中斷。再將SM2緩存器中的數據復制至PDI_Isr中斷函數中,應用層更新數據。與寫操作類似,EtherCAT主站對從站進行讀操作時,需要將更新后的輸入數據寫入同步管理器通道SM3緩存器中,內存管理單元FMMU1將SM3緩存器中的數據寫入EtherCAT數據幀,進而將所讀取的數據發(fā)送至EtherCAT主站。
圖2 PDO通信流程
筆者打破傳統(tǒng)的數字信號處理器(DSP)+ET1X00芯片設計模式,采用DSP+XMC4300芯片硬件結構,兩片芯片之間通過串行外設接口(SPI)進行數據傳輸。將TMS320F2809作為交流伺服驅動器主程序芯片,同時作為SPI的主站和EtherCAT通信中的從站。通過XMC4300芯片,實現交流伺服驅動器的EtherCAT通信功能,并將這一芯片作為SPI的從站和EtherCAT通信中的主站。XMC4300芯片支持SPI全雙工和半雙工功能,可以有效提高數據幀的傳輸速率。
SPI通過時鐘信號實現主從站的同步,數據傳輸時不需要增加起始位、停止位等用于同步的格式位。SPI主站發(fā)送數據的寄存器中可以直接存放要傳送的數據,根據時鐘節(jié)拍,將寄存器中的數據移位至SPI主站的輸出口(MOSI)。根據時鐘節(jié)拍,從站將接收到的數據移位至移位寄存器中。當接收完一個完整的數據幀后,設置中斷標志,通知SPI從站數據已接收完畢,同時將移位寄存器中的數據傳輸至接收數據寄存器中。
硬件框架如圖3所示,將基于TMS320F2809芯片的交流伺服驅動器電路板與基于XMC4300芯片的開發(fā)板通過SPI連接起來。其中,CLK為SPI通信周期的時鐘信號,STE為SPI通信的片選信號,MOSI為SPI主站輸出數據幀至SPI從站,這三種信號均為從SPI主站TMS320F2809芯片發(fā)送至SPI從站XMC4300芯片。SPI從站至SPI主站有五種信號,其中:MISO為SPI從站輸出數據幀至SPI主站;RDY為SPI通信中的準備信號,高電平時進行數據幀傳輸;SYNC為EtherCAT中的sync0信號,用于實現XMC4300芯片的時鐘與TMS320F2809芯片的時鐘同步,保證EtherCAT的通信實時性;CS1和CS2為片選信號。
圖3 硬件框架
軟件開發(fā)環(huán)境采用英飛凌Dave平臺,結合Dave內置的圖形化編程界面App Dependency Tree,同時利用C語言進行編程。App Dependency Tree界面可以方便地增加SPI_SLAVE模塊,便于設置和修改SPI相關參數。
EtherCAT主站選用TwinCAT,設定EtherCAT的通信時間為250μs。鑒于個人計算機的內核資源有限,將TwinCAT安裝在倍福 C6915工控機上進行操作。
TwinCAT與基于XMC4300芯片的開發(fā)板之間通過IE-C6FP8LD帶屏蔽功能網線連接,從而減少EtherCAT通信受到SPI通信的干擾。系統(tǒng)框架如圖4所示。
圖4 系統(tǒng)框架
現有的交流伺服驅動器中,DSP芯片采用Modbus協議,而XMC4300芯片采用CoE協議,為實現DSP芯片與XMC4300芯片之間的成功通信,需要建立一個新的SPI協議。建立的思路是將XMC4300芯片中CoE協議的變量名稱及索引號與TMS320F2809芯片中Modbus協議的地址一一對應,方便兩塊芯片之間的數據傳輸。
以CoE協議中的狀態(tài)字0x6041為例,此PDO變量為PDO1部分中的只讀型變量,規(guī)定其對應TMS320F2809芯片中Modbus協議的地址值為0x850。與此類似,控制字0x6040為PDO1部分中的讀寫型變量,規(guī)定其對應TMS320F2809芯片中Modbus協議的地址值為0x851。
在EtherCAT通信中,XMC4300芯片作為通信的主站,TMS320F2809芯片作為通信的從站。主站向從站發(fā)送請求數據,從站向主站發(fā)送應答數據,兩塊芯片之間通過SPI通信來實現數據的傳輸。新的SPI協議中,規(guī)定一個命令對應一個數據值,命令和數據的長度均為1 Word,并且規(guī)定在命令字中高兩位為命令的類型,低14位為地址值。
數據字均為16 bit,這就需要對CoE協議中的變量數據長度進行處理。對于32 bit變量,需要拆分為高16 bit和低16 bit兩部分數據值。這兩部分數據值分別對應不同的地址,從而實現SPI通信中的數據傳輸。對于16 bit變量,不需要進行數據處理操作。對于8 bit變量,需要將其數據長度擴展為16 bit。
實現SPI基本通信功能,主要包含調用spi_handle()函數。spi_handle()函數用于初始化握手過程,插入握手階段的數據存儲,同時進行片選信號和同步信號的設置。在Dave軟件開發(fā)平臺上,通過圖形化軟件進行設計,設置SPI基本通信為全雙工,傳輸模式為直接存儲器存取(DMA)方式,每一幀的數據長度為8 bit,每一個SPI周期可以發(fā)送64幀。
設計EtherCAT通信中的PDO變量數據傳輸框架。根據EtherCAT的實時性及SPI每周期可傳輸的數據幀情況,將需要傳輸的PDO變量分為PDO1和PDO2部分,保證PDO1、PDO2分別每隔50μs通信一次,實現TwinCAT對伺服驅動單元的讀寫操作。PDO1與PDO2傳輸數據的時序關系如圖5所示。
圖5 PDO變量數據傳輸時序
通過TwinCAT進行PDO變量數據的讀寫操作,此部分需要新的SPI協議。spi_pdo_data_load()函數和Coe_read_Modbus_PDO()函數用于實現XMC4300芯片對TMS320F2809芯片寫數據時的SPI通信功能,spi_pdo_data_fetch()函數和Modbus_write_Coe_PDO()函數用于實現XMC4300芯片對TMS320F2809芯片讀數據時的SPI通信功能。
Coe_read_Modbus_PDO()函數針對寫操作中所用到的PDO變量,對EtherCAT從站功能中的PDO變量順序與自定義SPI協議中的PDO變量順序確定對應關系,同時將一個32 bit的PDO變量拆分為高16 bit和低16 bit兩個PDO變量。
spi_pdo_data_load()函數對寫操作中所用到的PDO變量進行移位和與操作,將16 bit變量轉換為8 bit變量,進而傳輸至SPI底層模塊的端口。
Modbus_write_Coe_PDO()函數針對讀操作中所用到的PDO變量,對EtherCAT從站功能中的PDO變量順序與自定義SPI協議中的PDO變量順序確定對應關系,同時將一個32 bit的PDO變量拆分為高16 bit和低16 bit兩個PDO變量。
spi_pdo_data_fetch()函數對讀操作中所用到的PDO變量進行移位和與操作,將16 bit變量轉換為8 bit變量,進而傳輸至SPI底層模塊的端口。
PDO變量讀寫操作流程如圖6所示。
圖6 PDO讀寫操作流程
(1)讀寫型PDO變量。以控制字0x6040為例,在EtherCAT主站TwinCAT中輸入控制字0x6040的數據值時,EtherCAT主站向EtherCAT從站發(fā)起寫操作請求。PDO變量的寫操作經過SM2通道,在PDI_Isr函數中調用spi_handle()函數后,在SM2的函數中調用spi_pdo_data_load()函數和Modbus_write_Coe_PDO()函數,再通過SPI通信方式,發(fā)送至TMS320F2809芯片。
控制字0x6040為讀寫型變量,在進行寫操作的同時,EtherCAT主站向EtherCAT從站發(fā)起讀操作請求。這一讀操作請求同樣通過SPI通信傳輸至TMS320F2809芯片,TMS320F2809芯片作為SPI通信的主站,再將控制字0x6040當前的數據值通過SPI通信傳輸至XMC4300芯片。XMC4300芯片分別作為SPI通信和EtherCAT通信的從站,接收控制字0x6040當前的數據值。PDO變量的讀操作經過SM3通道,在SM3的函數中調用Coe_read_Modbus_PDO()函數和spi_pdo_data_fetch()函數。最終將控制字0x6040的數據值傳輸至EtherCAT主站TwinCAT,并成功顯示。
(2)只讀型PDO變量。以狀態(tài)字0x6041為例,在EtherCAT主站TwinCAT中輸入狀態(tài)字0x6041的數據值時,EtherCAT主站向EtherCAT從站發(fā)起寫操作請求,由于狀態(tài)字0x6041為只讀型變量,因此在上位機上顯示寫操作錯誤。EtherCAT主站向EtherCAT從站發(fā)起讀操作請求,步驟與讀寫型PDO變量相同,此處不再重復介紹。
筆者設置SPI的時鐘頻率為12.5 MHz,每傳輸1 bit數據需要80 ns時間,每個SPI周期中可傳輸256 bit容量的數據。由此可知,理論上傳輸一個SPI數據幀的時間應為20.48μs,示波器上顯示的實測時間為21μs,如圖7所示。圖7中,A為SPI數據傳輸中的時鐘信號,B為SPI中的RDY信號。
圖7 SPI通信周期測試
對于讀寫型變量,選取索引號為0x60E1的PDO變量,其名稱為反轉轉矩限制值,數據長度為16 bit,寫入數值為0xFFFF,如圖8所示。基于TMS320F2809芯片的交流伺服驅動器端手動操作板上顯示為有符號的16 bit十進制數,則對應0xFFFF實際顯示值為-1,如圖9所示。針對讀寫型變量的讀寫操作成功,與設計思路相符。
圖8 讀寫型變量TwinCAT寫入數值
圖9 讀寫型變量手動操作板顯示數值
對于只讀型變量,選取索引號為0x606C的PDO變量,其名稱為實際速度值,數據長度為32 bit。在基于TMS320F2809芯片的交流伺服驅動器端手動操作板上分別設置該變量的高位為十進制數-4,對應0xFFFC;低位為十進制數-7,對應0xFFF9,如圖10所示。在TwinCAT上讀取到該變量的數值為0xFFFCFFF9,如圖11所示。針對只讀型變量的讀操作成功,與設計思路相符。
圖10 只讀型變量手動操作板寫入數值
筆者對EtherCAT主從站技術、EtherCAT協議和從站周期性過程數據通信進行了介紹,設計了DSP+XMC4300芯片的硬件結構,兩塊芯片之間通過SPI進行PDO變量的數據傳輸,并規(guī)定了新的SPI協議及數據傳輸中16 bit數據的格式,進而實現了交流伺服驅動器EtherCAT通信功能。對新SPI協議下軟件框架中的讀寫操作流程進行了介紹,給出了通過上位機TwinCAT對讀寫型與只讀型PDO變量進行讀寫操作的具體過程,并通過測試驗證了設計的合理性與正確性。