劉青林 王庭有
(昆明理工大學(xué)機(jī)電工程學(xué)院)
PLC在運(yùn)動(dòng)控制系統(tǒng)中, 脈沖信號(hào)的輸出方法主要有以下兩種[1]:
a.脈沖輸出功能集成在PLC中,這是目前大部分PLC采用的方式,例如三菱FX3U系列PLC、西門子S7-1200系列PLC等。此類PLC自帶高速脈沖輸出功能,但與單獨(dú)的運(yùn)動(dòng)控制模塊相比速度較慢。
b.添加脈沖輸出模塊。 這種模塊能夠?qū)崿F(xiàn)較簡單的運(yùn)動(dòng)控制,但脈沖輸出的速度很高,適合在對(duì)速度和精度有較高要求的場合使用。
在定位控制中,一路脈沖信號(hào)只能控制一臺(tái)步進(jìn)電機(jī)的運(yùn)動(dòng),一個(gè)單軸的運(yùn)動(dòng)軌跡只能是直線運(yùn)動(dòng)或者圓周運(yùn)動(dòng)。 但有時(shí)在工業(yè)控制中,又必須實(shí)現(xiàn)多個(gè)軸的相互聯(lián)動(dòng)運(yùn)動(dòng)。 例如在數(shù)控機(jī)床的加工過程中,在理論上刀具必須非常精確地沿著被加工工件的輪廓運(yùn)動(dòng),同時(shí)滿足對(duì)加工對(duì)象的精度要求[2]。 但是真正加工的工件輪廓可能是各種形狀,有一些是簡單的曲線,如直線段和圓弧,還有一些是復(fù)雜曲線。 直接生成復(fù)雜曲線的運(yùn)動(dòng)軌跡會(huì)耗費(fèi)大量的計(jì)算資源,因此在實(shí)際應(yīng)用中通常使用簡單的線型去擬合復(fù)雜曲線,同時(shí)采用一系列微小的直線段去逼近直線或圓弧,以滿足對(duì)控制精度的要求。 直線插補(bǔ)算法可根據(jù)加工速度的要求, 在給定的數(shù)據(jù)點(diǎn)坐標(biāo)之間,連續(xù)計(jì)算出若干中間點(diǎn)的坐標(biāo)值,從而擬合出預(yù)設(shè)的曲線。
筆者主要利用逐點(diǎn)比較法實(shí)現(xiàn)插補(bǔ)算法控制。 逐點(diǎn)比較法的基本原理為:在被控對(duì)象(被控工件)運(yùn)動(dòng)過程中,不斷地使被控對(duì)象與插補(bǔ)直線進(jìn)行相對(duì)位置比較,并依據(jù)結(jié)果使被控對(duì)象沿著運(yùn)動(dòng)誤差逐漸縮小的方向, 做平行于x軸或y軸方向的階梯式直線運(yùn)動(dòng),直到到達(dá)直線運(yùn)動(dòng)的終點(diǎn)為止[3~5]。逐點(diǎn)比較法的直線插補(bǔ)過程示意圖如圖1所示。
圖1 逐點(diǎn)比較法的直線插補(bǔ)過程示意圖
以直線插補(bǔ)算法的第一象限(圖2)為例。
圖2 第一象限直線插補(bǔ)偏差位置判斷
設(shè)第一象限的運(yùn)動(dòng)軌跡為直線oN,終點(diǎn)坐標(biāo)N(XN,YN),動(dòng)點(diǎn)的位置有3種情況:位于點(diǎn)A、B或C。 設(shè)動(dòng)點(diǎn)P從o點(diǎn)開始通過直線插補(bǔ)的方式最后到達(dá)N點(diǎn),完成oN的位移。首先需要判斷動(dòng)點(diǎn)的位置,假設(shè)動(dòng)點(diǎn)坐標(biāo)為B(X,Y),位于oN下方,此時(shí)oB的斜率tan θB小于oN的斜率tan θN,整理得:
同樣,也可以得到動(dòng)點(diǎn)位于A點(diǎn)、C點(diǎn)時(shí)的公式:
a.動(dòng)點(diǎn)位于A點(diǎn)時(shí),YXN-YNX=0;
b.動(dòng)點(diǎn)位于C點(diǎn)時(shí),YXN-YNX>0。
設(shè)判斷公式F=YXN-YNX,則有:
a. 當(dāng)F=0時(shí),工件可以向x軸或y軸移動(dòng),但通常規(guī)定向x軸方向移動(dòng);
b.當(dāng)F<0時(shí),工件向y軸方向移動(dòng);
c.當(dāng)F>0時(shí),工件向x軸方向移動(dòng)。
工件每移動(dòng)一步后都需要進(jìn)行判定,確定下一步的運(yùn)行方向,如此反復(fù),直到到達(dá)終點(diǎn)N。
(3)效益估算。①節(jié)水效益本項(xiàng)目總干渠節(jié)水量Q計(jì)算見(3-1),控制灌溉面積57.92萬畝,得出共節(jié)水1185.51萬m3,按照當(dāng)?shù)爻杀舅畠r(jià)0.10元/m3計(jì)算,年節(jié)水金額為118.55萬元。
由于計(jì)算過程中需要用到乘法,會(huì)直接影響嵌入式PLC的運(yùn)算速度, 因此為了簡化算法進(jìn)行以下變換:
a. 當(dāng)F≥0時(shí), 動(dòng)點(diǎn)向x軸方向運(yùn)動(dòng)一步到達(dá)點(diǎn)(X+1,Y),令新的偏差值為F′,代入判斷公式并整理得F′=F-YN;
b. 當(dāng)F<0時(shí),動(dòng)點(diǎn)向y軸方向運(yùn)動(dòng)一步到達(dá)點(diǎn)(X,Y+1),代入判斷公式并整理得F′=F+XN。
工件到達(dá)曲線終點(diǎn)時(shí)必須自動(dòng)停止運(yùn)行,需要一個(gè)計(jì)數(shù)器統(tǒng)計(jì)運(yùn)行的步數(shù),并且在每一步后進(jìn)行終點(diǎn)判斷,當(dāng)計(jì)數(shù)值為0時(shí),表示工件已經(jīng)到達(dá)終點(diǎn),停止運(yùn)動(dòng)。
嵌入式PLC的脈沖輸出硬件電路如圖3所示。該電路通過高速光電耦合器6N137將PLC內(nèi)外進(jìn)行電氣隔離,該光耦的最大傳輸速度可以達(dá)到10 Mbit/s, 并采用PNP三極管2SA954對(duì)外部設(shè)備進(jìn)行驅(qū)動(dòng)。OUT0和OUT1連接STM32單片機(jī)的PE9和PE10 引 腳, 與 單 片 機(jī) 內(nèi) 部 的TIM8_CH1 和TIM8_CH2相匹配,Q0和Q1接外部負(fù)載,COM_Q0和COM_Q1為Q0、Q1的公共端。
圖3 嵌入式PLC的脈沖輸出硬件電路
嵌入式PLC的硬件平臺(tái)采用STM32單片機(jī)作為中央處理器, 該單片機(jī)輸出脈沖的方法有很多,包括PWM輸出、強(qiáng)制輸出、電平翻轉(zhuǎn)輸出及單脈沖輸出等[6]。
本系統(tǒng)中嵌入式PLC選擇定時(shí)器的PWM輸出作為運(yùn)動(dòng)控制指令脈沖信號(hào)的輸出方法。 運(yùn)動(dòng)控制指令需要輸出指定數(shù)量的脈沖,其控制方法是使用STM32單片機(jī)中的定時(shí)器主從模式, 其結(jié)構(gòu)示意圖如圖4所示。
圖4 定時(shí)器主從模式結(jié)構(gòu)示意圖
直線插補(bǔ)指令的作用是讓兩個(gè)軸的聯(lián)動(dòng)沿著一條直線軌跡運(yùn)動(dòng)。 在直線插補(bǔ)指令中,一般起點(diǎn)為兩軸當(dāng)前所在位置,而終點(diǎn)需要在指令中進(jìn)行設(shè)置,分別是x軸和y軸的增量值。 直線插補(bǔ)運(yùn)動(dòng)指令梯形圖如圖5所示。 其中,IN1為脈沖頻率,IN2為直線插補(bǔ)的步長,IN3為x軸終點(diǎn)坐標(biāo),IN4為y軸終點(diǎn)坐標(biāo),OUT1為x軸輸出端口,OUT2為y軸輸出端口。
圖5 直線插補(bǔ)運(yùn)動(dòng)指令梯形圖
直線插補(bǔ)程序流程如圖6所示。
圖6 直線插補(bǔ)程序流程
直線插補(bǔ)指令執(zhí)行步驟如下:
a. 開始直線插補(bǔ)指令后,首先對(duì)運(yùn)動(dòng)進(jìn)行規(guī)劃,將需要的參數(shù)進(jìn)行初始化,計(jì)算出插補(bǔ)的總步數(shù),確定直線插補(bǔ)的象限,并將直線插補(bǔ)指令的標(biāo)志位置1;
b. 判斷軸所在的象限,并根據(jù)其位置進(jìn)行插補(bǔ);
c. 根據(jù)步驟b計(jì)算出的輸出軸、脈沖數(shù)量、運(yùn)動(dòng)方向調(diào)用脈沖輸出程序,進(jìn)行脈沖輸出;
d. 判斷是否已經(jīng)抵達(dá)曲線的終點(diǎn),若還沒抵達(dá)曲線的終點(diǎn)則重復(fù)執(zhí)行步驟b,若已完成,則跳出程序。
筆者分析了直線插補(bǔ)算法的原理,依托于嵌入式PLC硬件平臺(tái),設(shè)計(jì)并實(shí)現(xiàn)了直線插補(bǔ)指令,使PLC可以進(jìn)行雙軸運(yùn)動(dòng)控制。 筆者設(shè)計(jì)的基于ARM的嵌入式PLC直線插補(bǔ)運(yùn)動(dòng)控制方法, 通過擬合預(yù)設(shè)曲線,在滿足加工速度要求的同時(shí)可以滿足對(duì)控制精度的要求。