段 簡,張奕婷,鄭曉峰,陳 磊,周 穎,錢 敏,2
(1.蘇州城市學(xué)院電子信息工程系,江蘇 蘇州 215104;2.蘇州大學(xué)電子信息學(xué)院電子科學(xué)與技術(shù)系,江蘇 蘇州 215006)
步進電機是一種應(yīng)用范圍廣泛的驅(qū)動控制裝置,其工作原理是將輸入的電脈沖信號進行轉(zhuǎn)換,使自身產(chǎn)生相對應(yīng)的角位移或者線位移[1-2]。步進電機的角位移量或線位移量與步進電機接收到的脈沖數(shù)成正比,即輸入的脈沖信號越多,步進電機的角位移或線位移就越多。而步進電機的轉(zhuǎn)速則由輸入脈沖的頻率控制,輸入的電脈沖信號的頻率越高,步進電機的轉(zhuǎn)速就越快。
步進電機根據(jù)結(jié)構(gòu)的不同,主要可以分為3 種類型,即反應(yīng)式(VR)、永磁式(PM)和混合式(HS)[3]。本次設(shè)計所采用的步進電機是四相反應(yīng)式步進電機,其示意圖如圖1 所示。
圖1 四相反應(yīng)式步進電機
與傳統(tǒng)設(shè)計方法相比,采用基于硬件描述語言/現(xiàn)場可編程門陣列HDL/FPGA(Hardware Description Language,F(xiàn)ield Programmable Gate Array)的EDA(Electronic Design Automation)設(shè)計方法設(shè)計數(shù)字系統(tǒng)有巨大的優(yōu)越性,且已成為大規(guī)模集成電路設(shè)計中使用最廣泛的一種方法。在控制驅(qū)動步進電機時,由于步進電機能直接接收數(shù)字量的輸入來控制電脈沖,且電路設(shè)計比較簡單,適宜采用HDL/FPGA 實現(xiàn);通過FPGA 開發(fā)工具Quartus Ⅱ可以高效地進行編譯綜合、波形仿真、下載測試,從而能夠簡化設(shè)計、提升效率、實現(xiàn)功能模塊化[3-4]。
如圖1 所示,步進電機主要由2 部分組成:一個是定子,上面有幾組纏繞著線圈的齒;另一部分是可自由轉(zhuǎn)動的轉(zhuǎn)子。定子有4 相繞組,轉(zhuǎn)子上一共有6個齒。以電機的四相單四拍的通電模式為例,反應(yīng)式步進電機的工作原理是利用了物理上的“磁通總是力圖使自己通過的路徑的磁阻最小”所產(chǎn)生的磁阻轉(zhuǎn)矩,驅(qū)動電機發(fā)生轉(zhuǎn)動。開始時,只有B 相繞組通電,由于電流在步進電機中產(chǎn)生一個穿過轉(zhuǎn)子的磁場,而這個磁場將轉(zhuǎn)子磁化,此時距離B 相最近的齒會被吸引,直到與B 相繞組對齊。由于圖中0、3 號齒本就與B相繞組對齊,所以此時轉(zhuǎn)子不發(fā)生轉(zhuǎn)動。只有當C 相繞組通電時,因為距離C 相繞組最近的1、4 號齒未與C 相繞組對齊,所以此時在磁場的作用下,C 相繞組會產(chǎn)生一個吸引轉(zhuǎn)矩,吸引距離C 相繞組最近的1、4號齒向C 相繞組靠近,即在磁場作用下,轉(zhuǎn)子逆時針轉(zhuǎn)動。當轉(zhuǎn)子轉(zhuǎn)動至1、4 號齒與C 相繞組對齊時停止。當只有D 相繞組通電時,因為磁場作用,2、5 號齒被吸引,轉(zhuǎn)子發(fā)生轉(zhuǎn)動。以此類推,通過不斷切換通電的相,電機就能不停地轉(zhuǎn)動。
除了電機每次單相通電的供電方式,即四相單四拍的通電方式之外,電機的四相繞組的供電方式還有四相雙四拍和四相單、雙八拍的通電方式。
四相雙四拍的通電方式為:每次有兩相相鄰繞組接通電源,如A、B 相繞組通電而C、D 相繞組不通電。若初始狀態(tài)如圖1 所示,那么A、B 相繞組通電時,因為磁場作用產(chǎn)生的轉(zhuǎn)動力矩,會吸引0、3 號齒與A、B 相繞組磁極的中間線對齊。當只有B、C 相繞組通電時,同理0、3 號齒應(yīng)該與B、C 相繞組磁極的中間線對齊。以此類推可得到供電方式為四相雙四拍時電機的轉(zhuǎn)動狀態(tài)。
本次設(shè)計采用的四相單、雙八拍的通電方式為單相通電和雙相通電交替進行的模式。這種模式將步進電機轉(zhuǎn)動1 圈的拍數(shù)從4 拍變?yōu)? 拍,使步進電機每次轉(zhuǎn)動的角度變?yōu)樗呐臓顩r下的1/2,即四相單、雙八拍的步距角是單四拍或雙四拍步距角的1/2。
當控制電機反轉(zhuǎn)時,只需要將四相繞組的通電順序改為與電機正轉(zhuǎn)時的通電順序相反即可。步進電機的步距角就是步進電機每轉(zhuǎn)一次時轉(zhuǎn)子轉(zhuǎn)過的角度。步距角的計算公式為:
式(1)中:m為步進電機徑向相對的繞組數(shù),也就是相數(shù);C為步進電機工作的拍數(shù)和相數(shù)的比值,即步進電機以單四拍和雙四拍的通電模式工作時,C=1,而當步進電機以單八拍和雙八拍的通電模式工作時,C=2;Zk為轉(zhuǎn)子的小齒數(shù),本次設(shè)計所使用的四相步進電機的轉(zhuǎn)子小齒數(shù)為64。
因為步進電機經(jīng)過一個1/8 的減速器引出,所以本次設(shè)計所使用的四相步進電機實際的步距角是=0.0879°。
本次設(shè)計采用四相單、雙八拍的通電模式來控制四相步進電機的轉(zhuǎn)動,A、B、C、D 這4 個相的通電與否由4 路I/O 信號并行控制,即由FPGA 的四位I/O口輸出4 路脈沖信號,分別控制四相步進電機的4 個相。FPGA 輸出的脈沖信號經(jīng)過功率放大之后,進入步進電機的各相繞組[5],由此便實現(xiàn)了由FPGA 輸出的脈沖信號直接控制步進電機的驅(qū)動,而不再需要脈沖分配器來對輸入的電脈沖信號進行分配。圖2 為四相步進電機與FPGA 板的連接示意圖。
圖2 四相步進電機在開發(fā)板中的接法
按照四相單、雙八拍的控制方法來驅(qū)動四相步進電機進行正轉(zhuǎn)時,電機四相繞組的通電順序依次為A→AB→B→BC→C→CD→D→DA。高電平為接通電源,低電平為不接通電源,容易得到在控制電機正轉(zhuǎn)時,F(xiàn)PGA 四位I/O 口的值,如表1 所示。當電機反轉(zhuǎn)時,4 個相的通電順序與電機正轉(zhuǎn)時的通電順序相反,即通電相序為A→DA→D→CD→C→BC→B→AB,此時FPGA 四位I/O 口的值應(yīng)與電機正轉(zhuǎn)時四位I/O 口輸出值的順序相反。
表1 電機正轉(zhuǎn)時FPGA 四位I/O 口的值
因為步進電機需要完成正轉(zhuǎn)和反轉(zhuǎn)2 種工作,所以控制四相步進電機不僅需要能驅(qū)動電機轉(zhuǎn)動的電脈沖信號clk,還需要復(fù)位信號rst 和控制電機正反轉(zhuǎn)的方向信號dir。步進電機的原理圖如圖3 所示。
圖3 設(shè)計原理框圖
本設(shè)計采用Ve r i l o g H D L 的編程方法,在Quartus II 9.1 軟件中實現(xiàn)步進電機驅(qū)動控制電路的搭建、編譯和波形仿真等工作。其中,實現(xiàn)主要功能部分的代碼如下:
if((clk==1” b1))
begin
StepCounter<=StepCounter+31” b1;
if(StepEnable==1” b1)
begin InternalStepEnable<=1” b1; end
if(StepCounter>=StepLockOut)
begin
StepCounter<=32” b0;
if(InternalStepEnable==1” b1)
begin
InternalStepEnable<=StepEnable;
if(Dir==1” b1)
begin state<=state+3” b001; end
if(Dir==1” b0)
begin state<=state-3” b001; end
case(state)
3” b000: begin StepDrive<=4” b0001;end
3” b001: begin StepDrive<=4” b0011;end
3” b010: begin StepDrive<=4” b0010;end
3” b011: begin StepDrive<=4” b0110;end
3” b100: begin StepDrive<=4” b0100;end
3” b101: begin StepDrive<=4” b1100;end
3” b110: begin StepDrive<=4” b1000;end
3” b111: begin StepDrive<=4” b1001;end
endcase
end
end
end
代碼主要實現(xiàn)了驅(qū)動電機時四位I/O 口的8 種輸出狀態(tài),以及通過方向控制變量dir 來控制電機的正轉(zhuǎn)和反轉(zhuǎn)。當通過使用條件語句時,state 的值為000~111,分別對輸出變量step_drive 進行賦值。state 的值一共有8 個,每個值對應(yīng)著步進電機4 個相的不同通電狀態(tài),當控制方向的變量dir 為1 時,電機正轉(zhuǎn),state的值按照上面代碼所展示的從上到下的順序依次變化;而控制方向的變量dir 為0 時,電機反轉(zhuǎn),state 的值按照從下到上的順序依次變化。
利用Quartus II 9.1 軟件對整個步進電機驅(qū)動控制器設(shè)計HDL 代碼并進行波形仿真。
圖4 為電機正轉(zhuǎn)時FPGA 四路I/O 口的輸出波形及接收到復(fù)位信號后的輸出波形。其中clk 為控制電機轉(zhuǎn)動的電脈沖信號;StepEnable 為控制電機是否工作的使能端,在進行波形仿真時,StepEnable 一直處于置1 狀態(tài);rst 為復(fù)位信號,置1 時電機正常運轉(zhuǎn),置0 時電機復(fù)位;dir 為方向信號,當dir 的值為1 時,電機正轉(zhuǎn)(逆時針旋轉(zhuǎn)),當dir 的值為0 時,電機反轉(zhuǎn)(逆時針旋轉(zhuǎn))。
圖4 電機正轉(zhuǎn)時輸出波形及復(fù)位后波形
電機反轉(zhuǎn)時的FPGA 的四路I/O 口的輸出波形如圖5 所示,F(xiàn)PGA 四路I/O 口數(shù)值為0001,即步進電機反轉(zhuǎn)時第一個狀態(tài)為A 相通電,隨后四路I/O 口輸出波形和表1 所描述的相反。當接收到復(fù)位信號時,四路I/O 口的值變?yōu)?000,然后重新從0001 開始。即當步進電機接收到復(fù)位信號以后,步進電機的4 個相均不通電,然后重新從A 相通電的狀態(tài)開始,步進電機重新開始旋轉(zhuǎn)。
圖5 電機反轉(zhuǎn)時的輸出波形及復(fù)位后波形
當實現(xiàn)控制步進電機進行正反轉(zhuǎn)狀態(tài)切換的功能時,F(xiàn)PGA 的四路I/O 口的輸出波形如圖6 所示。當方向信號dir 的值由1 變?yōu)? 時,四路I/O 口的值為0011,在下一個使電機旋轉(zhuǎn)的電脈沖信號到達后,四位I/O輸出的值變?yōu)?010,即電機由正轉(zhuǎn)變?yōu)榉崔D(zhuǎn)的狀態(tài)。所以在控制電機在從正轉(zhuǎn)變?yōu)榉崔D(zhuǎn)(或反轉(zhuǎn)變?yōu)檎D(zhuǎn))時,電機保持現(xiàn)有的狀態(tài),等下一個控制電機旋轉(zhuǎn)的脈沖信號到來時,電機變?yōu)榉崔D(zhuǎn)狀態(tài)(正轉(zhuǎn)狀態(tài))。
圖6 電機正反轉(zhuǎn)切換時的輸出波形
通過波形仿真結(jié)果,驗證了步進電機驅(qū)動控制器設(shè)計程序的功能,即能夠控制電機進行正轉(zhuǎn)、反轉(zhuǎn)、復(fù)位及正反轉(zhuǎn)狀態(tài)的切換。經(jīng)過下載測試,與仿真結(jié)果相符,達到了設(shè)計要求。
本文介紹了使用Verilog HDL 對步進電機的驅(qū)動電路進行描述,利用Quartus II 軟件對Verilog HDL 設(shè)計程序進行邏輯功能的驗證,最終通過FPGA 開發(fā)板下載測試,完成了對步進電機驅(qū)動控制的實際功能的驗證。
本次設(shè)計主要圍繞控制步進電機進行正轉(zhuǎn)、反轉(zhuǎn)、在正反轉(zhuǎn)時進行復(fù)位和切換及控制轉(zhuǎn)速等功能進行研究,充分利用了硬件描述語言HDL 較傳統(tǒng)方法設(shè)計簡單、易于驗證、自上而下的優(yōu)點,在實際應(yīng)用中可根據(jù)要求靈活改變,以適用于不同場合。