fpga开发——蜂鸣器

news2025/1/13 17:29:40

蜂鸣器的原理

有源蜂鸣器和无源蜂鸣器

         无源蜂鸣器利用电磁感应现象,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声,接入直流电只能持续推动振膜而无法产生声音,只能在接通或断开时产生声音。无源蜂鸣器的工作原理与扬声器相同。在使用方波信号源驱动的应反向并联一个二极管,防止突然断电时产生的高压反向电动势击穿其他元件以及使用寿命缩短。

        有源蜂鸣器插上电就能用,内部有固定频率,无法更改。

        在我的开发板上使用的是无源蜂鸣器,只有产生方波才能发出声音,产生不同频率的方波就产生不同音调的波形。

发出特定音调的声音

        开发板外部时钟50Mhz,若要产生262hz(do)音调,则计数器应该计数到50000000/262 = 190840个数,若要产生占空比为0.5的方波,则计数器可以计数到190840/2 = 95420 信号翻转,就产生了占空比0.5 的方波,可以驱动蜂鸣器发出连续的do音调。

代码如下:

module beep
#(parameter cnt_max = 17'd95419)
(input wire clk,
input wire rst,
output reg  beep);

//发出连续音调的声音
reg [16:0] cnt ;

always@(posedge clk or negedge rst)
begin
	if(rst == 1'd0)
		cnt<=17'd0;
	else if(cnt == cnt_max)
		cnt<=17'd0;
	else 
		cnt<= cnt+17'd1;
end

always@(posedge clk or negedge rst )
begin
	if(rst == 1'd0)
		beep <=1'd0;
	else if(cnt == cnt_max)
		beep<=~beep;
	else
		beep <= beep;
end

endmodule

发出间断的声音

         上述的代码是产生一个方波,通过这个方波才能驱动计数器发出声音,若要让蜂鸣器0.5s发出声音,0.5s不发出声音,就要设置一个计数器,计数到24999999,当计数到24999999时产生一个标志信号,通过标志信号产生一个选择信号,当选择信号为低电平的时候不发出声音,当选择信号为高电平的时候发出声音,选择信号的周期为1s,0.5s高电平,0.5s为低电平。高电平时按照上述方法产生音调tone方波。

代码如下:

module beep
#(parameter cnt_max = 17'd95419,
	parameter cnt_50ms = 25'd24999999)
(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)
begin
	if(rst ==1'd0)
		cnt_space <= 25'd0;
	else if (cnt_space == (cnt_50ms -1))
		cnt_space <= 25'd0;
	else 
		cnt_space<=cnt_space+25'd1;
end

always@(posedge clk or negedge rst)
begin
	if(rst ==1'd0)
		space_flag <= 1'd0;
	else if (cnt_space == (cnt_50ms - 1))
		space_flag <=1'd1;
	else 
		space_flag<=1'd0;
end

always@(posedge clk or negedge rst)
begin
	if(rst ==1'd0)
		beep_sel <= 1'd0;
	else if( space_flag == 1'd1)
		beep_sel<= ~beep_sel;
	else
		beep_sel <=beep_sel;
end


always@(posedge clk or negedge rst)
begin
	if(rst == 1'd0)
		cnt_tone<=17'd0;
	else if(cnt_tone == cnt_max)
		cnt_tone<=17'd0;
	else 
		cnt_tone<= cnt_tone+17'd1;
end

always@(posedge clk or negedge rst )
begin
	if(rst == 1'd0)
		beep <=1'd0;
	else if(beep_sel==1'b1)
		if(cnt_tone == cnt_max)
			beep<=~beep;
		else
			beep <= beep;
	else 
		beep<=1'd0;
end

endmodule

测试文件如下,为了便于观察波形,将最大值设小:

`timescale 1ns/1ns
`include"beep_test.v"

module top();

reg clk;
reg rst;

initial
begin
	clk <= 1'b0;
	rst<=1'b0;
	#25
	rst <=1'b1;
end

always #10 clk =~clk;

beep 
#(.cnt_max(17'd24),
  .cnt_50ms(25'd99))
b1
(clk,rst,beep);

endmodule

 

仿真波形如下:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/794579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode152.Maximum-Product-Subarray<乘积最大的子数组>

题目&#xff1a; 思路&#xff1a; 一开始是使用的每次乘积的最大值. 遍历. 然后因为有负数所以还是差点.看了答案,发现还需要保存一个负数的值.当当前的值是负数的时候 互换位置.然后获得当前最大值. 代码是&#xff1a; //codeclass Solution { public:int maxProduct(vec…

哈希表与布隆过滤器

文章目录 一、哈希函数是什么&#xff1f;哈希函数的应用场景哈希函数的构造方法 二、哈希表哈希表的底层设计题型 三、布隆过滤器布隆过滤器优点布隆过滤器缺陷布隆过滤器使用场景 一致性哈希算法.位图 3. 海量数据面试题 一、哈希函数是什么&#xff1f; 1 : 哈希函数没有随…

二.安装helm

1.什么是helm Kubernetes 包管理器 Helm 是查找、分享和使用软件构件 Kubernetes 的最优方式。 Helm 管理名为 chart 的 Kubernetes 包的工具。Helm 可以做以下的事情&#xff1a; 从头开始创建新的 chart将 chart 打包成归档(tgz)文件与存储 chart 的仓库进行交互在现有的 K…

【数据结构】_4.List接口实现类LinkedList与链表

目录 1.链表的结构与特点 1.1 链表的结构&#xff1a; 1.2 链表的特点&#xff1a; 2. 不带头单链表的模拟实现 3. 单链表OJ 3.1 题目1&#xff1a;移除链表元素: 3.2 题目2&#xff1a;反转一个单链表 3.3 题目3&#xff1a;返回链表的中间结点 3.4 题目4&#xff1…

Python连接MariaDB数据库

Python连接MariaDB数据库 一、安装mariadb库 pip install mariadb 二、连接数据库 connect()函数连接数据库。 import mariadbconn mariadb.connect(user"root", password"Root123", host"192.168.0.182", port3306, database"compan…

Linux环境搭建(XShell+云服务器)

好久不见啊&#xff0c;放假也有一周左右了&#xff0c;简单休息了下&#xff08;就是玩了几天~~&#xff09;&#xff0c;最近也是在学习Linux&#xff0c;现在正在初步的学习阶段&#xff0c;本篇将会简单的介绍一下Linux操作系统和介绍Linux环境的安装与配置&#xff0c;来帮…

【沁恒蓝牙mesh】组网方式选择与分析

本文主要介绍了【沁恒蓝牙mesh】组网方式选择与分析 1.开发环境搭建与程序烧录 参考博文&#xff1a;【经验】如何搭建沁恒蓝牙SoC CH58x开发环境 2. 组网方式 蓝牙mesh组网实践&#xff08;配网方式的选择&#xff09; 自配网&#xff1a;自己给自己配网&#xff0c;当节点…

Labview串口通信MSComm实现串口收发

文章目录 前言一、什么是 MSComm二、MSComm 控件下载三、MSComm 控件的注册四、使用 MSComm 控件1、前面板放置控件2、MSComm 的常用属性3、MSComm 控件的事件 五、实现串口收发1、搭建虚拟串口2、发送测试3、接收测试4、后面板核心程序框图 六、程序自取 前言 本文介绍使用 A…

study 第三方库

import osprint(os.listdir()) #列出当前目录下的文件 print(os.getcwd()) #获取绝对路径if not os.path.exists("b"):os.mkdir("b") if not os.path.exists("b/test.ext"):f open("b/text.txt","w")f.write("hello,f…

sql学习笔记

sql语句优先级 FROM → WHERE → GROUP BY → SELECT → HAVING → ORDER BY sql case用法 例题&#xff1a; 按照销售单价( sale_price )对练习 3.6 中的 product&#xff08;商品&#xff09;表中的商品进行如下分类。 低档商品&#xff1a;销售单价在1000日元以下&#x…

MATLAB | 产生阿尔法稳定分布噪声并作出概率密度函数

一、问题描述 想产生不同特征参数的α稳定随机变量&#xff0c;并且作出其概率密度函数进行对比。 二、解决思路 运行了MATLAB的官方实例代码&#xff1a; openExample(‘stats/ComparePDFsOfStableDistributionsExample’) &#xff08;1&#xff09;使用makedist()函数生成…

低代码未来的发展方向

大的未来都是AI &#xff0c;AI &#xff0c; AI …&#xff0c;理论上不可能有别的。 拿iVX来说吧&#xff0c;已经做了一整套完整的 可视化编程范式&#xff0c;基本可以生成所有系统的前端后台和数据库代码。也就是说&#xff0c;其组件系统和逻辑表达&#xff08;非代码&a…

整天用 Calendar 日历组件,不如自己手写一个吧!

目录 Date 的 api 实现日历组件 静态的布局 再来写逻辑 增加两个参数 提供 ref 来暴露 api 总结 日历组件想必大家都用过&#xff0c;在各个组件库里都有。比如 antd 的 Calendar 组件&#xff08;或者 DatePicker 组件&#xff09;&#xff1a; 那这种日历组件是怎么实…

【论文阅读】A Comprehensive Survey

论文来源&#xff1a;Li M , Liu Y , Liu X ,et al.The Deep Learning Compiler: A Comprehensive Survey[J]. 2020.DOI:10.1109/TPDS.2020.3030548. 这是一篇关于深度学习编译器的综述类文章。 什么是深度学习编译器 深度学习&#xff08;Deep Learning&#xff09;编译器将…

STM32H5开发(4)----开发板介绍

STM32H5开发----4.开发板介绍 套件概述样品申请特征系统控制和生态系统访问功能示意图系统框图跳线设置开发板原理图 套件概述 STM32H503RBTx_LQFP64是STM32H5系列微控制器的一款出色评估套件&#xff0c;它采用了先进的40nm工艺制造&#xff0c;为开发者提供了卓越的性能和能…

MyBatis基础模块-类型转换模块

文章目录 1. 为什么需要类型转换模块2. TypeHandler 1. 为什么需要类型转换模块 执行sql&#xff0c;在PreparedStatement设置参数时&#xff0c;需要把java类型转换成jdbc类型&#xff0c;而从结果集中获取数据时&#xff0c;需要把jdbc类型转换为java类型。 2. TypeHandle…

软件测试未来的发展趋势以及软件测试进阶路线

全球各地的企业每天都在发展变化着&#xff0c;以应对市场挑战&#xff0c;满足日益成熟的客户需求。即使是正在进行的技术进步也会使软件测试专家在实践的过程中更加专注和精确。 2021年给软件测试领域带来了新的技术解决方案&#xff0c;以及质量保证和软件测试的实现。与此同…

【数据结构和算法14】堆结构(基于数组实现)

目录 1、有关二叉树和堆的介绍 2、大根堆的代码实现 3、小根堆的代码实现 1、有关二叉树和堆的介绍 计算机科学中&#xff0c;堆是一种基于树的数据结构&#xff0c;通常用完全二叉树实现。堆的特性如下 在大顶堆&#xff08;大根堆&#xff09;中&#xff0c;任意节点 C 与…

开源视频监控管理平台国标GB28181视频EasyCVR电子地图功能展示优化

视频监控综合管理平台EasyCVR可提供的视频能力包括&#xff1a;视频监控直播、云端录像、云存储、录像检索与回看、告警上报、平台级联、云台控制、语音对讲、电子地图、H.265自动转码等&#xff0c;也具备接入AI智能分析的能力。 视频汇聚平台EasyCVR可拓展性强、视频能力灵活…

centos7中用shell脚本实现mysql分库分表备份

环境&#xff1a; 脚本&#xff1a; #!/bash/bin back_path/backup/db databases_file/backup/databases.list [ -f $databases_file ] || touch /backup/databases.list if [[ ! -s ${databases_file} ]] thenecho "$databases_file为空,请在该文件中写上需要备份的数据…