南宁定制建站,aspnet网站开发 视频,下拉框代码自做生成网站,网站备案授权书怎么填写蜂鸣器的原理
有源蜂鸣器和无源蜂鸣器 无源蜂鸣器利用电磁感应现象#xff0c;为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声#xff0c;接入直流电只能持续推动振膜而无法产生声音#xff0c;只能在接通或断开时产生声音。无源蜂鸣器的工作原理与扬声…蜂鸣器的原理
有源蜂鸣器和无源蜂鸣器 无源蜂鸣器利用电磁感应现象为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声接入直流电只能持续推动振膜而无法产生声音只能在接通或断开时产生声音。无源蜂鸣器的工作原理与扬声器相同。在使用方波信号源驱动的应反向并联一个二极管防止突然断电时产生的高压反向电动势击穿其他元件以及使用寿命缩短。 有源蜂鸣器插上电就能用内部有固定频率无法更改。 在我的开发板上使用的是无源蜂鸣器只有产生方波才能发出声音产生不同频率的方波就产生不同音调的波形。
发出特定音调的声音 开发板外部时钟50Mhz若要产生262hzdo音调则计数器应该计数到50000000/262 190840个数若要产生占空比为0.5的方波则计数器可以计数到190840/2 95420 信号翻转就产生了占空比0.5 的方波可以驱动蜂鸣器发出连续的do音调。
代码如下
module beep
#(parameter cnt_max 17d95419)
(input wire clk,
input wire rst,
output reg beep);//发出连续音调的声音
reg [16:0] cnt ;always(posedge clk or negedge rst)
beginif(rst 1d0)cnt17d0;else if(cnt cnt_max)cnt17d0;else cnt cnt17d1;
endalways(posedge clk or negedge rst )
beginif(rst 1d0)beep 1d0;else if(cnt cnt_max)beep~beep;elsebeep beep;
endendmodule
发出间断的声音 上述的代码是产生一个方波通过这个方波才能驱动计数器发出声音若要让蜂鸣器0.5s发出声音0.5s不发出声音就要设置一个计数器计数到24999999当计数到24999999时产生一个标志信号通过标志信号产生一个选择信号当选择信号为低电平的时候不发出声音当选择信号为高电平的时候发出声音选择信号的周期为1s0.5s高电平0.5s为低电平。高电平时按照上述方法产生音调tone方波。
代码如下
module beep
#(parameter cnt_max 17d95419,parameter cnt_50ms 25d24999999)
(input wire clk,
input wire rst,
output reg beep);//发出有间隔的声音
reg [16:0] cnt_tone ;
reg [24:0] cnt_space;
reg space_flag;
reg beep_sel;always(posedge clk or negedge rst)
beginif(rst 1d0)cnt_space 25d0;else if (cnt_space (cnt_50ms -1))cnt_space 25d0;else cnt_spacecnt_space25d1;
endalways(posedge clk or negedge rst)
beginif(rst 1d0)space_flag 1d0;else if (cnt_space (cnt_50ms - 1))space_flag 1d1;else space_flag1d0;
endalways(posedge clk or negedge rst)
beginif(rst 1d0)beep_sel 1d0;else if( space_flag 1d1)beep_sel ~beep_sel;elsebeep_sel beep_sel;
endalways(posedge clk or negedge rst)
beginif(rst 1d0)cnt_tone17d0;else if(cnt_tone cnt_max)cnt_tone17d0;else cnt_tone cnt_tone17d1;
endalways(posedge clk or negedge rst )
beginif(rst 1d0)beep 1d0;else if(beep_sel1b1)if(cnt_tone cnt_max)beep~beep;elsebeep beep;else beep1d0;
endendmodule
测试文件如下为了便于观察波形将最大值设小
timescale 1ns/1ns
includebeep_test.vmodule top();reg clk;
reg rst;initial
beginclk 1b0;rst1b0;#25rst 1b1;
endalways #10 clk ~clk;beep
#(.cnt_max(17d24),.cnt_50ms(25d99))
b1
(clk,rst,beep);endmodule 仿真波形如下