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