呂棟騰
(陜西國防工業(yè)職業(yè)技術(shù)學(xué)院,陜西西安 710300)
數(shù)字系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)離不開CPLD 器件,CPLD 在制造完成后用戶可根據(jù)需要定義其邏輯功能。CPLD 以功能強(qiáng)大、開發(fā)過程投資少、開發(fā)工具智能化等特點(diǎn)成為硬件設(shè)計(jì)的首選方式之一[1]??刂撇竭M(jìn)電機(jī)的運(yùn)行要使用專門的驅(qū)動控制器,基于這個(gè)特點(diǎn)可以將步進(jìn)電機(jī)和現(xiàn)代數(shù)字控制技術(shù)結(jié)合。本設(shè)計(jì)通過Verilog HDL 進(jìn)行編程,在MAX+PLUSII 軟件環(huán)境下進(jìn)行編譯并寫入CPLD,在綜合仿真實(shí)驗(yàn)儀上實(shí)現(xiàn)對步進(jìn)電機(jī)的運(yùn)行控制和工作模式選擇。
CPLD 有Synplify、Synopsps、Quartus II、ZLGICD、ISD51 和MAX+PLUSII 等軟件開發(fā)環(huán)境。該設(shè)計(jì)采用的是Altera 公司提供的MAX+PLUSII 開發(fā)集成環(huán)境。MAX+PLUSII 開發(fā)系統(tǒng)具有開放的界面,設(shè)計(jì)時(shí)可調(diào)用豐富的設(shè)計(jì)庫和模塊化工具,支持多種硬件描述語言[2]。MAX+PLUSII 提供了一種與系統(tǒng)結(jié)構(gòu)無關(guān)的設(shè)計(jì)環(huán)境,在MAX+PLUSII 上可以進(jìn)行步進(jìn)電機(jī)控制系統(tǒng)的輸入/輸出設(shè)計(jì),以及功能和時(shí)序仿真,最后編譯下載整個(gè)流程。MAX+PLUSII 軟件設(shè)計(jì)流程如圖1 所示。
圖1 MAX+PLUSII軟件設(shè)計(jì)流程
該設(shè)計(jì)采用Verilog HDL 進(jìn)行編程,以控制步進(jìn)電機(jī)。Verilog HDL 是在C 語言基礎(chǔ)上發(fā)展起來的,專門面向硬件與系統(tǒng)設(shè)計(jì)的描述語言。如果前期具備C 語言的編程基礎(chǔ),可以在較短時(shí)間內(nèi)學(xué)習(xí)和掌握。Verilog 以模塊集合的形式來描述硬件數(shù)字系統(tǒng),模塊之間并行運(yùn)行,可以使用高層模塊調(diào)用其他模塊。Verilog 還提供了完善的模擬功能驗(yàn)證,對每個(gè)語法結(jié)構(gòu)都定義了清晰的仿真語義,通過建立數(shù)學(xué)模型能夠用Verilog 仿真器對步進(jìn)電機(jī)控制系統(tǒng)進(jìn)行驗(yàn)證[3]。
Verilog HDL 主要有自下而上和自上而下兩種設(shè)計(jì)方法[4]。自下而上的設(shè)計(jì)是從已有的基本單元出發(fā),設(shè)計(jì)樹上末端的單元可以是已經(jīng)制造出的單元或者是其他項(xiàng)目開發(fā)好的單元,這種方法容易實(shí)現(xiàn)各個(gè)子模塊電路,但對系統(tǒng)的整體性不好,是比較傳統(tǒng)的設(shè)計(jì)方法。自上而下的方法是從總體出發(fā),將系統(tǒng)先劃分為若干基本功能單元,對基本功能單元再次進(jìn)行劃分,直到可以用EDA 元件庫中的元件實(shí)現(xiàn)為止。這種設(shè)計(jì)方法使復(fù)雜數(shù)字電路的設(shè)計(jì)成為可能,避免了不必要的重復(fù)設(shè)計(jì),但由于一開始考慮系統(tǒng)的整體性,得到的最小單元可能不標(biāo)準(zhǔn)。步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)采用兩種方法相結(jié)合的綜合設(shè)計(jì)法,在高層系統(tǒng)通過自上而下的設(shè)計(jì)方法來實(shí)現(xiàn),對整體系統(tǒng)進(jìn)行劃分和管理,在低層系統(tǒng)使用自下而上的方法從數(shù)據(jù)庫中調(diào)用已有的單元設(shè)計(jì)。這種綜合設(shè)計(jì)法更適合復(fù)雜數(shù)字邏輯電路和系統(tǒng)的設(shè)計(jì),設(shè)計(jì)完成后還可以使用矢量測試庫進(jìn)行測試。
該設(shè)計(jì)采用的是Altera 公司MAX 7000S 系列CPLD,型號為EPM7128SLC84-15。MAX7000 系列器件在國內(nèi)使用較多,且與其他MAX 系列器件在結(jié)構(gòu)功能上十分相似,可以替換使用。MAX7000 系列器件利用內(nèi)部的EEPROM 單元實(shí)現(xiàn)各種不同的組合邏輯與時(shí)序邏輯。其具有SSI、MSI、LSI、PAL、GAL等中低規(guī)模的邏輯電路的所有功能[5]。
仿真實(shí)驗(yàn)儀DP-MCU/Altera 采用EPM7128S 系列CPLD 作為目標(biāo)CPLD。該仿真實(shí)驗(yàn)儀的優(yōu)點(diǎn)是集合了具有ISP 功能的單片機(jī)和CPLD,可以同時(shí)完成不同的仿真模擬。該仿真實(shí)驗(yàn)儀具有比較寬的頻率范圍,具有兩個(gè)可選節(jié)電模式。因?yàn)椴捎昧遂o態(tài)設(shè)計(jì),因此支持操作時(shí)斷點(diǎn)恢復(fù)運(yùn)行,防止用戶數(shù)據(jù)的丟失,并且用戶提供了豐富的外圍器件和設(shè)備接口。步進(jìn)電機(jī)與驅(qū)動模塊及仿真儀的連接如圖2 所示。
圖2 仿真儀通過驅(qū)動芯片與步進(jìn)電機(jī)連接
步進(jìn)電機(jī)通過環(huán)形脈沖分配器同步電脈沖信號,并能將電脈沖信號轉(zhuǎn)換成角位移或線位移。當(dāng)空間中按一定規(guī)律布置勵(lì)磁繞組順序和直流電接通后,轉(zhuǎn)子在旋轉(zhuǎn)磁場的作用下會轉(zhuǎn)過一定角度,轉(zhuǎn)過的角度大小和輸入的脈沖數(shù)成正比,控制發(fā)送脈沖的速度就可以控制步進(jìn)電機(jī)的轉(zhuǎn)速[6]。步進(jìn)電機(jī)主要由脈沖發(fā)生單元、脈沖分配單元、功率驅(qū)動單元和反饋單元這幾部分組成,步進(jìn)電機(jī)采用脈沖驅(qū)動的方式,過程中需要使用步進(jìn)電機(jī)驅(qū)動控制器,基于這個(gè)特點(diǎn)可以將步進(jìn)電機(jī)和現(xiàn)代數(shù)字控制技術(shù)結(jié)合,通過CPLD 對步進(jìn)電機(jī)實(shí)現(xiàn)運(yùn)行控制。
該設(shè)計(jì)選取25BY4801 型永磁式步進(jìn)電機(jī)作為控制對象,驅(qū)動電壓為DC 5 V,相電流為0.5 A。選用的步進(jìn)電機(jī)驅(qū)動芯片為ULN2003A,其電路具有電流增益高(大于1 000)、帶負(fù)載能力強(qiáng)(輸出電流大于500 mA)、溫度范圍寬(-40~85 ℃)等特點(diǎn)。將步進(jìn)電機(jī)的信號輸入端連接到CPLD 控制器的信號輸出端,就可以根據(jù)所編寫的程序控制步進(jìn)電機(jī)采用波驅(qū)動、半步驅(qū)動或全步工作模式。程序采用模塊化設(shè)計(jì)方式,TOP-DOWN 的設(shè)計(jì)方法。即先設(shè)計(jì)出頂層模塊(驅(qū)動模塊),然后設(shè)計(jì)頂層模塊中所需要的各功能模塊,頂層模塊的功能是調(diào)用各底層模塊[7-8]。
該設(shè)計(jì)方案利用脈沖數(shù)量進(jìn)行計(jì)數(shù),產(chǎn)生兩個(gè)輸出信號,然后通過譯碼成為4 個(gè)信號,即為控制步進(jìn)電機(jī)旋轉(zhuǎn)的信號。整個(gè)程序分為4 個(gè)模塊:計(jì)數(shù)器模塊、譯碼器模塊、脈沖產(chǎn)生模塊及步進(jìn)電機(jī)驅(qū)動模塊(頂層模塊)。四相四拍控制原理如圖3 所示。
圖3 四相四拍控制原理圖
計(jì)數(shù)器模塊是在時(shí)鐘脈沖下,將脈沖轉(zhuǎn)化為兩個(gè)輸出信號,即每當(dāng)脈沖上升沿,計(jì)數(shù)器計(jì)數(shù)一次。正轉(zhuǎn)時(shí)q1、q2此并列兩位進(jìn)行每次加1 計(jì)數(shù),忽略進(jìn)位,即以00→01→10→11→00 進(jìn)行循環(huán)計(jì)數(shù);反轉(zhuǎn)時(shí)q1、q2此并列兩位進(jìn)行每次減1 計(jì)數(shù),忽略借位,即以00→11→10→01→00 進(jìn)行循環(huán)計(jì)數(shù)。計(jì)數(shù)器模塊仿真波形如圖4 所示。
圖4 計(jì)數(shù)器模塊仿真波形圖
譯碼器模塊將計(jì)數(shù)器模塊產(chǎn)生的q1、q2兩個(gè)信號通過譯碼輸出 為out1、out2、out3、out44 個(gè)輸出信號。并根據(jù)q1、q2的數(shù)據(jù)(0、1)的循環(huán)變換,out1、out2、out3、out4進(jìn)行循環(huán)移位。四相單四拍定義為,正轉(zhuǎn)輸入信號以1000→0100→0010→0001→1000 進(jìn)行循環(huán),反轉(zhuǎn)輸入信號以1000→0001→0010→0100→1000 進(jìn)行循環(huán)。四相雙四拍定義為,正轉(zhuǎn)輸入信號以1100→0110→0011→1001→1100 進(jìn)行循環(huán),反轉(zhuǎn)輸入信號以1100→1001→0011→0110→1100 進(jìn)行循環(huán)。四相雙四拍仿真如圖5 所示。
圖5 譯碼器模塊仿真波形圖
脈沖產(chǎn)生模塊將系統(tǒng)脈沖分頻,進(jìn)而產(chǎn)生所需要頻率的脈沖,并通過幾次分頻分得不同的頻率脈沖,進(jìn)而能控制步進(jìn)電機(jī)的轉(zhuǎn)速。設(shè)計(jì)所利用的頻率為11.059 26 MHz的系統(tǒng)時(shí)鐘源,但因11.059 26 MHz數(shù)據(jù)量較大,非常容易造成MAX+PLUSII 軟件的不響應(yīng),故用100 Hz 模擬其仿真頻率。文中的仿真時(shí)鐘頻率全部為100 Hz。步進(jìn)電機(jī)驅(qū)動模塊是調(diào)用上述各個(gè)模塊,進(jìn)而控制步進(jìn)電機(jī),并定義輸入、輸出端口。步進(jìn)電機(jī)驅(qū)動模塊仿真如圖6 所示。
圖6 步進(jìn)電機(jī)驅(qū)動模塊仿真波形圖
此方案預(yù)先給定4 個(gè)輸出信號(正轉(zhuǎn)為一種方式,反轉(zhuǎn)為一種方式),然后在控制信號下進(jìn)行信號的循環(huán)移位,即可以將信號按一定循環(huán)方式發(fā)送到步進(jìn)電機(jī),進(jìn)而達(dá)到了控制步進(jìn)電機(jī)的目的[9-11]。該控制方案將程序分為了半步驅(qū)動模塊、脈沖產(chǎn)生模塊和步進(jìn)電機(jī)驅(qū)動3 個(gè)模塊,原理如圖7 所示。
圖7 四相八拍控制原理圖
在半步驅(qū)動模塊中,設(shè)定其正轉(zhuǎn)輸入信號順序?yàn)椋?000→1100→0100→0110→0010→0011→0001→1001→1000,反轉(zhuǎn)為:1000→1001→0001→0011→0010→0110→0100→1100→1000。給定初始信號,然后根據(jù)脈沖設(shè)定,進(jìn)行相應(yīng)的信號移位,使信號按上述方式循環(huán),即可使步進(jìn)電機(jī)為四相八拍式旋轉(zhuǎn),半步驅(qū)動模塊波形仿真如圖8 所示。
圖8 半步驅(qū)動模塊仿真波形圖
脈沖產(chǎn)生模塊同四相四拍控制,在此不再贅述。步進(jìn)電機(jī)驅(qū)動模塊是調(diào)用上述各模塊,進(jìn)而控制步進(jìn)電機(jī),并定義輸入、輸出端口,驅(qū)動模塊仿真波形如圖9 所示。
圖9 步進(jìn)電機(jī)驅(qū)動模塊仿真波形圖
在四相八拍控制中增加四相單四拍和四相雙四拍控制,并設(shè)定模式選擇按鍵就可對各種控制方式進(jìn)行選擇。模式選擇將全系統(tǒng)分為脈沖產(chǎn)生、脈沖控制和頂層控制3 個(gè)模塊。
脈沖控制模塊包括波驅(qū)動模式、半步驅(qū)動模式、全步模式3 個(gè)模塊。上述3 種模式分別控制步進(jìn)電機(jī)為四相單四拍、四向八拍和四相雙四拍轉(zhuǎn)動。這些模式的選擇與轉(zhuǎn)換都通過兩個(gè)模式選擇鍵進(jìn)行控制。脈沖產(chǎn)生模塊如前文所述。頂層模塊即步進(jìn)電機(jī)驅(qū)動程序模塊,包括有輸出選擇、驅(qū)動模式選擇、復(fù)位控制、方向控制。根據(jù)系統(tǒng)控制要求,頂層模塊負(fù)責(zé)調(diào)用上述模塊。當(dāng)mode=00 時(shí),輸出為波驅(qū)動模式;mode=01 時(shí),輸出為全步模式;mode=10 時(shí),輸出為半步模式;mode=11 時(shí),err=1,報(bào)錯(cuò)并輸出高阻態(tài)[12-14]。
輸入端口dir 控制正反轉(zhuǎn),key-in1、key-in2 控制加減速,clr 代表復(fù)位分別連接到仿真儀上的K1、K2、K3、K4 按鍵;clk 為時(shí)鐘脈沖輸入連接到仿真儀上的時(shí)鐘信號源;mode0、mode1 代表模式選擇連接到仿真儀上的K5、K6 按鍵。將輸入輸出管腳鎖定在CPLD 上,并將程序下載到CPLD 中,將仿真試驗(yàn)儀與步進(jìn)電機(jī)相連接進(jìn)行仿真。通電后步進(jìn)電機(jī)先按四相單四拍方式進(jìn)行轉(zhuǎn)動,按下所設(shè)定的按鍵后就可以對步進(jìn)電機(jī)的正反轉(zhuǎn)、加減速、運(yùn)行模式進(jìn)行控制和選擇[15-16]。
常用的步進(jìn)電機(jī)控制系統(tǒng)一般采用微機(jī)控制,這種微機(jī)控制的方法編程量大,限制了步進(jìn)電機(jī)轉(zhuǎn)速的提升和運(yùn)行控制,同時(shí)這種控制方式在電磁干擾較嚴(yán)重的車間抗干擾性能力也較差,可靠性不高。CPLD 是一種可進(jìn)行多次編程的超大規(guī)模數(shù)字集成電路,其集成了相當(dāng)規(guī)模的標(biāo)準(zhǔn)邏輯模塊,只要利用EDA 工具將所設(shè)計(jì)的數(shù)字系統(tǒng)的功能描述出來后編程到CPLD 內(nèi),就可以得到此系統(tǒng)的集成電路。在MAX+PLUSII 軟件環(huán)境下,用Verilog 語言對CPLD 進(jìn)行編程,通過CPLD 對步進(jìn)電機(jī)進(jìn)行控制,控制系統(tǒng)采用模塊式設(shè)計(jì)方法,把各控制功能分別列于不同模塊,提高了控制系統(tǒng)的靈活性且擴(kuò)展性良好,為步進(jìn)電機(jī)低成本控制提供了一種新的設(shè)計(jì)思路和實(shí)現(xiàn)方法[17-19]。