色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA學習系列:23. 音樂蜂鳴器的設計

FPGA學習交流 ? 2018-08-08 12:31 ? 次閱讀

設計背景:

蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器電子產品中作發聲器件。在一般設計中,可利用蜂鳴器檢測有些按鍵是否按下,或者有些功能是否正常等,當然如果足夠浪漫,也可以讓蜂鳴器演奏音樂。

設計原理:

本設計使用的是無源蜂鳴器,也可稱為聲響器,原理電路圖如下所示。它沒有內部驅動電路,無源蜂鳴器工作的理想信號為方波,如果給直流,蜂鳴器是不響應的,因為磁路恒定,鉬片不能震動發音。

image.png

根據電路圖可知,由于FPGA的驅動能力不夠,這里增加了一個三極管來驅動這個無源蜂鳴器。在驅動時,只需要向蜂鳴器發送一定頻率的方波,就可以使蜂鳴器發聲。那么應該發送怎樣的頻率呢?具體則可參考下表(音節頻率表):

image.png

樂曲能連續演奏所需要的兩個基本數據是:組成樂曲的每個音符的頻率值(音調)和每個音符持續的時間(音長)。因此只要控制FPGA輸出到蜂鳴器的激勵信號頻率的高低和持續時間,就可以使蜂鳴器發出連續的樂曲聲。

在本設計中,由于至芯開發板的晶振為50MHz,所以我們需要一個一個分頻模塊(PLL)產生一個較低的基準頻率(1MHz)。還需要一個空間儲存樂譜,由于樂譜是固定的不需要更改,所以我們選擇ROM IP 核進行存儲。

基準頻率1MHz可分頻得到所有不同頻率的信號。最大的分頻比為1_000_000/262/2。既然是音樂,那么就需要節拍,一般采用4拍,即音長為0.25s,所以還需設計一個模塊,控制每0.25s,ROM地址加1,。如果需要發送一個低音1并維持1秒,則只需要在ROM的連續四個地址中寫入低音1的對應信息即可。

在設計中為了方便在ROM中儲存數據,這里數據格式為8hAB,其中A暫時為三個值1、2、4,分別表示低音、中音、高音。B暫時為七個值1、2、3、4、5、6、7。比如要產生一個低音1,只需在ROM中存儲8h11,如要產生一個高音7,只需在ROM中存儲8h47,以此類推即可。這時,就需要一個解碼模塊,將ROM中的數據還原成音樂發生器所需要的數據。

設計架構圖:

根據上述的分析,得到如下的架構圖:

image.png

本設計包括6個模塊,PLL模塊把50MHz的時鐘信號降到1MHz,rom模塊存儲音樂數據,time_counter是一個計數模塊,產生節拍,每到0.25s,輸出的time_finsh變為一個周期的高電平。并發送給addr_gen模塊,產生addr,讓rom輸出下一個地址的數據。rom輸出的數據rom_data輸入到decode解碼模塊,將解碼后的數據music_data輸入到music_gen模塊,通過計數器,如果計數器小于music_data的值,則beep保持不變,否則,beep取反,并且計數器清1,從而產生特定的方波頻率。

設計代碼:

time_counter模塊代碼如下:

0moduletime_counter (clk,rst_n,time_finsh);

1

2inputclk,rst_n;//輸入1Mhz時鐘信號,復位信號

3outputtime_finsh;//輸出時間計數標志位(沒0.25s變高電平一次)

4

5reg[17:0]count;//計數器count

6

7always@(posedgeclk ornegedgerst_n)

8begin

9if(!rst_n)

10count <=18'd0;//計數器復位

11elseif(time_finsh)

12count <=18'd0;//每到0.25s計數器歸零

13else

14count <=count +1'd1;//未到0.25s,計數器繼續累加

15end

16/*****每到0.25s,time_finsh拉高,表示已經達到0.25s*****/

17assigntime_finsh =(count ==18'd249_999)?1'd1:1'd0;

18/*****用于仿真,因為真正的0.25是會仿真很長*****/

19//assign time_finsh = (count == 22'd25_00)? 1'd1 : 1'd0;

20

21endmodule

addr_gen模塊代碼如下:

0moduleaddr_gen (clk,rst_n,addr,time_finsh);

1

2inputclk,rst_n;//輸入1Mhz時鐘信號,復位信號

3inputtime_finsh;//輸入時間計數標記位(每0.25s變高電平一次)

4outputreg[6:0]addr;//輸出給ROM的地址信號

5

6always@(posedgeclk ornegedgerst_n)

7begin

8if(!rst_n)

9addr <=7'd0;//輸出給ROM的地址信號復位

10elseif(time_finsh)//輸出給ROM的地址信號自加1(每0.25s自加1

11addr <=addr +1'd1;

12else

13addr <=addr;//未夠0.25s,ROM的地址信號不變

14end

15

16endmodule

decode解碼模塊代碼如下:

0moduledecode (clk,rst_n,rom_data,music_data);

1

2inputclk,rst_n;//輸入1Mhz時鐘信號,復位信號

3input[7:0]rom_data;//輸入的ROM的數據

4outputreg[10:0]music_data;//輸出ROM的解碼數據

5

6always@(posedgeclk ornegedgerst_n)

7begin

8if(!rst_n)

9music_data <=11'd0;//輸出ROM的解碼數據復位

10else

11case(rom_data)

128'h11:music_data <=11'd1911;//(1Mhz/261.63Hz)/2)=1191 低音1

138'h12:music_data <=11'd1702;//(1Mhz/293.67Hz)/2)=1702 低音2

148'h13:music_data <=11'd1517;//(1Mhz/329.63Hz)/2)=1517 低音3

158'h14:music_data <=11'd1431;//(1Mhz/349.23Hz)/2)=1431 低音4

168'h15:music_data <=11'd1276;//(1Mhz/391.99Hz)/2)=1276 低音5

178'h16:music_data <=11'd1136;//(1Mhz/440.00Hz)/2)=1136 低音6

188'h17:music_data <=11'd1012;//(1Mhz/493.88Hz)/2)=1012 低音7

19

208'h21:music_data <=11'd939;//(1Mhz/532.25Hz)/2)=939 中音1

218'h22:music_data <=11'd851;//(1Mhz/587.33Hz)/2)=851 中音2

228'h23:music_data <=11'd758;//(1Mhz/659.25Hz)/2)=758 中音3

238'h24:music_data <=11'd716;//(1Mhz/698.46Hz)/2)=716 中音4

248'h25:music_data <=11'd638;//(1Mhz/783.99Hz)/2)=638 中音5

258'h26:music_data <=11'd568;//(1Mhz/880.00Hz)/2)=568 中音6

268'h27:music_data <=11'd506;//(1Mhz/987.76Hz)/2)=506 中音7

27

288'h41:music_data <=11'd478;//(1Mhz/1046.50Hz)/2)=478 高音1

298'h42:music_data <=11'd425;//(1Mhz/1174.66Hz)/2)=425 高音2

308'h43:music_data <=11'd379;//(1Mhz/1318.51Hz)/2)=379 高音3

318'h44:music_data <=11'd358;//(1Mhz/1396.51Hz)/2)=358 高音4

328'h45:music_data <=11'd319;//(1Mhz/1567.98Hz)/2)=319 高音5

338'h46:music_data <=11'd284;//(1Mhz/1760.00Hz)/2)=284 高音6

348'h47:music_data <=11'd253;//(1Mhz/1975.52Hz)/2)=253 高音7

35

368'h00:music_data <=11'd0;//0HZ,停止節拍

37endcase

38end

39

40endmodule

music_gen模塊代碼如下:

0modulemusic_gen (clk,rst_n,music_data,beep);

1

2inputclk,rst_n;//輸入1Mhz時鐘信號,復位信號

3input[10:0]music_data;//輸入音樂頻率控制字

4outputregbeep;//輸出方波

5

6reg[10:0]data,count;//寄存音樂控制字的data,計數器count

7

8always@(posedgeclk ornegedgerst_n)

9begin

10if(!rst_n)

11data <=11'd0;//寄存器data復位

12else

13data <=music_data;//data寄存音樂控制字

14end

15

16always@(posedgeclk ornegedgerst_n)

17begin

18if(!rst_n)

19begin

20count <=11'd1;//計數器復位

21beep <=1'd0;//輸出方波復位

22end

23elseif(data ==11'd0)//data==11‘d0,(停止節拍)

24begin

25count <=11'd1;//計數器歸一

26beep <=1'd0;//輸出方波歸零

27end

28elseif(count <=data)//當計數器小于等于data的值

29count <=count +1'd1;//計數器繼續累加

30else

31begin

32count <=11'd1;//當計數器大于data的值,計數器歸一

33beep <=~beep;//輸出方波取反

34end

35end

36

37endmodule

beep頂層模塊代碼如下:

0modulebeep (clk,rst_n,beep);

1

2inputclk,rst_n;//輸入50Mhz時鐘信號,復位信號

3outputbeep;//輸出的方波

4

5wireclk_1M,time_finsh;//1Mhz時鐘信號線,0.25s時間計數標記位

6wire[6:0]addr;//rom地址線

7wire[7:0]rom_data;//rom數據線

8wire[10:0]music_data;//rom數據解碼數據線

9

10/*****PLL模塊*****/

11my_pll my_pll_inst(

12.areset(~rst_n),

13.inclk0(clk),

14.c0(clk_1M)

15);

16

17/*****0.25s時間計數器模塊*****/

18time_counter time_counter_inst(

19.clk(clk_1M),

20.rst_n(rst_n),

21.time_finsh(time_finsh)

22);

23

24/*****ROM地址發生器*****/

25addr_gen addr_gen_inst(

26.clk(clk_1M),

27.rst_n(rst_n),

28.addr(addr),

29.time_finsh(time_finsh)

30);

31

32/*****ROM模塊*****/

33my_rom my_rom_inst(

34.address(addr),

35.clock(clk_1M),

36.q(rom_data)

37);

38

39/*****解碼模塊*****/

40decode decode_inst(

41.clk(clk_1M),

42.rst_n(rst_n),

43.rom_data(rom_data),

44.music_data(music_data)

45);

46

47/*****音樂發生器模塊*****/

48music_gen music_gen_inst(

49.clk(clk_1M),

50.rst_n(rst_n),

51.music_data(music_data),

52.beep(beep)

53);

54

55endmodule

beep_tp頂層測試模塊代碼如下:

0`timescale1ns/1ps

1

2modulebeep_tb;

3

4regclk,rst_n;

5wirebeep;

6

7initialbegin

8clk =1;

9rst_n =0;

10#200.1rst_n=1;

11

12//#100000000 $stop;

13end

14

15beep beep_dut(

16.clk(clk),

17.rst_n(rst_n),

18.beep(beep)

19);

20

21always#10clk =~clk;

22

23endmodule

仿真圖:

仿真結果如下:

由仿真圖可知:當rom輸出rom_data8h16時,代表輸出低音6,解碼后結果music_data1136,輸出的beep頻率為440Hz,與實際低音6的音節頻率表的值一致;當rom輸出rom_data8h22時,代表輸出中音2,解碼后結果music_data851,輸出的beep頻率為563Hz,與實際中音2的音節頻率表的值相差24Hz,存在一定的誤差,但是不影響樂曲的播放。如果想提高beep頻率的精度,減小誤差,則可以將1MHz的基準頻率提高。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21729

    瀏覽量

    603037
收藏 人收藏

    評論

    相關推薦

    至芯科技昭哥帶你學FOGA之FPGA_100天之旅_音樂蜂鳴器設計

    本文屬于本人原創,和大家一起學習FPGA,交流FPGA,希望大家多多支持。來源:至芯科技昭哥帶你學FOGA之FPGA_100天之旅_音樂
    發表于 09-25 10:08

    基于fpga音樂播放器設計

    的控制頻率來完成產生不同音調的聲音,從而完成達到簡單音樂播放的效果。通過蜂鳴器來實現控制頻率達到音樂播放的效果很符合我們所學知識,能夠充分應用我們在課堂及實驗里學習的技能,因此我選擇
    發表于 04-02 12:24

    FPGA開發板上實現通過蜂鳴器播放音樂的設計

    1、在FPGA開發板上實現通過蜂鳴器播放音樂的設計本實驗是實驗七SoC系統準備的外設,為純FPGA邏輯實驗。本實驗目標是通過蜂鳴器播放
    發表于 08-17 16:14

    基于FPGA音樂蜂鳴器設計(附代碼)

    叁芯智能科技-郝旭帥團隊打造“FPGA 設計與研發”學習系列, 可以讓設計者從“小白”到“入門”再到“精通”。本系列從基礎的數字電路為起點,避免
    發表于 02-27 16:43

    音樂蜂鳴器設計-ISE操作工具

    學習FPGA設計方法及設計思想的同時,實操結合各類操作軟件,會讓你在技術學習道路上無比的順暢,告別技術學習小BUG卡破腦殼,告別目前忽悠性的培訓誘導,真正的去
    發表于 04-04 21:46

    YYS12系列音樂蜂鳴器

    YYS12系列音樂蜂鳴器 YYS12 系列音樂蜂鳴器為微型電磁式有源蜂嗚器.只要接通直流電
    發表于 09-19 16:44 ?1062次閱讀

    蜂鳴器音樂播放實驗

    本內容詳細介紹了蜂鳴器音樂播放實驗,并且給出了具體電路圖及實驗步驟
    發表于 05-25 15:03 ?814次下載
    <b class='flag-5'>蜂鳴器</b><b class='flag-5'>音樂</b>播放實驗

    蜂鳴器播放音樂

    慧凈HL-1 配套C實驗例程100例【實驗30】蜂鳴器播放音樂),很好的C51學習資料程序。
    發表于 03-21 16:21 ?41次下載

    蜂鳴器播放音樂程序

    蜂鳴器播放音樂程序,有興趣的同學可以下載學習
    發表于 04-27 16:18 ?34次下載

    把手教你學習FPGA蜂鳴器

    把手教你學習FPGA蜂鳴器篇,詳細的教程。
    發表于 09-01 16:40 ?0次下載

    HL開發板的蜂鳴器播放音樂學習程序

    HL開發板【實驗30】蜂鳴器播放音樂,單片機學習程序,很好的學習資料。
    發表于 09-01 11:50 ?16次下載

    蜂鳴器音樂程序與最簡單蜂鳴器電路圖之FPGA學習課程

    是否按下,或者有些功能是否正常等,當然如果足夠浪漫,也可以讓蜂鳴器演奏音樂。 簡單蜂鳴器電路圖 本設計使用的是無源蜂鳴器,也可稱為聲響器,原理電路圖如下所示。它沒有內部驅動電路,無源
    發表于 08-07 10:35 ?1.9w次閱讀
    <b class='flag-5'>蜂鳴器</b><b class='flag-5'>音樂</b>程序與最簡單<b class='flag-5'>蜂鳴器</b>電路圖之<b class='flag-5'>FPGA</b><b class='flag-5'>學習</b>課程

    基于FPGA音樂蜂鳴器設計

    本設計使用的是無源蜂鳴器,也可稱為聲響器,原理電路圖如下所示。它沒有內部驅動電路,無源蜂鳴器工作的理想信號為方波,如果給直流,蜂鳴器是不響應的,因為磁路恒定,鉬片不能震動發音。
    的頭像 發表于 11-11 09:48 ?6370次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>音樂</b><b class='flag-5'>蜂鳴器</b>設計

    學習心得】蜂鳴器播放音樂

    以下是學習STM32控制蜂鳴器時的一些心得體會,我也是綜合各種資料寫出來的。蜂鳴器是一種很常見的電子元件,一般也就發出滴滴的聲音。但自從在網上看到各種用蜂鳴器播放
    發表于 11-23 18:21 ?65次下載
    【<b class='flag-5'>學習</b>心得】<b class='flag-5'>蜂鳴器</b>播放<b class='flag-5'>音樂</b>

    蜂鳴器音樂開源分享

    電子發燒友網站提供《蜂鳴器音樂開源分享.zip》資料免費下載
    發表于 10-31 09:54 ?1次下載
    <b class='flag-5'>蜂鳴器</b><b class='flag-5'>音樂</b>開源分享
    主站蜘蛛池模板: 被窝国产理论一二三影院 | 国产精品资源网站在线观看| 久操久操久操| 甜宠溺H宝贝嗯撞PLAY啊 | 丰满女友bd高清在线观看| 考好老师让你做一次H| 亚洲AV久久无码精品热九九| YELLOW日本动漫高清免费| 久久天天婷婷五月俺也去| 亚洲国产在线视频中文字| 夫妻性姿势真人做视频| 欧美18videosex初次| 制服丝袜第一页| 花蝴蝶在线观看免费中文版高清| 三级黄色一级视频| SAO货腿张开JI巴CAO死我| 伦理片免费秋霞e| 永久免费在线视频| 狠狠色狠色综合曰曰| 无遮挡h肉3d动漫在线观看| 大地影院日本韩国电影免费观看| 明星三级电影| 中文字幕一区在线观看视频| 极品网红液液酱粉嫩福利照子凌酱 | 久久理论片迅播影院一级| 亚洲高清无在码在线无弹窗| 国产成人mv 在线播放| 秋霞电影在线观看午夜伦| 99精品免费久久久久久久久日本| 精品一区二区免费视频蜜桃网 | 国产午夜不卡在线观看视频666| 日韩一区二区三区免费体验| 99视频在线观看免费视频| 美女厕所撒尿ass| 最新无码国产在线视频2020| 久久精品成人免费看| 亚洲三级在线中文字幕| 国产综合自拍 偷拍在线| 亚洲AV国产国产久青草| 国产免费人成在线视频视频| 无罩看奶禁18|