脈沖寬度調(diào)制,英文縮寫為:PWM(PulseWidthModulation),是通過數(shù)字信號實現(xiàn)對模擬電路控制的一種非常有效的技術,常被廣泛應用于測量、通信、功率控制與變換等眾多領域。
那么PWM是如何工作的?
我們知道,數(shù)字電路只能產(chǎn)生高電平(1)或低電平(0),在小腳丫上也就意味著3.3V和0V。那么如果我們的應用恰好在這之間怎么辦?比如,將3.3V直接連到LED上會導致LED燈很亮。如何將LED燈調(diào)暗呢?當然,最簡單的辦法就是直接串聯(lián)一個限流電阻但這樣一來,限流電阻就需要不斷產(chǎn)生功耗,而這個功耗實際上是完全浪費掉的。
無非就是調(diào)節(jié)LED的亮度而已,難道就沒有其他更好的辦法了嗎?當然有,用我們今天學習的PWM就可以輕松實現(xiàn)。在進一步探討點亮LED之前,我們先通過圖1了解一些基本的參數(shù):
圖1
圖1中,脈沖信號的周期為T,高電平寬度為t。如果我們將t/T定義為占空比,占空比就是2/3,因為高電平的寬度占了整個周期的2/3。在圖1中我們還可以看到一條紅色虛線,畫在了脈沖高度2/3的位置。這條虛線實際上就對應著最終的有效值。那么如何在FPGA上生成PWM信號呢?
我們還是習慣看圖說話,請看圖2。假如我們有一個鋸齒波,然后在鋸齒波上設置一個閾值(黑色水平虛線),凡是大于該閾值時輸出均為高電平,反之則為低電平,這樣我們是不是就得到一個PWM信號呢?如果我們想調(diào)整它的占空比,那么調(diào)節(jié)閾值的高低就可以了。在本例中,閾值線越低占空比越高。
圖2
如果把上面的描述再抽象化一下,就可以畫出圖3的模塊框圖。鋸齒波實際上就可以用計數(shù)器生成,閾值就是一個數(shù)值而已,比較器是用來生成最后輸出高低電平用的。
圖3
有了設計思路之后,我們來看一下最終代碼。
在代碼中,我們設置的計數(shù)器位寬是8位,也就是每128次后自動重新計數(shù)。所以,該計數(shù)器的最大頻率也就是12MHz/128=93.75KHz。圖3中可以看出,PWM信號的頻率和計數(shù)器的頻率相同,因此也是93.78KHz。
試想一下,LED現(xiàn)在正以超過每秒9萬次的速度閃爍,肉眼是完全分辨不出來的。那么閃爍過程中,亮/滅的比值越大,LED的視覺發(fā)光效果就越強,反之則越弱。我們最后將上述程序?qū)胄∧_丫中,并通過調(diào)節(jié)閾值來觀察小腳丫上的LED發(fā)光強度的變化。
責任編輯人:CC
-
PWM
+關注
關注
114文章
5118瀏覽量
213166 -
脈沖寬度調(diào)制
+關注
關注
7文章
81瀏覽量
13707
發(fā)布評論請先 登錄
相關推薦
評論