所謂PWM,就是用高電平時(shí)間和波形周期的比值代表某個(gè)數(shù)。如果這個(gè)數(shù)經(jīng)過(guò)濾波后變成了接近連續(xù)的曲線(xiàn)表現(xiàn)出來(lái)那就是DA轉(zhuǎn)換;如果通過(guò)這個(gè)比值表達(dá)的是控制電機(jī)的電壓,那么表現(xiàn)出來(lái)就是電機(jī)控制。一切可以量化的東西都可以用PWM的方式去表示,這也是PWM應(yīng)用廣泛的原因。
產(chǎn)生PWM的方法:
1.產(chǎn)生一個(gè)計(jì)數(shù)器,滿(mǎn)脈沖周期后翻轉(zhuǎn)。
2.產(chǎn)生一個(gè)比較器,到達(dá)比例位置的時(shí)候輸出高電平,否則輸出低電平,整個(gè)過(guò)程見(jiàn)下圖
FPGA本質(zhì)上是數(shù)字電路。為了生成上圖的結(jié)果,所以我們需要按照上述的2步流程設(shè)計(jì)兩個(gè)電路,第一個(gè)電路是計(jì)數(shù)器,第二個(gè)電路是在計(jì)數(shù)器后面的比較器,對(duì)計(jì)數(shù)器輸出進(jìn)行監(jiān)控,一旦高于占空比對(duì)應(yīng)的計(jì)數(shù)值的時(shí)候里面變?yōu)?,其余時(shí)候?yàn)?,這樣就基本實(shí)現(xiàn)了PWM。也就對(duì)應(yīng)了下面兩段代碼:
//計(jì)數(shù)器電路,cnt_cycle就是計(jì)數(shù)器輸出計(jì)數(shù)結(jié)果 always@(posedge clk)
begin
cnt_cycle <= (cnt_cycle == (T-1)) ? 0 : cnt_cycle + 1;
end
/ 比較器電路 ,pwm_buf 為輸出PWM結(jié)果,紅色字為計(jì)數(shù)器輸入,綠色字為比較器比較線(xiàn) /
always@(posedge clk)
begin
pwm_buf <= (cnt_cycle < duty_cycle_buf) ? 1'b1 : 1'b0;
end
也就是說(shuō),以上兩段代碼對(duì)應(yīng)的電路如下圖:
針對(duì)以上電路我要作一點(diǎn)說(shuō)明:計(jì)數(shù)器在FPGA里面的實(shí)現(xiàn)就是加法器和觸發(fā)器組成的,加法器每次對(duì)輸出+1,下一個(gè)時(shí)鐘把+1的結(jié)果給到輸出端,根本不是數(shù)電書(shū)上異步2分頻的結(jié)果!另外再次強(qiáng)調(diào),由于FPGA的設(shè)計(jì)收到實(shí)際因素的限制,數(shù)電書(shū)上某些理模型是難以在實(shí)際中大量應(yīng)用的,所以FPGA內(nèi)部很多結(jié)構(gòu)和綜合結(jié)果都與數(shù)電書(shū)上有差異,但是數(shù)字電路的基本原理是沒(méi)有任何改變的!
PWM還差最后一點(diǎn),因?yàn)檩斎胝伎毡瓤梢圆粩喔淖儯簿褪堑谝粡垐D的比較線(xiàn)是會(huì)上下移動(dòng)的,為了不影響我們?cè)谟?jì)數(shù)的過(guò)程中突然采集到突變的值最終導(dǎo)致,不平滑的占空比,所以占空比輸入在每個(gè)計(jì)數(shù)周期完成后才會(huì)去采集。也就是大家看到的這句:
always@(posedge clk)
begin
if(cnt_cycle == (T-1)) duty_cycle_buf <= (duty_cycle > T-1) ? T-1 : duty_cycle;
end
只有在cnt_cycle計(jì)數(shù)一個(gè)周期T的時(shí)候,占空比值才會(huì)更新,也就是比較線(xiàn)才會(huì)移動(dòng)!
-
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26561 -
電機(jī)控制
+關(guān)注
關(guān)注
3538文章
1889瀏覽量
269036 -
PWM
+關(guān)注
關(guān)注
114文章
5196瀏覽量
214373 -
比較器
+關(guān)注
關(guān)注
14文章
1656瀏覽量
107335 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61258
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論