《基于FPGA verilog的蜂鳴器奏樂》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于FPGA verilog的蜂鳴器奏樂(4頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、蜂鳴器奏樂我們?cè)陂_發(fā)板上裝有一個(gè)交流源蜂鳴器,可用做發(fā)聲練習(xí)。其電路圖和實(shí)物圖如下所示:首先,我們?yōu)槭裁催x擇交流蜂鳴器?所謂有源蜂鳴器是指在器件內(nèi)部具有振蕩器,所以只要在引腳上加上固定的直流電源,就能發(fā)出一定頻率的聲音,但缺點(diǎn)是頻率固定唯一(在該蜂鳴器生產(chǎn)出來后就決定了)。交流蜂鳴器需要在引腳上加上一定頻率的方波信號(hào)才能出聲,而且聲音的音調(diào)可有驅(qū)動(dòng)方波的頻率決定,所以音調(diào)是可調(diào)的,發(fā)出的聲音更加逼真、悅耳。對(duì)CPLD/FPGA來說,產(chǎn)生頻率可調(diào)方波并不是件難事。所以選擇無源是很合適的。電路中,主要由一個(gè)三極管,一個(gè)續(xù)流二極管和一個(gè)交流蜂鳴器組成。三極管Q1起開關(guān)作用,其基極的高電平使三極管飽和
2、導(dǎo)通,使蜂鳴器發(fā)聲;而基極低電平則使三極管關(guān)閉,蜂鳴器停止發(fā)聲。因?yàn)榉澍Q器本質(zhì)上是一個(gè)感性元件,其電流不能瞬變,因此必須有一個(gè)續(xù)流二極管提供續(xù)流。否則,在蜂鳴器兩端會(huì)產(chǎn)生幾十伏的尖峰電壓,可能損壞電路系統(tǒng)的其它部分。交流蜂鳴器也有正負(fù)極,在器件的上方和板子上面都標(biāo)注了,焊接時(shí)注意方向。有了蜂鳴器的硬件組成,下面我們講解下如何發(fā)出音譜上的音調(diào)。每個(gè)音調(diào),其實(shí)都是一個(gè)固定頻率的振動(dòng),頻率的高低決定了音調(diào)的高低。簡(jiǎn)譜中的音名與頻率的對(duì)應(yīng)關(guān)系如表1所示:表1 簡(jiǎn)譜中的音名與頻率的對(duì)應(yīng)關(guān)系音名頻率/Hz 音名 頻率/Hz 音名 頻率/Hz低音1261.6中音1523.3高音11046.5低音2293.7
3、中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5當(dāng)采用12M作為基準(zhǔn)時(shí)鐘時(shí),那么各個(gè)音調(diào)的分頻系數(shù)可按這個(gè)公式計(jì)算:12 000 000 音調(diào)頻率2(除以2表示半個(gè)周期),所以得出如下不同音調(diào)的分頻系數(shù)表格(十六進(jìn)制表示,已進(jìn)行四舍五入)表格2 不同音調(diào)對(duì)應(yīng)的分頻系數(shù)(只列舉了低音部分)音名分頻系數(shù)低音15997低音24FCD低音3471B低音4431E低音53BCA低音63544低音
4、72F74所以綜上所述,我們?cè)诔绦蛑兄灰幢砀窭锏姆诸l系數(shù)產(chǎn)生一定頻率的方波就能產(chǎn)生對(duì)應(yīng)的音調(diào)了。module bell(ClkIn,Resetb,Bell);input ClkIn,Resetb;output Bell;reg Bell;wire ClkBell;reg 15:0 Cnt;reg 15:0 PreDiv;/每個(gè)音調(diào)需要分頻的系數(shù)reg 12:0 Delay;/每個(gè)音調(diào)持續(xù)的時(shí)間defparam Gen_ClkBell.divdWIDTH=2,Gen_ClkBell.divdFACTOR=2;/4分頻,得到12M時(shí)鐘gen_divd Gen_ClkBell(.reset(Res
5、etb),.clkin(ClkIn),.clkout(ClkBell);always (negedge Resetb or posedge ClkBell)if(!Resetb)beginBell=1b0;Cnt=13d0;Delay=13d0;PreDiv=16h5997;/音調(diào)1endelsebeginCnt=PreDiv)beginBell=Bell;Cnt=16d0;Delay=Delay+1d1;case(Delay) /進(jìn)行音調(diào)的切換13d1000:PreDiv=16h4FCD;/213d2000:PreDiv=16h471B;/313d3000:PreDiv=16h431E;/413d4000:PreDiv=16h3BCA;/513d5000:PreDiv=16h3544;/613d6000:PreDiv=16h2F74;/713d7000:beginDelay=13d0;/置為0,從頭開始演奏PreDiv=16h5997;/音調(diào)1endendcaseendendendmodule