<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STEP FPGA驅動無源蜂鳴器模塊

          STEP FPGA驅動無源蜂鳴器模塊

          作者: 時間:2023-11-27 來源:電子森林 收藏

          硬件說明

          蜂鳴器的分類:
          按其結構主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型:

          本文引用地址:http://www.ex-cimer.com/article/202311/453304.htm
          • 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。
          • 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構成,當接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。

          按是否帶有信號源分為有源蜂鳴器和無源蜂鳴器兩種類型:

          • 有源蜂鳴器只需要在其供電端加上額定直流電壓,其內(nèi)部的震蕩器就可以產(chǎn)生固定頻率的信號,驅動蜂鳴器發(fā)出聲音。
          • 無源蜂鳴器可以理解成與喇叭一樣,需要在其供電端上加上高低不斷變化的電信號才可以驅動發(fā)出聲音。


          本章節(jié)和大家一起學習無源蜂鳴器的驅動,F(xiàn)PGA或單片機的GPIO口驅動能力弱,不能直接驅動無源蜂鳴器,常用的蜂鳴器驅動電路如下:

          蜂鳴器使用NPN三極管(9013)驅動,三極管當開關用,當基極電壓拉高時,蜂鳴器通電,當基極電壓拉低時,蜂鳴器斷電,F(xiàn)PGA控制GPIO口給三極管的基極輸出不同頻率的脈沖信號,蜂鳴器就可以發(fā)出不同的音節(jié)。
          不同音節(jié)與蜂鳴器震蕩頻率的對應關系如下:

          我們使用PWM的方法(關于PWM的說明,快速入門中的脈沖發(fā)生器章節(jié)有詳細的介紹),使用計數(shù)器對系統(tǒng)時鐘進行分頻,改變計數(shù)器的計數(shù)終值從而實現(xiàn)調節(jié)PWM信號頻率的目的,使用PWM信號控制蜂鳴器電路。


          Verilog代碼

          // --------------------------------------------------------------------
          // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
          // --------------------------------------------------------------------
          // Module: Beeper
          // 
          // Author: Step
          // 
          // Description: Beeper
          // --------------------------------------------------------------------
          // Code Revision History :
          // --------------------------------------------------------------------
          // Version: |Mod. Date:   |Changes Made:
          // V1.0     |2016/04/20   |Initial ver
          // --------------------------------------------------------------------
          module Beeper
          (
          input					clk_in,		//系統(tǒng)時鐘
          input					rst_n_in,	//系統(tǒng)復位,低有效
          input					tone_en,	//蜂鳴器使能信號
          input			[4:0]	tone,		//蜂鳴器音節(jié)控制
          output	reg				piano_out	//蜂鳴器控制輸出)
          ;
          /*
          無源蜂鳴器可以發(fā)出不同的音節(jié),與蜂鳴器震動的頻率(等于蜂鳴器控制信號的頻率)相關,
          為了讓蜂鳴器控制信號產(chǎn)生不同的頻率,我們使用計數(shù)器計數(shù)(分頻)實現(xiàn),不同的音節(jié)控制對應不同的計數(shù)終值(分頻系數(shù))
          計數(shù)器根據(jù)計數(shù)終值計數(shù)并分頻,產(chǎn)生蜂鳴器控制信號
          */
          reg [15:0] time_end;//根據(jù)不同的音節(jié)控制,選擇對應的計數(shù)終值(分頻系數(shù))
          //低音1的頻率為261.6Hz,蜂鳴器控制信號周期應為12MHz/261.6Hz = 45871.5,
          //因為本設計中蜂鳴器控制信號是按計數(shù)器周期翻轉的,所以幾種終值 = 45871.5/2 = 22936
          //需要計數(shù)22936個,計數(shù)范圍為0 ~ (22936-1),所以time_end = 22935
          always@(tone) begin
          	case(tone)
          		5'd1:	time_end =	16'd22935;	//L1,
          		5'd2:	time_end =	16'd20428;	//L2,
          		5'd3:	time_end =	16'd18203;	//L3,
          		5'd4:	time_end =	16'd17181;	//L4,
          		5'd5:	time_end =	16'd15305;	//L5,
          		5'd6:	time_end =	16'd13635;	//L6,
          		5'd7:	time_end =	16'd12147;	//L7,
          		5'd8:	time_end =	16'd11464;	//M1,
          		5'd9:	time_end =	16'd10215;	//M2,
          		5'd10:	time_end =	16'd9100;	//M3,
          		5'd11:	time_end =	16'd8589;	//M4,
          		5'd12:	time_end =	16'd7652;	//M5,
          		5'd13:	time_end =	16'd6817;	//M6,
          		5'd14:	time_end =	16'd6073;	//M7,
          		5'd15:	time_end =	16'd5740;	//H1,
          		5'd16:	time_end =	16'd5107;	//H2,
          		5'd17:	time_end =	16'd4549;	//H3,
          		5'd18:	time_end =	16'd4294;	//H4,
          		5'd19:	time_end =	16'd3825;	//H5,
          		5'd20:	time_end =	16'd3408;	//H6,
          		5'd21:	time_end =	16'd3036;	//H7,
          		default:time_end =	16'd65535;	
          	endcaseend reg [17:0] time_cnt;//當蜂鳴器使能時,計數(shù)器按照計數(shù)終值(分頻系數(shù))計數(shù)
          	always@(posedge clk_in or negedge rst_n_in) begin
          	if(!rst_n_in) begin
          		time_cnt <= 1'b0;
          	end else if(!tone_en) begin
          		time_cnt <= 1'b0;
          	end else if(time_cnt>=time_end) begin
          		time_cnt <= 1'b0;
          	end else begin
          		time_cnt <= time_cnt + 1'b1;
          	endend //根據(jù)計數(shù)器的周期,翻轉蜂鳴器控制信號
          	always@(posedge clk_in or negedge rst_n_in) begin
          	if(!rst_n_in) begin
          		piano_out <= 1'b0;
          	end else if(time_cnt==time_end) begin
          		piano_out <= ~piano_out;	//蜂鳴器控制輸出翻轉,兩次翻轉為1Hz
          	end else begin
          		piano_out <= piano_out;
          	end
          	end 
          	endmodule

          小結

          本節(jié)主要為大家講解了蜂鳴器的不同類型及無源蜂鳴器的驅動原理,需要大家掌握的同時自己創(chuàng)建工程,通過整個設計流程,生成FPGA配置文件加載測試。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();