在线观看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>模擬簡譜樂曲
    主站蜘蛛池模板: 综合五月天堂 | 国产视频国产 | 国产手机在线看片 | 午夜精品视频在线 | 综合精品视频 | 色综合久久久久久久久五月 | 亚洲乱码卡一卡二卡三 | 精品女视频在线观看免费 | 久久全国免费久久青青小草 | 在线观看一区二区三区视频 | 狠狠色噜噜狠狠狠狠2021天天 | q2002在线观看免费 | h网站在线免费观看 | 久久男人的天堂色偷偷 | 2022欧美高清中文字幕在线看 | 日本污视频 | 奇米四色7777 | 4438x五月天| 色wwwww| 日日操夜夜操天天操 | 欧美一区二区视频在线观看 | 国产成人啪精品午夜在线观看 | 性做久久久久久久 | 欧美性色生活片天天看99 | 波多野结衣三个女人蕾丝边 | 日本s色大片在线观看 | 天天伊人 | 日韩欧美一级 | 中国特黄一级片 | 亚洲 欧美 自拍 另类 欧美 | 亚洲一成人毛片 | 男人的午夜 | 国产精品人人爱一区二区白浆 | 四虎最新影院 | 一级免费视频 | 久久九色| 四虎影片国产精品8848 | 午夜欧美日韩 | 韩国三级在线不卡播放 | 老师在办公室被躁得舒服小说 | 全亚洲最大的777io影院 |