在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基于FPGA的蜂鳴器設計

CHANBAEK ? 來源:小小研究生 ? 作者:xxyjs2020 ? 2023-06-27 18:24 ? 次閱讀

設計規劃

驅動無源蜂鳴器進行七個基本音調“哆來咪發梭拉西”的循環鳴叫,每個音階持續鳴叫0.5s后鳴叫下一個音階。

對于無源蜂鳴器,輸入不同的PWM方波就能發出不同的聲音。方波的頻率影響音調,占空比影響音量。音調頻率對應表格如下,占空比保持為50%。因此這個實驗我們只要循環產生占空比為50%的七個音調頻率即可。

Do Re Mi Fa So La Si
262 294 330 349 392 440 494

現在我們考慮,除了時鐘和復位,需要幾個計數器:

1、蜂鳴維持0.5s,(50MHz對應20ns)計數從0-24999999,計數器名稱cnt。

2、需要蜂鳴7個調,狀態計數從0-6,cnt計滿一次就+1,計數器名稱cnt_500ms。

3、不同的調對應不同頻率,需要一個頻率計數器freq_cnt。

以Do為例,頻率為262,周期為1/262=3.816794ms。時鐘頻率50MHz,對應周期是20ns,即計數個數為190840個,對應do的freq_cnt計數從0-190839。占空比為50%,即高電平和低電平的時長一樣,高電平持續時鐘脈沖個數為95420。

頻率 262 294 330 349 392 440 494
頻率數值 190840 170068 151515 143266 127551 113636 101214
占空比數值 95420 85034 75757 71633 63775 56818 50607

以Re為例的波形圖:

圖片

改變頻率數值freq_data和占空比計數duty_data,就可以得到不同頻率的波形。

編寫代碼

module beep
#(
parameter TIME_500MS = 25'd24999, //0.5s計數值
parameter DO = 18'd190 , //Do頻率262
parameter RE = 18'd170 , //Re頻率294
parameter MI = 18'd151 , //Mi頻率330
parameter FA = 18'd143 , //Fa頻率349
parameter SO = 18'd127 , //So頻率392
parameter LA = 18'd113 , //La頻率440
parameter XI = 18'd101 //Si頻率494
 )
 (
 input wire sys_clk , 
 input wire sys_rst_n , 
 output reg beep 
 );


 //reg define
 reg [24:0] cnt ; //0.5s計數器
 reg [17:0] freq_cnt ; //音調計數器
 reg [2:0] cnt_500ms ; //0.5s個數計數
 reg [17:0] freq_data ; //音調分頻計數值,取不同的DO,RE...可以得到不同頻率的波形


 //wire define
 wire [16:0] duty_data ; //占空比計數值,即DO,RE...的一半


 assign duty_data = freq_data > > 1'b1;   //二進制右移一位就是原值的1/2


 //cnt:0.5s循環計數器
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt <= 25'd0;
 else if(cnt == TIME_500MS )
 cnt <= 25'd0;
 else
 cnt <= cnt + 1'b1;


 //cnt_500ms:對500ms個數進行計數,每個音階鳴叫時間0.5s,7個音節一循環
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt_500ms <= 3'd0;
 else if(cnt == TIME_500MS && cnt_500ms == 6)
 cnt_500ms <= 3'd0;
 else if(cnt == TIME_500MS)
 cnt_500ms <= cnt_500ms + 1'b1;


 //不同時間鳴叫不同的音階
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 freq_data <= DO;
 else case(cnt_500ms)
 0: freq_data <= DO;
 1: freq_data <= RE;
 2: freq_data <= MI;
 3: freq_data <= FA;
 4: freq_data <= SO;
 5: freq_data <= LA;
 6: freq_data <= XI;
 default: freq_data <= DO;
 endcase


 //freq_cnt:當計數到音階計數值或跳轉到下一音階時,開始重新計數
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 freq_cnt <= 18'd0;
 else if(freq_cnt == freq_data || cnt == TIME_500MS)
 freq_cnt <= 18'd0;
 else
 freq_cnt <= freq_cnt + 1'b1;


 //beep:輸出蜂鳴器波形
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 beep <= 1'b0;
 else if(freq_cnt >= duty_data)
 beep <= 1'b1;
 else
 beep <= 1'b0;


 endmodule

定義參數:0.5s的計數值(用于cnt計數器的溢出值),七個頻率的計數值(用于不同時間段的頻率計數器freq_cnt的溢出值)

定義輸入輸出和中間變量

定義0.5s計數器:復位有效時拉低電平;溢出(計數到TIME_500MS即0.5s)時拉低電平,其他情況+1

定義0.5s個數計數器:由于音調要順序循環出現,需要有個數計數器控制音調出現的時間。復位有效時拉低電平;溢出(0.5s計數器溢出且自身計數到溢出值6)時拉低電平,0.5s計數器溢出時+1

定義頻率變量:我們使用一個頻率變量,賦予不同的頻率值。音調的順序和頻率的對應就是0.5s個數計數器和頻率變量實現的當0.5s個數計數值為0時,對應Do音調,那么頻率變量freq_data=DO。這里采用了case語句,注意需要有default語句

定義頻率計數器:前面只定義了可音調順序和頻率的對應,現在需要把音調時間和音調頻率對應。我們使用頻率計數器,讓音調數計滿后到下一個音調。復位有效時拉低電平;溢出(頻率計數器計數到freq_data或者0.5s計數器溢出)時拉低電平;其他情況+1

定義輸出波形:復位有效時拉低電平;頻率計數器為占空比數值(50%的占空比意味著高電平的持續時間是音調的周期的一半,數值也就是頻率變量的一半),拉高電平,其他時候拉低電平。

圖片

編寫testbench

`timescale 1ns/1ns
module tb_beep();


//reg define
reg sys_clk ; 
reg sys_rst_n ; 


 //對時鐘,復位信號賦初值
 initial
 begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #100
 sys_rst_n <= 1'b1;
 end


 //產生時鐘信號
 always #10 sys_clk = ~sys_clk;


//Instantiation 


 beep
 #(
 .TIME_500MS(25'd2499), //0.5s計數值
 .DO (18'd19 ), //"哆"音調分頻計數值(頻率262)
 .RE (18'd17 ), //"來"音調分頻計數值(頻率294)
 .MI (18'd15 ), //"咪"音調分頻計數值(頻率330)
 .FA (18'd14 ), //"發"音調分頻計數值(頻率349)
 .SO (18'd12 ), //"梭"音調分頻計數值(頻率392)
 .LA (18'd11 ), //"拉"音調分頻計數值(頻率440)
 .XI (18'd10 ) //"西"音調分頻計數值(頻率494)
 )
 beep_inst
 (
 .sys_clk (sys_clk ), //系統時鐘,頻率50MHz
 .sys_rst_n (sys_rst_n ), //系統復位,低有效


 .beep (beep ) //輸出蜂鳴器控制信號
 );


 endmodule

初始化、產生時鐘信號、實例化:為了節省時間參數值縮小了

對比波形

圖片

由于節省時間將參數縮小了,DO音調的計數值是19,時鐘是10ns的變化(周期20ns),因此BEEP在DO音調的周期是19201000ps=380000ps,且BEEP在RE周期是17201000ps=340000ps。圖中的數值差異是標尺的誤差。

分配管腳

圖片

圖片

全編譯后上板驗證

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

    關注

    1629

    文章

    21736

    瀏覽量

    603387
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5186

    瀏覽量

    213939
  • 計數器
    +關注

    關注

    32

    文章

    2256

    瀏覽量

    94569
  • 時鐘
    +關注

    關注

    10

    文章

    1733

    瀏覽量

    131481
  • 蜂鳴器
    +關注

    關注

    12

    文章

    891

    瀏覽量

    45948
收藏 人收藏

    評論

    相關推薦

    #硬聲創作季 數字設計FPGA應用:蜂鳴器基礎

    蜂鳴器數字設計
    Mr_haohao
    發布于 :2022年10月24日 03:23:31

    #硬聲創作季 數字設計FPGA應用:蜂鳴器實踐演示和代碼設計

    蜂鳴器數字設計代碼
    Mr_haohao
    發布于 :2022年10月24日 03:24:07

    FPGA驅動蜂鳴器"唱歌"

    本帖最后由 圈圈7029 于 2014-11-18 11:49 編輯 FPGA驅動蜂鳴器"唱歌"一、蜂鳴器及其原理1 蜂鳴器的介紹(1)蜂鳴器
    發表于 11-17 17:04

    求一個FPGA蜂鳴器的代碼,超重報警

    求一個FPGA蜂鳴器的代碼,超重報警,,急急急謝謝
    發表于 05-28 16:54

    Xilinx FPGA入門連載18:蜂鳴器開關實例

    `Xilinx FPGA入門連載18:蜂鳴器開關實例特權同學,版權所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1jGjAhEm 1 功能簡介我們已經在sp6_ex2
    發表于 10-28 11:32

    勇敢的芯伴你玩轉Altera FPGA連載21:蜂鳴器、數碼管、流水燈、撥碼開關電路

    `勇敢的芯伴你玩轉Altera FPGA連載21:蜂鳴器、數碼管、流水燈、撥碼開關電路特權同學,版權所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1i5LMUUD
    發表于 11-17 19:12

    請問用FPGA怎么實現蜂鳴器發出救護車的笛聲?

    請問,用FPGA實現蜂鳴器發出救護車鳴笛聲?什么頻率?
    發表于 04-16 23:00

    【工程源碼】基于FPGA蜂鳴器播放《天空之城》程序

    工程說明:基于FPGA開發板,使用蜂鳴器播放音樂《天空之城》吐槽下,網友寫的時候,PWM都寫成了PWN,,我也就不改他的大作了。
    發表于 02-06 14:56

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

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

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

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

    把手教你學習FPGA蜂鳴器

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

    FPGA DIY開發板控制蜂鳴器

    haohaolinux 的蜂鳴器視頻。
    的頭像 發表于 06-20 13:15 ?3297次閱讀

    采用FPGA DIY開發板控制蜂鳴器產生作用

    蜂鳴器——FPGA
    的頭像 發表于 06-22 03:29 ?4448次閱讀
    采用<b class='flag-5'>FPGA</b> DIY開發板控制<b class='flag-5'>蜂鳴器</b>產生作用

    基于FPGA的音樂蜂鳴器設計

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

    基于FPGA蜂鳴器模擬簡譜樂曲

     蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。
    的頭像 發表于 04-18 14:53 ?1618次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>蜂鳴器</b>模擬簡譜樂曲
    主站蜘蛛池模板: 天天干夜夜怕| 玖玖福利| 深爱五月激情| 亚洲福利二区| 黄的三级在线播放| 黑色丝袜美女被网站| 国模极品一区二区三区| 男人天堂网在线视频| 天天草夜夜骑| 欧美成人a| 可以免费观看的一级毛片| 色就操| 狠狠色色综合网站| 久久精品国产夜色| 九九热免费观看| 亚洲五月激情综合图片区| 国产特级毛片aaaaaa毛片| 操您啦| 四虎影视国产精品| 仙踪林欧美另类视频| 亚a在线| 久久精品国产亚洲5555| 国产精品久久久久久福利| 五月六月激情| 夜夜操狠狠干| 国内精品99| 丁香六月色婷婷综合网| 久久夜色精品国产噜噜小说| 拍拍拍无档又黄又爽视频| 久色中文| 国产精品yy9299在线观看| 欧美极品第1页专区| 人人看人人玩| 免费看美女毛片| 天天噜噜日日噜噜久久综合网| 在线播放国产不卡免费视频| 亚洲第一页视频| 国产片无遮挡在线看床戏| h视频在线看| 九九九精品| 18videosex欧美69|