|
勇敢的芯伴你玩轉Altera FPGA連載48:PWM蜂鳴器驅動之功能概述 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD
蜂鳴器是一種最簡單的發聲元器件,它的應用也非常廣泛,大都是作為報警或發聲提醒裝置。比如我們家里的電腦在剛開啟時,通常主板上會發出一聲較短的尖銳的“滴……”的鳴叫聲,提示用戶主板自檢通過,可以正常進行后面的啟動;而如果是1長1短或1長2短的鳴叫聲,則表示可能發生了電腦內存或顯卡故障;當然還可以有其他不同的鳴叫聲提示其他的故障,總而言之,可別小看了這顆區區幾毛錢的小家伙,關鍵時刻還挺有用的。可以毫不夸張的說,蜂鳴器也算是一種人機交互的手段。 PWM(Pulse Width Modulation),即脈沖寬度調制,如圖7.1所示,PWM的輸出只有高電平1和低電平0。PWM不停的重復輸出周期為T,其中高電平1時間為t的脈沖,t/T是它的占空比,1/T是它的頻率。
圖7.1 PWM信號 如圖7.2所示,這是SP6板上蜂鳴器的電路原理圖,BEEP網絡連接到FPGA的IO上,當BEEP = 1時,三極管Q1的BE導通,則CE也導通,那么U4的2端直接接地,因此在它兩端有5V的電壓,那么蜂鳴器就發聲了。同理,BEEP =0時,Q1截止,U4的2端相當于開路,則蜂鳴器不會發出聲音。
圖7.2 蜂鳴器電路 如圖7.3所示,基于蜂鳴器在FPGA的IO輸出1就發聲、0則不發聲的原理,我們給IO口一個占空比為50%的PWM的信號,讓蜂鳴器間歇性的發聲鳴叫。如果它的頻率高則發聲就顯得相對尖銳急促一些,如果它的發聲頻率低則發聲就顯得低沉平緩一些。
圖7.3 蜂鳴器與PWM發聲映射 在我們給出的實例代碼中,我們期望產生一個輸出頻率為25Hz(40ms)、占空比為50%的PWM信號去驅動蜂鳴器的發聲。因此,我們使用系統時鐘25MHz(40ns)進行計數,每計數1,000,000次,這個計數器就清零重新計算。因為這個計數器是2進制的,要能夠表達0-999999的任意一個計數值,那么這個2進制計數器至少必須是20位的。此外,為了得到輸出的PWM占空比為50%,那么我們只要判斷計數值小于最大計數值的一半即500000時,輸出高電平1,反之輸出低電平0。 |