Verilog HDL 之 直流電機PWM控制
一、實驗前知識準備
在上一篇中總結(jié)了步進電機的控制,這次我將學習一下直流電機的控制,首先,我們簡要了解下步進電機和直流電機的區(qū)別。
(1)步進電機是以步階方式分段移動,直流電機通常采用連續(xù)移動的控制方式。
(2)步進電機采用直接控制方式,它的主要命令和控制變量都是步階位置;直流電機則是以電機電壓為控制變量,以位置或速度為命令變量。
(3)直流電機需要反饋控制系統(tǒng),他會以間接方式控制電機位置。步進電機系統(tǒng)多半以“開環(huán)方式”進行操作。
1、什么是直流電機
輸出或輸入為直流電能的旋轉(zhuǎn)電機,稱為直流電機,它是能實現(xiàn)直流電能和機械能互相轉(zhuǎn)換的電機。當它作電動機運行時是直流電動機,將電能轉(zhuǎn)換為機械能;作發(fā)電機運行時是直流發(fā)電機,將機械能轉(zhuǎn)換為電能。
2、什么是PWM
PWM(脈沖寬度調(diào)制)是一種模擬控制方式,其根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管柵極或基極的偏置,來實現(xiàn)開關(guān)穩(wěn)壓電源輸出晶體管或晶體管導通時間的改變,這種方式能使電源的輸出電壓在工作條件變化時保持恒定,是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù)。
3、開發(fā)平臺中直流電機驅(qū)動的實現(xiàn)
開發(fā)板中的直流電機的驅(qū)動部分如圖1.1所示。利用FPGA設(shè)計一個0、1組成的雙極性PWM發(fā)生器。
圖1.1 直流電機的驅(qū)動部電路
二、實驗平臺
Quartus II 7.2 集成開發(fā)環(huán)境、SOPC-MBoard板、ByteBlaster II 下載電纜
三、實驗?zāi)繕?/p>
1、了解直流電機PWM的控制方法。
2、具有調(diào)速功能。
四、實驗實現(xiàn)
詳細實現(xiàn)步驟請參考 【連載】 FPGA Verilog HDL 系列實例--------8-3編碼器
1、在設(shè)計文件中輸入Verilog代碼。
1 //--------------------------------------------------------------------------------------------------
2 // Title : pwm
3 // Author : liwei
4 // Generated : Thu Jun 16 22:30:12 2005
5 //-------------------------------------------------------------------------------------------------
6 `timescale 1ns / 1ps
7
8 module pwm ( enable , rst , Dir , clk , spd_sel , MA );
9
10 input rst ;
11 input clk ;
12 input enable ; //控制開關(guān)
13 input Dir ; //控制方向
14 input [1:0] spd_sel ; //控制轉(zhuǎn)速
15
16 output [1:0] MA ; //電機控制
17
18 reg [15:0] cntReg;
19 reg [15:0] cnt;
20 reg [15:0] cnt_r;
21 reg pulseout;
22 reg [1:0]MA_r ;
23
24 parameter period = ‘d10000;
25 assign MA = MA_r ;
26
27 always @ (posedge clk or negedge rst )
28
29 begin
30 if ( !rst) //復位
31 begin
32 cntReg 《=#1 16’b0;
33 cnt 《= #1 16‘b0;
34 pulseout 《= #1 1’b0;
35 end
36 else
37 if (enable == 1‘b0) MA_r 《= 2’b00;
38 else
39 begin
40 MA_r[0] 《= pulseout ;
41 MA_r[1] 《= ~pulseout;
42
43 if (Dir == 1‘b1) cntReg 《= cnt_r ;
44 else if (Dir == 1’b0) cntReg 《= period - cnt_r ;
45
46 cnt 《= cnt +1 ;
47 if (cnt ==cntReg-1) pulseout 《= #1 1‘b1; //設(shè)定周期時間的一半
48 else if (cnt == period-1) //設(shè)定的周期時間
49 begin
50 pulseout 《= #1 1’b0;
51 cnt 《= #1 ‘b0;
52 end
53 end
54 end
55
56 always @ ( spd_sel )
57 begin
58 case (spd_sel)
59 2’b00 : cnt_r 《= period-‘d3500 ;
60 2’b01 : cnt_r 《= period-‘d2500 ;
61 2’b10 : cnt_r 《= period-‘d1750 ;
62 2’b11 : cnt_r 《= period-‘d1000 ;
63 endcase
64 end
65
66 endmodule
2、分析
思考:(1)如何控制順時針轉(zhuǎn)和逆時針轉(zhuǎn)?(2)速度的大小如何控制的?
第38行~第53行:由2個引腳控制生成雙極性PWM發(fā)生器。
結(jié)論:
(1)以MA_r[0]為準,當狀態(tài)0的時間大于狀態(tài)1的時間時,電機逆時針轉(zhuǎn)動;反之,電機順時針轉(zhuǎn)動。
那且看上面代碼中是如何控制狀態(tài)0的時間和狀態(tài)1的時間長短的。不難看出,時間長短是由方向變量Dir(第43、44行)和預(yù)設(shè)值cnt_r(第59行~第62行)決定。可以好好體會一下。
(2)速度的快慢是由占空比決定的,占空比越大,速度越快。當然,這里指的是比值大于1。
占空比是如何確定的呢?這是由第59行~第62行中的數(shù)值確定的,這些數(shù)值可以自己定義,但必須在0~10000之間,這里所說的占空比是指不小于的值,當數(shù)值設(shè)置為5000時,就會得到最慢的速度了。
3、由設(shè)計文件生成的.bsf文件,其外接接口如圖1.2所示。
圖1.2 外接接口圖
4、引腳分配
enable接按鍵,控制開關(guān);rst接復位信號;Dir接按鍵,控制轉(zhuǎn)動方向;clk接系統(tǒng)時鐘;spd_sel接2個按鍵,調(diào)節(jié)轉(zhuǎn)動速度;MA接直流電機。
5、實驗結(jié)果
通過撥動開關(guān)控制開關(guān)、轉(zhuǎn)速、方向。
有興趣的可以和上一篇進行對比,加深印象。
-
直流電機
+關(guān)注
關(guān)注
36文章
1710瀏覽量
70237 -
PWM
+關(guān)注
關(guān)注
114文章
5193瀏覽量
214210
發(fā)布評論請先 登錄
相關(guān)推薦
評論