一、功能简介

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

学习日记——蜂鸣器开关实例(FPGA)相关推荐

  1. 我的Unity3D学习日记-05(官方实例2Droguelike)

    快要一个月没有更新了,这段时间也没闲着.今天就把这段时间学到的东西稍微总结一下. 前段时间开始看一些实战开发的内容和教程.一些是来自于麦子学院的视频,一些来自于蛮牛教育,还有一部分官方教学视频.最终选 ...

  2. Vue学习日记之vue实例生命周期

      在vue实例开始创建.运行到销毁的过程,就是vue的生命周期 vue生命周期中发生(存在)的事件(这些事件可以用函数来表示),我们称之为生命周期钩子. 即:生命周期钩子=生命周期函数=生命周期事件 ...

  3. 学习日记——FPGA实验平台板级电路详解

    一.板级电路整体架构 我接下来一段时间学习的就是"勇敢的芯"FPGA 实验平台,它是特权同学和至芯科技携手打造的一款基于Altera Cyclone IV FPGA 器件的入门级 ...

  4. 蓝桥杯单片机学习日记1-LED 蜂鸣器 继电器 数码管的简单驱动

    此片文章用于记录蓝桥杯单片机的学习. LED 蜂鸣器 继电器 数码管 这些都是比赛时常用的外设,如下原理图:  LED部分:  蜂鸣器和继电器部分(图中还有步进电机部分):  数码管部分: 可见,上述 ...

  5. (学习日记)2023.06.07

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  6. (学习日记)2023.4.22

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  7. 十五的学习日记20160926-你不知道的JS笔记/

    十五的学习日记20160926 JavaScript 一个用于检测正负值的函数,可以用它辨别-0值. 我觉得挺好用,以后可以写到自己的工具库里. //函数:检查传入参数是否为正数.Number=> ...

  8. 小菜鸟的C++游戏编程学习日记(一)

    小菜鸟的C++游戏编程学习日记(一) 作者:杨帆参考书籍:Beginning Game ProGramming(中文版)学习时间:2016.7.26 以下附所敲源代码与部分注释: //编译环境 vis ...

  9. Vue2源码的学习日记(3)

    组件化 (在文章中的一切源码大部分都是只给出头部,因为源码是开源的(Vue2.6),我认为在自己去边查找边看的过程也能提升到自己) 续学习日记(2)后,便开始慢慢走向vue这个框架的核心,希望能帮到大 ...

最新文章

  1. java面试题2019 答案
  2. 表达式类型的实现数据结构_Redis系列(九)底层数据结构之五种基础数据类型的实现...
  3. boost::function_types::has_property_tag用法的测试程序
  4. C++并查集Disjoint Set(附完整源码)
  5. java解决导出word用wps打开正常,用office打开是html的标签的问题
  6. 2019年北航OO第二单元(多线程电梯任务)总结
  7. python绘图库seaborn_python绘图库——Matplotlib及Seaborn使用(入门篇2)
  8. 设计牛人——设计入门答疑番外篇有感
  9. JAVA高性能内存队列-disruptor
  10. Azure虚拟机部署Skype for Business Server 三、部署Skype前端服务器
  11. iOS开发中使用代码控制横竖屏的切换
  12. 大学计算机基础学后感想,大学计算机基础学习感想
  13. DENSE_RANK函数
  14. Android拍照失败以及成功后拿不到照片(照片裁剪加载失败)原因之一
  15. educoder:实验二 数字类型及其操作(新)
  16. 将word 转换为图片(word to pdf ->pdf to image)
  17. 亿图图示---信息图和数据库模型图
  18. 次日即流失?直播App如何运营超级用户?
  19. linux挂载4tb硬盘分区,centos7挂载新加4T硬盘到home
  20. Unity前项渲染和延迟渲染(二)

热门文章

  1. Mac Cornerstone详细使用说明,图文教程
  2. LeetCode第五题答案(time limite exceeded) C++ time limit exceeded
  3. SRv6技术课堂:SRv6概述
  4. 《王道计算机考研》:计算机网络概念、组成、功能、分类
  5. 借贷期末余额 oracle,应交税费期末余额分别在借贷方表示什么
  6. 关于AVR单片机熔丝位的设置和拯救方法大全 AVR单片机熔丝位的设置和详细的拯救方法
  7. Python教程之开胃菜
  8. Js逆向-猿人学(1)源码混淆
  9. 杜拉拉升职记4--读书笔记
  10. 微信小程序一键登录功能,使用uni-app和springboot(JWT鉴权)