二、17【FPGA】无源蜂鸣器驱动实验

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

前言

学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。

学习视频:是根据野火FPGA视频教程——第二十讲
https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3

理论学习

     蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器两种类型。压电式蜂鸣器是以压电陶瓷的压电效应,来带动金属片的振动而发声;而电磁式蜂鸣器则是用电磁的原理,通电时将金属振动膜吸下,不通电时以振动膜的弹力弹回。由于两种蜂鸣器发声原理不同,电压式结构简单耐用但音调单一、音色差,适用于报警器等设备;而电磁式由于音色好,所以多用于语音、音乐等设备。
        蜂鸣器按其是否带有信号源又分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器的内部装有集成电路,不需要音频驱动电路,只需要接通直流电源就能直接发出声响。而无源蜂鸣器只有外加音频驱动信号才能发出声响。

二、17【FPGA】无源蜂鸣器驱动实验

无源蜂鸣器的驱动原理:
无源蜂鸣器与有缘蜂鸣器不同,因其内部不带震荡源,所以其无法向有缘蜂鸣器那样直接用直流信号驱动,这里需要使用 PWM 方波才能驱动其发声。
我们只要控制输入的 PWM 方波,输入不同的 PWM 方波发出的声音就不一样了。而不同频率和占空比的方波发出的声音是不同的,其中频率对音调有影响,占空比对音量大小有影响。所以我们只需产生不同频率和占空比的 PWM 方波去驱动无源蜂鸣器就能让无源蜂鸣器发出不同的音调了。

二、17【FPGA】无源蜂鸣器驱动实验

二、17【FPGA】无源蜂鸣器驱动实验

实战演练一

一、设计规划

1.1 实验目标

驱动无源蜂鸣器进行七个基本音调“哆来咪发梭拉西”的循环鸣叫,每个音节持续0.5s后,进入下一音阶。

2.1 硬件资源

二、17【FPGA】无源蜂鸣器驱动实验

二、程序设计 

2.1 波形图绘制

需要由于0.5s声音变化一次,且7个因为一个周期,所以需要两个中间变量来定义这两个值。

为使电路工作在特定的频率上才会产生相应的声音,时钟频率为50MHz,而声音的频率较低,因此需要对时钟频率进行分频处理。由于电平变化所以可以取周期的一般对电平进行翻转。

二、17【FPGA】无源蜂鸣器驱动实验

2.2 代码编写  

module beep
#(
    parameter  TIME_500MS = 25'd24999999,
               DO = 18'd190839 ,        //262
               RE = 18'd170067 ,        //294
               MI = 18'd151514 ,        //330
               FA = 18'd143265 ,        //349
               SO = 18'd127550 ,        //392
               LA = 18'd113635 ,        //440
               XI = 18'd101214          //494   
)
(
    input wire sys_clk,
    input wire sys_rst_n,
    output reg beep
 );
    reg [24:0] cnt;
    reg [2:0]  cnt_500ms;
    reg [17:0] freq_cnt;
    reg [17:0] freq_data;
    wire [16:0] duty_data;

//系统时钟计数器
    always@(posedge sys_clk or negedge sys_rst_n)
        if(sys_rst_n == 1'b0)
            cnt <= 25'd0;
        else if(cnt == TIME_500MS)
            cnt <= 25'd0;
        else 
            cnt <= cnt + 1'b1;
//0.5s计数器
    always@(posedge sys_clk or negedge sys_rst_n) 
        if(sys_rst_n == 1'b0)
            cnt_500ms <= 3'd0;
        else if((cnt_500ms == 6) && (cnt == TIME_500MS))
            cnt_500ms <= 3'd0;
        else if(cnt == TIME_500MS)
            cnt_500ms <= cnt_500ms + 1'b1;
        else 
            cnt_500ms <= cnt_500ms;
//声调频率计数器,声调的计数是变化的所以不能固定一个值
    always@(posedge sys_clk or negedge sys_rst_n) 
        if(sys_rst_n == 1'b0)
            freq_cnt <= 18'd0;
        else if((freq_cnt == freq_data) || (cnt == TIME_500MS))
            freq_cnt <= 18'd0;
        else
            freq_cnt <= freq_cnt + 1'b1;
            
    always@(posedge sys_clk or negedge sys_rst_n) 
        if(sys_rst_n == 1'b0)    
            freq_data <= DO;
        else case(cnt_500ms)
            3'd0: freq_data <= DO;
            3'd1: freq_data <= RE;
            3'd2: freq_data <= MI;
            3'd3: freq_data <= FA;
            3'd4: freq_data <= SO;
            3'd5: freq_data <= LA;
            3'd6: freq_data <= XI;
            default: freq_data <= DO;
        endcase
//数据左移一位表示乘2,右移一位表示除以2
    assign duty_data = freq_data >> 1'b1 ;
//频率输出
    always@(posedge sys_clk or negedge sys_rst_n) 
        if(sys_rst_n == 1'b0)    
            beep <= 1'b0; 
        else if(freq_cnt == duty_data)
            beep <= ~beep;
        else 
            beep <= beep;            
endmodule

三、逻辑仿真

3.1 仿真代码

`timescale 1ns / 1ps
//
// Company: 追逐者——桥的小作坊
// Create Date: 2022/05/18 16:04:24
// Design Name: 无源蜂鸣器变频驱动
// Module Name: tb_beep
//
module tb_beep();
    reg sys_clk;
    reg sys_rst_n;
    wire beep;
    initial begin
        sys_clk = 1'b1;
        sys_rst_n <= 1'b0;
        #20
        sys_rst_n <= 1'b1;
    end 
    always #10 sys_clk = ~sys_clk;
         
beep
#(
    .TIME_500MS(25'd2499),
    .DO (18'd262),        //262
    .RE (18'd294),        //294
    .MI (18'd330),        //330
    .FA (18'd349),        //349
    .SO (18'd392),        //392
    .LA (18'd440),        //440
    .XI (18'd494)         //494   
)
beep_isnt
(
    .sys_clk  (sys_clk  ),
    .sys_rst_n(sys_rst_n),
    .beep     (beep     )
 );
endmodule

3.2 波形图对比

计数器的计数和跳变都没有问题

二、17【FPGA】无源蜂鸣器驱动实验 频率赋值也没有问题

二、17【FPGA】无源蜂鸣器驱动实验

可以看出蜂鸣器的电平变化也没问题。

四、上板调试 

4.1 引脚约束

二、17【FPGA】无源蜂鸣器驱动实验

4.2 下载到板卡中

生成bit流文件下载文件,如图实验:

FPGA——无源蜂鸣器驱动实验

五、总结 

频率的改变需要通过分频和倍频实现,且需要通过计数器来计算时间并作为其他事件的触发条件。文章来源地址https://www.toymoban.com/news/detail-424345.html

到了这里,关于二、17【FPGA】无源蜂鸣器驱动实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 第二十一篇、基于Arduino uno,控制有源蜂鸣器和无源蜂鸣器发出声音——结果导向

    说明:有源蜂鸣器按照一定的频率报警,无源蜂鸣器则是一直报警,都采用非阻塞方式编写,如果是你想要的,可以接着往下看。 说明:有源蜂鸣器和无源蜂鸣器看上去一样,但是背面不一样,第一张图是有源蜂鸣器,第二张图是无源蜂鸣器。也有三个引脚的,其实都是一样

    2024年02月07日
    浏览(46)
  • 【STM32F103】谁在用蜂鸣器弹奏一曲东风破(无源蜂鸣器&PWM)

    蜂鸣器一般可以分为两种,一种是有源蜂鸣器,另一种是无源蜂鸣器。 有源蜂鸣器中的源是指震荡源,也就是给了电压再给个触发信号就会以固定的频率发出声响。 而无源蜂鸣器内部没有震荡源,我们可以将触发信号的频率传给无源蜂鸣器,这样就可以发出不同音阶的声响

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

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

    2024年02月15日
    浏览(104)
  • 无源蜂鸣器按特定频率发出相对应的音调

    蜂鸣器是什么呢?相信大家在做项目中肯定多多少少都会用到蜂鸣器,蜂鸣器呢是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。比如台式电脑的主机开

    2024年02月02日
    浏览(38)
  • 开源小项目 - 基于无源蜂鸣器实现的音乐播放器

    目录 一、音乐简谱相关知识 1、音符 2、音调 3、识读简谱 1. 找到简谱中C调的音符对应的蜂鸣器频率(确定音调对应的频率) 2. 确定蜂鸣器演奏一拍所需的时间(即确定一个音调对应的节拍数) 3.创建结构体确定一个音符所需的两个属性(音调频率、节拍数) 4.将《两只老虎

    2024年03月10日
    浏览(47)
  • fpga开发——蜂鸣器

    有源蜂鸣器和无源蜂鸣器          无源蜂鸣器利用电磁感应现象,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声,接入直流电只能持续推动振膜而无法产生声音,只能在接通或断开时产生声音。无源蜂鸣器的工作原理与扬声器相同。在使用方波

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

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

    2024年02月06日
    浏览(42)
  • 《FPGA学习》->蜂鸣器播放

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

    2024年02月08日
    浏览(41)
  • 蜂鸣器原理与驱动方式

    目录 一、蜂鸣器简介 二、有源蜂鸣器驱动 三、无源蜂鸣器驱动 频率计算方法 四、蜂鸣器程序实现         蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品

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

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

    2024年02月11日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包