梁曉兵,劉志強,王璠
(河南機電職業學院,鄭州 451191)
目前數控系統在插補圓弧的過程中,使用的基本上都是二階近似法進行圓弧插補的,這種方法使用一組直線來逼近圓弧,計算出插補周期的坐標增量值。目前國內外很多學者已經在這方面進行了很多研究,韓賽飛等[1]實現了改進型圓弧插補算法及FPGA實現;劉煥等[2]分析了基于微分模型的空間圓弧與橢圓弧插補算法;姚曉通等[3]分析了圓弧插補算法的FPGA實現;李偉光等[4]分析了無限直線逼近圓弧方法;劉鵬飛等[5]分析了在機器人領域中的應用;何均等[6]實現了短線段空間圓弧轉接與插補;劉放等[7]介紹了基于四元數的空間圓弧插補算法;王中平等[8]基于矢量分析了圓弧插補算法;詹泳等[9]實現了五軸空間圓弧插補;朱國力等[10]介紹了插補算法的應用;賀德華等[11]推導了空間任意圓弧的插補算法;高宏卿等[12]推導了空間圓弧變換插補原理與算法。
在計算過程中,傳統插補算法使用了三角函數的泰勒展開式中的低階近似,使得插補點遠離圓弧,產生一定的累積誤差。針對這種情況,提出一種改進的圓弧插補算法,進一步提高插補運算精度。
1時間分割法插補原理
現以第一象限逆時針插補為例,說明傳統時間分割法實現原理。如圖1所示,設待插補圓弧半徑為R,圓心坐標(0,0),插補速度為F,插補周期為T,每次插補的進給步長f=F·T。

圖1 圓弧逆時針插補兩點位置關系
對圓弧上動點Pi(xi,yi),滿足以下關系:
yi=R·sinα;xi=R·cosα。
Pi+1(xi+1,yi+1)是下一插補點坐標,PiPi+1是每插補周期的進給步長f,其對應的圓心角是θ。
下一插補點坐標值計算方法為
yi+1=R·sin(α+θ);xi+1=R·cos(α+θ)。
展開后得:

對其中的三角函數泰勒展開并取二階以下變量公式可得:
cosθ≈1-θ2/2;sinθ≈θ。
且由θ=f/R,代入式(1)、式(2),可得:

設A=f/R=θ,B=θ2/2,代入式(3)、式(4),可得:

取Δyi=yi+1-yi=-B·yi+A·xi;Δxi=xi+1-xi=-B·xi-A·yi。

弓高誤差δ計算公式為

上面傳統的時間分割法圓弧插補運算,引入了近似計算,存在一定的誤差,而且弓高誤差較大,為了減小誤差,下面提出一種改進的時間分割圓弧插補改進方法。
對于有一定誤差的待加工面(如圖2),如果實際加工面位于理論待加工面單側,那么最大誤差就是實際加工最大尺寸減去理論加工面尺寸。如果實際加工面位于理論待加工面兩側,那么,最大誤差就是理論面和實際面兩側尺寸差的最大值,如果兩面對稱,最大誤差就是實際誤差的一半。

圖2 待加工面
對于給定的弓高誤差δ和圓弧半徑R,分別做半徑為R-δ/2、R+δ/2圓弧,已知Pi(xi,yi)點,求下一插補點Pi+1(xi+1,yi+1)坐標。過Pi點做內圓弧的切線交半徑為R-δ/2內圓弧于切點P(xq,yq)點,如圖3所示。

圖3 改進算法逆時針插補點位置關系
由于P點是切點,PPi是內圓弧切線,且PPi長度值為f/2,由幾何關系可得:

代入式(10)、式(11),可以求得P(xq,yq)坐標為:

根據圖3幾何關系,P(xq,yq)為Pi(xi,yi)點和Pi+1(xi+1,yi+1)連線的中點,可知:

聯立式(12)~式(15),可得:


Δyi=yi+1-yi,Δxi=xi+1-xi,改進后的時間分割圓弧插補算法的計算步驟如下。
由于上面為了減小誤差,改進了算法,計算過程中插補的點都在半徑為R+δ/2圓弧上,由此引入了2個特殊點即起點P0(x0,y0)和終點Pe(xe,ye),這兩個特殊點需要特殊處理。
對于起點P0(x0,y0),給定的起點坐標位于半徑為R的圓弧上,實際插補計算的起點位于半徑為R+δ/2的圓弧上,因此需要計算插補起點Pc0(xc0,yc0)。
根據圖3幾何關系得:

對于終點坐標Pe(xe,ye),實際需要的終點坐標位于半徑為R圓弧上,實時插補計算的終點位于半徑為R+δ/2圓弧上,因此需要計算實際終點Pea(xea,yea)。根據圖3的幾何關系可得:

在傳統算法中,由于對正弦余弦三角函數進行了二階近似,由式(5)、式(6)求得的下一插補點可能會偏離圓弧產生徑向誤差。插補過程中由于使用了弦線代替圓弧,還會產生弓高誤差。
在改進算法中,由于使用R+δ/2的圓弧代替半徑為R的圓弧,同樣會產生徑向誤差和弓高誤差。
徑向誤差即實際插補點坐標與理論坐標點的偏差,實際計算根據實際插補點坐標的坐標值與理論半徑的距離來表示:

由式(5)、式(6)可得傳統插補算法徑向誤差為




由于θ不為0,δci也不等于0,即存在徑向誤差,而且隨著插補次數的增加,徑向誤差也會越來越大。
對于改進后的算法,由圖3幾何關系得

由式(16)、式(17)、式(19)得

代入式(18),可得

經過改進后,算法誤差是恒定值,和插補次數無關,誤差不累計,可以在預插補階段進行誤差補償一個恒定值,進一步減小誤差。

在傳統得插補算法中,使用了二階近似來簡化計算過程,改進算法沒有采用近似處理,一方面是因為現在嵌入式系統計算能力越來越強,比如STM32等微控制器都帶了硬件除法器;另一方面是因為本改進算法在插補過程中和傳統插補算法過程一樣,除了常量系數計算不一樣,常量系數計算過程可以放到插補預處理階段進行,而且改進算法比傳統算法只多了一步除法運算。在168 MHz的STM32f407芯片上進行插補系數計算仿真,結果測得傳統算法每次實際計算時間為0.148μs,改進后插補時間為0.369μs,時間基本一致。
綜上,傳統算法徑向誤差隨插補次數的增加不斷增加,改進算法后,徑向誤差不隨插補次數變化而變化,穩定無變化。弓高誤差傳統算法為f2/(8R),改進后算法誤差為f2/(16R),只是傳統算法誤差的一半。由于徑向誤差和弓高誤差在相反方向,最大誤差為徑向誤差和弓高誤差的最大值。改進后算法最大誤差為f2/(16R),只是傳統算法誤差的一半。
通過對時間分割圓弧插補算法和改進后的算法對比計算分析,可知改進算法的誤差要比原來的算法誤差減小一半,精度得到了很大提高。改進后插補過程運算速度相同,插補系數計算相對低一些,但是誤差不到1μs,滿足實時插補要求。