基于Nios II步進(jìn)電機(jī)控制器IP核的設(shè)計與實(shí)現(xiàn)
摘要 根據(jù)Nios II處理器的Avalon總線規(guī)范,設(shè)計了一款面向步進(jìn)電機(jī)的控制器IP核。該定制IP核采用軟、硬件協(xié)同設(shè)計的方法,功能符合Avalon總線的讀寫傳輸時序,具有完備的步進(jìn)電機(jī)驅(qū)動能力。仿真結(jié)果表明,該IP核具有很好的可重用性。利于開源共享提高開發(fā)效率。
關(guān)鍵詞 SOPC;IP核;FPGA;步進(jìn)電機(jī)控制器
隨著系統(tǒng)級芯片集成度越來越高,SOPC技術(shù)成為電子系統(tǒng)設(shè)計的熱點(diǎn)。它是利用FPGA器件的可編程性進(jìn)行SOC設(shè)計,其最突出優(yōu)點(diǎn)是在提供豐富IP庫的情況下,用戶可以利用IP庫中的組件按需求來搭建系統(tǒng),有較大的靈活性。但是在供應(yīng)商提供的IP庫中沒有用戶所需的IP核時,用戶只能根據(jù)需要自定義IP核。另外,F(xiàn)PGA的傳統(tǒng)應(yīng)用是在通信、工業(yè)控制等領(lǐng)域。鑒于此,設(shè)計了一款步進(jìn)電機(jī)控制器IP核,它具有對步進(jìn)電機(jī)的轉(zhuǎn)速、轉(zhuǎn)向及運(yùn)轉(zhuǎn)節(jié)拍數(shù)進(jìn)行控制的功能。
1 步進(jìn)電機(jī)驅(qū)動原理
步進(jìn)電機(jī)驅(qū)動是通過按一定順序切換每相線圈中的電流,以達(dá)到旋轉(zhuǎn)切換步進(jìn)電機(jī)的過程。其中,步進(jìn)電機(jī)的控制轉(zhuǎn)速與各繞組中輸入脈沖的頻率成正比,轉(zhuǎn)向則取決于控制繞組中的通電順序。步進(jìn)電機(jī)按其勵磁相數(shù)可以分為三相、四相、五相、六相甚至八相制式。其中工業(yè)常用的是三相、四相勵磁制式。其中三相制式又包括單三拍(A—B—C—A)方式及雙三拍(AB—BC—CA—AB)方式,而四相制式則有三種常見方式,即雙四拍(AB—BC—CD—DA—AB)方式;單四拍(A—B—C—D—A)方式;單、雙八拍(A—AB—B—BC—C—CD—D—DA—A)方式。
2 步進(jìn)電機(jī)控制器IP核設(shè)計
對于面向Nios II處理器開發(fā)的所有IP核,包括從設(shè)備IP核和主設(shè)備IP核兩大類。文中設(shè)計的步進(jìn)電機(jī)控制器IP核是一個受控對象,屬于從設(shè)備。Nios II處理器通過Avalon總線對步進(jìn)電機(jī)控制器IP核的寄存器進(jìn)行參數(shù)設(shè)置,實(shí)現(xiàn)對步進(jìn)電機(jī)的一系列操作。其中Avalon總線接口規(guī)范的功能是它定義了信號類型、信號的行為及傳輸類型等信息。
一個典型的IP核由硬件文件、軟件文件及組件描述文件組成,步進(jìn)電機(jī)控制器IP核也嚴(yán)格按照規(guī)范來編寫。它的硬件文件由多個HDL模塊組合完成硬件設(shè)計,其中包括邏輯任務(wù)模塊、寄存器模塊及接口模塊,其原理如圖1所示,軟件文件則由寄存器頭文件、驅(qū)動文件組成。Nios II開發(fā)工具自2006年公布新版本以后,軟件可以自動生成組件描述文件。
2.1 硬件文件設(shè)計
IP核設(shè)計部分中的邏輯任務(wù)模塊根據(jù)寄存器模塊傳遞的參數(shù)產(chǎn)生步進(jìn)電機(jī)控制所需的脈沖信號;寄存器模塊則用來存儲Avalon總線傳來的參數(shù),包括步進(jìn)電機(jī)的轉(zhuǎn)速、勵磁相數(shù)、正/反轉(zhuǎn)參數(shù)、節(jié)拍數(shù)等;接口模塊是一個符合Avalon規(guī)范的接口,起著連接Avalon總線與IP核寄存器模塊橋梁的作用。[!--empirenews.page--]
2.1.1 邏輯任務(wù)模塊設(shè)計
產(chǎn)生控制步進(jìn)電機(jī)所需的脈沖信號一般可以采用ROM查表法或狀態(tài)機(jī)法。本文采用狀態(tài)機(jī)法,即狀態(tài)機(jī)的每個狀態(tài)輸出一種脈沖信號。以四相單、雙八拍制式來控制步進(jìn)電機(jī)舉例進(jìn)行說明,其模塊設(shè)計原理如圖2所示,圖中共有8種狀態(tài),每種狀態(tài)對應(yīng)每種輸出狀態(tài)。該制式電機(jī)相位順序?yàn)锳—AB—B—BC—C—CD—D—DA,那么輸出狀態(tài)即為1000—1100—0100—0110—0010—0011—0001—1001。
邏輯任務(wù)模塊采用VHDL語言進(jìn)行編寫,本模塊采用控制規(guī)則如下,其中,xiangwei為控制電機(jī)的相位;direction為控制電機(jī)正/反轉(zhuǎn)位;pai為選擇節(jié)拍數(shù)位。
(1)如果xiangwei為0,direction為0,pai為00,電機(jī)轉(zhuǎn)向?yàn)镃—B—A—C(三相單拍反轉(zhuǎn))。
(2)如果xiangwei為0,direction為0,pai為01,電機(jī)轉(zhuǎn)向?yàn)镃B—BA—AC(三相雙拍反轉(zhuǎn))。
(3)如果xiangwei為0,direction為1,pai為00,電機(jī)轉(zhuǎn)向?yàn)锳—B—C(三相單拍正轉(zhuǎn))。
(4)如果xiangwei為0,direction為1,pai為01,電機(jī)轉(zhuǎn)向?yàn)锳B—BC—CA(三相雙拍正轉(zhuǎn))。
(5)如果xiangwei為1,direction為0,pai為00,電機(jī)轉(zhuǎn)向?yàn)镈—C—B—A(四相單拍反轉(zhuǎn))。
(6)如果xiangwei為1,direction為0,pai為01,電機(jī)轉(zhuǎn)向?yàn)镈C—CB—BA—AD(四相雙拍反轉(zhuǎn))。
(7)如果xiangwei為1,direction為0,pai為10,電機(jī)轉(zhuǎn)向?yàn)镈—DC—C—CB—B—BA—A—AD—DC—C—CB—B—BA—A—AD(四相單、雙拍反轉(zhuǎn))。
(8)如果xiangwei為1,direction為1,pai為00,電機(jī)轉(zhuǎn)向?yàn)锳—B—C—D(四相單拍正轉(zhuǎn))。
(9)如果xiangwei為1,direction為1,pai為01,電機(jī)轉(zhuǎn)向?yàn)锳B—BC—CD—DA(四相雙拍正轉(zhuǎn))。
(10)如果xiangwei為1,direction為1,pai為10,電機(jī)轉(zhuǎn)向?yàn)锳—AB—B—BC—C—CD—D—DA(四相單、雙拍正轉(zhuǎn))。
根據(jù)上述控制規(guī)則編寫邏輯任務(wù)模塊程序并進(jìn)行仿真,得到仿真結(jié)果如圖3所示,所得結(jié)果與設(shè)計要求一致。[!--empirenews.page--]
2.1.2 寄存器模塊
寄存器模塊的作用是存儲IP核與外界交換的信息。驅(qū)動程序可以通過Avalon接口采用“基地址+地址偏移量”的方式讀取各寄存器的數(shù)據(jù)。設(shè)計一共有3個寄存器,即方向寄存器、勵磁制式選擇寄存器、節(jié)拍寄存器。設(shè)計方法:在reset無效,clock和write有效的前提下,若address信號為“00”時,writedata數(shù)據(jù)則寫入方向寄存器direction中;當(dāng)address信號為“01”時,writedata數(shù)據(jù)寫入節(jié)拍寄存器pai中;當(dāng)address信號為“10”時,writedata數(shù)據(jù)寫入勵磁制式選擇寄存器中。對此模塊進(jìn)行編程仿真,仿真結(jié)果如圖4。圖中可以看到當(dāng)address為00時,方向寄存器direction數(shù)據(jù)與writedata的數(shù)據(jù)都為1;address為01時,節(jié)拍寄存器pal數(shù)據(jù)與writedata數(shù)據(jù)相同;address為10時,勵磁制式選擇寄存器xiang數(shù)據(jù)與writedata一致。[!--empirenews.page--]
2.1.3 接口模塊
接口模塊作為頂層模塊,為寄存器文件模塊提供了一個標(biāo)準(zhǔn)的Avalon前端,它使用Avalon必需的信號來訪問寄存器文件,并且支持任務(wù)邏輯的傳輸類型,負(fù)責(zé)復(fù)位、片選、尋址及對內(nèi)部寄存器進(jìn)行讀寫等,主要完成從。Nios II處理器接收指令和數(shù)據(jù)。對于步進(jìn)電機(jī)控制器IP核,用到接口模塊信號有:clk,reset,chipselect,address,write,writedata信號。
2.2 軟件設(shè)計
軟件設(shè)計包括寄存器頭文件、驅(qū)動軟件的設(shè)計。
2.2.1 寄存器頭文件
寄存器頭文件定義了外設(shè)的底層硬件訪問接口信息,程序員只需使用定義與該頭文件的宏來操作外設(shè),其好處在于使應(yīng)用程序獨(dú)立于底層硬件。設(shè)計首先創(chuàng)建一個寄存器頭文件ahera_avalon_stepping_regs.h,它的功能用于描述步進(jìn)電機(jī)控制IP核設(shè)備的3個寄存器。
2.2.2 驅(qū)動軟件
驅(qū)動軟件包括ahera_avalon_stepping_routines.h和altera_avalon_stepping_routines.c文件。altera_avalon_stepping_routin es.h定義了驅(qū)動函數(shù)的原型及常量。其函數(shù)定義語句為:
int altera_avalon_stepping_init(unsigned int address,unsigned int data1,unsigned int data2,unsigned int data3,int error);
int ltera_avalon_stepping_enable(unsigned int address);
int tera_avalon_stepping_disable(unsigned int address);
3 生成IP核
將軟硬件文件編譯完畢后,就需要在SOPC Builder軟件中利用Component Editor生成工具封裝成自定義組件。設(shè)置好HDL files、Signa ls、Interface以及SW files選項(xiàng)后,生成的IP核便成功設(shè)置在組件框內(nèi)。利用此IP核即可與其他IP核聯(lián)合搭建構(gòu)成一個步進(jìn)電機(jī)嵌入式控制系統(tǒng)。整個系統(tǒng)結(jié)構(gòu)圖如圖5所示。
4 結(jié)束語
提出的基于Nios II的步進(jìn)電機(jī)控制器IP核設(shè)計采用的軟件平臺是Quartus II6.0和Nios II IDE6.0,硬件平臺采用康芯公司的SOPC實(shí)驗(yàn)系統(tǒng),步進(jìn)電機(jī)控制IP核的占用資源為20%,它可以移值到所有AItera公司支持SOPC技術(shù)的芯片上。采用SOPC技術(shù)設(shè)計的自定義步進(jìn)電機(jī)控制IP核,在提高效率、縮短開發(fā)周期的前提下,可以滿足工業(yè)控制場合的需要及開源升級。