一、功能简介
1、蜂鸣器基本工作原理
- 蜂鸣器的发声原理由振动装置和谐振装置组成。FPGA输出高电平就发出响声,FPGA输出低电平就停止发声。蜂鸣器是一种最简单的发声元器件,它的应用也非常广泛,大都是作为报警或发声提醒装置。
2、蜂鸣器分类
按构造方式:
-
电磁式蜂鸣器:主要是利用通电导体会产生磁场的特性用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
-
压电式蜂鸣器:压电式蜂鸣器用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷同样,当通电时压电材料也会发生形变。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成,多谐振荡器由晶体管或集成电路构成。接通电源后(1.5~15V直流工作电压)多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
按驱动方式:
- 有源蜂鸣器:这里的“源”不是指电源。而是指震荡源。 有源蜂鸣器内部带震荡源,所以一通电就会叫。
- 无源蜂鸣器:无源蜂鸣器内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面含有震荡电路。
按封装方式:
- DIP BUZZER(插针蜂鸣器)
- SMD BUZZER(贴片式蜂鸣器)
按电流方式
- 直流蜂鸣器
- 交流蜂鸣器
3、电路分析
-
在下面的电路图中,展示了单片机中的蜂鸣器工作方式,通过调整P23口的高低电平,来实现三极管的开关作用,之所以通过三极管的发射极引导电流进入集电极,而不是用P23直接加到蜂鸣器上,是因为单片机的功率很小,虽然可以输出很高的电压,但是是无法驱动这种功率器件的。当P23口输出高电平(5V)时,VCC即电源也是5V,此时三极管没有导通,所以蜂鸣器无反应,当输出低电平时,发射极电压远大于基极,电流从发射极流入集电极,蜂鸣器震动。
-
下面这个电路是 SP6 板上蜂鸣器的电路原理图,BEEP 网络连接到 FPGA 的 IO 上, 当 BEEP = 1 时,三极管 Q1 的BE 导通,则 CE 也导通,那么 U4 的 2 端直接接地,因此在它 两端有 5V 的电压,那么蜂鸣器就发声了。同理,BEEP = 0时,Q1 截止,U4 的 2 端相当于开路,则蜂鸣器不会发出声音。
-
我们将蜂鸣器和FPGA连接,当I/O口输出为1的时候,蜂鸣器发声,当I/O输出为0的时候,蜂鸣器不发声,为了实现此流程,我们必须使FPGA的I/O口输出一个占空比为50%的PWM的信号,让蜂鸣器间歇性地发出声响。如果频率高,则声音就尖锐急促。如果频率低,则声音就低沉平缓。
二、例程说明
- 我们通过一个拨码开关做控制,让拨码开关的 ON 或 OFF 状态相应的去控制蜂鸣器的发声与不发声。拨码开关 SW3的电路如下图所示。拨码开关与FPGA 相连接的 SW0 信号的电平值取决于拨码开关当前的位置,若它连接了 2-3脚,那么 SW0就是高电平状态,若它连接了 3-4脚,就是低电平状态。
实物图如下所示:
综上所述,当拨码开关处于ON状态时,SW0输出低电平;当拨码开关处于OFF状态时,SW0输出高电平。
三、代码解析
module cy4(
input ext_clk_25m, //外部输入 25MHz 时钟信号
input ext_rst_n, //外部输入复位信号,低电平有效
input[0:0] switch, //拨码开关 SW3 输入,ON -- 低电平;OFF -- 高电平
output reg beep //蜂鸣器控制信号,1--响,0--不响
);
//-------------------------------------
//蜂鸣器发声控制
always @ (posedge ext_clk_25m or negedge ext_rst_n)
if(!ext_rst_n) beep <= 1'b0; else if(!switch[0]) beep <= 1'b1; //蜂鸣器响
else beep <= 1'b0; //蜂鸣器不响
endmodule
- module:模块名称为cy4,包含四个输入输出
- input:后加输入信号ext_clk_25m为外部输入 25MHz 时钟信号
- input:ext_rst_n为外部输入复位信号,低电平有效。当输入复位信号ext_rst_n为低电平时,即复位状态。无论输入时钟ext_clk_25m是否运行,输出信号始终保持低电平。输入复位信号ext_rst_n为高电平时,即退出复位。
- input[0:0] switch:input [<最高位>:<最低位>] <端口命名 >;拨码开关的名称为switch此处有一位。
- output后加输出信号reg beep为蜂鸣器控制信号。高电平的时候响,低电平的时候不响。
- 这段这段代码中,当复位信号为低电平的时候,也就是复位按键被按下的
时候,beep 信号为低电平,即蜂鸣器不发声。而当 ext_rst_n 为高电平的时候,也就是系统正常运行时,蜂鸣器控制信号 beep 的高低电平状态则由拨码开关switch[0]决定,即由拨码开关 SW3 的状态决定。当 SW3 处于 ON 状态(低电平)时,蜂鸣器发声;当 SW3 处于 OFF状态(高电平)时,蜂鸣器不发声。
四、打开工程
1、可以根据我之前的博客,重新新建工程,并且编写代码。
2、若有已有工程,我们可以有两种方式打开工程
(1)在文件夹中找到我们需要的文件,双击该文件直接启动Quartus II,打开该工程。
(2)首先打开Quartus II,点击左上角的Fire然后点击Open Project菜单命令。
-
找到我们需要的文件,然后点击打开即可。
-
打开工程之后,我们可以在Quartus II,Project Navigator窗口双击查看工程源代码。
五、下载配置操作
1、开启 Programmer 界面
-
连接好 USB Blaster 下载线。给 SF-CY4 开发板上电,同时打开我们所需要的工程(双击cy4.qpf)。如图所示,点击菜单栏的 Programmer 按钮,进入下载配置页面
-
进入下载页面如图所示。确认“Mode”选项为“JTAG”,确认 File 列下的下载文件名称为“output_files/cy4.sof”,勾选“Program/Configure”。
2、识别 USB-Blaster
- 确认 Quartus II 是否识别了 USB Blaster 下载线。若没有识别,则点击上图左上角 的“Hardware Setup…”。 如图所示,在弹出的 Hardware Setup 页面里,选择当前硬件为 USB Blaster,然后close。如果当前硬件里面没有USB Blaster选项,首先确认硬件上是否已经把USB Blaster和 PC连接好,然后再尝试多次拔插一下看看,或者重新启动 Quartus II 软件看看。
- 如果始终找不到可以按一下驱动是否安装完成。参考博客https://blog.csdn.net/weixin_30548917/article/details/97838665
3、执行在线下载操作
最后,前面的所有操作都完成后,直接点击右侧的 Start 按钮就可以启动下载操作,观察左上角的 Process 是否会从 0 到 100%完成下载。
下载完成后,我们波动拨码开关,可以听到,当我们的开关处于ON状态时,可以听到蜂鸣器发出声音,当开关处于OFF状态时,蜂鸣器不发声。
参考连接
https://www.bilibili.com/video/BV1J741187Dt?p=9
https://blog.csdn.net/weixin_30548917/article/details/97838665