fpga开发——蜂鸣器

这篇具有很好参考价值的文章主要介绍了fpga开发——蜂鸣器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

蜂鸣器的原理

有源蜂鸣器和无源蜂鸣器

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

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

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

发出特定音调的声音

        开发板外部时钟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

仿真波形如下:

fpga开发——蜂鸣器,fpga开发,嵌入式硬件,硬件架构,硬件工程文章来源地址https://www.toymoban.com/news/detail-621012.html

到了这里,关于fpga开发——蜂鸣器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《FPGA学习》->蜂鸣器播放

    🍎 与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。 蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型。本实验采用无源蜂鸣器,蜂鸣器的发声不同是靠频率不同进行控制的

    2024年02月08日
    浏览(45)
  • FPGA蜂鸣器播放音乐

      最近做EDA课设,看到自己的买的板子上有蜂鸣器,所以就打算做一个FPGA控制蜂鸣器播放音乐。   这里我使用的板子是睿智助学的FPGA开发板,板子上的芯片是 EP4CE6E22C8 ,如果是你使用的是其他开发板或者是自己做的板子,就根据原理图,在写完代码时绑定相应的引脚下

    2024年02月06日
    浏览(45)
  • 【FPGA】五、蜂鸣器播放音乐

    文章目录 前言 一、蜂鸣器简介 二、音频音符简介 三、任务要求 四、程序设计 1、设计思路  2、程序代码    总结         蜂鸣器(Buzzer)是现代常用的一种电子发声器,主要用于产生声音信号。它是一种一体化结构的电子讯响器,采用直流电压供电,被广泛用于计算机、

    2024年02月11日
    浏览(48)
  • 二、17【FPGA】无源蜂鸣器驱动实验

    学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。 学习视频:是根据野火FPGA视频教程——第二十讲 https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3      蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器两种类型。 压电式蜂鸣器是以压电陶瓷的压

    2023年04月25日
    浏览(48)
  • 基于Quartus-FPGA制作蜂鸣器的相关教程

    写这篇文章实在是因为自己对这个制作流程很不熟悉,查询了很多资料都没有得到找到自己想要的东西,事倍功半了。由于本人是才开始写csdn,很多东西还不知道咋使用。写得不太好,但还是希望能帮到有需要的小伙伴。如有错误的地方,欢迎大家指正,我们共同进步。对于

    2024年02月09日
    浏览(38)
  • FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例

    ** ** 开发板上电后,通过蜂鸣器播放《两只老虎》。 原理:想要让蜂鸣器播放音乐,就需要知道每个音符的频率,再通过换算将频率转换为周期,再结合开发板具体的系统时钟周期,便可计算出每个音符对应多少个系统时钟周期个数,通过对这些个数计数,便可控制蜂鸣器播

    2024年02月15日
    浏览(131)
  • FPGA拾忆_(10):按键控制蜂鸣器_边沿检测_按键消抖

    1.硬件特征: 轻触式(回弹式)按键         略 蜂鸣器: 分为蜂鸣器按照结构原理不同可分为压电式蜂鸣器和电磁式蜂鸣器。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、 阻抗匹配器及共鸣箱、外壳等组成; 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组

    2024年04月10日
    浏览(40)
  • 驱动开发-蜂鸣器、灯、风扇、马达

    头文件 驱动程序 应用程序

    2024年02月16日
    浏览(44)
  • 学习笔记|认识蜂鸣器|控制原理|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(上):蜂鸣器应用

    反面包上黑胶的是有源蜂鸣器。 在背面裸露的一块线路板的是无源蜂鸣器。 YX55675-无源蜂鸣器模块的资料 提取码:nl73 1、有源蜂鸣器内部带震荡源,所以只要一通电就会叫(一边高电平,一边低电平),而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫(必须不断给高

    2024年02月11日
    浏览(58)
  • 驱动开发 day3 (模块化驱动启动led,蜂鸣器,风扇,震动马达)

    模块化驱动启动led,蜂鸣器,风扇,震动马达并加上Makefile 封装模块化驱动,可自由安装卸载驱动,便于驱动更新(附图) 1.安装模块驱动同时初始化各个设备并使能 2.该驱动会自动创建驱动节点. 3.通过c函数程序输入控制各个设备 4.卸载模块驱动 //编译驱动(注意Makefile的编译到移植

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包