楊秀增,黎運宇
(廣西民族師范學(xué)院,廣西崇左532200)
插補控制器是數(shù)控系統(tǒng)的基本單元,用來完成運動軌跡的擬合[1]。隨著加工零件結(jié)構(gòu)復(fù)雜程度的提高,對數(shù)控制系統(tǒng)的插補控制器性能提出了更高的要求,不僅要求插補控制器具有高精度、高速度,還要求具有多軸聯(lián)動控制功能,比如,對復(fù)雜曲面零部件加工,目前廣泛采用具有五軸聯(lián)動線性插補功能[2]的插補控制器,但是,目前的數(shù)控系統(tǒng)利用軟件插補器[3],軟件插補器由于用軟件實現(xiàn)插補功能,其性能難以滿足復(fù)雜數(shù)控系統(tǒng)的要求[3]。
針對以上情況,本文利用現(xiàn)場可編程邏輯門陣列(FPGA)[4],設(shè)計了一款基于數(shù)字積分算法(DDA)五軸步進(jìn)電動機聯(lián)動控制的硬件插補控制IP核,由于該插補器控制器全都由硬件來實現(xiàn),因此,本控制器具有速度快、精度高和實時性強等優(yōu)點,能應(yīng)用于多軸復(fù)雜的數(shù)控系統(tǒng)中。
圖1為本設(shè)計的硬件系統(tǒng)原理框圖。由圖1可見,本設(shè)計包括Avalon接口單元、寄存器文件單元和任務(wù)邏輯單元三大部分。
圖1 五軸步進(jìn)電動機插補控制器IP核硬件原理框圖
Avalon接口單元是本控制IP核的接口電路,負(fù)責(zé)把用戶任務(wù)邏輯單元,按基于Avalon總線通信協(xié)議接在Avalon總線上,以便實現(xiàn)用戶任務(wù)邏輯單元與NiosII軟核CPU進(jìn)行通信。
寄存器文件單元由如下九個寄存器組成:
分頻因子寄存器,用于寄存可編程分頻器的分頻因子,其大小能有效地控制插補器的插補速度;X軸坐標(biāo)寄存器、Y軸坐標(biāo)寄存器、Z軸坐標(biāo)寄存器、B軸坐標(biāo)寄存器和C軸坐標(biāo)寄存器,分別寄存X軸、Y軸、Z軸、B軸和C軸的終點坐標(biāo)值,作為數(shù)字積分器的被積函數(shù),其值越大,被積函數(shù)值越大,意味著該軸的運動距離越遠(yuǎn),在單位時間內(nèi),數(shù)字積分器產(chǎn)生的步進(jìn)脈沖越快;狀態(tài)寄存器,用于寄存控制器的當(dāng)前所處的狀態(tài)(“閑”或“忙”),用高或低電平來表示;總步進(jìn)數(shù)寄存器,用于寄存五個步進(jìn)電動機要走的總步進(jìn)數(shù);控制寄存器,寄存著各種控制信息,包括1位暫??刂菩盘?、1位起動信號和5位步進(jìn)電動機的方向轉(zhuǎn)動控制信號。
任務(wù)邏輯單元是本IP核的行為部分[5],要實現(xiàn)五軸步進(jìn)電動機的聯(lián)動和速度控制功能。五軸數(shù)字積分器模塊,由五個相互獨立的數(shù)字積分器組成,此模塊能對各軸坐標(biāo)的值進(jìn)行數(shù)字積分運算,不斷地產(chǎn)生各軸步進(jìn)電動機的步進(jìn)脈沖信號,控制著各軸步進(jìn)電動機的運動速度和聯(lián)動功能;終點判定模塊對各軸輸出的步進(jìn)脈沖進(jìn)行計數(shù),并且把計數(shù)的結(jié)果與總步進(jìn)數(shù)寄存器的值進(jìn)行比較,如相等,表示已到達(dá)終點,用over信號通知狀態(tài)機表示本次差補結(jié)束;狀態(tài)機是任務(wù)邏輯單元的協(xié)調(diào)控制中心,能產(chǎn)生各種時序控制信號,使五軸數(shù)字積分器和終點判定模塊的協(xié)調(diào)工作;可編程分頻器可根據(jù)分頻因子的值對50 MHz時鐘進(jìn)行分頻,得到不同頻率的工作時鐘,實現(xiàn)步進(jìn)電動機的速度控制。
寄存器文件由九個寄存器組成,寄存著控制信息、狀態(tài)信息和各種數(shù)據(jù)。每個寄存器對應(yīng)著不同的地址,且讀寫方向和位寬也不盡相同,表1列出這些寄存器的名稱、相對地址、讀寫方向、位寬和功能描述。
表1 寄存器組定義與地址分配
圖2 數(shù)字積分器的原理方框圖
2.2.1 可編程分頻器設(shè)計
在本設(shè)計中,利用一個可編程分頻器來控制步進(jìn)電動機的轉(zhuǎn)動速度。由圖1可知,分頻器的分頻因子變大,50 MHz的系統(tǒng)時鐘被分頻器分頻的頻率變小,數(shù)字積分器的工作時鐘變小,數(shù)字積分器的運算速度變慢,步進(jìn)電動機速度變小;相反,分頻器分頻因子變小,分頻器的輸出頻率變大,五軸數(shù)字積分器的運算速度變快,步進(jìn)電動機轉(zhuǎn)速變快。
2.2.2 五軸數(shù)字積分器設(shè)計
為了實現(xiàn)五個步進(jìn)電動機的聯(lián)動控制,設(shè)計了五軸數(shù)字積分器。五軸數(shù)字積分器由五個互相獨立的數(shù)字積分組成,每一個坐標(biāo)軸對應(yīng)一個數(shù)字積分器,其原理框圖如圖2所示,坐標(biāo)值寄存器存放本次直線插補的終點坐標(biāo)值,作為數(shù)字積分器的被積函數(shù)。在插補前,clr要對余數(shù)寄存器內(nèi)容清零,插補起動后,在clk時鐘的上升沿控制下,加法器對坐標(biāo)寄存器的值和余數(shù)寄存器的值進(jìn)行一次加法運算,并把運算結(jié)果存放在余數(shù)寄存器中。在設(shè)計中,余數(shù)寄存器最高位作為驅(qū)動步進(jìn)電動機的步進(jìn)脈沖,每個上升沿表示步進(jìn)電動機要步進(jìn)一步,本積分器的Verlogn HDL程序如下:
module Digital_integrator(iclk,iclr,idata,step_pulse,en);
input iclk,iclr,en;
input[15:0]idata;//數(shù)據(jù)輸入
output step_pulse;//步進(jìn)脈沖
reg[16:0]sum;//中間寄存器
always@(posedge iclk or posedge iclr)
if(iclr)//高電平,清零
sum=0;
else if(en)//高電平,進(jìn)行累加
sum=sum+idata;
assign step_pulse=sum[16];//步進(jìn)脈沖
endmodule
2.2.3 終點判定模塊設(shè)計
終點判定模塊用于判定步進(jìn)電動機是否運動到終點。插補前,NiosII根據(jù)本次差補的終點坐標(biāo)值和步進(jìn)電動機的最小步長的值,計算出五個步進(jìn)電動機的步進(jìn)數(shù)總數(shù),并把這總數(shù)寫到總步進(jìn)數(shù)寄存器,插補開始后,終點判定模塊讀取總步進(jìn)數(shù)寄存器的值,并對各軸步進(jìn)脈沖的上升沿進(jìn)行計數(shù),當(dāng)計數(shù)的值與讀到時的總步進(jìn)數(shù)相等時,表明步進(jìn)電動機已到達(dá)終點,用over信號通知狀態(tài)機停止本次直線插補,本模塊的Verlogn HDL程序如下:
module end_test(x_p,y_p,_p,b_p,c_p,over,idata,RD);
input x_p,y_p,z_p,b_p,c_p,RD;
output reg over;//終點結(jié)束輸出
input[31:0]idata;//數(shù)據(jù)輸入
reg[31:0]mcounter,mreg;//中間寄存器
wire dclk;
assign dclk=x_p||y_p||z_p||b_p||c_p;always@(posedge dclk or posedge RD)if(RD)begin mreg=idata;over=0;end//RD為高電平時,讀取數(shù)據(jù)
else if(mcounter==mreg)
begin end_out=1;mcounter=0;end//如計數(shù)與總步進(jìn)數(shù)相等進(jìn),結(jié)束
else begin mcounter=mcounter+1;over=0;end//否則計數(shù)endmodule
2.2.4 狀態(tài)機設(shè)計
圖3 狀態(tài)機的狀態(tài)轉(zhuǎn)換圖
狀態(tài)機用于協(xié)調(diào)五軸數(shù)字積分器和終點判定模塊協(xié)調(diào)工作。圖3為本狀態(tài)機的狀態(tài)轉(zhuǎn)換圖,包括“空閑”狀態(tài)(s0)、數(shù)據(jù)初始化狀態(tài)(s1)和步進(jìn)控制狀態(tài)(s2)三個狀態(tài)。在NiosII沒有起動插補器前,狀態(tài)機始終在“空閑”狀態(tài)(s0)中等待起動信號(start)到來;一旦start為高電平,表明NiosII起動插補器,狀態(tài)機由等待狀態(tài)(s0)進(jìn)入數(shù)據(jù)初始化狀態(tài)(s1),在狀態(tài)中,狀態(tài)機對數(shù)字積分器的余數(shù)寄存器內(nèi)容清零和用RD信號通知終點判定模塊讀取總步進(jìn)數(shù)寄存器的值,在時鐘控制下,狀態(tài)機無條件地進(jìn)行步進(jìn)電控制狀態(tài)(s2),在此狀態(tài)中,EN為高電平,使五軸數(shù)字積分器開始進(jìn)行積分運算,當(dāng)over為高電平時,此狀態(tài)結(jié)束,進(jìn)入“空閑”狀態(tài)s0中。
在QuartusII 8.0軟件中,SOPC Builder工具提供了6種不同接口類型和信號,設(shè)計者可根據(jù)設(shè)計需要選擇接口,并把任務(wù)邏輯各種信號,指定Avalon信號類型,表2為本設(shè)計所用到的接口單元信息。
表2 Avalon接口信息表
硬件系統(tǒng)工作離不開軟件的支持,硬件系統(tǒng)的設(shè)計結(jié)構(gòu)和工作原理決定了軟件的編寫方法[6]。在插補前,讀取狀態(tài)寄存器里的值,了解系統(tǒng)工作狀態(tài),如處于“空閑”狀態(tài),NiosII把本次直線插補終點坐標(biāo)寫到相應(yīng)的寄存器中,然后,根據(jù)空間直線的長度和步進(jìn)電動機的步距,計算出總的步進(jìn)脈沖數(shù),并寫入總步進(jìn)脈沖寄存器中。最后,根據(jù)直線插補方向設(shè)置好控制寄存器方向控制位后,起動插補器。
本控制器IP核被成功地應(yīng)用于如圖4所示的五軸步進(jìn)電動機運動控制卡中。本運動控制卡在一片F(xiàn)PGA上實現(xiàn)。UART控制器、JTAG控制器、NiosII處理器、EPCS控制器、SDRAM控制、LCD控制器、PIO控制器和Avalon數(shù)據(jù)總線構(gòu)成基于NiosII的最小系統(tǒng);五軸步進(jìn)電動機插補控制器是通過例化本設(shè)計IP核得到的;SPWM細(xì)分驅(qū)動器實現(xiàn)步進(jìn)電動機的細(xì)分驅(qū)動,改善步進(jìn)電動機的運動性能。加工的數(shù)據(jù)從上位機的USB口傳送到五軸步進(jìn)電動機控制卡中,CP2101橋式控制芯片把USB數(shù)據(jù)流轉(zhuǎn)換成UART數(shù)據(jù)流,然后NiosII把這些數(shù)據(jù)寫到五軸步進(jìn)電動機插補控制器中。本運動控制卡的具體設(shè)計方法,限于篇幅,本文不作介紹。
圖4 基于FPGA的五軸步進(jìn)電動機運動控制卡設(shè)計框圖
對以上所設(shè)計的運動卡進(jìn)行測試,現(xiàn)場可編程邏輯門陣列選用Altera公司的EP3C25Q240C8N,步進(jìn)電動機選用Leetro公司生產(chǎn)的二相式步進(jìn)電動機DM4250C。測試結(jié)果表明,本運動控制卡工作穩(wěn)定,被控制的步進(jìn)電動機工作平穩(wěn),插補運算速度快、控制精度高。圖5為利用QuartusII嵌入式邏輯分析儀(SigalTap II Logic Analyzer)測試五軸數(shù)字積分器的輸出信號波形:xp、yp、zp、bp和cp分別是X軸、Y軸、Z軸、B軸和C軸的步進(jìn)脈沖輸出,信號每一個上升沿表示步進(jìn)電動機走一步,從圖5可以看出,它們之間的步進(jìn)數(shù)(上升沿數(shù))剛好為2倍關(guān)系,說明五軸步進(jìn)電動機具有良好的聯(lián)動關(guān)系,有效驗證了本設(shè)計的正確性。
圖5 用嵌入式邏輯分析儀分析五軸波形時序圖
插補器聯(lián)動控制器是多軸聯(lián)動控制卡的重要組成部分,針對目前數(shù)控制系統(tǒng)的軟件插補器的運行速度慢和實時性差等缺點,利用現(xiàn)場可編程門陣列設(shè)計一款五軸步進(jìn)電動機插補控制器,實際測試結(jié)果表明,本控制器工作穩(wěn)定,具有速度快、精度高和實時性強等優(yōu)點,因此,本設(shè)計有一定推廣和實用價值。
[1] 陳黎融,白婕靜,劉繼偉.基于FPGA的數(shù)字積分法圓弧插補器的設(shè)計與實現(xiàn)[J].現(xiàn)代制造工程,2008,(2):58-60.
[2] 劉源,王永章,富宏亞,等.用于五軸聯(lián)動數(shù)控機床的曲線插補控制策略[J].計算機集成制造系統(tǒng),2009,15(4):758-761.
[3] 于海東.直線插補控制器的FPGA實現(xiàn)[J].微特電機,2009(1):46-49.
[4] 李凡,廖勇.基于FPGA數(shù)字硬件的無刷直流電動機速度控制系統(tǒng)[J].微特電機,2010(8):65-68.
[5] 殷蘇民,楊仁宇.基于Avalon總線的插補器IP核的設(shè)計[J].機械設(shè)計與制造,2009(8):198-200.
[6] 楊秀增.可變波特率和載頻的2FSK數(shù)字調(diào)制器的FPGA實現(xiàn)[J].電訊技術(shù),2010,50(5):64-67.