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

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

3天内不再提示

蜂鸣器驱动原理与演奏音乐的2种方法

GReq_mcu168 2017-12-25 10:51 次阅读

电磁式蜂鸣器驱动原理:

蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来驱动振动膜发声的。因此需要一定的电流才能驱动它,而单片机I/O引脚输出的电压较小。单片机输出的TTLK电平基本驱动不了蜂鸣器,因需要增加一个放大电路。这里用三极管作为放大电路。下面是原理图:

我这里的J8端是跟芯片的P1^5端口相连,当P1^5输出高电平时,三极管截止,蜂鸣器不发声,反之,输出低电平时,蜂鸣器发声。

而要驱动蜂鸣器能像唱歌一样的发声,其实只要使蜂鸣器发出频率和持续时间不同的声音即可。周期等于频率的倒数,所以可以通过频率知道这段的时间,所以可以通过调用延时函数或者定时器实现,同样的发声的持续时间也可以通过延时函数实现,所以让蜂鸣器唱歌最关键的就是知道要延长多少时间!

用单片机来演奏音乐,,只要搞清楚两个概念就好了,分别是“音调”和“节拍”。

音调表示一个音符该唱的频率。

节拍表示一个音符该唱多少时间。

这里有两种方法来实现该功能:

(1)查表法

这个方法复杂的地方在于你要找出每个音符相对应的频率(根据音符;频率对照表找),然后根据公式转换为相应的时间(取半周期),然后通过延时函数实现。最后编程实现。

整个流程是这样的:

首先根据生日快乐歌的乐谱将各个音调转换为相应的频率。

比如:左边是生日快乐歌乐谱,右边是音符频率转换表

蜂鸣器驱动原理与演奏音乐的2种方法      

这里先来了解一下乐谱的一点知识,左边乐谱数字下面有点说明是低音,没点说明就是普通的,数字上面有点就是高音,而5的低音就是4.5,高音是5.5,其他音符也是相应的道理。

乐谱的左上方有写“1=F”,而一般的乐谱都是C调,就是“1=C”,注意,乐谱里面的1234567(哆啦咪发索拉西多)相对应的不是ABCDEFG而是CDEFGAB!所以这里规定是F调的话,

那么就说明2就要唱G,3要唱A,……7要唱E,所以这里的低音5对应的应该是低音的1.5!!!!就是所谓的要相应的左移或者右移。如果还是不明白的话,看下面:

1原本对应的应该是C,4原本应该对应的是F,对吧?

然后现在1对应的变成F了,就相当于对应了4,对吧?

那么1.5对应的是什么?

4.5咯!

那2对应的是什么?

5呗!

那么好了咯,低音5是4.5,是不是就是等于1.5?所以半周期就是1803µs。

至于为什么是根据半周期算,那是因为单片机是通过循环对蜂鸣器接的端口置位,复位来使发声的,所以就是半周期。因为我用的是无源的蜂鸣器,有源的蜂鸣器就是全周期了。

然后就是按照上述道理,一个个转换,并用延时函数实现,因为每个音符的转换频率都不一样,要么使用多个延时函数一个个实现准确的音调频率,但是这样太烦,而且单片机本身就不是专门

弄来唱歌的。我们不应该为难他们,所以自己将就一下就算了。所以延时函数为了适应每个音调都有差不多的频率,这个就靠自己计算了,而且不同的歌那个值还不一样,所以这就是这个问题

的难点。

接下来的就是那个唱多久的问题,一般的歌曲默认的一个节拍是400ms-500ms。

同样的看乐谱左上方,它有写“3/4”,意思是以四分音符为节拍,每一个小结有三拍。

而在每个数字下面有一条横线,那时间就是那个节拍的时间乘上0.5,有两条就乘上0.25,三条就乘以0.125。。。音乐的基本知识就别为难我了,我是个音乐白痴。。所以我就这么理解了。。

哈哈哈哈哈~

而至于节拍转换为频率,也是有相应的表的,见下:

蜂鸣器驱动原理与演奏音乐的2种方法

同样的也是通过延时函数来实现,当然也是会有误差的。

编程思想的话挺简单的,就是先将音符频率和所要唱的时间转换好,放到两个数组里面。然后在主程序里面,通过延时达到相应频率,唱完一遍,停一会,接着唱就好了。

(2)用工具转码并用计时器实现

这个代码明显的来自网络。哈哈。原谅我,这个我就不说明了。哎,还是再说一下步骤吧。。(具体我也不是很懂,不同这个真的很通用,所以还是放到笔记上了。。)

一开始就用MUSICENCODE这个将乐谱转换为相应的代码,然后根据音调和音区生成一个新的频率表。所谓的音区就是降调,平调,升调,这个可以根据转换的代码相应位得知。

再计算歌曲的长度,用while就好,用来设置一首歌唱完之后再来一遍还是执行其他动作。

再取出数组数据的奇数位,那个就是表示音长的。然后根据这个计算一个音调唱多久,并将初值赋给定时器。关于定时器的使用,之后会放出。

一个音调唱多久最好的方法就是设置一个基本时长,因为这个例子中,一个四分节拍大概是400ms-500ms,然后有的是1/4拍(100ms),有的2/4拍(200ms),所以就设置一个

50ms的定时器,调用的时候设置一下参数就好了。这样做的好处就是方便。

接着调用函数让它唱歌就好

比较一下这两个方法的优缺点,第一种方法转码太复杂,不过声音很好,分辨率高。第二种方法通用!不同的歌,你只要用工具转一下码,然后重新用个数组保存这些值,然后再通过

Play(乐曲名,调号,升降八度,演奏速度)这个函数调用就好了,不过用这种方法实现的效果音质不是很理想。其实最主要的是这种方法对音乐知识不理解也没关系,而第一种方法还是

需要一定的知识来获得正确的音调频率和音长。


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

    关注

    5992

    文章

    43909

    浏览量

    619652
  • 蜂鸣器
    +关注

    关注

    12

    文章

    848

    浏览量

    45212

原文标题:单片机:蜂鸣器音乐播放实验

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    利用蜂鸣器和单片机演奏简单的音乐电路设计

    利用蜂鸣器和单片机演奏简单的音乐,包含源程序代码。
    发表于 04-03 12:59 1.1w次阅读
    利用<b class='flag-5'>蜂鸣器</b>和单片机<b class='flag-5'>演奏</b>简单的<b class='flag-5'>音乐</b>电路设计

    音乐的播放(蜂鸣器);

    单片机控制技术+显示输出方法研究+音乐原理+蜂鸣器驱动原理1)实现单音音音乐的播放(蜂鸣器);
    发表于 06-21 15:50

    各位,问一个问题,用蜂鸣器演奏流行音乐曲子,做成产品卖的话,算侵权吗?

    各位,问一个问题,用蜂鸣器演奏流行音乐曲子,做成产品卖的话,算侵权吗?
    发表于 01-22 11:09

    按键控制无源蜂鸣器发出不同声音来演奏音乐

    cortex-A8用不同按键控制无源蜂鸣器发出不同声音来演奏音乐的程序
    发表于 06-05 21:36

    如何让无刷电机演奏音乐

    我知道四轴上的无刷电机可以发出声音,,有没有哪位知道这个声音的原理???知道了这个原理理论上我就能让电机演奏音乐
    发表于 03-14 20:39

    如何用步进电机演奏音乐

    如何用步进电机演奏音乐
    发表于 11-19 06:17

    如何去实现一基于51单片机的音乐盒设计

    一.硬件方案本设计以51单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用C语言进行程序设计。通过控制单片机内部的定时器来产生不同频率的方波,驱动蜂鸣器发出不同音调的音乐,再利用
    发表于 11-19 06:07

    通过单片机演奏音乐

    /************************************************************************[文件名]C51音乐程序(八月桂花)[功能] 通过单片机演奏音乐 接线说明:参考
    发表于 11-30 07:08

    蜂鸣器按照驱动方式可分为哪几种

    信号它才会响。比较而已,有源蜂鸣器内部多一个震荡电路。驱动发音也教为简单;无源蜂鸣器的价格较低,声音频率可以控制。2、以普中科技开发板为例原理图:示例代码如下://
    发表于 01-25 07:08

    如何利用Arduino与蜂鸣器实现音乐演奏

    如何利用Arduino与蜂鸣器实现音乐演奏呢?其程序代码该怎样去实现呢?
    发表于 02-14 07:22

    音乐演奏器设计

    音乐演奏器设计 一、任务设计并制作一个可以演奏乐曲的远程音乐演奏器,基本电路框图如图。
    发表于 08-02 08:35 1524次阅读
    <b class='flag-5'>音乐演奏</b>器设计

    MCU控制蜂鸣器演奏音乐小程序

    程序功能:MCU控制蜂鸣器演奏歌曲《祝你平安》 ,拨码开关设置:将BUZZER位拨至ON,其余位拨至OFF,测试说明:聆听蜂鸣器“唱出”的乐曲 ,既然是演奏乐曲对于一个音符应该包括两个
    的头像 发表于 04-20 09:17 6634次阅读

    如何使用单片机进行蜂鸣器演奏音乐的程序资料免费下载

    本文档的主要内容详细介绍的是如何使用单片机进行蜂鸣器演奏音乐的程序资料免费下载。
    发表于 05-05 08:00 6次下载
    如何使用单片机进行<b class='flag-5'>蜂鸣器</b><b class='flag-5'>演奏</b><b class='flag-5'>音乐</b>的程序资料免费下载

    单片机音乐演奏(STC89C51)

    /************************************************************************ [文件名] C51音乐程序(八月桂花) [功能] 通过单片机演奏音乐
    发表于 11-21 21:06 9次下载
    单片机<b class='flag-5'>音乐演奏</b>(STC89C51)

    利用蜂鸣器演奏简单的乐谱

    那么,今天分享的是利用蜂鸣器演奏一些简单的乐谱。
    的头像 发表于 05-26 16:04 1364次阅读
    利用<b class='flag-5'>蜂鸣器</b><b class='flag-5'>演奏</b>简单的乐谱