基于FPGA的音樂蜂鳴器設(shè)計
設(shè)計背景
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、復(fù)印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。在一般設(shè)計中,可利用蜂鳴器檢測有些按鍵是否按下,或者有些功能是否正常等,當(dāng)然如果足夠浪漫,也可以讓蜂鳴器演奏音樂。
設(shè)計原理
本設(shè)計使用的是無源蜂鳴器,也可稱為聲響器,原理電路圖如下所示。它沒有內(nèi)部驅(qū)動電路,無源蜂鳴器工作的理想信號為方波,如果給直流,蜂鳴器是不響應(yīng)的,因為磁路恒定,鉬片不能震動發(fā)音。根據(jù)電路圖可知,由于 FPGA 的驅(qū)動能力不夠,這里增加了一個三極管來驅(qū)動這個無源蜂鳴器。在驅(qū)動時,只需要向蜂鳴器發(fā)送一定頻率的方波,就可以使蜂鳴器發(fā)聲。那么應(yīng)該發(fā)送怎樣的頻率呢?具體則可參考下表(音節(jié)頻率表)
樂曲能連續(xù)演奏所需要的兩個基本數(shù)據(jù)是:組成樂曲的每個音符的頻率值(音調(diào))和每個音符持續(xù)的時間(音長)。因此只要控制 FPGA輸出到蜂鳴器的激勵信號頻率的高低和持續(xù)時間,就可以使蜂鳴器發(fā)出連續(xù)的樂曲聲。在本設(shè)計中,由于至芯開發(fā)板的晶振為 50MHz,所以我們需要一個一個分頻模塊(PLL)產(chǎn)生一個較低的基準(zhǔn)頻率(1MHz)。還需要一個空間儲存樂譜,由于樂譜是固定的不需要更改,所以我們選擇 ROMIP 核進行存儲?;鶞?zhǔn)頻率 1MHz 可分頻得到所有不同頻率的信號。最大的分頻比為1_000_000/262/2。既然是音樂,那么就需要節(jié)拍,一般采用 4 拍,即音長為 0.25s,所以還需設(shè)計一個模塊,控制每 0.25s,ROM 地址加 1,。如果需要發(fā)送一個低音 1 并維持 1 秒,則只需要在 ROM 的連續(xù)四個地址中寫入低音 1 的對應(yīng)信息即可。在設(shè)計中為了方便在 ROM 中儲存數(shù)據(jù),這里數(shù)據(jù)格式為 8’hAB,其中 A 暫時為三個值 1、2、4,分別表示低音、中音、高音。B 暫時為七個值 1、2、3、4、5、6、7。比如要產(chǎn)生一個低音 1,只需在 ROM中存儲 8’h11,如要產(chǎn)生一個高音 7,只需在 ROM中存儲 8’h47,以此類推即可。這時,就需要一個解碼模塊,將 ROM 中的數(shù)據(jù)還原成音樂發(fā)生器所需要的數(shù)據(jù)。
設(shè)計架構(gòu)圖
根據(jù)上述的分析,得到如下的架構(gòu)圖
本設(shè)計包括 6 個模塊,PLL 模塊把 50MHz 的時鐘信號降到 1MHz,rom 模塊存儲音樂數(shù)據(jù),time_counter 是一個計數(shù)模塊,產(chǎn)生節(jié)拍,每到 0.25s,輸出的 time_finsh 變?yōu)橐粋€周期的高電平。并發(fā)送給addr_gen 模塊,產(chǎn)生 addr,讓 rom 輸出下一個地址的數(shù)據(jù)。rom 輸出的數(shù)據(jù) rom_data 輸入到 decode 解碼模塊,將解碼后的數(shù)據(jù)music_data 輸入到 music_gen 模塊,通過計數(shù)器,如果計數(shù)器小于music_data 的值,則 beep 保持不變,否則,beep 取反,并且計數(shù)器
清 1,從而產(chǎn)生特定的方波頻率。
設(shè)計代碼
time_counter 模塊代碼如下:
addr_gen 模塊代碼如下:
decode 解碼模塊代碼如下:
music_gen 模塊代碼如下:
beep 頂層模塊代碼如下:
仿真圖
仿真結(jié)果如下:
由仿真圖可知:當(dāng) rom 輸出 rom_data 為 8’h16 時,代表輸出低音6,解碼后結(jié)果 music_data 為 1136,輸出的 beep 頻率為 440Hz,與實際低音 6 的音節(jié)頻率表的值一致;當(dāng) rom 輸出 rom_data 為 8’h22時,代表輸出中音 2,解碼后結(jié)果 music_data 為 851,輸出的 beep頻率為 563Hz,與實際中音 2 的音節(jié)頻率表的值相差 24Hz,存在一定的誤差,但是不影響樂曲的播放。如果想提高 beep 頻率的精度,減小誤差,則可以將 1MHz 的基準(zhǔn)頻率提高。
責(zé)任編輯:lq
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602986 -
ROM
+關(guān)注
關(guān)注
4文章
563瀏覽量
85731 -
蜂鳴器
+關(guān)注
關(guān)注
12文章
891瀏覽量
45919
原文標(biāo)題:FPGA入門課程 音樂蜂鳴器設(shè)計
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論