基于FPGA的數(shù)字積分法插補控制器設(shè)計與實現(xiàn)
摘要:為了提高伺服電機的步進精度,簡化控制器結(jié)構(gòu),采用FPGA器件并運用Verilog HDL語言設(shè)計出的插補控制器,不僅采用數(shù)字積分法實現(xiàn)直線插補控制和圓弧插補控制,提高了插補速度和插補精度,而且運用多軸聯(lián)動技術(shù),實現(xiàn)輸出脈沖的均勻分配。它可接收外部處理器指令,并發(fā)出所需的脈沖到伺服電機的驅(qū)動中,從而控制伺服電機的運轉(zhuǎn),其結(jié)果證明了該控制器的正確性。這種結(jié)構(gòu)的控制器簡化了一般數(shù)字控制器結(jié)構(gòu),具有良好的移植性能和一定的實用價值。
關(guān)鍵詞:運動控制;FPGA;插補控制器;數(shù)字積分法
0 引言
數(shù)控系統(tǒng)的核心技術(shù)是運動控制技術(shù),隨著機電一體化的深入發(fā)展,運動控制技術(shù)已經(jīng)成為推動機電一體化進程的重要環(huán)節(jié),是推動新的產(chǎn)業(yè)革命的關(guān)鍵技術(shù)碼。
現(xiàn)代高速數(shù)控技術(shù)對運動控制器的速度和精度要求日益提高,與運用軟件實現(xiàn)的控制器相比較,基于FPGA設(shè)計的插補控制器具有控制方便、插補速度快、精度高、通用性好、可移植性的特點,并擁有可運用硬件描述語言實現(xiàn)軟硬結(jié)合等多種優(yōu)點。為了提高伺服電機的精確度,本文設(shè)計了一個基于數(shù)字積分法并采用多軸聯(lián)動技術(shù)的插補控制器,該控制器可實現(xiàn)三軸的直線插補和兩軸的圓弧插補。
1 插補控制器的總體設(shè)計
該控制器的核心部分是DDA插補模塊,整個插補模塊可分成直線插補模塊和圓弧插補模塊兩部分。每個插補模塊內(nèi)都由數(shù)據(jù)緩存器、插補積分器和位置計數(shù)器3個部分組成。下面分別介紹各個模塊的設(shè)計及仿真。
插補控制器具備三軸直線插補及兩軸圓弧插補的能力,2種插補均采用數(shù)字積分法實現(xiàn)。數(shù)字積分法(DDA)具有邏輯能力強、可實現(xiàn)多軸聯(lián)動控制,且輸出脈沖均勻的特點。如圖1所示,插補控制器接收到外部處理器的控制信號和數(shù)據(jù),經(jīng)過譯碼及配置寄存器模塊的譯碼和配置后,根據(jù)需要選擇進行直線插補或圓弧插補,輸出指脈沖和方向信號。脈沖用于通過伺服電機驅(qū)動控制伺服電機的轉(zhuǎn)動,方向信號則控制伺服電機的轉(zhuǎn)動方向。
2 基于FPGA的模塊設(shè)計
該插補控制器采用Altera公司的CycloneⅢ-EP3C16Q240C8,運用Verilog HDL完成程序設(shè)計,在QuartusⅡ平臺進行編譯、綜合及下載,運用Modeisim進行程序的仿真和調(diào)試,最終完成整個控制器的設(shè)計(如圖1所示)。
2.1 譯碼及配置寄存器模塊
譯碼及配置寄存器模塊主要負責(zé)譯碼和完成各寄存器間數(shù)據(jù)的分配,并且選擇需要進行的插補方式。以下為各個輸入端口的定義和工作方式:cs為片選信號。
低電平有效,外部處理器選中插補控制器,使其進入待命狀態(tài);rest為復(fù)位信號。低電平有效,整個控制器處于復(fù)位狀態(tài),控制器內(nèi)部各個模塊做初始化操作;wr為寫信號,低電平有效,向插補控制器寫入需要完成插補的初始點坐標(biāo)和終點坐標(biāo)的數(shù)據(jù);start為插補開始信號,高電平有效,插補控制器開始進行插補;A3~A0為4位地址信號,通過地址指針的形式,將處理器數(shù)據(jù)分配給插補模塊各軸的數(shù)據(jù)緩存器。其中,高位A3具有選擇插補方式的功能;A3位為“0”時,插補控制器做三軸直線插補;A3位為“1”時,做兩軸圓弧插補;data為16位數(shù)據(jù)總線端口。
2.2 DDA插補模塊
DDA插補模塊有直線插補和圓弧插補兩部分,兩種插補方式在一次插補過程中,只能有一種處于工作狀態(tài)。直線插補能夠?qū)崿F(xiàn)3個軸的脈沖輸出,完成二維或三維的直線軌跡,而圓弧插補是實現(xiàn)兩軸的脈沖輸出,實現(xiàn)二維的圓弧軌跡。
2.2.1 直線插補模塊
當(dāng)選中直線插補模塊時,該模塊進入工作狀態(tài)。直線插補模塊由數(shù)據(jù)緩存器、插補積分器和位置計數(shù)器3個部分組成。下面分別介紹各部分的設(shè)計及其功能。
(1)數(shù)據(jù)緩存器
數(shù)據(jù)緩存器共由6個16位寄存器構(gòu)成,它們分別存儲x,y,z三個軸的初始點坐標(biāo)值及終點坐標(biāo)值。數(shù)據(jù)緩存模塊將直線插補的數(shù)據(jù)進行自動加載,以便于直線插補積分器調(diào)用模塊內(nèi)的數(shù)據(jù)。進行緩存的目的是為了保持數(shù)據(jù)的流暢性,確保直線插補不因為數(shù)據(jù)的轉(zhuǎn)變而出現(xiàn)中斷的情況。這樣大大地提高直線插補的效率,同時減少因為時序問題所帶來的誤差。當(dāng)積分器加載緩存器中的數(shù)據(jù)完畢以后,積分器接收到start信號,積分器開始進行數(shù)字積分直線插補。當(dāng)數(shù)據(jù)緩存器接收到rest信號時,緩存器中所有數(shù)據(jù)全部做復(fù)位操作。
(2)位置計數(shù)器
位置計數(shù)器有3個寄存器,分別對應(yīng)于三個軸。其初始值為需要插補的脈沖數(shù)目。當(dāng)積分器每輸出一個脈沖,計數(shù)器便做減“1”。當(dāng)位置計數(shù)器為零時,則表示到達終點坐標(biāo)位置,插補結(jié)束。
(3)插補積分器
插補積分器是直線插補的核心模塊,由余數(shù)寄存器和被積函數(shù)寄存器構(gòu)成。被積函數(shù)寄存器中存放由數(shù)據(jù)緩存器提供的終點坐標(biāo)值,每當(dāng)脈沖源發(fā)出1個插補迭代脈沖時,被積函數(shù)寄存器與余數(shù)寄存器的值累加1次,并將累加結(jié)果存放余數(shù)寄存器中,當(dāng)累加結(jié)果超出余數(shù)寄存器容量(216)時,溢出1個脈沖。經(jīng)過N=216次累加后,每個坐標(biāo)軸的溢出脈沖總數(shù)就等于該坐標(biāo)的被積函數(shù)值。在余數(shù)寄存器的容量一定的情況下,其輸出脈沖頻率與終點坐標(biāo)值的大小成正比??刂破鞑捎萌S聯(lián)動,則同時有3個積分器同時進行插補運算。在該插補控制器的設(shè)計中,采用有限狀態(tài)機的原理完成直線插補的實現(xiàn),如圖2所示,共有3個狀態(tài)存在:
(1)狀態(tài)IDLE:空閑狀態(tài),等待插補信號;
(2)狀態(tài)S1:剩余插補脈沖數(shù)寄存;
(3)狀態(tài)S2:積分累加狀態(tài)。
其工作過程為:當(dāng)沒有啟動信號時,系統(tǒng)繼續(xù)保持在空閑狀態(tài)IDLE;當(dāng)有啟動信號start時,系統(tǒng)則從數(shù)據(jù)緩存器中讀入初始數(shù)據(jù),將插補脈沖數(shù)寄存在狀態(tài)S1中,若插補脈沖數(shù)不為零則轉(zhuǎn)至積分累加狀態(tài)S2中,在此狀態(tài)中將被積函數(shù)寄存器的值與余數(shù)寄存器的值進行累加,結(jié)果送余數(shù)寄存器,若有脈沖溢出,則轉(zhuǎn)入狀態(tài)S1,此時輸出插補脈沖,且狀態(tài)S1中剩余脈沖數(shù)減“1”;若無脈沖溢出,則狀態(tài)S2繼續(xù)進行積分累加。最終,狀態(tài)S1中的剩余脈沖為零時,返回空閑狀態(tài),插補結(jié)束。
數(shù)字積分法直線插補運用硬件描述語言VerilogHDL進行程序編寫的流程圖如圖3所示。
在本插補控制器中,采用了“半加載”的方式實現(xiàn)輸出脈沖的均勻分配。半加載就是在插補運算前,在余數(shù)寄存器中預(yù)置該寄存器容量一般的值,這樣可以使在插補數(shù)據(jù)遠小于插補器位寬的情況下,使積分器更快地輸出溢出脈沖,從而使脈沖更為均勻。
積分器做插補時,無論被積函數(shù)的大小,都必須經(jīng)過216次累加才能到達終點,因此各軸輸出脈沖速度受被積函數(shù)大小影響,被積函數(shù)越大,脈沖輸出速度越高。為了讓積分器溢出速度達到最快且均勻,在插補時,把各軸被積函數(shù)寄存器中的數(shù)據(jù)同時進行左移規(guī)格化處理,使其中一軸的最高位為“1”。左移1位,相當(dāng)于各軸乘2,左移2位各軸則同時乘22,以此類推。這樣,在不改變各軸數(shù)據(jù)比值的情況下,提高了各軸的脈沖溢出速度。規(guī)格化后,每累加運算2次必有1次脈沖輸出,很好地解決了小進給量輸出不均勻的問題,插補的效率和質(zhì)量大為提高。
2.2.2 圓弧插補模塊
圓弧插補模塊與直線插補相同,也由數(shù)據(jù)緩存器、插補積分器和位置計數(shù)器構(gòu)成。兩模塊的數(shù)據(jù)緩存器和位置計數(shù)器功能相同,這里不再闡述。
圓弧插補積分器與直線插補積分器同樣采用狀態(tài)機的設(shè)計實現(xiàn),但它們之間有兩點區(qū)別:一是x,y軸相應(yīng)坐標(biāo)值存入被積函數(shù)寄存器的對應(yīng)關(guān)系與直線不同,恰好是位置互調(diào)的,即y軸的被積函數(shù)寄存器中存入x值,x軸的被積函數(shù)寄存器中存入y值;二是存入的坐標(biāo)值不同,直線插補時寄存的終點坐標(biāo)是常數(shù),而圓弧插補時寄存的是動點坐標(biāo),在插補過程中根據(jù)其位置的變化應(yīng)更改被積函數(shù)寄存器中所存的內(nèi)容。當(dāng)y軸每溢出1個脈沖,x軸的被積函數(shù)寄存器加“1”;反之,當(dāng)x軸每溢出1個脈沖,y軸的被積函數(shù)寄存器減“1”,減“1”的原因是x向負方向進給,動坐標(biāo)不斷減少。
3 仿真實驗
為驗證設(shè)計的正確性,仿真實驗完成了二維的直線插補和圓弧插補。
(1)直線插補仿真。當(dāng)給定一直線段的起點坐標(biāo)為(0,0,0),終點坐標(biāo)為(10,12,0),則該直線在xOy平面內(nèi)完成直線插補的仿真信號波形如圖4所示。
現(xiàn)分別給出了在xOy平面內(nèi),該直線與另外兩條直線構(gòu)成三角形的多角度的直線插補軌跡(如圖5所示),三角形的頂點坐標(biāo)分別為(0,0),(10,12)和(15,6)。由插補軌跡圖可見,各個角度的直線插補軌跡(各點連線)與實際直線(實線)的擬合度良好,直線交界處完全吻合,完成了預(yù)期的封閉圖形。
(2)圓弧插補模塊仿真如圖6所示為位于第一象限,在xOy平面內(nèi),起點坐標(biāo)為(15,0),終點坐標(biāo)為(0,15)的逆時針圓弧的插補仿真結(jié)果。
圖7展示了在xOy平面內(nèi),起點坐標(biāo)分別為(5,0),(8,0)和(15,0)的逆時針圓弧的插補軌跡(各點連線)與實際圓弧(實線)的比較。由圖可見,隨著軌跡點的增加,圓弧軌跡與實際圓弧的擬合度越高。
4 結(jié)語
基于數(shù)字積分法和多軸聯(lián)動技術(shù)設(shè)計的伺服電機插補控制器,其在直線插補中不僅實現(xiàn)了直線的精確步進,而且通過不同方位的運動很好的得到了原點的回復(fù)。在圓弧運動中,隨著精細的插補,圓弧的擬合精度提高。隨著運動控制系統(tǒng)朝著通用化、智能化、微型化的方向發(fā)展的趨勢,插補控制器是運動控制系統(tǒng)飛速發(fā)展的重要基石。本文研究的插補控制器不僅實現(xiàn)三軸直線插補及兩軸的圓弧插補,而且采用多軸聯(lián)動,插補精度得到提高,脈沖輸出均勻。這種設(shè)計優(yōu)化了結(jié)構(gòu),易于操作,便于與外部處理器擴展和鏈接,以構(gòu)成完整的運動控制系統(tǒng)。