STEP FPGA驅(qū)動無源蜂鳴器模塊

 行業(yè)動態(tài)     |      2023-11-27 14:40:32    |      作者

硬件說明

蜂鳴器的分類:按其結(jié)構(gòu)主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型:

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

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

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

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

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

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


Verilog代碼

//-------------------------------------------------------------------- //>>>>>>>>>>>>>>>>>>>>>>>>>COPYRIGHTNOTICE<<<<<<<<<<<<<<<<<<<<<<<<< //-------------------------------------------------------------------- //Module:Beeper // //Author:Step // //Description:Beeper //-------------------------------------------------------------------- //CodeRevisionHistory: //-------------------------------------------------------------------- //Version:|Mod.Date:|ChangesMade: //V1.0|2016/04/20|Initialver //-------------------------------------------------------------------- moduleBeeper ( input clk_in, //系統(tǒng)時鐘 input rst_n_in, //系統(tǒng)復(fù)位,低有效 input tone_en, //蜂鳴器使能信號 input [4:0] tone, //蜂鳴器音節(jié)控制 output reg piano_out //蜂鳴器控制輸出) ; /* 無源蜂鳴器可以發(fā)出不同的音節(jié),與蜂鳴器震動的頻率(等于蜂鳴器控制信號的頻率)相關(guān), 為了讓蜂鳴器控制信號產(chǎn)生不同的頻率,我們使用計數(shù)器計數(shù)(分頻)實現(xiàn),不同的音節(jié)控制對應(yīng)不同的計數(shù)終值(分頻系數(shù)) 計數(shù)器根據(jù)計數(shù)終值計數(shù)并分頻,產(chǎn)生蜂鳴器控制信號 */ reg[15:0]time_end;//根據(jù)不同的音節(jié)控制,選擇對應(yīng)的計數(shù)終值(分頻系數(shù)) //低音1的頻率為261.6Hz,蜂鳴器控制信號周期應(yīng)為12MHz/261.6Hz=45871.5, //因為本設(shè)計中蜂鳴器控制信號是按計數(shù)器周期翻轉(zhuǎn)的,所以幾種終值=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; endcaseendreg[17:0]time_cnt;//當(dāng)蜂鳴器使能時,計數(shù)器按照計數(shù)終值(分頻系數(shù))計數(shù) always@(posedgeclk_inornegedgerst_n_in)begin if(!rst_n_in)begin time_cnt<=1'b0; endelseif(!tone_en)begin time_cnt<=1'b0; endelseif(time_cnt>=time_end)begin time_cnt<=1'b0; endelsebegin time_cnt<=time_cnt+1'b1; endend//根據(jù)計數(shù)器的周期,翻轉(zhuǎn)蜂鳴器控制信號 always@(posedgeclk_inornegedgerst_n_in)begin if(!rst_n_in)begin piano_out<=1'b0; endelseif(time_cnt==time_end)begin piano_out<=~piano_out; //蜂鳴器控制輸出翻轉(zhuǎn),兩次翻轉(zhuǎn)為1Hz endelsebegin piano_out<=piano_out; end end endmodule

小結(jié)

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