Verilog HDL 之 直流電機PWM控制
一、實驗前知識準備
在上一篇中總結了步進電機的控制,這次我將學習一下直流電機的控制,首先,我們簡要了解下步進電機和直流電機的區別。
(1)步進電機是以步階方式分段移動,直流電機通常采用連續移動的控制方式。
(2)步進電機采用直接控制方式,它的主要命令和控制變量都是步階位置;直流電機則是以電機電壓為控制變量,以位置或速度為命令變量。
(3)直流電機需要反饋控制系統,他會以間接方式控制電機位置。步進電機系統多半以“開環方式”進行操作。
1、什么是直流電機
輸出或輸入為直流電能的旋轉電機,稱為直流電機,它是能實現直流電能和機械能互相轉換的電機。當它作電動機運行時是直流電動機,將電能轉換為機械能;作發電機運行時是直流發電機,將機械能轉換為電能。
2、什么是PWM
PWM(脈沖寬度調制)是一種模擬控制方式,其根據相應載荷的變化來調制晶體管柵極或基極的偏置,來實現開關穩壓電源輸出晶體管或晶體管導通時間的改變,這種方式能使電源的輸出電壓在工作條件變化時保持恒定,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。
3、開發平臺中直流電機驅動的實現
開發板中的直流電機的驅動部分如圖1.1所示。利用FPGA設計一個0、1組成的雙極性PWM發生器。
圖1.1 直流電機的驅動部電路
二、實驗平臺
Quartus II 7.2 集成開發環境、SOPC-MBoard板、ByteBlaster II 下載電纜
三、實驗目標
1、了解直流電機PWM的控制方法。
2、具有調速功能。
四、實驗實現
詳細實現步驟請參考 【連載】 FPGA Verilog HDL 系列實例--------8-3編碼器
1、在設計文件中輸入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 ; //控制開關
13 input Dir ; //控制方向
14 input [1:0] spd_sel ; //控制轉速
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; //設定周期時間的一半
48 else if (cnt == period-1) //設定的周期時間
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)如何控制順時針轉和逆時針轉?(2)速度的大小如何控制的?
第38行~第53行:由2個引腳控制生成雙極性PWM發生器。
結論:
(1)以MA_r[0]為準,當狀態0的時間大于狀態1的時間時,電機逆時針轉動;反之,電機順時針轉動。
那且看上面代碼中是如何控制狀態0的時間和狀態1的時間長短的。不難看出,時間長短是由方向變量Dir(第43、44行)和預設值cnt_r(第59行~第62行)決定。可以好好體會一下。
(2)速度的快慢是由占空比決定的,占空比越大,速度越快。當然,這里指的是比值大于1。
占空比是如何確定的呢?這是由第59行~第62行中的數值確定的,這些數值可以自己定義,但必須在0~10000之間,這里所說的占空比是指不小于的值,當數值設置為5000時,就會得到最慢的速度了。
3、由設計文件生成的.bsf文件,其外接接口如圖1.2所示。
圖1.2 外接接口圖
4、引腳分配
enable接按鍵,控制開關;rst接復位信號;Dir接按鍵,控制轉動方向;clk接系統時鐘;spd_sel接2個按鍵,調節轉動速度;MA接直流電機。
5、實驗結果
通過撥動開關控制開關、轉速、方向。
有興趣的可以和上一篇進行對比,加深印象。
-
直流電機
+關注
關注
36文章
1710瀏覽量
70411 -
PWM
+關注
關注
114文章
5198瀏覽量
214882
發布評論請先 登錄
相關推薦
評論