我們還是先從脈沖寬度調(diào)制的基礎(chǔ)說起。脈沖寬度調(diào)制,英文縮寫為:PWM(Pulse Width Modulation),是通過數(shù)字信號實(shí)現(xiàn)對模擬電路控制的一種非常有效的技術(shù),常被廣泛應(yīng)用于測量、通信、功率控制與變換等眾多領(lǐng)域。
那么PWM是如何工作的?
我們知道,數(shù)字電路只能產(chǎn)生高電平(1)或低電平(0),在小腳丫上也就意味著3.3V和0V。那么如果我們的應(yīng)用恰好在這之間怎么辦?比如,將3.3V直接連到LED上會導(dǎo)致LED燈很亮。如何將LED燈調(diào)暗呢?當(dāng)然,最簡單的辦法就是直接串聯(lián)一個(gè)限流電阻但這樣一來,限流電阻就需要不斷產(chǎn)生功耗,而這個(gè)功耗實(shí)際上是完全浪費(fèi)掉的。
無非就是調(diào)節(jié)LED的亮度而已,難道就沒有其他更好的辦法了嗎?當(dāng)然有,用我們今天學(xué)習(xí)的PWM就可以輕松實(shí)現(xiàn)。在進(jìn)一步探討點(diǎn)亮LED之前,我們先通過圖1了解一些基本的參數(shù):
圖1
圖1中,脈沖信號的周期為T,高電平寬度為t。如果我們將t/T定義為占空比,占空比就是2/3,因?yàn)楦唠娖降膶挾日剂苏麄€(gè)周期的2/3。在圖1中我們還可以看到一條紅色虛線,畫在了脈沖高度2/3的位置。這條虛線實(shí)際上就對應(yīng)著最終的有效值。那么如何在FPGA上生成PWM信號呢?
我們還是習(xí)慣看圖說話,請看圖2。假如我們有一個(gè)鋸齒波,然后在鋸齒波上設(shè)置一個(gè)閾值(黑色水平虛線),凡是大于該閾值時(shí)輸出均為高電平,反之則為低電平,這樣我們是不是就得到一個(gè)PWM信號呢?如果我們想調(diào)整它的占空比,那么調(diào)節(jié)閾值的高低就可以了。在本例中,閾值線越低占空比越高。
圖2
如果把上面的描述再抽象化一下,就可以畫出圖3的模塊框圖。鋸齒波實(shí)際上就可以用計(jì)數(shù)器生成,閾值就是一個(gè)數(shù)值而已,比較器是用來生成最后輸出高低電平用的。
圖3
有了設(shè)計(jì)思路之后,我們來看一下最終代碼。
module pwm (PWM_out, clk, reset); input clk, reset; output reg PWM_out; wire [7:0] counter_out; //計(jì)數(shù)器的8位寬儲存,可以最多數(shù)128次時(shí)鐘的嘀嗒 parameter PWM_ontime = 32; //閾值設(shè)在32,對應(yīng)25%的占空比 always @ (posedge clk) begin //比較器 if (PWM_ontime 》 counter_out) PWM_out 《= 0; else PWM_out 《= 1; end counter counter_inst( //調(diào)用計(jì)數(shù)器 .clk (clk), .counter_out (counter_out), .reset(reset) );endmodule
module counter(counter_out,clk,reset); //計(jì)數(shù)器模塊代碼 output [7:0] counter_out; input clk, reset; reg [7:0] counter_out; always @(posedge clk) if (reset) //如果沒有按reset,則計(jì)數(shù)器清零 counter_out 《= 8‘b0; else //如果按下reset,則計(jì)數(shù)器開始計(jì)數(shù) counter_out 《= counter_out + 1;endmodule
在代碼中,我們設(shè)置的計(jì)數(shù)器位寬是8位,也就是每128次后自動重新計(jì)數(shù)。所以,該計(jì)數(shù)器的最大頻率也就是12MHz/128=93.75KHz。圖3中可以看出,PWM信號的頻率和計(jì)數(shù)器的頻率相同,因此也是93.78KHz。
試想一下,LED現(xiàn)在正以超過每秒9萬次的速度閃爍,肉眼是完全分辨不出來的。那么閃爍過程中,亮/滅的比值越大,LED的視覺發(fā)光效果就越強(qiáng),反之則越弱。我們最后將上述程序?qū)胄∧_丫中,并通過調(diào)節(jié)閾值來觀察小腳丫上的LED發(fā)光強(qiáng)度的變化。
編輯:lyn
-
通信
+關(guān)注
關(guān)注
18文章
6206瀏覽量
137799 -
數(shù)字電路
+關(guān)注
關(guān)注
193文章
1639瀏覽量
81903 -
測量
+關(guān)注
關(guān)注
10文章
5242瀏覽量
113496 -
脈沖寬度調(diào)制
+關(guān)注
關(guān)注
7文章
81瀏覽量
13986
原文標(biāo)題:基于FPGA的數(shù)字電路實(shí)驗(yàn)8:PWM脈寬調(diào)制
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
PWM逆變器的不同調(diào)制方法對比

STM32H7開啟單脈沖模式 PWM波脈沖寬度不受CCR控制怎么解決?
開關(guān)電源三種控制模式:PWM/PFM/PSM
探索PWM技術(shù):數(shù)字世界的模擬魔法

【瑞薩RA2L1入門學(xué)習(xí)】+PWM呼吸燈
請問DLP4500觸發(fā)器脈沖寬度可以調(diào)整嗎?
SM7075-12 AC/DC PWM 功率開關(guān)芯片 輸出電壓12V

脈沖變頻充電器怎么用
脈沖變壓器中如何增加脈沖寬度
柵極驅(qū)動器電路中窄脈沖寬度的影響

評論