孫旭霞,張 英
(西安理工大學(xué) 自動(dòng)化與信息工程學(xué)院,陜西 西安710048)
隨著微電子技術(shù)、計(jì)算機(jī)技術(shù)、自動(dòng)控制技術(shù)和通信技術(shù)的不斷進(jìn)步,現(xiàn)代數(shù)控系統(tǒng)的發(fā)展趨向高性能化。其中性能的完善主要體現(xiàn)在高速度、高精度、高可靠性、多功能化、網(wǎng)絡(luò)化、小型化、多樣化、智能化和開(kāi)放性等方面。插補(bǔ)技術(shù)是數(shù)控系統(tǒng)的核心,為使高檔數(shù)控系統(tǒng)能發(fā)揮其功能,高精度、高速度、高效率的插補(bǔ)算法成為目前研究需要突破的難點(diǎn)[1]。
在數(shù)控插補(bǔ)裝置上,針對(duì)船身外放樣時(shí)的樣條曲線,汽車、飛機(jī)及各種產(chǎn)品的外形曲線等無(wú)法用標(biāo)準(zhǔn)代數(shù)方程描述的復(fù)雜曲線,一般都采用直線逼近或圓弧逼近的方法來(lái)實(shí)現(xiàn)其插補(bǔ),然而這種方法所編寫的算法較為復(fù)雜,且在計(jì)算過(guò)程中還會(huì)產(chǎn)生計(jì)算誤差及誤差的累積,降低了插補(bǔ)的精度。而三次樣條函數(shù)基于可使曲線各分段處保持一定程度的光滑性,其具有很好的保凸性和光順性,且能保持曲線的連續(xù)性。同時(shí)三次樣條函數(shù)的應(yīng)用范圍廣泛,特別是在給定型值點(diǎn)的曲線擬合方面,如在插補(bǔ)裝置中實(shí)現(xiàn)凸輪、汽車外輪廓等曲線。因此對(duì)于某些復(fù)雜零件,采用三次樣條函數(shù)的插補(bǔ)方法描述其輪廓是一種極為有效的手段?;谌螛訔l函數(shù)的上述特性,本文描述了三次樣條曲線形成曲線輪廓并在數(shù)控插補(bǔ)裝置上實(shí)現(xiàn)插補(bǔ)的過(guò)程。該方法既能提高插補(bǔ)精度,又使計(jì)算不太復(fù) 雜[2,3]。
三次樣條函數(shù)的定義如下:設(shè)有n個(gè)離散點(diǎn),分別為 p1(x1,y1)、p2(x2,y2)、…、pn(xn,yn),且 x1<x2<…<xn,若曲線 S(x)滿足以下幾個(gè)條件則稱 S(x)為區(qū)間[x1,xn]上以xj(j=1,2,…,n)為型值的三次樣條函數(shù)。
(1)S(x)通過(guò)所有型值點(diǎn),且 S(xj)=yj(j=1,2,…,n);
(2)S(x)在區(qū)間[x1,xn]內(nèi),存在連續(xù)的一階導(dǎo)數(shù)、二階導(dǎo)數(shù);
(3)S(x)在 每 個(gè) 子 區(qū) 間[xj,xj+1]內(nèi) , 均 可 采 用 三 次 多項(xiàng)式來(lái)表示,即 Sj(x)=aj+bj(x-xj)+cj(x-xj)2+dj(x-xj)3,(j=1,2,…,n-1)。
下文將利用型值點(diǎn)處二階導(dǎo)數(shù)相等的邊界條件來(lái)求得三次樣條函數(shù),并給出具體的推導(dǎo)過(guò)程。
利用三次樣條函數(shù)解決復(fù)雜曲線插補(bǔ)問(wèn)題的思路是:在被插補(bǔ)的復(fù)雜曲線上找到一定數(shù)量的型值點(diǎn),采用三次樣條求出插補(bǔ)中間點(diǎn),然后利用相鄰兩端曲線交點(diǎn)處的一階導(dǎo)數(shù)、二階導(dǎo)數(shù)相等這一條件,實(shí)現(xiàn)整段曲線連續(xù)且在曲線連接處平滑過(guò)渡的效果。
首先構(gòu)造滿足條件的三次樣條函數(shù)S(x)的表達(dá)式。假定 S′j(x)=mj(j=1,2,…,n),則由分段三次埃爾米特插值公式[4]可得:
其中 αj(x)、βj(x)是插值基函數(shù)。 顯然,表達(dá)式中 S(x)及S′(x)在 整 個(gè) 區(qū) 間[a,b]上 連 續(xù) ,且 滿 足 S(xj)=yj(j=1,2,…,n),只要求得mj,三次樣條函數(shù)就可以構(gòu)造成功。下面是mj的求解過(guò)程。
利用插值基函數(shù)需滿足的條件求出 αj(x)、βj(x),即可得出 S(x)在[xj,xj+1]上的表達(dá)式為:
其中 hj=xj+1-xj。 對(duì) S(x)在[xj,xj+1]上求二次導(dǎo)數(shù)得:
由式(3)可推導(dǎo)出:
同理可得 S″(x)在區(qū)間[xj-1,xj]的表達(dá)式為:
則:
由條件 S″(xj+0)=S″(xj-0)(j=2,3,…,n-1),可得:
其中:
若邊界條件為 S″(x1)=S″(xn)=0,即滿足自然邊界條件[3,5],則得兩端的方 程為:
式(8)、式(10)用矩陣形式表示為 Am=g,即:
將上式中的A分解為下三角矩陣L及單位上三角矩陣U的乘積,即A=LU,其中 L、U如式(12)所示。
利用矩陣乘法公式及追趕法求得mj(j=1,…,n)。
最終由式(2)計(jì)算出 S(x)。
根據(jù)以上的擬合原理,結(jié)合插補(bǔ)算法原理,可以生成基于三次樣條函數(shù)的插補(bǔ)算法,步驟如下:
(1)根據(jù)曲線選出 n個(gè)型值點(diǎn),其坐標(biāo)值為(xj,yj),(j=1,2,…,n),并使得 x1<x2…<xn。
(2)求 mj(j=1,…,n)的值。
令 hj=xj+1-xj;μj=hj-1/(hj-1+hj);
λj=hj/(hj-1+hj);mj=yj′;
求得:
取 μ1=1,λn=1;
得:g1=3(y2-y1)/h1,gn=3(yn-yn-1)/hn-1;
利用矩陣乘法公式[6-8]得:
利用追趕法根據(jù)LR=g得:
由Um=R得:
(3)求三次樣條函數(shù)的系數(shù)。經(jīng)過(guò)上面一系列的計(jì)算之后,可得該函數(shù)的系數(shù)如下:
(4)求三次樣條函數(shù)的表達(dá)式。將式(17)代入式(18)中即可得出三次樣條函數(shù)的表達(dá)式:
以[xj,xj+1]為例,該算法的插補(bǔ)過(guò)程如下:此為三次樣條曲線中第j段的插補(bǔ),x軸以xj為起點(diǎn)坐標(biāo),x每次累加△x,再根據(jù)函數(shù)表達(dá)式計(jì)算出Sj(x)的值,照此循環(huán)計(jì)算,就可算出每一段函數(shù)每一點(diǎn)x所對(duì)應(yīng)的函數(shù)值,最終得到插補(bǔ)點(diǎn)X、Y軸的坐標(biāo)值,并輸出每一點(diǎn)的坐標(biāo)值,直到x=xj+1,整段的插補(bǔ)即完成了。其中△x為正整數(shù),且其所取值必須使得(xj+1-xj)/△x為整數(shù),并確保Y坐標(biāo)值的變化量大于1。其他段按上述原理繼續(xù)進(jìn)行相應(yīng)的插補(bǔ)計(jì)算。
本文使用以S3C2410為主芯片的ARM開(kāi)發(fā)板作為數(shù)控裝置。ARM采用RISC結(jié)構(gòu),能在一個(gè)機(jī)器周期內(nèi)執(zhí)行一條指令。此開(kāi)發(fā)板屬于ARM9處理器系列,具有ICache和DCache,提高了存儲(chǔ)器訪問(wèn)的效率,具有64 MB NAND Flash和64 MB SDRAM的儲(chǔ)存容量。其晶振頻率為12 MHz,而時(shí)鐘控制邏輯能夠產(chǎn)生4倍晶振頻率的PCLK時(shí)鐘信號(hào),即為48 MHz。用該P(yáng)CLK值計(jì)算所得的定時(shí)器輸入頻率高,從而使得定時(shí)時(shí)間能設(shè)定得很短。以上特性使此插補(bǔ)算法能在該裝置上得以運(yùn)行,且具有較高的插補(bǔ)速度,以實(shí)現(xiàn)三次樣條曲線的插補(bǔ)。
在ARM開(kāi)發(fā)板上外接兩個(gè)步進(jìn)電機(jī),分別用于實(shí)現(xiàn)X軸和Y軸方向的插補(bǔ)。通過(guò)改變定時(shí)計(jì)數(shù)器的初值,使得脈沖輸出速度不同,從而實(shí)現(xiàn)步進(jìn)電機(jī)以不同速度沿X軸和Y軸運(yùn)行。
三次樣條曲線的插補(bǔ)算法流程如圖1所示。
圖1 插補(bǔ)算法的流程
為了驗(yàn)證三次樣條函數(shù)插補(bǔ)方法的可行性,取一組滿足三次樣條函數(shù)的型值點(diǎn),根據(jù)三次樣條函數(shù)的擬合原理編程,擬合出如圖2所示的三次樣條曲線。
圖2是整個(gè)三次樣條曲線的輪廓,為了把這種方法應(yīng)用在數(shù)控插補(bǔ)上,還必須在此基礎(chǔ)上取適當(dāng)?shù)牟逖a(bǔ)點(diǎn),在ADS1.2集成環(huán)境下,用ARM開(kāi)發(fā)板進(jìn)行調(diào)試,在此裝置上運(yùn)行之后,使得步進(jìn)電機(jī)依插補(bǔ)結(jié)果運(yùn)轉(zhuǎn),運(yùn)行結(jié)果如圖3所示。
按照以上兩圖的實(shí)現(xiàn)結(jié)果進(jìn)行如下分析:圖2是按照擬合原理擬合出來(lái)的完整三次樣條曲線的輪廓,該曲線相鄰兩端交點(diǎn)處一階導(dǎo)數(shù)、二階導(dǎo)數(shù)相等,具有很好的光順性,且保持良好的連續(xù)性。圖3是在三次樣條曲線基礎(chǔ)上取適當(dāng)?shù)牟逖a(bǔ)點(diǎn)進(jìn)行插補(bǔ)的結(jié)果,取的插補(bǔ)點(diǎn)越密集,插補(bǔ)結(jié)果就越接近真實(shí)曲線,精度也就越高。由插補(bǔ)算法可知Y坐標(biāo)值是根據(jù)X坐標(biāo)值計(jì)算所得,最終求得y的變化量,因此x所對(duì)應(yīng)的I/O每輸出一個(gè)脈沖,y對(duì)應(yīng)的I/O輸出的脈沖數(shù)根據(jù)計(jì)算結(jié)果而變化。由于插補(bǔ)的每個(gè)點(diǎn)都確保在此三次樣條曲線上,比起用直線或圓弧逼近曲線的方法,插補(bǔ)效果在準(zhǔn)確度和精確度上明顯提高。
在數(shù)控裝置上,利用三次樣條函數(shù)不僅能夠進(jìn)行簡(jiǎn)單曲線的插補(bǔ)計(jì)算,對(duì)于無(wú)法通過(guò)直線、圓弧以及其他二次曲線來(lái)描述其輪廓的復(fù)雜零件,同樣能實(shí)現(xiàn)其插補(bǔ),同時(shí)具有很好的保凸性和光順性,且保證了插值函數(shù)的連續(xù)性及插補(bǔ)的精度,增加了數(shù)控裝置的曲線應(yīng)用范圍。本文以ARM開(kāi)發(fā)板作為數(shù)控裝置,對(duì)此插補(bǔ)算法進(jìn)行了驗(yàn)證,該方法算法簡(jiǎn)單,易實(shí)現(xiàn),精度較高,插補(bǔ)效果好。
[1]盧勝利,王睿鵬,祝玲.現(xiàn)代數(shù)控系統(tǒng)—原理、構(gòu)成與實(shí)例[M].北京:機(jī)械工業(yè)出版社,2007.
[2]包園園.三次樣條函數(shù)在自由曲線測(cè)量中的應(yīng)用研究[J].機(jī)械制造與自動(dòng)化,2009,38(2):88-89.
[3]王茹傳,黃海平,林巧民.計(jì)算機(jī)圖形學(xué)(第 2版)[M].北京:人民郵電出版社,2009.
[4]聶玉峰.Lagrange插值和Hermite插值的內(nèi)在統(tǒng)一理論[J].高等數(shù)學(xué)研究,2010,13(1):13-14.
[5]鄒淑芳.三次樣條函數(shù)的基樣條法和三彎矩法之異同比較[J].云南電大學(xué)報(bào),2009,11(2):93-96.
[6]Sun Ningping,AYABE T,NISHIZAKI T.Efficient spline interpolation curve modeling[C].Intelligent Information Hiding and Multimedia Signal Processing,2007:59-62.
[7]許小勇,鐘太勇.三次樣條插值函數(shù)的構(gòu)造與Matlab實(shí)現(xiàn)[J].自動(dòng)測(cè)量與控制,2006,25(11):76-78.
[8]孫令德.計(jì)算機(jī)圖形學(xué)實(shí)踐教程(Visual C++版)[M].北京:清華大學(xué)出版社,2008.