步進(jìn)電機(jī)控制器的FPGA實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
O 引 言
隨著步進(jìn)電機(jī)廣泛地應(yīng)用于數(shù)字控制系統(tǒng)中作為伺服元件,步進(jìn)電機(jī)在實(shí)時(shí)性和靈活性等性能上的要求越來越高。那么如何靈活、有效地控制步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)成為研究的主要方向。這里采用現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA),通過VHDL語言編程來實(shí)現(xiàn)四相步進(jìn)電機(jī)的控制。利用FPGA設(shè)計(jì)具有以下優(yōu)點(diǎn):
硬件設(shè)計(jì)軟件化 FPGA的開發(fā)在功能層面上可以脫離硬件在EDA軟件上做軟仿真。當(dāng)功能確定無誤后可以進(jìn)行硬件電路板的設(shè)計(jì)。最后將設(shè)計(jì)好的,由EDA軟件生成的燒寫文件下載到配置設(shè)備中去,進(jìn)行在線調(diào)試,如果這時(shí)的結(jié)果與要求不一致,可以立即更改設(shè)計(jì)軟件,并再次燒寫到配置芯片中而不必改動(dòng)外接硬件電路。進(jìn)行分層模塊設(shè)汁后系統(tǒng)設(shè)計(jì)變得更加簡單,在實(shí)時(shí)性和靈活性等性能上都有很大的提高,有利于步進(jìn)電機(jī)的運(yùn)動(dòng)控制。
高度集成化,高工作頻率 一般的FPGA內(nèi)部都集成有上百萬的邏輯門,可以在其內(nèi)部規(guī)劃出多個(gè)與傳統(tǒng)小規(guī)模集成器件功能相當(dāng)?shù)哪K。另外,一般的FPGA內(nèi)部都有PLL倍頻和分頻電路模塊,這樣可以在外部采用較低頻率的晶振而在內(nèi)部獲得較高頻率的時(shí)鐘,進(jìn)一步解決了電磁干擾和電磁兼容問題。
1 步進(jìn)電機(jī)的工作原理
步進(jìn)電動(dòng)機(jī)是一種自動(dòng)化執(zhí)行部件,和數(shù)字系統(tǒng)結(jié)合可把脈沖數(shù)轉(zhuǎn)換成角位移,實(shí)現(xiàn)其正轉(zhuǎn)、反轉(zhuǎn)、手動(dòng)和自動(dòng)控制。四相步進(jìn)電機(jī)有兩組線圈A和B。A,B兩組垂直擺放線圈的電流方向的排列組合,最多可以產(chǎn)生8種磁場方向,分別是O°,45°,90°,135°,180°,225°,270°,315°。表1給出了四相步進(jìn)電機(jī)的8個(gè)方向和電流以及電壓信號(hào)的關(guān)系。
四相電動(dòng)機(jī)有3種激磁方式:
一相激磁法:當(dāng)目標(biāo)角度是90°的整數(shù)倍時(shí),采用這種方法。
二相激磁法:當(dāng)目標(biāo)角度是45°,135°,225°,315°的整數(shù)倍時(shí),采用這種方法。
一、二相激磁法:即完全按照表1所列的信號(hào)順序。
2 步進(jìn)電機(jī)定位控制器的整體設(shè)計(jì)
步進(jìn)電機(jī)定位控制器的系統(tǒng)主要由步進(jìn)電機(jī)方向設(shè)定電路模塊、步進(jìn)電機(jī)步進(jìn)移動(dòng)與定位控制模塊以及編碼輸出模塊構(gòu)成。前兩個(gè)模塊完成電機(jī)旋轉(zhuǎn)方向設(shè)定、激磁方式和定位角度的換算等工作,后一模塊用于對(duì)換算后的角度量編碼輸出。系統(tǒng)框圖如圖1所示。
2.1 步進(jìn)電機(jī)定位控制器整體架構(gòu)的VHDL語言設(shè)計(jì)及仿真
(1)根據(jù)步進(jìn)電機(jī)定位控制器的系統(tǒng)組成框圖可以定義輸入和輸出端口:
(3)步進(jìn)電機(jī)定位控制器頂層電路的VHDL程序代碼:
在下面的程序中只考慮逆時(shí)針操作模式即(dir=0)。
2.2 步進(jìn)電機(jī)方向電路模塊設(shè)計(jì)
該模塊的功能是設(shè)定步進(jìn)電機(jī)的旋轉(zhuǎn)方向(順/逆時(shí)針轉(zhuǎn)動(dòng)),并設(shè)定電動(dòng)機(jī)在順/逆時(shí)針時(shí)所需的初值與累加/減值。給出逆時(shí)針操作模式的技術(shù)規(guī)則和仿真輸出(ini=0賦初值,ini=1時(shí)開始計(jì)數(shù))。
如果manner=00,這時(shí)進(jìn)行自動(dòng)判斷,若angle步進(jìn)角為偶數(shù)(角度設(shè)定可以被90整除)電路使用一相激磁法,則count的初始值為000(cntini<=0),每次加2;否則電路使用二相激磁法,count的初始值為111(cntini<=111),每次加2;angleDnCntDec每次減2。得到的仿真結(jié)果如圖2所示。
表2是模塊按不同勵(lì)磁方式輸出時(shí)各個(gè)初值以及累加/減值的設(shè)定真值表。
2.3 步進(jìn)電機(jī)移動(dòng)與定位控制模塊設(shè)計(jì)
該模塊的主要功能是利用賦初值ini將數(shù)值傳到該模塊中并配合輸入的clk作為同步控制信號(hào),進(jìn)行步進(jìn)電機(jī)的步進(jìn)移動(dòng)與定位控制。步進(jìn)電機(jī)定位功能通過一個(gè)減法器實(shí)現(xiàn):在每個(gè)clk脈沖上升沿,設(shè)定步進(jìn)角倍數(shù),angleDnCount減去不同激磁方式下設(shè)定的累加器計(jì)數(shù)值angleDnCntDec,判斷差值小于設(shè)定的累減計(jì)數(shù)時(shí),步進(jìn)電機(jī)旋轉(zhuǎn)到預(yù)定角度停止輸出驅(qū)動(dòng)端口信號(hào),來實(shí)現(xiàn)定位功能。
2.4 編碼輸出模塊
該模塊的主要功能是將count與angleDnCount產(chǎn)生的數(shù)值經(jīng)過編碼,再通過baBA輸出到步進(jìn)電機(jī),來對(duì)電機(jī)進(jìn)行控制。模塊仿真圖見圖2。
假設(shè)resel=1,則將count和angleDnCount設(shè)置成0。
假設(shè)reset=O,clk為上升沿觸發(fā)且ini=0時(shí),就將設(shè)定的初值(cntini與angle)賦給count和angleDn—Count兩個(gè)信號(hào)端,也就是(count<=O+cntini)與(an—gleDnCount<=angle)。
假設(shè)reset=O,clk為上升沿觸發(fā)且ini=1時(shí),則將count與cntini相加,再將結(jié)果存為count。然后判斷angleDnCount的值是否大于angleDnCntDec。如果大于,則用angleDnCount減angleDnCntDec,將結(jié)果存為angleDnCount;否則,將angleDnCount設(shè)為0(因?yàn)榇藭r(shí)angleDnCount的值小于angleDnCntDec,表示電機(jī)已經(jīng)到達(dá)設(shè)定位置,故不需要繼續(xù)轉(zhuǎn)動(dòng)了)。BaBA[3..O]是將count與angleDnCount產(chǎn)生的數(shù)值經(jīng)過編碼后輸出到四相步進(jìn)電機(jī)的端口的。
3 QuartusⅡ仿真結(jié)果
上述程序在ALTERA公司免費(fèi)提供的QuartusⅡ環(huán)境下編譯通過,適配的FPGA器件為FLEXlOKlO。最后得到的系統(tǒng)仿真圖及生成的系統(tǒng)模塊符號(hào)圖分別如圖3,圖4所示。
reset是系統(tǒng)內(nèi)部自復(fù)位信號(hào);dir是步進(jìn)電機(jī)正反轉(zhuǎn)的方向控制;clk是由外部提供的時(shí)鐘信號(hào);ini是賦初值的使能開關(guān);manner[1..O]是激磁方式的選擇開關(guān)(00:自動(dòng)檢測角度輸入,決定激磁方式;01:一相激磁;10:二相激磁;11:一、二相激磁);angle[7..0]是步進(jìn)角的倍數(shù)設(shè)定數(shù)如引腳;baBA[3..0]是系統(tǒng)輸出信號(hào)引腳,是內(nèi)部計(jì)數(shù)器的count[3..O]數(shù)值編碼的結(jié)果。
4 結(jié) 語
步進(jìn)電機(jī)作為一種數(shù)字伺服執(zhí)行元件,具有結(jié)構(gòu)簡單,運(yùn)行可靠,控制方便,控制性能好等優(yōu)點(diǎn),但現(xiàn)實(shí)中步進(jìn)電機(jī)的控制比較復(fù)雜。
這里設(shè)計(jì)的步進(jìn)電機(jī)控制器方法簡單,支持四相步進(jìn)電機(jī)的三種勵(lì)磁方式、正反轉(zhuǎn)運(yùn)行,這種基于FPGA的設(shè)計(jì)方法,可以加速同類型產(chǎn)品的開發(fā)速度,節(jié)約投資。并且可以根據(jù)步進(jìn)電機(jī)的不同,改變分層模塊的VHDL程序的參數(shù),實(shí)現(xiàn)不同型號(hào)步進(jìn)電機(jī)的控制,在實(shí)際應(yīng)用中有利于步進(jìn)電機(jī)的廣泛應(yīng)用。