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