直流電機(jī)綜合測(cè)控系統(tǒng)的設(shè)計(jì) - 直流電機(jī)驅(qū)動(dòng)控制電路的功能
采用PWM控制方式對(duì)直流電機(jī)進(jìn)行速度控制、旋轉(zhuǎn)方向的控制和變速控制。 - 設(shè)計(jì)要求
- 詳細(xì)說(shuō)明系統(tǒng)工作原理與設(shè)計(jì)方案;
- 用VHDL編寫(xiě)設(shè)計(jì)程序;
- 給出系統(tǒng)仿真結(jié)果;
- 進(jìn)行硬件驗(yàn)證;
目 錄
1 引言1
1.1 課題研究背景3
1.2 課題研究的現(xiàn)狀4
1.3 可以主要研究?jī)?nèi)容及意義
2 PWM原理及課題原理6
2.1 PWM原理6
2.2課題原理7
3課程設(shè)計(jì)原理及模塊介紹
3.1 系統(tǒng)總體組成及框圖
3.2 電機(jī)轉(zhuǎn)速控制模塊
3.2.1 設(shè)計(jì)思想及模塊原理圖
3.2.2 轉(zhuǎn)速模塊VHDL設(shè)計(jì)語(yǔ)言
3.2.3 轉(zhuǎn)速模塊仿真結(jié)果
3.3 正反轉(zhuǎn)向控制模塊
3.3.1 設(shè)計(jì)思想及模塊原理圖
3.3.2 正反轉(zhuǎn)向模塊VHDL設(shè)計(jì)語(yǔ)言
3.3.3 正反轉(zhuǎn)向模塊仿真結(jié)果
3.4 轉(zhuǎn)速測(cè)定及顯示模塊
3.4.1 設(shè)計(jì)思想及模塊圖
3.4.2 轉(zhuǎn)速測(cè)定模塊CHDL設(shè)計(jì)語(yǔ)言
3.4.3 轉(zhuǎn)速測(cè)定仿真結(jié)果
3.5 消抖模塊
3.5.1 設(shè)計(jì)思想及原理圖
3.5.2 消抖模塊VHDL設(shè)計(jì)語(yǔ)言
3.5.3 消抖模塊仿真結(jié)果
4 硬件電路及測(cè)試結(jié)果
4.1 直流電機(jī)的介紹
4.2 紅外測(cè)速模塊
4.3 引腳配置
4.4 測(cè)試
5 結(jié)論34
參考文獻(xiàn) 35
附錄 36
一 引言 1.1 課題研究背景 電機(jī)作為機(jī)電能轉(zhuǎn)換裝置,其范圍已遍及國(guó)民經(jīng)濟(jì)的各個(gè)領(lǐng)域。近些年來(lái),隨著現(xiàn)代電力電子技術(shù)、控制技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,電機(jī)的控制技術(shù)也得到了進(jìn)一步的發(fā)展,電機(jī)應(yīng)用已由過(guò)去簡(jiǎn)單的起?刂啤⑻峁﹦(dòng)力為目的的應(yīng)用,上升到對(duì)其速度、位置、轉(zhuǎn)矩等進(jìn)行精確的控制,使被驅(qū)動(dòng)的機(jī)械符合預(yù)想的要求。采用功率器進(jìn)行控制,將預(yù)定的控制方案、規(guī)劃指令轉(zhuǎn)變成期望的機(jī)械運(yùn)動(dòng),這種新型控制技術(shù)已經(jīng)不是傳統(tǒng)的“電機(jī)控制”、“電氣傳動(dòng)”而是“運(yùn)動(dòng)控制”。運(yùn)動(dòng)控制使被控制機(jī)械運(yùn)動(dòng)實(shí)現(xiàn)精確地位置控制、速度控制、加速控制、轉(zhuǎn)矩或力的控制,以及這些被控制兩量的綜合控制。 1.2 課題研究的現(xiàn)狀 近幾年來(lái),由于微電子技術(shù)與計(jì)算機(jī)技術(shù)的飛速發(fā)展及單片機(jī)的普及,將調(diào)速裝置向密集化、小型化和智能化方向發(fā)展。國(guó)外交直流系統(tǒng)數(shù)字化已經(jīng)達(dá)到實(shí)用階段。由微處理器為技術(shù)核心的數(shù)字控制系統(tǒng)硬件電路的標(biāo)準(zhǔn)化程度高,需要成本低,并不受器件的溫度漂移所引起的影響。數(shù)字控制系統(tǒng)能夠有效的進(jìn)行邏 輯判斷和復(fù)雜的運(yùn)算,能做到不同于一般線性調(diào)節(jié)的最優(yōu)化、適應(yīng)性、非線性、智能化等控制規(guī)律。如采用微機(jī)控制產(chǎn)生PWM信號(hào)。用微機(jī)或單片機(jī)產(chǎn)生PWM信號(hào)波形,需要通過(guò)D/A轉(zhuǎn)換器產(chǎn)生鋸齒波電壓和設(shè)置參考電壓,通過(guò)外接模擬比較器輸出PWM波形,因此外圍電路比較復(fù)雜。單片機(jī),雖然D S P 具 備生 成PWM信號(hào)及捕獲電機(jī)編碼器信號(hào)的能力,但其對(duì)IC生成 PWM信 號(hào) 的通 道數(shù)目及電機(jī)編碼器捕獲通道數(shù)目有限。對(duì)多個(gè)直流電機(jī)的控制很難滿足要求。 基于現(xiàn)場(chǎng)可編程門(mén)陣列FPGA對(duì)直流電機(jī)的控制策略, 為實(shí)現(xiàn)電動(dòng)機(jī)數(shù)字控制提供了一種有效的方法。FPGA器 件具有集成度高、體積小、運(yùn)算速度快、易于修改等特點(diǎn)。用FPGA來(lái)實(shí)現(xiàn)多 路PWM調(diào)控,內(nèi)部自帶數(shù)模變換功能,不再需要外接數(shù)模轉(zhuǎn)換設(shè)備,形式簡(jiǎn)單,誤差小、控制性能強(qiáng)。用單片機(jī)和DSP的控制都難以達(dá)到同樣的控制效果 1.3 課程的主要研究?jī)?nèi)容及意義 FPGA的開(kāi)發(fā)語(yǔ)言(VHDL語(yǔ)言)是一種用于數(shù)字系統(tǒng)設(shè)計(jì)和測(cè)試的硬件描述語(yǔ)言,也是我們國(guó)家極力推廣的一種標(biāo)準(zhǔn)語(yǔ)言。本課題是以FPGA為控制核心,學(xué)習(xí)直流電機(jī)PWM的FPGA控制,通過(guò)PWM的控制,實(shí)現(xiàn)對(duì)直流電機(jī)的轉(zhuǎn)速測(cè)量、轉(zhuǎn)速調(diào)節(jié)和轉(zhuǎn)向控制。 設(shè)計(jì)直流電機(jī)控制系統(tǒng)能夠充分發(fā)揮電機(jī)的特性,通過(guò)本課題,一方面訓(xùn)練我在查閱資料的基礎(chǔ)上,了解FPGA控制的一些基本技術(shù),掌握其控制系統(tǒng)的分析方法與實(shí)現(xiàn);另一方面通過(guò)本次設(shè)計(jì),設(shè)計(jì)出相應(yīng)的控制系統(tǒng),以實(shí)現(xiàn)對(duì)直流電機(jī)轉(zhuǎn)速的測(cè)量、轉(zhuǎn)速的調(diào)節(jié)和轉(zhuǎn)向的控制,并以此培養(yǎng)自己的自學(xué)和動(dòng)手能力,從而為今后參加工作或進(jìn)一步深造打下良好的基礎(chǔ)。 2.1 PWM原理 脈沖寬度調(diào)制(PWM)是英文“Pulse Width Modulation”的縮寫(xiě),簡(jiǎn)稱脈寬調(diào)制。它是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用于測(cè)量,通信,功率控制與變換等許多領(lǐng)域。 脈沖寬度調(diào)制(PWM)是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過(guò)高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來(lái)對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。PWM信號(hào)仍然是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(wú)(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時(shí)候即是直流供電被加到負(fù)載上的時(shí)候,斷的時(shí)候即是供電被斷開(kāi)的時(shí)候。只要帶寬足夠,任何模擬值都可以使用PWM進(jìn)行編碼。 PWM的一個(gè)優(yōu)點(diǎn)是從處理器到被控系統(tǒng)信號(hào)都是數(shù)字形式的,無(wú)需進(jìn)行數(shù)模轉(zhuǎn)換。讓信號(hào)保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強(qiáng)到足以將邏輯1改變?yōu)檫壿?或?qū)⑦壿?改變?yōu)檫壿?時(shí),也才能對(duì)數(shù)字信號(hào)產(chǎn)生影響。
對(duì)噪聲抵抗能力的增強(qiáng)是PWM相對(duì)于模擬控制的另外一個(gè)優(yōu)點(diǎn),而且這也是在某些時(shí)候?qū)WM用于通信的主要原因。從模擬信號(hào)轉(zhuǎn)向PWM可以極大地延長(zhǎng)通信距離。在接收端,通過(guò)適當(dāng)?shù)腞C或LC網(wǎng)絡(luò)可以濾除調(diào)制高頻方波并將信號(hào)還原為模擬形式。
總之,PWM既經(jīng)濟(jì)、節(jié)約空間、抗噪性能強(qiáng),是一種值得廣大工程師在許多設(shè)計(jì)應(yīng)用中使用的有效技術(shù)。 2.2 課題原理 一般的脈寬調(diào)制PWM信號(hào)是通過(guò)模擬比較器產(chǎn)生的,比較器的一端接給定的參考電壓,另一端接周期性線性增加的鋸齒波電壓。當(dāng)鋸齒波電壓小于參考電壓時(shí)輸出低電平,當(dāng)鋸齒波電壓大于參考電壓時(shí)輸出高電平。改變參考電壓就可以改變PWM波形中高電平的寬度。若用單片機(jī)產(chǎn)生PWM信號(hào)波形,需要通過(guò)DA裝換器產(chǎn)生鋸齒波電壓和設(shè)置參考電壓,通過(guò)外接模擬比較器輸出PWM波形,因此外圍電路比較復(fù)雜。 FPGA中的數(shù)字PWM控制與一般的模擬PWM控制不同。用FPGA產(chǎn)生PWM波形,只需FPGA內(nèi)部資源就可以實(shí)現(xiàn)。用數(shù)字比較器代替比較器,其一端接設(shè)定值計(jì)數(shù)器輸出,另一端接線性遞增計(jì)數(shù)器輸出。當(dāng)線性計(jì)數(shù)器的計(jì)數(shù)值小于設(shè)定值設(shè)定值時(shí)輸出低電平,當(dāng)計(jì)數(shù)值大于設(shè)定值時(shí)輸出高電平。 3.1 系統(tǒng)總體組成及框圖 直流電機(jī)控制電路構(gòu)思如圖1所示,整個(gè)設(shè)計(jì)大致有4個(gè)模塊組成。 
圖1 直流電機(jī)控制總系統(tǒng)圖 第一個(gè)模塊是PWM脈寬調(diào)制信號(hào)發(fā)生模塊。這個(gè)模塊也是用來(lái)控制轉(zhuǎn)速的模塊,通過(guò)設(shè)計(jì)兩個(gè)計(jì)數(shù)器的值,一個(gè)計(jì)數(shù)器的值是根據(jù)時(shí)鐘時(shí)刻改變的,改變的時(shí)鐘頻率來(lái)自鎖相環(huán),這里把這個(gè)計(jì)數(shù)器叫做“時(shí)變計(jì)數(shù)器”,這是個(gè)8為計(jì)數(shù)器,輸出的數(shù)據(jù)相當(dāng)于鋸齒波信號(hào)。另一個(gè)計(jì)數(shù)器的值是通過(guò)檔位按鍵來(lái)決定的,按鍵按下一次,計(jì)數(shù)器就相應(yīng)的加一或者減一,這里把這個(gè)計(jì)數(shù)器叫做“設(shè)定值計(jì)數(shù)器”。這以為是個(gè)8為計(jì)數(shù)器,其中低4位設(shè)定為恒定1111,高4為由按鍵控制。這兩個(gè)計(jì)數(shù)模塊的值通過(guò)比較,就能輸出一個(gè)一定占空比的PWM波,通過(guò)設(shè)定計(jì)數(shù)器的值就能改變PWM波的占空比,這樣就控制了電機(jī)的轉(zhuǎn)速,于是也就通過(guò)手動(dòng)按鍵控制電機(jī)的轉(zhuǎn)速。 第二個(gè)模塊是電機(jī)正反轉(zhuǎn)模塊。這個(gè)模塊是通過(guò)按鍵來(lái)控制的,當(dāng)按下一次按鍵后,電機(jī)的轉(zhuǎn)向就改變一次。這個(gè)模塊我是通過(guò)用狀態(tài)機(jī)來(lái)實(shí)現(xiàn)正反轉(zhuǎn)狀態(tài)的改變,電機(jī)正轉(zhuǎn)是一個(gè)狀態(tài),反轉(zhuǎn)是一個(gè)狀態(tài),用狀態(tài)機(jī)書(shū)寫(xiě)這個(gè)模塊會(huì)使電機(jī)正反轉(zhuǎn)模塊更加穩(wěn)定。 第三個(gè)模塊是電機(jī)轉(zhuǎn)速測(cè)定顯示模塊。本課程是通過(guò)紅外光電測(cè)定轉(zhuǎn)速的,這個(gè)模塊的關(guān)鍵問(wèn)題是產(chǎn)生一個(gè)1s的閘門(mén)時(shí)間,通過(guò)記下1s輸入的脈沖數(shù)并所存,然后譯碼通過(guò)數(shù)碼管顯示在硬件電路上。如圖3.1所示,外部脈沖通過(guò)消抖后,就直接進(jìn)入1s輸入脈沖計(jì)數(shù)器,1s結(jié)束后,把記下的脈沖數(shù)所存起來(lái),用譯碼管顯示出來(lái)。 第四個(gè)模塊是消抖模塊。消抖模塊是個(gè)必不可少的模塊。在本課程中,按鍵需要消抖,不消抖就會(huì)出現(xiàn)不穩(wěn)定的現(xiàn)象,輸入脈沖也需要消抖,不消抖就出現(xiàn)技術(shù)不準(zhǔn)。消抖的原理是,一個(gè)需要消抖的信號(hào),和一個(gè)高頻率的脈沖信號(hào),當(dāng)消抖信號(hào)處于高電平時(shí),高頻率信號(hào)同時(shí)開(kāi)始計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到預(yù)設(shè)的計(jì)數(shù)值時(shí),高電平仍為高電平,則這個(gè)高電平信號(hào)有效,反之如果到達(dá)計(jì)數(shù)值時(shí)消抖信號(hào)變?yōu)榈碗娖剑瑒t這個(gè)高電平無(wú)效。同理低電平一樣。 那么,由這4個(gè)模塊就構(gòu)成了上圖的直流電機(jī)控制電路。 3.2 電機(jī)轉(zhuǎn)速控制模塊 3.2.1 設(shè)計(jì)思想及模塊原理圖 在用FPGA控制直流電機(jī)轉(zhuǎn)速時(shí),其核心是改變每個(gè)PWM周期的占空比。在這里需要產(chǎn)生一個(gè)設(shè)定值計(jì)數(shù)器,一個(gè)時(shí)變計(jì)數(shù)器和一個(gè)數(shù)字比較器。原理圖如圖2所示。 具體地說(shuō),設(shè)定值計(jì)數(shù)器就是根據(jù)按鍵按下時(shí)選取的不同檔位,輸出一個(gè)不同的數(shù)值。本次設(shè)計(jì)速度分為十六檔,每增加一檔,轉(zhuǎn)速相應(yīng)增加,十六檔時(shí)轉(zhuǎn)速達(dá)到最大。據(jù)此,首先要設(shè)計(jì)一個(gè)檔位調(diào)節(jié)模塊,當(dāng)輸入不同的檔位數(shù)值時(shí),要輸出一個(gè)計(jì)數(shù)值,這個(gè)數(shù)值規(guī)定了設(shè)定值計(jì)數(shù)器的輸出數(shù)值。當(dāng)檔位增加時(shí),設(shè)定值計(jì)數(shù)器的值相應(yīng)增加,從而改變PWM信號(hào)占空比,使其占空比增大,電機(jī)轉(zhuǎn)速加快。設(shè)定值計(jì)數(shù)器的輸出加到比較器的一端,和時(shí)變計(jì)數(shù)器的數(shù)值進(jìn)行比較。時(shí)變計(jì)數(shù)器的時(shí)鐘數(shù)值來(lái)自對(duì)鎖相環(huán)的分頻,時(shí)鐘數(shù)值能決定電機(jī)相應(yīng)時(shí)間的快慢。 實(shí)驗(yàn)室的電機(jī)一般都能達(dá)到100轉(zhuǎn)左右,所以計(jì)數(shù)器的位數(shù)不應(yīng)低于7位,若更低的話,每改變一位數(shù),對(duì)應(yīng)的轉(zhuǎn)數(shù)還達(dá)不到一轉(zhuǎn),這樣就不能對(duì)每一轉(zhuǎn)進(jìn)行細(xì)分,也就無(wú)法精確控制電機(jī)的轉(zhuǎn)速。在設(shè)計(jì)中計(jì)數(shù)器位數(shù)設(shè)成了8位。 那么PWM信號(hào)的占空比具體是如何隨著檔位的不同而改變的呢?在前面已經(jīng)設(shè)計(jì)好了一個(gè)設(shè)定值計(jì)數(shù)器和一個(gè)時(shí)變計(jì)數(shù)器,這兩個(gè)數(shù)值加在數(shù)字比較器輸入端進(jìn)行比較,當(dāng)設(shè)定值計(jì)數(shù)器的值大于時(shí)變計(jì)數(shù)器的值時(shí),比較器輸出低電平;當(dāng)設(shè)定值計(jì)數(shù)器的值小于時(shí)變計(jì)數(shù)器的值時(shí),比較器輸出高電平。 因?yàn)樵O(shè)定值計(jì)數(shù)器的低四位恒為1,高四位由按鍵決定,當(dāng)按鍵按下去一次,高四位就加1,因?yàn)檫@是四位,所以解釋了為什么了有十六個(gè)檔位。 圖 2 電機(jī)轉(zhuǎn)速模塊原理圖
端口介紹: DOUT[7..0]:是8位時(shí)變計(jì)數(shù)器的輸出 CIN[7..0]:是8位設(shè)定值計(jì)數(shù)器輸出 DOUT[3..0]:是檔位的4位輸出 正好對(duì)應(yīng)十六個(gè)檔位 OT:比較結(jié)果 3.2.2、轉(zhuǎn)速模塊VHDL設(shè)計(jì)語(yǔ)言 PWM脈寬調(diào)制信號(hào):發(fā)生模塊當(dāng)時(shí)變計(jì)數(shù)值小于設(shè)定值時(shí)輸出低電平,當(dāng)時(shí)變計(jì)數(shù)值大于設(shè)定值時(shí)輸出高電平。 仿真結(jié)果如圖3 - USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- ENTITY SQU1 IS
- PORT ( CIN,ADR : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
- OT : OUT STD_LOGIC );
- END SQU1;
- ARCHITECTURE BHV OF SQU1 IS
- BEGIN
- PROCESS(CIN) BEGIN
- IF (ADR<CIN) THEN OT<='0';
- ELSE OT<='1'; END IF;
- END PROCESS;
- END BHV;
復(fù)制代碼- 8為時(shí)變計(jì)數(shù)器:這個(gè)8為計(jì)數(shù)器是根據(jù)時(shí)鐘0計(jì)數(shù)的 仿真結(jié)果如圖4
- LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- ENTITY CNT8B IS
- PORT (CLK : IN STD_LOGIC;
- DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
- END CNT8B;
- ARCHITECTURE BHV OF CNT8B IS
- BEGIN
- PROCESS(CLK)
- VARIABLE CQ : STD_LOGIC_VECTOR(7 DOWNTO 0);
- BEGIN
- IF CLK'EVENT AND CLK = '1' THEN
- IF CQ<255 THEN --最大計(jì)數(shù)到255
- CQ := CQ + 1 ;
- ELSE CQ := (OTHERS=>'0') ;
- END IF;
- END IF;
- DOUT <= CQ;
- END PROCESS;
- END BHV;
復(fù)制代碼
- 8為設(shè)定值計(jì)數(shù)器 仿真結(jié)果如圖5
- LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- ENTITY CNT4B IS
- PORT (CLK : IN STD_LOGIC;
- CIN: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --8為設(shè)定值
- DOUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); --4位檔位信號(hào)
- END CNT4B;
- ARCHITECTURE BHV OF CNT4B IS
- SIGNAL CQ1 : STD_LOGIC_VECTOR(3 DOWNTO 0);
- BEGIN
- PROCESS(CLK)
- VARIABLE CQ : STD_LOGIC_VECTOR(3 DOWNTO 0);
- BEGIN
- CQ1 <="1111"; --低四位預(yù)設(shè)為1111
- IF CLK'EVENT AND CLK = '1' THEN --CLK上升沿到來(lái)時(shí)
- IF CQ<15 THEN
- CQ := CQ + 1 ;
- ELSE CQ := (OTHERS=>'0') ;
- END IF;
- END IF;
- DOUT <=CQ(3 DOWNTO 0);
- CIN <=CQ&CQ1;
- END PROCESS;
- END BHV;
復(fù)制代碼
3.2.3、轉(zhuǎn)速模塊仿真結(jié)果 由仿真結(jié)果可以看出,確實(shí)滿足當(dāng)時(shí)變計(jì)數(shù)值小于設(shè)定值時(shí)輸出低電平,當(dāng)時(shí)變計(jì)數(shù)值大于設(shè)定值輸出高電平。 
圖3 比較器仿真圖 
圖4 時(shí)變計(jì)數(shù)器仿真圖 
圖5 設(shè)定計(jì)數(shù)器仿真圖 3.3 正反轉(zhuǎn)向控制模塊 3.3.1 設(shè)計(jì)思想及原理圖 這個(gè)模塊就是按鍵來(lái)控制電機(jī)的轉(zhuǎn)向,正反向?qū)?yīng)著2中狀態(tài),因此可以通過(guò)按鍵來(lái)實(shí)現(xiàn)狀態(tài)的改變,每按一次狀態(tài)改變一次。當(dāng)然這里應(yīng)該還有一個(gè)使能控制,可以來(lái)啟動(dòng)和暫停電機(jī)轉(zhuǎn)動(dòng)。 工作原理 當(dāng)按鍵K1第一次按下的時(shí)候,假定令M賦值給M0,則M1應(yīng)賦值為低電平,當(dāng)按鍵第二次按下的時(shí)候,則把M賦值給M1,則M0應(yīng)賦值為低電平。如此反復(fù)的就實(shí)現(xiàn)了電機(jī)的正轉(zhuǎn),反轉(zhuǎn)。當(dāng)按鍵K3被按下時(shí),則電機(jī)開(kāi)始轉(zhuǎn)動(dòng),當(dāng)K3再次被按下時(shí),則電機(jī)停止轉(zhuǎn)動(dòng)。設(shè)計(jì)原理圖如圖6 圖6 正反轉(zhuǎn)模塊原理圖 端口介紹 M :為比較器輸出的電平值 SL :按鍵K1的輸入端,用來(lái)控制正反轉(zhuǎn)、 M0,M1 :為電機(jī)的兩個(gè)輸入端。 K : 為按鍵K3的輸入端,用來(lái)控制電機(jī)的啟動(dòng)和暫停
3.3.2 正反轉(zhuǎn)向模塊VHDL設(shè)計(jì)語(yǔ)言 仿真結(jié)果如圖7所示 - LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- use ieee.std_logic_arith.all;
- ENTITY SLT IS --M為比較值
- PORT (SL, M, K : IN STD_LOGIC; --SL為正反轉(zhuǎn)按鍵
- m0, m1: OUT STD_LOGIC ); --K為啟動(dòng)停止按鍵
- END SLT;
- ARCHITECTURE BHV OF SLT IS
- TYPE FSM_ST IS (S0,S1); --正反兩種狀態(tài)
- SIGNAL c_st, next_state: FSM_ST :=S0;
- BEGIN
- REG : PROCESS (SL)
- BEGIN
- IF SL='1'AND SL'EVENT THEN c_st <= next_state;--按鍵按下,次態(tài)變?yōu)楝F(xiàn)態(tài)
- END IF;
- END PROCESS REG ;
- COM : PROCESS (c_st, M) BEGIN
- IF K='1' THEN m0 <='0'; m1 <='0'; --如果有高電平,那么m0,m1都為0,則電機(jī)不轉(zhuǎn)
- ELSE
- CASE c_st IS
- WHEN S0 => m0 <= M; m1 <='0'; next_state <= S1;
- WHEN S1 => m1 <= M; m0 <='0'; next_state <= S0;
- END CASE;
- END IF;
- END PROCESS;
- END BHV;
復(fù)制代碼
程序分析,本模塊使用狀態(tài)機(jī)來(lái)實(shí)現(xiàn)電平的轉(zhuǎn)換,K為高電平時(shí),輸出為0電機(jī)不動(dòng),低電平時(shí),初始狀態(tài)為S0,當(dāng)SL有上升沿變化的時(shí)候,初態(tài)就轉(zhuǎn)為次態(tài)。 3.3.3 正反轉(zhuǎn)向模塊仿真結(jié)果 根據(jù)圖7 可知,當(dāng)檢測(cè)SL第一次上升沿變化的時(shí)候,M1的就和M相同,同時(shí)MO就為低電平,當(dāng)檢測(cè)SL第二次上升沿變化的時(shí)候,M0的就和M相同,同時(shí)M1就為低電平,其后的過(guò)程中這兩種狀態(tài)就交替進(jìn)行。當(dāng)檢測(cè)到K為高電平時(shí),M1和M2都為低電平。 圖7 正反轉(zhuǎn)向模塊仿真圖
3.4、轉(zhuǎn)速測(cè)定及顯示模塊 3.4.1 設(shè)計(jì)思想及模塊圖 設(shè)計(jì)這個(gè)模塊的關(guān)鍵問(wèn)題是產(chǎn)生一個(gè)1s的閘門(mén)信號(hào),記下1s鐘輸入的脈沖數(shù),鎖存,然后譯碼輸出到硬件電路上。設(shè)計(jì)原理圖如圖8所示。 圖8 轉(zhuǎn)速測(cè)定模塊原理圖 端口介紹: C1: 為鎖相環(huán)輸出5MHz C0: 為鎖相環(huán)輸出4096Hz KIN: 為待測(cè)頻率 LEDA LEDB:為所存信號(hào)輸出
3.4.2轉(zhuǎn)速測(cè)定模塊CHDL設(shè)計(jì)語(yǔ)言 (1)分頻模塊:通過(guò)對(duì)鎖相環(huán)輸出的4096Hz時(shí)鐘進(jìn)行分頻以獲得1 Hz時(shí)鐘,為頻率計(jì)控制模塊TF_CTRL提供1 S的閘門(mén)時(shí)間。程序如下: - LIBRARY IEEE ;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- ENTITY CNT IS
- PORT(CLOCK : IN STD_LOGIC ;COUT : OUT STD_LOGIC);
- END ;
- ARCHITECTURE bhv OF CNT IS
- SIGNAL C1,C2 : STD_LOGIC_VECTOR(8 DOWNTO 0) ;
- SIGNAL M1,M2 : STD_LOGIC ;
- BEGIN
- PROCESS(CLOCK,C1) BEGIN
- IF RISING_EDGE(CLOCK) THEN
- IF (C1="111111111") THEN C1<="000000000"; ELSE C1<=C1+1; END IF;
- IF (C1="000000001") THEN M1<=NOT M1; ELSIF (C1="100000000") THEN M1<=NOT M1;
- END IF;END IF;
- END PROCESS;
- PROCESS (CLOCK,C2) BEGIN
- IF FALLING_EDGE(CLOCK) THEN
- IF(C2="111111111") THEN C2<="000000000"; ELSE C2<=C2+1;END IF;
- IF(C2="000000001") THEN M2<=NOT M2 ; ELSIF (C2="100000000") THEN M2<=NOT M2;
- END IF; END IF;
- END PROCESS;
- COUT<=M1 OR M2;
- END bhv;
復(fù)制代碼
- 頻率計(jì)控制模塊:這個(gè)模塊時(shí)產(chǎn)生測(cè)頻控制信號(hào)的,TF_CTRL計(jì)數(shù)使能信號(hào)CNT_EN能產(chǎn)生一個(gè)1s脈寬的周期信號(hào),并對(duì)頻率計(jì)中的8位二進(jìn)制電機(jī)脈沖計(jì)數(shù)器CNT10D的ENABL使能端進(jìn)行同步控制,同時(shí)產(chǎn)生計(jì)數(shù)所存信號(hào)LOCK。程序如下:
- LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- ENTITY TF_CTRL IS
- PORT (CLK1 : IN STD_LOGIC; -- 1Hz
- CNT_EN : OUT STD_LOGIC; -- 計(jì)數(shù)器時(shí)鐘使能
- CLR : OUT STD_LOGIC; -- 計(jì)數(shù)器清零
- LOCK : OUT STD_LOGIC ); -- 輸出鎖存信號(hào)
- END TF_CTRL;
- ARCHITECTURE behav OF TF_CTRL IS
- SIGNAL Div2CLK : STD_LOGIC;
- BEGIN
- PROCESS( CLK1 )
- BEGIN
- IF CLK1'EVENT AND CLK1 = '1' THEN
- Div2CLK <= NOT Div2CLK;
- END IF;
- END PROCESS;
- PROCESS (CLK1, Div2CLK)
- BEGIN
- IF CLK1='0' AND Div2CLK='0' THEN CLR<='1';-- 產(chǎn)生計(jì)數(shù)器清零信號(hào)
- ELSE CLR <= '0'; END IF;
- END PROCESS;
- LOCK <= NOT Div2CLK; CNT_EN <= Div2CLK;
- END behav;
復(fù)制代碼
(3)電機(jī)脈沖計(jì)數(shù)器:當(dāng)ENABL高電平時(shí)允許計(jì)數(shù);低電平時(shí)停止計(jì)數(shù),并保持其所計(jì)的脈沖數(shù)。 - LIBRARY IEEE; --8位計(jì)數(shù)器
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- ENTITY CNT10D IS
- PORT (CLK : IN STD_LOGIC; -- 時(shí)鐘信號(hào)
- CLR : IN STD_LOGIC; -- 清零信號(hào)
- ENABL : IN STD_LOGIC; -- 計(jì)數(shù)使能信號(hào)
- COUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
- DOUT1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
- DOUT2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); -- 計(jì)數(shù)結(jié)果
- END CNT10D;
- ARCHITECTURE behav OF CNT10D IS
- SIGNAL CQ2 : STD_LOGIC_VECTOR(3 DOWNTO 0);
- SIGNAL CQ3 : STD_LOGIC_VECTOR(3 DOWNTO 0);
- BEGIN
- PROCESS(CLK, CLR, ENABL)
- BEGIN
- IF CLR = '1'
- THEN CQ2 <= (OTHERS=>'0'); CQ3 <= (OTHERS=>'0'); -- 清零
- ELSIF CLK'EVENT AND CLK = '1' THEN
- IF ENABL = '1' THEN
- IF CQ2>8 THEN CQ3<=CQ3+1; CQ2(3 DOWNTO 0)<="0000";
- ELSE CQ2 <=CQ2+1;
- END IF;
- END IF;
- END IF;
- END PROCESS;
- COUT <= CQ3&CQ2;
- DOUT1 <=CQ2;
- DOUT2 <=CQ3;
- END behav;
復(fù)制代碼
(4)鎖存模塊:鎖存信號(hào)LOAD的上升沿將計(jì)數(shù)器在前1秒鐘的計(jì)數(shù) 值鎖存進(jìn)鎖存器LOCK8中,設(shè)置鎖存器的好處是數(shù)據(jù)顯示穩(wěn)定,不會(huì)由于周期性的清0信號(hào)而不斷閃爍。程序如下: - LIBRARY IEEE; --8位鎖存器
- USE IEEE.STD_LOGIC_1164.ALL;
- ENTITY LOCK8 IS
- PORT ( LK : IN STD_LOGIC;
- D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
- LEDA: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
- LEDB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
- END LOCK8;
- ARCHITECTURE behav OF LOCK8 IS
- BEGIN
- PROCESS(LK, D)
- BEGIN
- IF LK'EVENT AND LK = '1' THEN LEDA <= D(7 DOWNTO 4); LEDB <= D(3 DOWNTO 0);
- END IF;
- END PROCESS;
- END behav;
復(fù)制代碼
3.4.3、 轉(zhuǎn)速測(cè)定仿真結(jié)果 圖9 分頻模塊仿真結(jié)果 圖10 頻率計(jì)控制模塊仿真結(jié)果 圖11 電機(jī)脈沖計(jì)數(shù)模塊仿結(jié)果
圖12計(jì)數(shù)所存模塊仿真結(jié)果 3.5、 消抖模塊 3.5.1、設(shè)計(jì)思想及原理圖 為避免按鍵抖動(dòng)和光耦模塊產(chǎn)生干擾信號(hào),按鍵模塊和脈沖前應(yīng)接入消抖模塊ERZP。此消抖模塊采用的是定時(shí)方式去毛刺。在本設(shè)計(jì)中,其中CLK的信號(hào)頻率為5MHZ,高電平持續(xù)的時(shí)間當(dāng)CLK的計(jì)數(shù)到12的時(shí)候,即為有效高電平,低電平持續(xù)的時(shí)間當(dāng)CLK的計(jì)數(shù)到7的時(shí)候,即為有效低電平。原理圖如圖13所示 圖13 消抖模塊原理圖 端口介紹: CLK: 消抖模塊的時(shí)鐘 KIN: 輸入的信號(hào) KOUT: 消抖后的信號(hào) 3.5.2、消抖模塊VHDL設(shè)計(jì)語(yǔ)言 - LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- ENTITY ERZP IS
- PORT(CLK,KIN : IN STD_LOGIC;
- KOUT : OUT STD_LOGIC );
- END;
- ARCHITECTURE BHV OF ERZP IS
- SIGNAL KL,KH : STD_LOGIC_VECTOR(3 DOWNTO 0);
- BEGIN
- PROCESS(CLK,KIN,KL,KH ) BEGIN
- IF CLK'EVENT AND CLK = '1' THEN
- IF(KIN='0') THEN KL<=KL+1;
- ELSE KL<="0000"; END IF;
- IF(KIN='1') THEN KH<=KH+1;
- ELSE KH<="0000"; END IF;
- IF(KH>"0101") THEN KOUT<='1';
- ELSIF (KL>"0101") THEN KOUT<='0';
- END IF; END IF;
- END PROCESS;
- END;
復(fù)制代碼
3.5.3 消抖模塊仿真結(jié)果 圖14 消抖模塊仿真結(jié)果
word格式的完整設(shè)計(jì)報(bào)告51黑下載地址:
基于VHDL的直流電機(jī)控制系統(tǒng).7z
(113.49 KB, 下載次數(shù): 80)
2018-1-17 02:42 上傳
點(diǎn)擊文件名下載附件
文件有點(diǎn)大 分成兩個(gè)包了 下載積分: 黑幣 -5
本設(shè)計(jì)的完整的源碼下載地址:
http://www.torrancerestoration.com/bbs/dpj-105339-1.html
|