<strong>摘 要: 針對(duì)中低端機(jī)床大規(guī)模生產(chǎn)的需要,,設(shè)計(jì)了帶有現(xiàn)場(chǎng)總線接口的運(yùn)動(dòng)控制模塊。該模塊以2片STM32微控制器組成雙CPU系統(tǒng),采用SD卡作為大容量數(shù)控程序存儲(chǔ)介質(zhì),兼容Modbus-RTU協(xié)議,,具有較高的性價(jià)比,。實(shí)驗(yàn)結(jié)果表明,該控制器能完全替代傳統(tǒng)基于PC機(jī)的單機(jī)控制器,。
關(guān)鍵詞: 運(yùn)動(dòng)控制模塊,; PLC; STM32,; Modbus,; 插補(bǔ); G代碼解釋
數(shù)控系統(tǒng)廣泛應(yīng)用于現(xiàn)代制造加工業(yè),、機(jī)器人,、電子機(jī)械、辦公設(shè)備等,,是21世紀(jì)最有發(fā)展前景的技術(shù)之一。本文使用2個(gè)Cortex-M3內(nèi)核單片機(jī)STM32進(jìn)行G代碼解釋和電機(jī)運(yùn)動(dòng)控制,,研發(fā)了極低成本的運(yùn)動(dòng)控制模塊,并通過PLC現(xiàn)場(chǎng)總線對(duì)多塊運(yùn)動(dòng)控制模塊進(jìn)行全局管理控制,,形成高效可靠的機(jī)床控制網(wǎng)絡(luò)。
1 運(yùn)動(dòng)控制模塊的研制
本設(shè)計(jì)中,運(yùn)動(dòng)控制模塊負(fù)責(zé)電機(jī)的驅(qū)動(dòng),、多軸聯(lián)動(dòng),、G代碼解釋等工作,是數(shù)控系統(tǒng)的“大腦”,。因此運(yùn)動(dòng)控制器的性能直接關(guān)系到整個(gè)機(jī)床的性能,。
1.1 總體結(jié)構(gòu)
為實(shí)現(xiàn)高性能數(shù)控計(jì)算,系統(tǒng)采用雙MCU結(jié)構(gòu),,主控MCU負(fù)責(zé)G代碼讀寫與解釋,、人機(jī)界面、網(wǎng)絡(luò)通信等任務(wù),;NC運(yùn)動(dòng)控制MCU(即運(yùn)動(dòng)控制芯片)作為一個(gè)專用數(shù)字芯片,,負(fù)責(zé)三軸電機(jī)的速度控制,、定位、多軸直線和圓弧插補(bǔ)等任務(wù),,以保證運(yùn)動(dòng)控制模塊在完成復(fù)雜的工作時(shí)仍能提供良好的性能,。運(yùn)動(dòng)控制模塊結(jié)構(gòu)如圖1所示。
模塊采用SD卡作為G代碼文件的存儲(chǔ)器,。SD卡具有大容量,、小體積、支持熱插拔等特點(diǎn),,尤其是其兼容SPI總線讀寫,,省去了主控制器作為USB盤讀寫的硬件,降低了成本,。
運(yùn)動(dòng)控制模塊具有現(xiàn)場(chǎng)總線通信功能,,支持RS-485和CAN總線2種現(xiàn)場(chǎng)總線物理層規(guī)范。以可靠性為設(shè)計(jì)原則,,總線接口與主控制器進(jìn)行了電氣隔離,,并加入保護(hù)元件提高其抗瞬態(tài)干擾能力。圖2,、圖3分別是模塊RS-485和CAN總線的隔離接口原理圖,。其中使用了TI公司的高速數(shù)字隔離器ISO7221進(jìn)行數(shù)字信號(hào)的電氣隔離,同時(shí)在接口端設(shè)置了瞬態(tài)抑制二極管(TVS管)進(jìn)行保護(hù),,確保了硬件在各種環(huán)境下的可靠性,。
1.2 Cortex-M3與STM32簡(jiǎn)介
ARM Cortex-M3是一種基于ARM7架構(gòu)的最新ARM嵌入式內(nèi)核,它采用哈佛結(jié)構(gòu),,使用分離的指令和數(shù)據(jù)總線(馮諾伊曼結(jié)構(gòu)下,數(shù)據(jù)和指令共用1條總線),在成本和功耗方面,,Cortex-M3具有相當(dāng)好的性能。
基于Cortex-M3核的STM32F103系列MCU,運(yùn)行于最高72 MHz的總線頻率,可以獲得1.25 DMIPS/MHz的運(yùn)算性能,、單周期乘法指令,、硬件除法器,帶有容量至少為32 KB的Flash及6 KB的SRAM,、2個(gè)12位A/D,、7通道DMA、6路16位定時(shí)器及PWM,、SPI,、I2C、USART,、USB,、CAN等高性能模塊,并具有最高18 MHz輸出頻率的高速GPIO。在電機(jī)和運(yùn)動(dòng)控制的應(yīng)用中,,可以充分發(fā)揮其先進(jìn)內(nèi)核的性能和豐富的模塊資源特性,。
1.3 工作流程
運(yùn)動(dòng)控制器工作流程總體示意圖如圖4所示。
1.3.1 G代碼解碼
運(yùn)動(dòng)控制模塊接收到工作指令后,,開始進(jìn)行G代碼的解釋執(zhí)行任務(wù),。G代碼存放在SD卡中,主控制器集成FAT文件系統(tǒng),,支持SD卡的文件讀寫,。G代碼讀入后,逐行進(jìn)行第一遍掃描(即指令預(yù)處理),期間將注釋,、空格,、非法字符去除,小寫字符轉(zhuǎn)換成大寫,,以方便解碼程序進(jìn)行識(shí)別,。
經(jīng)過預(yù)處理的G代碼指令逐行送入G代碼解碼程序,解釋程序再逐字檢查其是否為G代碼的指令字符,,若是,,則提取關(guān)鍵字的后續(xù)數(shù)值,作為該指令的操作數(shù),,將其提取出來,。其中用到了ANSI C的標(biāo)準(zhǔn)庫函數(shù)sscanf( )(位于stdio.h中),可以方便地提取字符串中指定的信息,,支持類正則表達(dá)式的格式字符串,,非常靈活。同時(shí)因?yàn)槭褂昧薃NSI C的標(biāo)準(zhǔn)庫函數(shù),,程序移植簡(jiǎn)單,。
以下是G代碼解碼程序的部分代碼:
/*遍歷整個(gè)s字符串,找到字符后,,提取后續(xù)數(shù)字,,并存入中間代碼中*/
其中,CurrentGMidCode是預(yù)定義的結(jié)構(gòu)體變量,用于保存每行G代碼提取出來的指令及其操作數(shù),結(jié)構(gòu)如下:
提取到每行G代碼的關(guān)鍵信息后進(jìn)行相關(guān)處理,,計(jì)算出每行代碼的運(yùn)動(dòng)起止坐標(biāo),將其通過SPI總線發(fā)送至NC控制芯片,控制電機(jī)運(yùn)動(dòng),。
1.3.2 插補(bǔ)進(jìn)給
電機(jī)的插補(bǔ)運(yùn)算,、加減速和進(jìn)給控制,由一個(gè)獨(dú)立STM32微控制器完成,并稱為NC運(yùn)動(dòng)控制芯片,。
目前市場(chǎng)上的運(yùn)動(dòng)控制芯片主要是日本和歐美公司的專用ASIC和各數(shù)控廠家自行開發(fā)的FPGA芯片,,雖然性能優(yōu)越,但價(jià)格不低。相對(duì)于使用ASIC芯片或FPGA芯片,完成同樣的任務(wù)使用MCU方案,,硬件生產(chǎn)成本和開發(fā)成本均具有明顯優(yōu)勢(shì),,當(dāng)STM32微控制器運(yùn)行在其最高頻率為72 MHz下時(shí),性能完全可以滿足中低端數(shù)控系統(tǒng)應(yīng)用的要求。
在三軸數(shù)控銑系統(tǒng)中,,NC運(yùn)動(dòng)控制芯片需要實(shí)現(xiàn)三軸快速定位,、二軸直線插補(bǔ)、二軸圓弧插補(bǔ),、三軸直線插補(bǔ)的功能,。
插補(bǔ)是在組成軌跡的直線段或曲線段的起點(diǎn)和終點(diǎn)之間,按一定的算法進(jìn)行數(shù)據(jù)點(diǎn)的密化工作,,以確定一些中間點(diǎn),,從而為軌跡控制的每一步提供逼近目標(biāo)。在本控制器中,,選用逐點(diǎn)比較法作為基本的插補(bǔ)算法,,具有算法簡(jiǎn)單高效、進(jìn)給速度均勻的特點(diǎn),,同時(shí)支持三軸的直線插補(bǔ)[1],,滿足本控制器對(duì)插補(bǔ)算法的要求。
逐點(diǎn)比較直線插補(bǔ),,就是執(zhí)行機(jī)構(gòu)每走一步都要和給定運(yùn)動(dòng)軌跡上相應(yīng)的坐標(biāo)值相比較,,比較的結(jié)果稱為偏差函數(shù)F,根據(jù)偏差的正,、負(fù)決定下一步的進(jìn)給方向,。實(shí)質(zhì)上這是一種用階梯折線來逼近直線的一種算法,它與規(guī)定運(yùn)動(dòng)軌跡之間的最大誤差為1個(gè)脈沖當(dāng)量(每走1步移動(dòng)的距離),。因此,,只要把脈沖當(dāng)量設(shè)計(jì)得足夠小,就可以達(dá)到運(yùn)動(dòng)精度的要求[2],。
1.4 Modbus-RTU協(xié)議的實(shí)現(xiàn)
Modbus-RTU是Modicon公司開發(fā)的一種通信協(xié)議,。它采用主從應(yīng)答方式工作,其規(guī)范已公布在互聯(lián)網(wǎng)上,是一種在工業(yè)領(lǐng)域被廣為應(yīng)用的真正開放的標(biāo)準(zhǔn)網(wǎng)絡(luò)通信協(xié)議,。由于它具有免收許可費(fèi)用,,易于集成不同的設(shè)備、簡(jiǎn)單易用,、開發(fā)成本低,、有著廣泛的知識(shí)資源支持等特點(diǎn),已經(jīng)成為一種公認(rèn)的通用工業(yè)標(biāo)準(zhǔn),。有了這個(gè)標(biāo)準(zhǔn),,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。Modbus PTU協(xié)議有2種傳輸模式:RTU模式和ASCII模式,。其中RTU模式信息幀中的8 bit數(shù)據(jù)包括2個(gè)4 bit十六進(jìn)制字符,,相對(duì)于ASCII模式,RTU模式表達(dá)相同的信息需要較少的位數(shù),,且在相同通信速率下具有更大的數(shù)據(jù)流量,。因此通常情況下,一般工業(yè)智能儀器儀表都是采用RTU模式的Modbus規(guī)約,。
Modbus-RTU協(xié)議以幀為通信的基本單位,幀格式為:地址碼1 B;功能碼1 B;數(shù)據(jù)區(qū)N B;錯(cuò)誤校驗(yàn)2 B CRC碼,。
本運(yùn)動(dòng)控制器在其RS-485接口上實(shí)現(xiàn)了Modbus-RTU協(xié)議,使用了當(dāng)今流行的免費(fèi)開源協(xié)議棧FreeModbus-RTU,,從而保證了可靠的通信,、節(jié)約了開發(fā)成本。
FreeModbus是針對(duì)通用的Modbus協(xié)議棧在嵌入式系統(tǒng)中應(yīng)用的實(shí)現(xiàn),,其遵循BSD開放源代碼協(xié)議,,并可以免費(fèi)用于商業(yè)用途,成熟可靠,。移植FreeModbus到STM32處理器只需要少量資源,,除了1個(gè)雙工USART外,只需要配置1個(gè)定時(shí)器進(jìn)行超時(shí)判斷即可,。
2 基于C200HE型PLC的運(yùn)動(dòng)控制網(wǎng)絡(luò)實(shí)驗(yàn)平臺(tái)設(shè)計(jì)
2.1網(wǎng)絡(luò)結(jié)構(gòu)
歐姆龍(OMRON)公司的C200HE-CPU42型PLC帶有RS-232口和通信板,。通信板支持各種通信協(xié)議,如上位鏈接,、RS-232通信,、1:1鏈接、NT鏈接(1:1,、1:N)以及協(xié)議宏功能等,并能根據(jù)需要進(jìn)行切換,。通過協(xié)議宏功能,用PMCR指令,,通過指定按標(biāo)準(zhǔn)設(shè)置的順序,,就能設(shè)置成Modbus協(xié)議。
運(yùn)動(dòng)控制系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)體系分為3個(gè)層次:管理層,、控制層和器件層,如圖5所示,。
(1) 管理層:是最高層,負(fù)責(zé)系統(tǒng)的管理與決策,。其中PLC是整個(gè)控制網(wǎng)絡(luò)的核心,,它作為Modbus網(wǎng)絡(luò)的主設(shè)備,通過Modbus網(wǎng)絡(luò)與各運(yùn)動(dòng)控制器之間傳輸生產(chǎn)管理信息,、質(zhì)量管理信息及CNC的運(yùn)行情況等數(shù)據(jù),。上位計(jì)算機(jī)運(yùn)行組態(tài)軟件,通過RS-232串行通信口與PLC通信,實(shí)時(shí)監(jiān)控系統(tǒng)的運(yùn)行,。
(2) 控制層:是整個(gè)網(wǎng)絡(luò)系統(tǒng)的中間層,各運(yùn)動(dòng)控制模塊掛接在Modbus網(wǎng)絡(luò)上成為其從節(jié)點(diǎn),負(fù)責(zé)下面CNC運(yùn)行過程的監(jiān)控,、協(xié)調(diào)和優(yōu)化。
(3) 器件層:雕刻機(jī)是整個(gè)網(wǎng)絡(luò)的最低層,,是現(xiàn)場(chǎng)總線網(wǎng)絡(luò)中直接面對(duì)現(xiàn)場(chǎng)的器件和設(shè)備,,為網(wǎng)絡(luò)的終端執(zhí)行機(jī)構(gòu)。
2.2 用協(xié)議宏功能實(shí)現(xiàn)Modbus協(xié)議
在協(xié)議宏軟件CX-Protocol上創(chuàng)建工程,,選擇正確的設(shè)備名稱,、型號(hào)及網(wǎng)絡(luò)類型。然后創(chuàng)建通信序列和接收序列,,并下載到PLC通信板中,。在PLC中編寫程序,用PMCR指令調(diào)用指定的通信序列,,實(shí)現(xiàn)與運(yùn)動(dòng)控制模塊的通信,。通信協(xié)議宏主要由發(fā)送/接收數(shù)據(jù)程序構(gòu)成,每個(gè)通信協(xié)議最多包含0~999個(gè)發(fā)送/接收數(shù)據(jù)程序,每個(gè)發(fā)送/接收程序最多由16步構(gòu)成,。協(xié)議宏結(jié)構(gòu)如圖6所示[3],。
2.2.1創(chuàng)建通信序列
將通信序列號(hào)設(shè)為“000”,在通信序列中要設(shè)置PLC與通信板鏈接字、傳輸控制參數(shù),、響應(yīng)接收方式,、數(shù)據(jù)接收監(jiān)控時(shí)間、數(shù)據(jù)接收完成監(jiān)控時(shí)間,、數(shù)據(jù)發(fā)送完成監(jiān)控時(shí)間等內(nèi)容,。
(1) 創(chuàng)建通信步(Step)
在通信序列“000”中創(chuàng)建Step00和Step01 2個(gè)通信步。Step00用于控制運(yùn)動(dòng)控制模塊的運(yùn)行,,Step01用于查詢運(yùn)行狀態(tài),。在每一個(gè)通信步中包括步號(hào)(Step)、重復(fù)計(jì)數(shù)器(Repeat),、命令(Command),、重試次數(shù)(Retry)、發(fā)送信息(Send Message),、接收信息(Recv Message),、是否響應(yīng)(Response)、出錯(cuò)處理方式(Error)等內(nèi)容,。
(2)創(chuàng)建發(fā)送和接收信息
發(fā)送信息與接收信息必須嚴(yán)格按照Modbus協(xié)議格式編寫,,需要設(shè)置校驗(yàn)碼(Check Code)、數(shù)據(jù)長(zhǎng)度(Length),、地址(Address)和數(shù)據(jù)(Data)等信息,。
(3)創(chuàng)建接收陣列
PLC向運(yùn)動(dòng)控制模塊發(fā)送指令時(shí),,模塊可能返回運(yùn)行正常或錯(cuò)誤響應(yīng)信息,,在接收數(shù)據(jù)時(shí),,使用陣列的形式加以區(qū)分。系統(tǒng)創(chuàng)建了2種可能接收的信息“Run Normal”和“Error”,,并針對(duì)每一種情況設(shè)定不同的處理方法(Next Process),,用于可能出現(xiàn)的各種響應(yīng)信息的處理。
2.2.2 通信實(shí)現(xiàn)
(1) 通信設(shè)置
PLC的通信參數(shù)設(shè)定必須與運(yùn)動(dòng)控制模塊的參數(shù)一致,。對(duì)通信板上的開關(guān)做調(diào)整時(shí),,設(shè)SW1置于ON側(cè),使用RS-485方式,;SW2設(shè)定為ON,,接入120 Ω的終端電阻;設(shè)定通信板端口A為通信協(xié)議宏方式,。
(2) 編寫通信程序
通信協(xié)議宏的調(diào)用程序段如圖7所示,圖中:289.08為通信板端口A操作標(biāo)志,當(dāng)289.08為OFF時(shí),,表示可以使用端口A進(jìn)行通信。通信過程中289.08置為ON,,通信結(jié)束后,,289.08置為OFF狀態(tài);當(dāng)2.00由OFF變?yōu)镺N、且289.08為OFF時(shí),,調(diào)用通信板上的通信序列,,通過端口A發(fā)送和接收數(shù)據(jù)。通信序列號(hào),、發(fā)送和接收數(shù)據(jù)的存放區(qū)由PMCR指令的3個(gè)操作數(shù)指定,其梯形圖見圖7,。
使用2片32位高性能單片機(jī)組成雙核系統(tǒng)實(shí)現(xiàn)運(yùn)動(dòng)控制模塊的功能,兼顧了性能和價(jià)格,。同時(shí)因?yàn)槭褂昧薃NSI C的標(biāo)準(zhǔn)庫函數(shù),,程序移植性好,數(shù)控解釋程序中的關(guān)鍵技術(shù)G代碼解釋器的開發(fā)難度大大降低,。在運(yùn)動(dòng)控制模塊中移植Modbus協(xié)議,,從而使其能簡(jiǎn)單地與PLC系統(tǒng)組成運(yùn)動(dòng)控制網(wǎng)絡(luò)。采用歐姆龍通信協(xié)議宏實(shí)現(xiàn)控制多臺(tái)運(yùn)動(dòng)控制模塊,,簡(jiǎn)化了現(xiàn)場(chǎng)布線,,達(dá)到了設(shè)計(jì)要求,取得了很好的效果,。
參考文獻(xiàn)
[1] 李占斌,萬長(zhǎng)慶.實(shí)現(xiàn)數(shù)控機(jī)床三軸聯(lián)動(dòng)的逐點(diǎn)比較法[J].機(jī)床與液壓,,2004(7):64-65.
[2] 吳超英,潘紫微.基于FPGA的數(shù)控逐點(diǎn)比較法直線插補(bǔ)數(shù)字系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)電工程,,2001,18(6):45-48.
[3] OMRON. Sysmac C200HW-COM01~C200HW-COM06-V1操作手冊(cè). 2001.