0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的音乐蜂鸣器设计

电子工程师 来源:FPGA设计论坛 作者:FPGA设计论坛 2020-11-11 09:48 次阅读

基于FPGA的音乐蜂鸣器设计

设计背景

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器电子产品中作发声器件。在一般设计中,可利用蜂鸣器检测有些按键是否按下,或者有些功能是否正常等,当然如果足够浪漫,也可以让蜂鸣器演奏音乐。


设计原理

本设计使用的是无源蜂鸣器,也可称为声响器,原理电路图如下所示。它没有内部驱动电路,无源蜂鸣器工作的理想信号为方波,如果给直流,蜂鸣器是不响应的,因为磁路恒定,钼片不能震动发音。根据电路图可知,由于 FPGA 的驱动能力不够,这里增加了一个三极管来驱动这个无源蜂鸣器。在驱动时,只需要向蜂鸣器发送一定频率的方波,就可以使蜂鸣器发声。那么应该发送怎样的频率呢?具体则可参考下表(音节频率表)

乐曲能连续演奏所需要的两个基本数据是:组成乐曲的每个音符的频率值(音调)和每个音符持续的时间(音长)。因此只要控制 FPGA输出到蜂鸣器的激励信号频率的高低和持续时间,就可以使蜂鸣器发出连续的乐曲声。在本设计中,由于至芯开发板的晶振为 50MHz,所以我们需要一个一个分频模块(PLL)产生一个较低的基准频率(1MHz)。还需要一个空间储存乐谱,由于乐谱是固定的不需要更改,所以我们选择 ROMIP 核进行存储。基准频率 1MHz 可分频得到所有不同频率的信号。最大的分频比为1_000_000/262/2。既然是音乐,那么就需要节拍,一般采用 4 拍,即音长为 0.25s,所以还需设计一个模块,控制每 0.25s,ROM 地址加 1,。如果需要发送一个低音 1 并维持 1 秒,则只需要在 ROM 的连续四个地址中写入低音 1 的对应信息即可。在设计中为了方便在 ROM 中储存数据,这里数据格式为 8’hAB,其中 A 暂时为三个值 1、2、4,分别表示低音、中音、高音。B 暂时为七个值 1、2、3、4、5、6、7。比如要产生一个低音 1,只需在 ROM中存储 8’h11,如要产生一个高音 7,只需在 ROM中存储 8’h47,以此类推即可。这时,就需要一个解码模块,将 ROM 中的数据还原成音乐发生器所需要的数据。


设计架构图

根据上述的分析,得到如下的架构图

本设计包括 6 个模块,PLL 模块把 50MHz 的时钟信号降到 1MHz,rom 模块存储音乐数据,time_counter 是一个计数模块,产生节拍,每到 0.25s,输出的 time_finsh 变为一个周期的高电平。并发送给addr_gen 模块,产生 addr,让 rom 输出下一个地址的数据。rom 输出的数据 rom_data 输入到 decode 解码模块,将解码后的数据music_data 输入到 music_gen 模块,通过计数器,如果计数器小于music_data 的值,则 beep 保持不变,否则,beep 取反,并且计数器

清 1,从而产生特定的方波频率。


设计代码

time_counter 模块代码如下:

addr_gen 模块代码如下:

decode 解码模块代码如下:

music_gen 模块代码如下:

beep 顶层模块代码如下:

仿真

仿真结果如下:

由仿真图可知:当 rom 输出 rom_data 为 8’h16 时,代表输出低音6,解码后结果 music_data 为 1136,输出的 beep 频率为 440Hz,与实际低音 6 的音节频率表的值一致;当 rom 输出 rom_data 为 8’h22时,代表输出中音 2,解码后结果 music_data 为 851,输出的 beep频率为 563Hz,与实际中音 2 的音节频率表的值相差 24Hz,存在一定的误差,但是不影响乐曲的播放。如果想提高 beep 频率的精度,减小误差,则可以将 1MHz 的基准频率提高。

责任编辑:lq


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21309

    浏览量

    593129
  • ROM
    ROM
    +关注

    关注

    4

    文章

    524

    浏览量

    84812
  • 蜂鸣器
    +关注

    关注

    12

    文章

    850

    浏览量

    45300

原文标题:FPGA入门课程 音乐蜂鸣器设计

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    背景音乐和蓝牙进来的音乐,如何共享一个功放和喇叭?

    ,主控芯片(比如FPGA)不带DAC,没法将背景音乐芯片和蓝牙的输出DAC在主控芯片内部进行切换。 如果背景音乐芯片和蓝牙的输出PWM,似乎主控芯片内部可以进行切换,但是功率不够驱动喇叭,也没法通过功放进行功率放大,我的理解功放
    发表于 04-12 21:15

    蜂鸣器的发声原理 蜂鸣器电路图分享

    蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式
    的头像 发表于 02-20 15:07 3498次阅读
    <b class='flag-5'>蜂鸣器</b>的发声原理 <b class='flag-5'>蜂鸣器</b>电路图分享

    蜂鸣器的工作原理 蜂鸣器有正负极吗?

    蜂鸣器的工作原理 蜂鸣器有正负极吗? 蜂鸣器是一种能够发出连续鸣叫声的电子元件,通常用于警报系统、电子设备等场合。蜂鸣器具有很多种类,比如压电式蜂鸣
    的头像 发表于 02-19 14:08 589次阅读

    蜂鸣器是干什么用的呢

    蜂鸣器是一种常见的电子音响器件,广泛应用于各种电子设备中。它通过产生连续或间断的声音信号,起到提示、警报、报警、提醒等作用。本文将详细介绍蜂鸣器的原理、分类、工作方式以及在各个领域中的应用。全文分为
    的头像 发表于 12-18 15:18 1504次阅读

    基于Arduino的音乐创作系统设计

    这是一款简易的音乐创作系统。使用 Arduino 驱动无源蜂鸣器和一排 LED 让音乐起舞。它巧妙的使用了红外遥控器作为琴键,通过编辑「乐谱」程序,来记录和创作自己的音乐
    的头像 发表于 11-30 09:10 547次阅读
    基于Arduino的<b class='flag-5'>音乐</b>创作系统设计

    蜂鸣器的介绍 如何控制蜂鸣器的工作?

    单片机开发板上蜂鸣器分为两种:一种称之为有源蜂鸣器,另一种是无源蜂鸣器
    的头像 发表于 11-10 11:34 1263次阅读
    <b class='flag-5'>蜂鸣器</b>的介绍 如何控制<b class='flag-5'>蜂鸣器</b>的工作?

    无源蜂鸣器如何控制发声?

    有源蜂鸣器接通电源即可发声,无源蜂鸣器如何控制呢。能否用无源蜂鸣器播放一首音乐
    发表于 11-09 07:39

    基于FPGA蜂鸣器设计

    驱动无源蜂鸣器进行七个基本音调“哆来咪发梭拉西”的循环鸣叫,每个音阶持续鸣叫0.5s后鸣叫下一个音阶。
    的头像 发表于 06-27 18:24 1311次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>蜂鸣器</b>设计

    制作蜂鸣器报警电路

    蜂鸣器
    YS YYDS
    发布于 :2023年06月27日 17:20:38

    单片机控制蜂鸣器音乐资料分享

    单片机控制蜂鸣器音乐
    发表于 06-05 09:31 40次下载

    基于51单片机的蜂鸣器播放音乐源代码

    基于51单片机的蜂鸣器播放音乐例程源代码
    发表于 05-12 16:16 44次下载

    CH32V103基础教程95-PWM驱动蜂鸣器

    本章教程主要在第九十三章的基础上运行,用以驱动蜂鸣器播放音乐。 1、TIM简介及相关函数介绍关于TIM,在前面章节已经进行过介绍,在此不再赘述。关于PWM驱动蜂鸣器播放音乐原理,通过改
    发表于 05-11 16:15

    基于FPGA音乐蜂鸣器设计案例解析

    蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
    发表于 05-09 09:50 582次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>音乐</b><b class='flag-5'>蜂鸣器</b>设计案例解析

    【正点原子STM32战舰V4开发板免费试用】利用开发板上的蜂鸣器播放音乐

    对于接下来的项目要做什么,我仔细看了一下开发板,突然眼光定在了蜂鸣器上,看来我可以在蜂鸣器上做一些文章。我可以让蜂鸣器发出不同的频率和持续时间不同的声音,这样是不是就会发出类似于歌曲的声音呢
    发表于 05-01 19:59

    蜂鸣器和继电器的驱动

    比赛单片机自带的蜂鸣器为有源蜂鸣器(内置震荡源),也就是说给N_BUZZ一个低电平,蜂鸣器就会发出声音了。 N_BUZZ = 0; 我们再说一下无源蜂鸣器,无源
    发表于 04-27 10:25 0次下载
    <b class='flag-5'>蜂鸣器</b>和继电器的驱动