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

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

評(píng)論