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