曹智梅
(廣東松山職業(yè)技術(shù)學(xué)院,廣東韶關(guān) 512126)
普通數(shù)控機床具備直線和圓弧插補功能。對于非圓曲線的加工,通常是在曲線上取若干個點,在保證插補誤差的前提下,兩相鄰點間采用直線的方式進行插補,這種插補計算方便,數(shù)學(xué)處理簡單,但所得的逼近點數(shù)量較多,逼近線段較短,且各直線段連接處存在尖角,影響零件的加工質(zhì)量。隨著科技的進步,數(shù)控系統(tǒng)計算能力的增強,社會對數(shù)控加工產(chǎn)品的質(zhì)量要求越來越高,圓弧插補得到了更廣泛的應(yīng)用。
圓弧插補就是在插補誤差允許的范圍內(nèi),用無數(shù)條微小的圓弧段來替代非圓曲線。采用微小圓弧段進給時,要解決各段圓弧尺寸的計算,以及圓弧順逆的判斷,以便使用系統(tǒng)已有的G02/G03指令來加工。與直線插補相比,圓弧插補能減少插補的段落數(shù),提高插補質(zhì)量。
采用圓弧段逼近曲線,目前常采用的方法有三點圓法、曲率圓法、相切圓法[1]等。其中曲率圓法的本質(zhì)是二點圓法,其計算過程中涉及到四次方程的求解,計算復(fù)雜。而相切圓法雖然加工出的零件表面質(zhì)量好,但整個計算過程非常復(fù)雜,同時要將曲線的拐點作為計算單元的分割點,增加了數(shù)控編程的難度。
三點圓法是在非圓曲線上按一定規(guī)律取3個已知點,根據(jù)三點定圓的原理計算圓弧的基本尺寸,再通過控制最大插補誤差來修正插補點的位置。本文對傳統(tǒng)三點圓法進行了改進,以參數(shù)中間點替代極值點[2],簡化三點圓法插補誤差計算,在滿足加工質(zhì)量的前提下,其計算過程簡便,插補效率高。
三點圓弧計算如圖1所示。
圖1 三點圓弧計算
已知A(x1,y1)、B(x2,y2)、C(x3,y3)為圓上的三點,假設(shè)圓心坐標(biāo)O(x0,y0),圓弧半徑為R,如圖1所示,則根據(jù)圓的特性可知,AO=BO=CO=R。則有:
分別將3個方程式展開:
將方程兩兩相減,并令:
若D=0則:
即A、B、C三點共線或有兩個點重合或三點重合。
當(dāng)D≠0可解得:
在數(shù)控機床中要編寫通過三點的圓弧程序,除了要計算圓弧的圓心坐標(biāo)和半徑,還必須判斷出圓弧是順時針還是逆時針,從而決定程序中采用G02還是G03。順(逆)時針圓弧如圖2所示。圖2(a)~(b)的兩段圓弧均通過A、B、C三點,其中A為圓弧的起點,B為圓弧的中點,C為圓弧的終點。
圖2 順(逆)時針圓弧
可以很直觀地看出,對于圖2(a),當(dāng)點A繞著圓心經(jīng)過點B到達點C,即AO經(jīng)過BO到達CO時,其旋轉(zhuǎn)的方向與時鐘的轉(zhuǎn)動方向相同,即為順時針圓弧,同理,對于圖2(b)則為逆時針圓弧。
在進行程序編程時,由于在曲線上選用的三點是在動態(tài)變化的,無法采用這種直觀的方法進行圓弧順逆的判斷,必須要找到一個條件來判斷,而且這個條件是可以用公式進行量化,通過量化的結(jié)果進行判斷,并且判斷的結(jié)果是唯一。
李柯等[3]介紹了采用角度的正切來判斷圓弧順逆,這種方法沒有考慮到角度正切無意思的情況,且整個判斷過程復(fù)雜,計算難度大。與之相比,利用向量叉積來判斷圓弧的順逆是一個比較好的選擇。
兩個向量的叉積為一個新的向量。根據(jù)定義,兩個向量的叉積大小等于這兩個向量組成的平行四邊形的面積,其方向垂直于兩個向量所決定的平面,其指向按右手定則從第一個向量轉(zhuǎn)向第二個向量。當(dāng)向量叉積為負時,表示從第一個向量旋轉(zhuǎn)到第二個向量是順時針;當(dāng)向量叉積為正時,表示從第一個向量旋轉(zhuǎn)到第二個向量是逆時針。
向量的叉積對圓弧的順逆判斷有一個很好的提示,如圖3所示。圖中,三點圓弧中的起點A和中點B兩點構(gòu)成的向,起點A和終點C兩點構(gòu)成的向量對于圖3(a),按右手定則,向量的指向為垂直于當(dāng)前平面指向屏幕內(nèi)部,即向量叉積為負值,對照圖2可知,此時圓弧為順時針;對于圖3(b),按右手定則,向量的指向為垂直于當(dāng)前平面指向屏幕外部,即向量叉積為正值,對照圖2可知,此時圓弧為逆時針。
圖3 向量叉積的正負
已知A(x1,y1)、B(x2,y2)、C(x1,y1)三點,則向=(x2-x1,y2-x1),=(x3-x1,y3-x1),向和向的叉積為2×2的行列式,則:
利用右手法則進行判斷:
插補算法的原理就是通過控制最大插補誤差來完成插補點的篩選,所以插補誤差的計算是整個插補算法的核心[4]。
若已知A(x1,y1)、B(x2,y2)兩點,則兩點間的距離d可用公式表達為
插補誤差算法原理如圖4所示。
圖4 插補誤差算法原理
在要加工的曲線f(x)上依次取三點A、B、C,過三點作圓弧,圓弧的圓心為點O,圓弧的半徑為R,則AO=BO=CO=R。設(shè)P為曲線上從A到C間的任意一點,P到點O的距離為d,即d=PO。則曲線f(x)在AC間的插補誤差δ可表示為δ=|d-R|,最大誤差為:
式中:最大誤差δmax即為插補誤差。若在式中,A、B、C三點坐標(biāo)已知,則R為常數(shù),求δmax則轉(zhuǎn)化為求d的極值,即點P到點O的極值距離,由于點P為曲線上AC間的任意一點,求的極值即為求點O到曲線f(x)(x∈[x1,x3])的最大(或最短)距離。
求點到曲線的極值距離,就是求點到曲線的最大(或最短)距離??刹捎枚瘮?shù)條件極值的拉格朗日乘數(shù)法,再比較邊界點到原點的距離,這些點也就是要找的極值點。
這種計算點到曲線極值距離的方法雖然比較精確,但計算過程較復(fù)雜,涉及到格朗日函數(shù)的構(gòu)建以及偏導(dǎo)數(shù)的求解,且對于若干段微小圓弧插補來說,此種方法也不便采用。
求解點到曲線的極值距離相對復(fù)雜。換一種思路,如果將該段曲線離散點的數(shù)量取成有限點,求各離散點到圓心的距離,并找出各距離中的極值,由于此段圓弧是微小段,所取點的數(shù)量不必多,甚至僅取少數(shù)幾個點即可滿足誤差精度計算要求。
圖5 插補誤差簡化算法
插補誤差簡化算法如圖5所示。在曲線f(x)上,依次取A(x1,y1)、B (x2,y2)、C (x3,y3)。由于所取的三點A、B、C既在圓弧上,又在曲線上,因此該三點對應(yīng)的插補誤差為0,誤差的極值點在AB間,或BC間。為求極值,將AB間和BC間分別將參數(shù)進行n等分,即AB間和BC間各取n-1個點,AB間每相鄰的兩個點間的參數(shù)增量為間每相鄰的兩個點間的參數(shù)增量為,設(shè)AB段中的第i個點為Hi,則Hi(xhi,yhi)坐標(biāo)為:
設(shè)BC段中的第i個點為Ki,則Ki(xki,yki)坐標(biāo)為:
則點Hi和Ki到圓弧圓心點O(x0,y0)的距離分別為:
當(dāng)i的取值從1到n-1時,計算每個對應(yīng)的點Hi和Ki到圓心的距離,找出其極值點,即求出插補誤差δh和δk,若整個圓弧段的允許插補誤差為δ允,則:
設(shè)曲線f(x)的允許插補誤差為δ允,通過比較δh、δk、δ允三者的大小,可以實現(xiàn)參數(shù)自適應(yīng)的插補算法。當(dāng)時δh≤δ允且δk≤δ允,直接進入下一段圓弧的插補,否則減少A、B、C三點間的參數(shù)增量,重新計算。
上述求δh和δk計算中,分別將AB和BC進行參數(shù)n等分(n≥2),n取得越大,則計算精度越高,但帶來的問題是計算量成幾何級數(shù)增加。
圖6 插補誤差實用簡化算法
在實際加工中,為了簡化計算,可以將n取最小值2(此時i=1)。如圖6所示,此時僅在AB和BC段分別進行參數(shù)二等分,即在AB和BC兩段各取一個參數(shù)中間點H1和K1,并將H1和K1作為誤差的極值點。分別用兩點間的距離公式計算H1和K1到圓心的距離dh1和dk1,此時δh=|dh1-R|,δk=|dk1-R|。
與一般的曲線方程相比,參數(shù)方程具有更好的計算特性,為了方便計算,通常要將曲線方程y=f(x)改寫成參數(shù)方程的形式,即:
在曲線上依次取A、B、C三點,若A、B、C點對應(yīng)的參數(shù)分別為t1、t2、t3,為了計算方便,令,即三點按等參數(shù)Δt的方式進行選取。
AB和BC段的參數(shù)中間點H1、K1對應(yīng)的參數(shù)分別為:
求出H1和K1兩點的參數(shù)就可以求出兩點的坐標(biāo):
通過兩點的坐標(biāo),分別計算點到圓心的距離,并計算δh和δk,比較δh、δk和δ允三者的大小關(guān)系。當(dāng)δh、δk在允許的誤差范圍內(nèi)時,繼續(xù)進行下一段圓弧的插補;當(dāng)δh、δk不同時滿足插補誤差條件時,則重新取點進行插補運算,直至圓弧插補滿足誤差條件為止。
在設(shè)計算法流程框圖時,把參數(shù)作為變量,通過控制插補誤差來修正插補參數(shù),通過參數(shù)的改變來不斷重新選取插補點,直至插補結(jié)束。
首先按等參數(shù)Δt的方式在曲線上取A、B、C三點,并計算三點的坐標(biāo)。
再接下來,計算圓弧的圓心坐標(biāo)O(x0,y0),圓弧的半徑R,計算參數(shù)中間點H1和K1的坐標(biāo),計算H1和K1到圓心的距離以及δh和δk。
圖7 三點圓法插補算法流程
比較δh、δk和δ允三者的大小關(guān)系。當(dāng)δh≤δ允和δk≤δ允同時滿足時,繼續(xù)進行下一段圓弧的插補;不同時滿足時,減少參數(shù)增量Δt,重新取A、B、C三點進行運算,直至滿足誤差許可條件為止。圖7所示為三點圓法插補算法流程。
橢圓曲線在實際中應(yīng)用廣泛,數(shù)控考證和數(shù)控大賽中常有涉及。若要加工的橢圓曲線方程為為方便各點的坐標(biāo)計算,將橢圓的標(biāo)準(zhǔn)方程轉(zhuǎn)化為參數(shù)方程:。設(shè)加工的起點為(50,0),根據(jù)三點圓法參數(shù)自適應(yīng)插補算法原理,編寫宏程序O0001[5],如表1所示。
表1 宏程序O0001
續(xù)表
為了更好地分析插補算法效果,將程序O0001導(dǎo)入數(shù)控仿真軟件進行驗證。由于橢圓為軸對稱圖形,故只驗證t∈[0,90]的區(qū)間,即第一象限。其驗證的加工軌跡如圖6所示。
在進行編程時,只控制了最大插補誤差,而沒有限制最小插補誤差,所以在實際加工中,參數(shù)增量的選取對插補過程有著一定的影響。在程序O0001中,分別增加3個變量,一個計算插補的圓弧段數(shù),一個計算最大插補誤差,一個計算最小插補誤差,并將3個變量最終以坐標(biāo)的形式輸出。在進行插補時,初始設(shè)置的參數(shù)增量會對插補計算產(chǎn)生影響。表2所示為對Δt=2、Δt=4、Δt=6、Δt=10、Δt=12參數(shù)增量情況進行的誤差統(tǒng)計。
圖6 第一象限橢圓仿真加工軌跡
表2 參數(shù)增量對插補的影響
從表2可以看出,隨著參數(shù)增量的增加,插補所需要的圓弧段逐漸減少,最終趨于恒定,當(dāng)插補參數(shù)增量較小時,其最大插補誤差小于允許誤差,其插補的圓弧段數(shù)量增多,插補質(zhì)量相對較好,但插補時間較長。
當(dāng)參數(shù)增量的增加時,最大插補誤差也增大,最終趨于恒定值0.005(插補允許誤差,由程序來控制),所以也可以看出,參數(shù)增量的改變不會改變最大插補誤差,從而也驗證了該算法的正確性。但最小插補誤差也始終小于最大插補誤差,所以整個插補范圍內(nèi)都滿足插補誤差要求。當(dāng)然,合理選擇參數(shù)增量的大小可以減少插補圓弧段數(shù),減少插補時間,提高插補效率。
將程序輸入數(shù)控機床進行加工,加工出的產(chǎn)品也滿足插補誤差條件,進一步驗證了算法正確性。
本文在研究圓弧插補的基礎(chǔ)上,提出三點圓法參數(shù)自適應(yīng)插補算法,主要研究工作有:
(1)已知圓弧上的三點,計算出圓弧圓心的坐標(biāo)和圓弧半徑,并分析出三點共線的情形;
(2)利用向量的叉積來判斷圓弧的順逆,并推導(dǎo)出判別公式,該判別方法簡單,通用性強;
(3)分析三點圓法插補的誤差計算原理,以參數(shù)中間點替代極值點來計算插補誤差,簡化計算過程,在插補過程中,合理選擇參數(shù)增量的大小,可以提高插補效率;
(4)提出三點圓法參數(shù)自適應(yīng)插補算法,給出了算法的插補原理和算法流程圖,該算法能應(yīng)用于拋物線、雙曲線、正弦曲線、橢圓等多種非圓曲線,通用性強,與文獻[6]的方法相比,具有更好的算法優(yōu)勢;
(5)以橢圓曲線的加工為例,給出了三點圓法參數(shù)自適應(yīng)插補算法的完整程序,并在仿真軟件和機床上驗證了算法的正確性和適用性。