【正文】
e ponents. The distinctive advantages of the system are expandable, stable, simple and lowcost, also have the advantages of changing functions on system and doesn’t occupy CPU time, etc. It can be used in controlling situation of every multiple stepper motor. Keywords: CPLD/FPGA, stepper motor, VHDL 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 3 1 引言 近些年來 ,由于步進(jìn)電機(jī)的控制精度不斷提高 ,越來越多有較高控制精度要求的系統(tǒng)也開始采用步進(jìn)電機(jī)。 對于大功率步進(jìn)電機(jī) ,一般采用 CPU與專用步進(jìn)電機(jī)驅(qū)動(dòng)器聯(lián)合工作的方式, CPU 產(chǎn)生脈沖,控制停啟、正反轉(zhuǎn)等,專用步進(jìn)電機(jī)驅(qū)動(dòng)器則進(jìn)行脈沖環(huán)形分配及功率驅(qū)動(dòng)。 本文采用 ALTERA 公司的 FLEX10K10 系列 CPLD器件 ,設(shè)計(jì)了專用的步進(jìn)電機(jī)控制電路,取得了較好的效果。設(shè)計(jì)得可以自己定義器件的內(nèi)部邏輯和管腳 ,將原來由電路板設(shè)計(jì)完成的大部分工作放在芯片的設(shè)計(jì)中。 CPLD產(chǎn)品中部分是采用菊花在系統(tǒng)編程方式的。其編程次數(shù)多達(dá) 1萬次。 CPLD的時(shí)鐘延遲可達(dá)納秒級,結(jié)合其并行工作方式,在超高速應(yīng)用領(lǐng)域和實(shí)時(shí)測控方面有非常廣闊的應(yīng)用前景。但物理機(jī)制卻像一片 74LS164那樣屬純硬件電路,十分可靠。 CPLD的高可靠性還表現(xiàn)在幾乎可將整個(gè)系統(tǒng)下載于同一芯片中,從而大大縮小了體積, 易于管理和屏蔽。單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)對于行家里手來說是十分簡單的事,然而對于初學(xué)者著實(shí)不是一件容易的事。由于相應(yīng)的 EDA 軟件功能完善而強(qiáng)大, 仿真能力便捷而實(shí)時(shí),開發(fā)過程形象而直觀,兼之硬件因素涉及甚少。 步進(jìn)電機(jī)分三種:永磁式( PM),反應(yīng)式( VR)和混合式( HB) 。 (3)利用輸入脈沖的頻率高低即可做轉(zhuǎn)速的調(diào)整。 四相六線式步進(jìn)電機(jī)如圖 1所示: 方式 一般步進(jìn)電機(jī) 的驅(qū)動(dòng)方式可以采用以下 3種方式: 1. 單相激磁控制 2. 二相激磁控制 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 5 3. 半步激磁控制 圖 2 為二相 激磁 控制 的工作時(shí)序圖,每一步級運(yùn)轉(zhuǎn)時(shí)有兩相線圈被激磁,因此它的耗電是單相激磁電流的 2 倍,扭矩可以增為 2 倍,阻尼效果佳,一般采用此方式控制較多。 常見的驅(qū)動(dòng)電路有: 1)單極性驅(qū)動(dòng)電路 ,此種方式驅(qū)動(dòng)線路簡單,效率低,啟動(dòng)和運(yùn)行頻率均不高。這樣可以使步距角減小,步進(jìn)誤差減小,提高精度;同時(shí)也減弱了低頻震蕩問題,運(yùn)行特別好,但電路復(fù)雜。 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 6 圖 3 系統(tǒng)結(jié)構(gòu)框圖 步進(jìn)電機(jī) 驅(qū)動(dòng)電路 圖 3 為步進(jìn)電機(jī)的驅(qū)動(dòng)控制電路 ,為單極性驅(qū)動(dòng) : 圖 4 步進(jìn)電機(jī)的驅(qū)動(dòng)電路 步進(jìn)電機(jī)控制板 . 1 數(shù)碼管顯示 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 7 圖 5 顯示電路 可編程 邏輯 芯片 引腳為 84腳的 EEPROM工藝 的 CPLD的引腳圖 : 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 8 圖 6 Altera FLEX10K10LC844 鍵盤電路 圖 7 鍵盤電路 其他部分 系統(tǒng)采用 5V直流電源,相關(guān)電路圖如下 圖 8 電源電路 芯片引腳分配 下面列出在本系統(tǒng)中所使用的一些引腳信息及說明 。 由于當(dāng)時(shí)工業(yè)界的迫切需要 , IEEE標(biāo)準(zhǔn)化委員會(huì)于 1987年將其確定為標(biāo)準(zhǔn)硬件描述語言 , 即IEEE10761987標(biāo)準(zhǔn) 。 VHDL 語言的特點(diǎn) 運(yùn)用VHDL語言設(shè)計(jì)系統(tǒng)一般采用自上而下分層設(shè)計(jì)的方法 , 首先從系統(tǒng)級功能設(shè)計(jì)開始 ,對系統(tǒng)高層模塊進(jìn)行行為描述和功能驗(yàn)證 。 現(xiàn)在的EDA (電子設(shè)計(jì)自動(dòng)化 )工具一般都具有邏輯綜合的功能 , 可將行為描述自動(dòng)轉(zhuǎn)換為與PLD器件結(jié)構(gòu)相對應(yīng)的邏輯描述 , 這給設(shè)計(jì)者帶來了極大的方便 , 并大大縮短了產(chǎn)品的開發(fā)周期 。 對實(shí)體進(jìn)行描述時(shí)分為實(shí)體說明和結(jié)構(gòu)體兩部分 。 在編寫結(jié)構(gòu)體時(shí) , 根據(jù)具體情況可先用結(jié)構(gòu)式描述 (描述電路結(jié)構(gòu) )、行為式描述 (描述實(shí)體的功能和行為 )或算法式描述 (描述實(shí)體輸入和輸出間的算法關(guān)系 )。 通常 , 以上 5 個(gè)部分就是一個(gè)完整的VHDL程序應(yīng)該包含的內(nèi)容 。 從邏輯上看 , 首先要考慮器件的I /O資源是否夠用 2 設(shè)計(jì)輸入 設(shè)計(jì)輸入是將所設(shè)計(jì)的電路以開發(fā)軟件要求的某種形式表達(dá)出來 , 并輸入計(jì)算機(jī) , 如邏輯圖和硬件描述語言 (HDL )。 按照開發(fā)軟件的要求輸入一定的測試序列 , 軟件可以將這種電 路的這種序列作 用下的輸出波形顯示出來 。 頂層原理圖 如圖 9所示 。 底層模塊由 VHDL硬件描述語言設(shè)計(jì),頂層文件采用圖形方 法,完成各個(gè)模塊間的連接。 Entity mybjdj is port (clk1,rst,dir:in std_logic。 Architecture one of mybjdj is signal t:integer range 0 to 16000000。 signal state:mystate。 elsif clk139。a=1001。b=0110。 when st3=state=st0。 end if。139。 elsif dir=39。 end if。 End。 共有三個(gè)進(jìn)程,程序如下: Library ieee。 key2,key3,key4,key5:in std_logic。 Architecture one of square1 is signal t:integer range 0 to 16000000。 signal enb:std_logic。 then a=39。event and clk16m=39。a=not a。 end process。 then if count=data then enb=39。 then enb=39。 end process。 then if enb=39。 then q=39。 end if。 Process(key2,key3,key4,key5) 此進(jìn)程 預(yù)置步進(jìn)電機(jī)轉(zhuǎn)動(dòng)步數(shù) begin if key2=39。039。 then data=140。 100step end if。 數(shù)碼 動(dòng)態(tài) 顯示 模塊 基于 CPLD 的步進(jìn)電機(jī)控制系統(tǒng) 14 XIANSHI 為顯示模塊,把步進(jìn)脈沖輸入此模塊,在系統(tǒng) 中實(shí)時(shí)顯示轉(zhuǎn)動(dòng)步數(shù),可檢查與預(yù)置參數(shù)是否一致。 Use 。 End。 signal twei:integer range 0 to 15。 signal clktt:std_logic。 then sl=0。) then if sl=9 then sl=0。clkts=39。 end process。 elsif clkts39。 clktt=39。039。 Process(clktt,rst) HH 為百位顯示 begin if rst=39。event and clktt=39。 end if。 When 1=q=11111001。 When 5=q=10010010。 When 9=q=10010000。 Proces