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