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