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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA學(xué)習(xí)系列:23. 音樂蜂鳴器的設(shè)計(jì)

FPGA學(xué)習(xí)交流 ? 2018-08-08 12:31 ? 次閱讀

設(shè)計(jì)背景:

蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器電子產(chǎn)品中作發(fā)聲器件。在一般設(shè)計(jì)中,可利用蜂鳴器檢測有些按鍵是否按下,或者有些功能是否正常等,當(dāng)然如果足夠浪漫,也可以讓蜂鳴器演奏音樂。

設(shè)計(jì)原理:

本設(shè)計(jì)使用的是無源蜂鳴器,也可稱為聲響器,原理電路圖如下所示。它沒有內(nèi)部驅(qū)動電路,無源蜂鳴器工作的理想信號為方波,如果給直流,蜂鳴器是不響應(yīng)的,因?yàn)榇怕泛愣ǎ?/span>鉬片不能震動發(fā)音

image.png

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

image.png

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

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

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

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

設(shè)計(jì)架構(gòu)圖:

根據(jù)上述的分析,得到如下的架構(gòu)圖:

image.png

本設(shè)計(jì)包括6個(gè)模塊,PLL模塊把50MHz的時(shí)鐘信號降到1MHz,rom模塊存儲音樂數(shù)據(jù),time_counter是一個(gè)計(jì)數(shù)模塊,產(chǎn)生節(jié)拍,每到0.25s,輸出的time_finsh變?yōu)橐粋€(gè)周期的高電平。并發(fā)送給addr_gen模塊,產(chǎn)生addr,讓rom輸出下一個(gè)地址的數(shù)據(jù)。rom輸出的數(shù)據(jù)rom_data輸入到decode解碼模塊,將解碼后的數(shù)據(jù)music_data輸入到music_gen模塊,通過計(jì)數(shù)器,如果計(jì)數(shù)器小于music_data的值,則beep保持不變,否則,beep取反,并且計(jì)數(shù)器清1,從而產(chǎn)生特定的方波頻率。

設(shè)計(jì)代碼:

time_counter模塊代碼如下:

0moduletime_counter (clk,rst_n,time_finsh);

1

2inputclk,rst_n;//輸入1Mhz時(shí)鐘信號,復(fù)位信號

3outputtime_finsh;//輸出時(shí)間計(jì)數(shù)標(biāo)志位(沒0.25s變高電平一次)

4

5reg[17:0]count;//計(jì)數(shù)器count

6

7always@(posedgeclk ornegedgerst_n)

8begin

9if(!rst_n)

10count <=18'd0;//計(jì)數(shù)器復(fù)位

11elseif(time_finsh)

12count <=18'd0;//每到0.25s計(jì)數(shù)器歸零

13else

14count <=count +1'd1;//未到0.25s,計(jì)數(shù)器繼續(xù)累加

15end

16/*****每到0.25stime_finsh拉高,表示已經(jīng)達(dá)到0.25s*****/

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

18/*****用于仿真,因?yàn)檎嬲?/span>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時(shí)鐘信號,復(fù)位信號

3inputtime_finsh;//輸入時(shí)間計(jì)數(shù)標(biāo)記位(每0.25s變高電平一次)

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

5

6always@(posedgeclk ornegedgerst_n)

7begin

8if(!rst_n)

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

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時(shí)鐘信號,復(fù)位信號

3input[7:0]rom_data;//輸入的ROM的數(shù)據(jù)

4outputreg[10:0]music_data;//輸出ROM的解碼數(shù)據(jù)

5

6always@(posedgeclk ornegedgerst_n)

7begin

8if(!rst_n)

9music_data <=11'd0;//輸出ROM的解碼數(shù)據(jù)復(fù)位

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,停止節(jié)拍

37endcase

38end

39

40endmodule

music_gen模塊代碼如下:

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

1

2inputclk,rst_n;//輸入1Mhz時(shí)鐘信號,復(fù)位信號

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

4outputregbeep;//輸出方波

5

6reg[10:0]data,count;//寄存音樂控制字的data,計(jì)數(shù)器count

7

8always@(posedgeclk ornegedgerst_n)

9begin

10if(!rst_n)

11data <=11'd0;//寄存器data復(fù)位

12else

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

14end

15

16always@(posedgeclk ornegedgerst_n)

17begin

18if(!rst_n)

19begin

20count <=11'd1;//計(jì)數(shù)器復(fù)位

21beep <=1'd0;//輸出方波復(fù)位

22end

23elseif(data ==11'd0)//當(dāng)data==11‘d0,(停止節(jié)拍)

24begin

25count <=11'd1;//計(jì)數(shù)器歸一

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

27end

28elseif(count <=data)//當(dāng)計(jì)數(shù)器小于等于data的值

29count <=count +1'd1;//計(jì)數(shù)器繼續(xù)累加

30else

31begin

32count <=11'd1;//當(dāng)計(jì)數(shù)器大于data的值,計(jì)數(shù)器歸一

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

34end

35end

36

37endmodule

beep頂層模塊代碼如下:

0modulebeep (clk,rst_n,beep);

1

2inputclk,rst_n;//輸入50Mhz時(shí)鐘信號,復(fù)位信號

3outputbeep;//輸出的方波

4

5wireclk_1M,time_finsh;//1Mhz時(shí)鐘信號線,0.25s時(shí)間計(jì)數(shù)標(biāo)記位

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

7wire[7:0]rom_data;//rom數(shù)據(jù)線

8wire[10:0]music_data;//rom數(shù)據(jù)解碼數(shù)據(jù)線

9

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

11my_pll my_pll_inst(

12.areset(~rst_n),

13.inclk0(clk),

14.c0(clk_1M)

15);

16

17/*****0.25s時(shí)間計(jì)數(shù)器模塊*****/

18time_counter time_counter_inst(

19.clk(clk_1M),

20.rst_n(rst_n),

21.time_finsh(time_finsh)

22);

23

24/*****ROM地址發(fā)生器*****/

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/*****音樂發(fā)生器模塊*****/

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

仿真圖:

仿真結(jié)果如下:

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21796

    瀏覽量

    605257
收藏 人收藏

    評論

    相關(guān)推薦

    至芯科技昭哥帶你學(xué)FOGA之FPGA_100天之旅_音樂蜂鳴器設(shè)計(jì)

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

    基于fpga音樂播放器設(shè)計(jì)

    的控制頻率來完成產(chǎn)生不同音調(diào)的聲音,從而完成達(dá)到簡單音樂播放的效果。通過蜂鳴器來實(shí)現(xiàn)控制頻率達(dá)到音樂播放的效果很符合我們所學(xué)知識,能夠充分應(yīng)用我們在課堂及實(shí)驗(yàn)里學(xué)習(xí)的技能,因此我選擇
    發(fā)表于 04-02 12:24

    FPGA開發(fā)板上實(shí)現(xiàn)通過蜂鳴器播放音樂的設(shè)計(jì)

    1、在FPGA開發(fā)板上實(shí)現(xiàn)通過蜂鳴器播放音樂的設(shè)計(jì)本實(shí)驗(yàn)是實(shí)驗(yàn)七SoC系統(tǒng)準(zhǔn)備的外設(shè),為純FPGA邏輯實(shí)驗(yàn)。本實(shí)驗(yàn)?zāi)繕?biāo)是通過蜂鳴器播放
    發(fā)表于 08-17 16:14

    基于FPGA音樂蜂鳴器設(shè)計(jì)(附代碼)

    叁芯智能科技-郝旭帥團(tuán)隊(duì)打造“FPGA 設(shè)計(jì)與研發(fā)”學(xué)習(xí)系列, 可以讓設(shè)計(jì)者從“小白”到“入門”再到“精通”。本系列從基礎(chǔ)的數(shù)字電路為起點(diǎn),避免學(xué)
    發(fā)表于 02-27 16:43

    音樂蜂鳴器設(shè)計(jì)-ISE操作工具

    學(xué)習(xí)FPGA設(shè)計(jì)方法及設(shè)計(jì)思想的同時(shí),實(shí)操結(jié)合各類操作軟件,會讓你在技術(shù)學(xué)習(xí)道路上無比的順暢,告別技術(shù)學(xué)習(xí)小BUG卡破腦殼,告別目前忽悠性的培訓(xùn)誘導(dǎo),真正的去
    發(fā)表于 04-04 21:46

    YYS12系列音樂蜂鳴器

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

    蜂鳴器音樂播放實(shí)驗(yàn)

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

    蜂鳴器播放音樂

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

    蜂鳴器播放音樂程序

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

    把手教你學(xué)習(xí)FPGA蜂鳴器

    把手教你學(xué)習(xí)FPGA蜂鳴器篇,詳細(xì)的教程。
    發(fā)表于 09-01 16:40 ?0次下載

    HL開發(fā)板的蜂鳴器播放音樂學(xué)習(xí)程序

    HL開發(fā)板【實(shí)驗(yàn)30】蜂鳴器播放音樂,單片機(jī)學(xué)習(xí)程序,很好的學(xué)習(xí)資料。
    發(fā)表于 09-01 11:50 ?16次下載

    蜂鳴器音樂程序與最簡單蜂鳴器電路圖之FPGA學(xué)習(xí)課程

    是否按下,或者有些功能是否正常等,當(dāng)然如果足夠浪漫,也可以讓蜂鳴器演奏音樂。 簡單蜂鳴器電路圖 本設(shè)計(jì)使用的是無源蜂鳴器,也可稱為聲響器,原理電路圖如下所示。它沒有內(nèi)部驅(qū)動電路,無源
    發(fā)表于 08-07 10:35 ?2w次閱讀
    <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'>學(xué)習(xí)</b>課程

    基于FPGA音樂蜂鳴器設(shè)計(jì)

    本設(shè)計(jì)使用的是無源蜂鳴器,也可稱為聲響器,原理電路圖如下所示。它沒有內(nèi)部驅(qū)動電路,無源蜂鳴器工作的理想信號為方波,如果給直流,蜂鳴器是不響應(yīng)的,因?yàn)榇怕泛愣ǎf片不能震動發(fā)音。
    的頭像 發(fā)表于 11-11 09:48 ?6415次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>音樂</b><b class='flag-5'>蜂鳴器</b>設(shè)計(jì)

    學(xué)習(xí)心得】蜂鳴器播放音樂

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

    蜂鳴器音樂開源分享

    電子發(fā)燒友網(wǎng)站提供《蜂鳴器音樂開源分享.zip》資料免費(fèi)下載
    發(fā)表于 10-31 09:54 ?1次下載
    <b class='flag-5'>蜂鳴器</b><b class='flag-5'>音樂</b>開源分享
    主站蜘蛛池模板: 精品亚洲永久免费精品 | 久久精品国产亚洲AV热无遮挡 | 亚洲AV人无码综合在线观看蜜桃 | 古风一女N男到处做高H | 99热在线观看精品 | 巨胸美女狂喷奶水www网麻豆 | 丰满人妻按磨HD | 漂亮的保姆6在线观看中文 漂亮的保姆5电影免费观看完整版中文 | 嫩草影院成人 | 色播成人影院 | 午夜影视免费 | 久久无码av三级 | 老司机无码精品A | 奇米狠狠一区二区三区 | 久久超碰色中文字幕 | 中文字幕免费在线视频 | 极品少妇高潮啪啪AV无码吴梦梦 | 国模精品一区二区三区视频 | 成人免费视频无遮挡在线看 | 久久国产精品无码视欧美 | 女人被躁到高潮嗷嗷叫小 | 日本亚洲精品色婷婷在线影院 | 成人18视频在线观看 | 好男人视频免费高清在线观看www | 131美女爱做视频午夜剧场 | 99精品视频在线 | 久久中文电影 | 自拍视频亚洲综合在线精品 | 国产免费麻传媒精品国产AV | 国产人人为我我为人人澡 | 99re8热视频这在线视频 | 青青草原免费在线 | 中国bdsmchinesehd 中俄两军在日本海等上空战略巡航 | 噜噜噜狠狠夜夜躁 | 全免费A敌肛交毛片免费懂色AV | 天堂视频在线观看免费完整版 | 亚洲精品第二页 | 国产精品嫩草影院一区二区三区 | 99视频这里只有精品国产 | 人妻美妇疯狂迎合 | 2022一本久道久久综合狂躁 |