劉洪朋,葛廣英
(聊城大學(xué)物理科學(xué)與信息工程學(xué)院,山東聊城 252059)
隨著系統(tǒng)級(jí)芯片集成度越來(lái)越高,SOPC技術(shù)成為電子系統(tǒng)設(shè)計(jì)的熱點(diǎn)。它是利用FPGA器件的可編程性進(jìn)行SOC設(shè)計(jì),其最突出優(yōu)點(diǎn)是在提供豐富IP庫(kù)的情況下,用戶可以利用IP庫(kù)中的組件按需求來(lái)搭建系統(tǒng),有較大的靈活性。但是在供應(yīng)商提供的IP庫(kù)中沒有用戶所需的IP核時(shí),用戶只能根據(jù)需要自定義IP核。另外,F(xiàn)PGA的傳統(tǒng)應(yīng)用是在通信、工業(yè)控制等領(lǐng)域。鑒于此,設(shè)計(jì)了一款步進(jìn)電機(jī)控制器IP核,它具有對(duì)步進(jìn)電機(jī)的轉(zhuǎn)速、轉(zhuǎn)向及運(yùn)轉(zhuǎn)節(jié)拍數(shù)進(jìn)行控制的功能。
步進(jìn)電機(jī)驅(qū)動(dòng)是通過按一定順序切換每相線圈中的電流,以達(dá)到旋轉(zhuǎn)切換步進(jìn)電機(jī)的過程。其中,步進(jìn)電機(jī)的控制轉(zhuǎn)速與各繞組中輸入脈沖的頻率成正比,轉(zhuǎn)向則取決于控制繞組中的通電順序。步進(jìn)電機(jī)按其勵(lì)磁相數(shù)可以分為三相、四相、五相、六相甚至八相制式。其中工業(yè)常用的是三相、四相勵(lì)磁制式。其中三相制式又包括單三拍(A-B-C-A)方式及雙三拍(AB-BC-CA-AB)方式,而四相制式則有三種常見方式,即雙四拍(AB-BC-CD-DA-AB)方式;單四拍(A-B-C-D-A)方式;單、雙八拍(A-AB-BBC-C-CD-D-DA-A)方式。
對(duì)于面向Nios II處理器開發(fā)的所有IP核,包括從設(shè)備IP核和主設(shè)備IP核兩大類。文中設(shè)計(jì)的步進(jìn)電機(jī)控制器IP核是一個(gè)受控對(duì)象,屬于從設(shè)備。Nios II處理器通過Avalon總線對(duì)步進(jìn)電機(jī)控制器IP核的寄存器進(jìn)行參數(shù)設(shè)置,實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的一系列操作。其中Avalon總線接口規(guī)范的功能是它定義了信號(hào)類型、信號(hào)的行為及傳輸類型等信息。
一個(gè)典型的IP核由硬件文件、軟件文件及組件描述文件組成,步進(jìn)電機(jī)控制器IP核也嚴(yán)格按照規(guī)范來(lái)編寫。它的硬件文件由多個(gè)HDL模塊組合完成硬件設(shè)計(jì),其中包括邏輯任務(wù)模塊、寄存器模塊及接口模塊,其原理如圖1所示,軟件文件則由寄存器頭文件、驅(qū)動(dòng)文件組成。Nios II開發(fā)工具自2006年公布新版本以后,軟件可以自動(dòng)生成組件描述文件。
IP核設(shè)計(jì)部分中的邏輯任務(wù)模塊根據(jù)寄存器模塊傳遞的參數(shù)產(chǎn)生步進(jìn)電機(jī)控制所需的脈沖信號(hào);寄存器模塊則用來(lái)存儲(chǔ)Avalon總線傳來(lái)的參數(shù),包括步進(jìn)電機(jī)的轉(zhuǎn)速、勵(lì)磁相數(shù)、正/反轉(zhuǎn)參數(shù)、節(jié)拍數(shù)等;接口模塊是一個(gè)符合 Avalon規(guī)范的接口,起著連接Avalon總線與IP核寄存器模塊橋梁的作用。
圖1 Avalon接口硬件電路原理圖
2.1.1 邏輯任務(wù)模塊設(shè)計(jì)
產(chǎn)生控制步進(jìn)電機(jī)所需的脈沖信號(hào)一般可以采用ROM查表法或狀態(tài)機(jī)法。本文采用狀態(tài)機(jī)法,即狀態(tài)機(jī)的每個(gè)狀態(tài)輸出一種脈沖信號(hào)。以四相單、雙八拍制式來(lái)控制步進(jìn)電機(jī)舉例進(jìn)行說明,其模塊設(shè)計(jì)原理如圖2所示,圖中共有8種狀態(tài),每種狀態(tài)對(duì)應(yīng)每種輸出狀態(tài)。該制式電機(jī)相位順序?yàn)锳-AB-B-BCC-CD-D-DA,那么輸出狀態(tài)即為1000-1100-0100-0110-0010-0011-0001-1001。
圖2 采用狀態(tài)機(jī)設(shè)計(jì)步進(jìn)電機(jī)控制驅(qū)動(dòng)原理圖
邏輯任務(wù)模塊采用VHDL語(yǔ)言進(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)?D-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,pai10,電機(jī)轉(zhuǎn)向?yàn)镈-DC-C-CB-B-BA-A-AD-DC-CCB-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è)計(jì)要求一致。
圖3 邏輯任務(wù)模塊仿真圖
2.1.2 寄存器模塊
寄存器模塊的作用是存儲(chǔ)IP核與外界交換的信息。驅(qū)動(dòng)程序可以通過Avalon接口采用“基地址+地址偏移量”的方式讀取各寄存器的數(shù)據(jù)。設(shè)計(jì)一共有3個(gè)寄存器,即方向寄存器、勵(lì)磁制式選擇寄存器、節(jié)拍寄存器。設(shè)計(jì)方法:在reset無(wú)效,clock和write有效的前提下,若address信號(hào)為“00”時(shí),writedata數(shù)據(jù)則寫入方向寄存器direction中;當(dāng)address信號(hào)為“01”時(shí),writedata數(shù)據(jù)寫入節(jié)拍寄存器pai中;當(dāng)address信號(hào)為“10”時(shí),writedata數(shù)據(jù)寫入勵(lì)磁制式選擇寄存器中。對(duì)此模塊進(jìn)行編程仿真,仿真結(jié)果如圖4。圖中可以看到當(dāng)address為00時(shí),方向寄存器direction數(shù)據(jù)與writedata的數(shù)據(jù)都為1;address為01時(shí),節(jié)拍寄存器pai數(shù)據(jù)與writedata數(shù)據(jù)相同;address為10時(shí),勵(lì)磁制式選擇寄存器xiang數(shù)據(jù)與writedata一致。
圖4 寄存器接口仿真圖
2.1.3 接口模塊
接口模塊作為頂層模塊,為寄存器文件模塊提供了一個(gè)標(biāo)準(zhǔn)的Avalon前端,它使用Avalon必需的信號(hào)來(lái)訪問寄存器文件,并且支持任務(wù)邏輯的傳輸類型,負(fù)責(zé)復(fù)位、片選、尋址及對(duì)內(nèi)部寄存器進(jìn)行讀寫等,主要完成從Nios II處理器接收指令和數(shù)據(jù)。對(duì)于步進(jìn)電機(jī)控制器 IP核,用到接口模塊信號(hào)有:clk,reset,chipselect,address,write,writedata 信號(hào)。
軟件設(shè)計(jì)包括寄存器頭文件、驅(qū)動(dòng)軟件的設(shè)計(jì)。
2.2.1 寄存器頭文件
寄存器頭文件定義了外設(shè)的底層硬件訪問接口信息,程序員只需使用定義與該頭文件的宏來(lái)操作外設(shè),其好處在于使應(yīng)用程序獨(dú)立于底層硬件。設(shè)計(jì)首先創(chuàng)建一個(gè)寄存器頭文件altera_avalon_stepping_regs.h,它的功能用于描述步進(jìn)電機(jī)控制IP核設(shè)備的3個(gè)寄存器。
2.2.2 驅(qū)動(dòng)軟件
驅(qū)動(dòng)軟件包括altera_avalon_stepping_routines.h和altera_avalon_stepping_routines.c文件。altera_avalon_stepping_routines.h定義了驅(qū)動(dòng)函數(shù)的原型及常量。其函數(shù)定義語(yǔ)句為:
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);
將軟硬件文件編譯完畢后,就需要在SOPC Builder軟件中利用Component Editor生成工具封裝成自定義組件。設(shè)置好HDL files、Signals、Interface以及SW files選項(xiàng)后,生成的IP核便成功設(shè)置在組件框內(nèi)。利用此IP核即可與其他IP核聯(lián)合搭建構(gòu)成一個(gè)步進(jìn)電機(jī)嵌入式控制系統(tǒng)。整個(gè)系統(tǒng)結(jié)構(gòu)圖如圖5所示。
圖5 步進(jìn)電機(jī)控制器IP核及由其搭建的系統(tǒng)結(jié)構(gòu)
提出的基于Nios II的步進(jìn)電機(jī)控制器IP核設(shè)計(jì)采用的軟件平臺(tái)是Quartus II6.0和Nios II IDE6.0,硬件平臺(tái)采用康芯公司的SOPC實(shí)驗(yàn)系統(tǒng),步進(jìn)電機(jī)控制IP核的占用資源為20%,它可以移值到所有Altera公司支持SOPC技術(shù)的芯片上。采用SOPC技術(shù)設(shè)計(jì)的自定義步進(jìn)電機(jī)控制IP核,在提高效率、縮短開發(fā)周期的前提下,可以滿足工業(yè)控制場(chǎng)合的需要及開源升級(jí)。
[1]潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程[M].北京:科學(xué)出版社,2010.
[2]李蘭英.Nios II嵌入式軟核SOPC設(shè)計(jì)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2009.
[3]鄭恭明,沈媛媛.基于Nios II的偽隨機(jī)序列信號(hào)發(fā)生器IP核設(shè)計(jì)[J].工礦自動(dòng)化,2011(2):52-55.
[4]高楓,王玉松.基于NiosII自定制Avalon設(shè)備的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)測(cè)試技術(shù),2007,33(4):105 -108.
[5]殷蘇民,楊仁宇.基于Avalon總線的插補(bǔ)器IP核的設(shè)計(jì)[J].機(jī)械設(shè)計(jì)與制造,2009(8):198 -200.
[6]章智慧,白瑞林,沈憲明.面向SOPC Builder的用戶自定義 IP 核開發(fā)[J].自動(dòng)化儀表,2006,27(9):23 -26.