林曉海,鄭力新
(1.華僑大學 信息科學與工程學院,福建 廈門 361021;2.華僑大學 工學院,福建 泉州 362021)
當今運動控制卡多采用PCI接口作為運動控制卡與PC進行數(shù)據(jù)傳輸?shù)慕涌冢斐捎脩艏词箖H僅使用較少部分PC資源,也必須配備一臺PC或工控機,未使用的PC資源不僅帶來浪費的問題和維護上的麻煩,也不利于系統(tǒng)的小型化。使用以太網(wǎng)接口代替?zhèn)鹘y(tǒng)PCI接口可以實現(xiàn)幾個運動控制卡共享同一臺主機,不但可以降低成本,同時便于運動控制卡集中管理[1];隨著運動控制的發(fā)展,越來越多的機械設備廠商希望能夠提供一個通用的可編程環(huán)境,以方便對該領域較為熟悉的人員來完成編程任務?;谏鲜龅膬牲c需求,本文設計出一款可編程網(wǎng)絡型運動控制卡,并給出軟硬件的實現(xiàn)過程。
圖1 系統(tǒng)的整體結(jié)構(gòu)
圖1為該系統(tǒng)的整體結(jié)構(gòu)。通過對PLT格式的文件進行解析產(chǎn)生用于擬合運動軌跡的微小線段的頂點坐標,這些數(shù)據(jù)并沒有將實際的運動特性考慮在內(nèi),因此必須在輔助開發(fā)軟件內(nèi)對這些數(shù)據(jù)進行前瞻規(guī)劃、加減速控制,使得在滿足系統(tǒng)實際運動特性的前提下更高速、更順暢地加工。輔助開發(fā)軟件將預處理后的加工數(shù)據(jù)通過以太網(wǎng)接口傳送到運動控制卡,并存儲在運動控制卡板卡上的Flash存儲器中。開發(fā)人員就可以使用Keil集成開發(fā)環(huán)境對運動任務和可編程IO服務程序進行編寫,運動任務與編寫好的軟件框架中的其他任務(如暫停、急停、回零等任務)構(gòu)成系統(tǒng)多任務框架,運行在FreeRTOS實時操作系統(tǒng)環(huán)境中。
運動控制卡使用ARM Cortex M4系列的STM32F407-ZGT6以及Cyclone II系列的FPGA EP2C8Q208作為核心部分。ARM具有較強的運算能力、信號處理能力和事件管理與控制能力,并且具有較為豐富的外設,在運動控制卡中充當一個管理者的角色;FPGA具有較強的邏輯處理能力與并行處理能力,可以實現(xiàn)多軸同時插補,在該系統(tǒng)中負責完成DDA插補算法。ARM與FPGA之間采用FSMC接口進行數(shù)據(jù)通信,同時在FPGA內(nèi)部使用內(nèi)嵌的RAM模塊例化出一個緩沖區(qū),用來緩沖接收到的數(shù)據(jù)。與PC通信部分采用的是以太網(wǎng)接口,使用DP83848作為網(wǎng)卡芯片連接到ARM芯片的以太網(wǎng)控制器接口;同時為了方便調(diào)試,還提供了一個串口作為調(diào)試輸出接口,該串口也可以作為可編程資源,提供給開發(fā)人員編程使用。電機驅(qū)動接口包括4組軸方向+脈沖輸出接口和控制接口(驅(qū)動器報警、錯誤清除、使能接口),同時提供每個軸的正負限位及原點輸入接口和16個可編程輸入接口、16個可編程輸出接口[2-3]。圖2為硬件部分框圖。
圖2 硬件部分框圖
該軟件是基于Qt環(huán)境開發(fā)的,它與運動控制卡通過TCP協(xié)議進行通信,在C/S模式中充當服務器的角色。該軟件有3個主要功能:
(1)提供一個可視化的方式來對系統(tǒng)的IP地址、正負限位、原點觸發(fā)方式、系統(tǒng)最大速度、最小速度、最大加速度、最大加加速度等進行配置,根據(jù)配置結(jié)果產(chǎn)生對的頭文件,并導入到開發(fā)人員的開發(fā)工程文件夾中,這些文件通過宏定義完成系統(tǒng)資源的配置,開發(fā)人員在開發(fā)時可以引用相應的宏來完成編程。
(2)提供簡單的調(diào)試環(huán)境:啟動、暫停、停止、系統(tǒng)回零等按鈕。
(3)對軌跡頂點數(shù)據(jù)進行預處理。
圖3~圖6分別為軟件的流程圖、主界面、產(chǎn)生的頭文件列表和頭文件內(nèi)容。
圖3 軟件流程圖
圖4 軟件主界面
圖5 產(chǎn)生的配置頭文件列表
圖6 頭文件內(nèi)容
對ARM開發(fā)采用KeilμVision4集成開發(fā)環(huán)境,Keil軟件可以在編譯之前運行外部程序[4],通過這個特性,可以在編譯工程文件之前先運行輔助開發(fā)軟件,利用輔助開發(fā)軟件產(chǎn)生相應的頭文件實現(xiàn)對系統(tǒng)參數(shù)的配置。
為了減輕開發(fā)人員的開發(fā)難度,在FreeRTOS的上層創(chuàng)建了多任務的軟件框架,如圖7所示。
圖7 多任務的軟件框架
在該框架中創(chuàng)建了6個默認的任務,分別是:數(shù)據(jù)包解析任務、存儲器管理任務、暫停任務、停止任務、回零任務、運行任務。開始時存儲管理任務、暫停任務、停止任務、回零任務和運行任務都在等待相應信號量而掛起。
輔助開發(fā)軟件通過以太網(wǎng)接口將數(shù)據(jù)傳送到運動控制卡,每個數(shù)據(jù)包由數(shù)據(jù)包類型、數(shù)據(jù)包內(nèi)容所組成,數(shù)據(jù)包解析任務通過解析數(shù)據(jù)包類型碼來分別發(fā)送不同的信號量喚醒不同的任務。存儲管理任務是板上2 MB Flash存儲器進行寫的守護任務,負責存儲器的讀入,任何任務需要讀存儲器都需要請求該任務來完成,同時在寫存儲器時不允許任何任務讀存儲器,從而避免讀到無效數(shù)據(jù)。
暫停、停止、回零,運行任務的功能是通過搶占機制來實現(xiàn)的,各個任務的優(yōu)先級分配如表1所示[5]。當系統(tǒng)正在運行時如果發(fā)送暫停命令,由于暫停優(yōu)先級比運行任務優(yōu)先級高,所以會搶占運行任務的優(yōu)先級。其他的優(yōu)先級分配也是按照這個原則,其中在沒有執(zhí)行回零操作時優(yōu)先級設置為5是為了能夠搶占運行、暫停、停止這些任務的運行;而在執(zhí)行回零過程中,將優(yōu)先級降低為2是為了能夠?qū)崿F(xiàn)在回零過程中被暫停和停止。圖8~圖11分別是運行任務、暫停任務、回零任務和停止任務的流程圖。
表1 優(yōu)先級分配表
在系統(tǒng)運行過程中有時需要接收外圍設備的輸入信號,例如在一些設備中存在一些按鈕,運動控制卡需要接收這些按鈕信息,并對這些按鈕的相應函數(shù)進行編程,例如調(diào)用暫停信號量來喚醒暫停任務,此時這個按鈕就具備了暫停功能;又如在運動過程中可能需要給電磁閥一個觸發(fā)信號來執(zhí)行對外圍設備的控制等,這部分就是可編程IO功能[6],可編程輸入引腳連接到ARM的中斷引腳中,當有外部輸入時觸發(fā)中斷,進而調(diào)用外部中斷服務函數(shù),因此只需在中斷服務代碼中編寫相應的程序就可以實現(xiàn)對應的功能。下面是連接設備暫停按鈕的中斷服務函數(shù):
圖8 運行任務
圖9 暫停任務
圖10 回零任務
圖11 停止任務
可編程輸出功能是通過軟件中斷來實現(xiàn)的,在運行任務中可以調(diào)用軟中斷指令,使得程序轉(zhuǎn)到軟件中斷服務程序中。在轉(zhuǎn)入軟件中斷服務程序之前,開發(fā)人員需給出觸發(fā)引腳編號、脈沖模式或電平模式、電平類型等信息,需要使用如下的MC_PO類型來創(chuàng)建一個結(jié)構(gòu)體變量,并對這個結(jié)構(gòu)變量的對應成員變量賦值。為了實現(xiàn)多個引腳同時輸出,在軟件框架中定義了16個MC_PO類型的變量,每個變量對應一個可編程輸出引腳的信息,同時創(chuàng)建一個16個元素的數(shù)組MC_PO_Pins[16]用于存放需要輸出的引腳的標志。在軟件中斷服務程序中通過查詢這個數(shù)組來調(diào)用需要輸出信號引腳對應的函數(shù)。這樣就使得耦合性較低,軟件框架結(jié)構(gòu)更為清晰。
開發(fā)人員需要調(diào)用可利用的函數(shù)庫(ST公司提供的固件庫函數(shù)以及系統(tǒng)已經(jīng)封裝好的API函數(shù)、FreeRTOS API等)來編寫運行任務。在運行任務中,需要完成的工作是讀取存儲器中的數(shù)據(jù),傳到FPGA執(zhí)行插補,由FPGA來輸出給予驅(qū)動器的方向脈沖信號。同時編寫希望響應的外部輸入/輸出的服務函數(shù),這些函數(shù)借助已經(jīng)編寫好的軟件框架就可以運行。
設計出一款可編程網(wǎng)絡型運動控制卡,使用以太網(wǎng)接口作為數(shù)據(jù)傳輸接口,使得多運動控制卡可以共享同一臺主機,結(jié)合輔助開發(fā)軟件可以以直觀的方式對板卡上的資源進行配置。同時將輔助開發(fā)軟件集成到Keil μVision4中方便了開發(fā)過程,并建立了運行于FreeRTOS實時操作系統(tǒng)上的多任務軟件框架,通過降低任務間的耦合性來使得框架結(jié)構(gòu)更加清晰。
[1]云利軍,孫鶴旭,雷兆明,等.工業(yè)網(wǎng)絡的發(fā)展及其在運動控制中的應用[J].微型機與應用,2005,24(9):4-6.
[2]齊珊.多軸運動控制系統(tǒng)設計[D].天津:天津大學,2008.
[3]謝輝.基于以太網(wǎng)的分布式運動控制系統(tǒng)研究與實現(xiàn)[D].大連:大連理工大學,2008.
[4]李寧.ARM MCU開發(fā)工具 MDK使用入門 [M].北京:北京航天航空大學出版社,2012.
[5]BARRY R.Using the FreeRTOS real time kernel(A practical guide opened)[EB/OL].(2009-xx-xx)[2013-10-23].http://www.FreeRTOS.org.
[6]朱閣,鄭力新,林曉海.基于ARM Cortex-M3的運動控制系統(tǒng)與算法設計[J].微型機與應用,2013,32(1):77-79.