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

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

3天内不再提示

单片机驱动蜂鸣器发声原理

5CTi_cirmall 来源:电路设计技能 2020-09-27 16:10 次阅读

有源蜂鸣器与无源蜂鸣器的区别

这里的“源”不是指电源,而是指震荡源。

内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的。

内部没有震荡源的为无源蜂鸣器,给直流电不能响,需要提供一定频率的脉冲信号才能够有响声,而且声音随着频率的变化而变化。

所以我们要想实现蜂鸣器演奏音乐的话,只能选用无源蜂鸣器。

单片机驱动蜂鸣器发声原理

单片机上面使用的蜂鸣器一般都是无源电磁式的蜂鸣器。它由外壳、振动膜片、磁铁、电磁线圈、及振荡器等组成。

接通电源后,电流通过电磁线圈,致使电磁线圈工作产生磁场,振动膜片在磁铁以及电磁线圈的相互作用下,周期性地振动发出一定频率的声音。

单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要设计一个电流放大的电路,具体实现如下图所示。

有源蜂鸣器和无源蜂鸣器的驱动电路是一样的,都是如上图所示。

有源蜂鸣器,只需要改变Buzzer(PB9)引脚的高低电平即可控制蜂鸣器。

当Buzzer引脚为低电平的时候,三极管导通,蜂鸣器响;

当Buzzer引脚为高电平的时候,三极管截止,蜂鸣器不响。

注意此处使用的蜂鸣器为3.3V的蜂鸣器。

无源蜂鸣器,Buzzer引脚要提供一个脉冲信号才能响。下面封装了一个输入参数为频率的无源蜂鸣器驱动函数。

频率的倒数即是时间,此处计算的是T/2的时间,由于1秒钟是1000000us,所以一半即500000,所以下面的延时时间为:

time = 500000/((u32)frq);

具体实现如下所示:

void Sound(u16 frq){ u32 time; if(frq != 1000) { time = 500000/((u32)frq); BEEP = 0; delay_us(time); BEEP = 1; delay_us(time); }else delay_us(1000);}

当单片机用于演奏歌曲时,只需搞清楚两个概念即可,也就是“音符(音调)”和“节拍”。音调表示一个音符该唱的频率,节拍表示一个音符该唱多长的时间。

有了上面函数,我们即可以驱动无源蜂鸣器按照一定的频率发声了,那么我们如何知道某个音的频率呢?

音符

我们查阅网上资料,可以得到如下音符和频率的对应关系:

音符 频率(Hz)
低1 DO 262
#1 DO# 277
低2 RE 294
#2 RE# 311
低3 MI 330
低4 FA 349
#4 FA# 370
低5 SO 392
#5 SO# 415
低6 LA 440
#6 466
低7 SI 494
中1 DO 523
#1 DO# 554
... ...

由于钢琴的中央C基频约为261.63Hz,唱“DO”。根据国际标准,相邻的半个音(即钢琴相邻键)的基频相差2^(1/12)倍。

经过计算,我们能得到 #1 DO# 的频率为277。

以此类推,我们能够求出表格中每个音对应的频率,大家可以验证一下上面表格中的数据是否有这样的规律。

钢琴一个八度的12个琴键可以表示为如下形式:

DO DO# RE RE# MI FA FA# SO SO# LA LA# SI

其中“#”表示比该音符高半个音的黑键。

按照上面的关系,我们可以得出:升一个八度其频率将翻番。

比如上面表格中的低1 DO和中1 DO的频率就是翻番的。

所以我们想发出低1 DO的音的话,可以调用如下函数:

Sound(262);

节拍

有了音符,也就是知道了这个音怎么发音,那么要想写出一个乐谱,还要知道,这个音发多长时间,这就引出了节拍的概念。

在一张乐谱中,我们经常会看到这样的表达式,如1=C(4/4)、1=G(3/4)... ...等等,这里1=C(4/4)、1=G(3/4)表示乐谱的曲调。

比如:3/4就是乐谱中,以四分音符为节拍,每一小节有三拍。

每一拍的时长是多少秒没有规定,一般在乐谱的前面会写到类似于:

表示该曲子每分钟要弹奏出96个四分音符。

我们一般以四分音符为一拍,一般说来,如果乐曲没有特殊说明,一拍的时长大约为400-500ms。

上图中,其中 1、2为一拍,3、4、5为一拍,6为一拍共三拍。

1、2的时长为四分音符的一半,即为8分音符长;

3、4的时长为八分音符的一半,即为十六分音符长;

5的时长为四分音符的一半,即为八分音符长;

6的时长为四分音符长。

由上面的关系,我们就可以随便找到一个简谱,如果1拍为0.4秒,那么1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。然后按照上面的关系写出程序中的乐谱。

精准延时的实现,可以参考今天的另外一篇网文《STM32中精确延时函数的实现》,在我公众号中也可以找到。

比如在我老婆的协助之下,写出了《你笑起来真好看》的乐谱如下:

整个乐谱转译加调整,一共耗时一个半小时,看在如此辛苦的份上,大家赏个三连吧。

u8 music[]={ 5,10,10,5,5,9,9,16,8,8,8,9,10,5,5,16, //想去远方的山川,想去海边看海鸥 6,8,8,6,5,10,10,16,9,8,8,6,9,16, //不管风雨有多少,有你就足够 5,10,10,5,5,9,9,16,8,8,8,6,5,10,10,16, //喜欢看你的嘴角,喜欢看你的眉梢 6,11,11,6,5,10,10,16,9,8,8,6,8,16, //白云挂在那蓝天,像你的微笑 5,12,5,5,12,5,9,16,8,6,8,8,8,10,12,16, //你笑起来真好看,像春天的花一样! 8,6,8,8,8,13,12,10,9,8,6,8,8,10,9,16, //把所有的烦恼,所有的忧愁,统统都吹散 5,12,5,5,12,5,9,16,8,6,8,8,13,12,16, //你笑起来真好看,像夏天的阳光 8,8,8,13,12,10,9,8,6,8,8,9,8,16, //整个世界全部的时光,美得像画卷。 };

上面数组的数字是MusicalNote数组的索引,进而可以求得该音符的频率:

// 低7 1 2 3 4 5 6 7 中1 中2 中3 中4 中5 中6 中7 高1 不发音 uc16 MusicalNote[] = {247,262,294,330,349,392,440,494,523,587,659,698,784,880,988,1046,1000};

u8 time[] = { 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, //想去远方的山川,想去海边看海鸥 4,4,4,4,4,4,4,4,4,4,4,4,8,4, //不管风雨有多少,有你就足够 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, //喜欢看你的嘴角,喜欢看你的眉梢 4,4,4,4,4,4,4,4,4,4,4,4,8,4, //白云挂在那蓝天,像你的微笑 4,4,2,2,4,4,4,4,4,4,2,2,4,4,8,4, //你笑起来真好看,像春天的花一样! 4,4,2,2,4,4,4,4,4,4,4,4,4,4,8,4, //把所有的烦恼,所有的忧愁,统统都吹散 4,4,2,2,4,4,4,4,4,4,4,4,4,8,4, //你笑起来真好看,像夏天的阳光 4,4,4,4,4,4,4,4,4,4,4,4,8,4, //整个世界全部的时光,美得像画卷。 };

数组time中的数字代表music数组中每个音的节拍(响的时间),其中4代表一个四分音符,即一拍,本程序中为400ms,8代表一个二分音符,代表两拍,即800ms;2代表一个八分音符,1/2拍,即耗时200ms。

这次的应用明显有一个问题,就是整个播放音乐的过程中是一个死循环,效率很低,播放过程中很难打断。

由于今天重点介绍的是蜂鸣器的应用,所以先这样,下次咱们再换一种实现方式。

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

    关注

    6032

    文章

    44513

    浏览量

    632817
  • 频率
    +关注

    关注

    4

    文章

    1438

    浏览量

    59146
  • 蜂鸣器
    +关注

    关注

    12

    文章

    889

    浏览量

    45860

原文标题:蜂鸣器演奏音乐“你笑起来真好看”

文章出处:【微信号:cirmall,微信公众号:电路设计技能】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机的中断机制

    单片机的中断机制是一种重要的处理方式,它允许单片机在执行主程序的过程中,能够暂停当前任务,转而处理外部或内部紧急事件。这种机制极大地提高了系统的响应速度和处理能力,使得单片机在各种应用领域中得到广泛应用。以下是对
    的头像 发表于 10-17 18:03 346次阅读

    51单片机驱动

    电子发烧友网站提供《51单片机驱动.exe》资料免费下载
    发表于 09-20 11:46 3次下载

    蜂鸣器电路电阻的作用是什么

    蜂鸣器电路中的电阻起着至关重要的作用。 引言 蜂鸣器是一种广泛应用于电子设备中的发声元件,它可以将电能转换为声音。蜂鸣器电路是实现蜂鸣器
    的头像 发表于 08-09 10:30 581次阅读

    蜂鸣器的功能和作用有哪些

    以下是关于蜂鸣器的介绍: 蜂鸣器简介 蜂鸣器是一种电子设备,用于发出声音信号。它通常由一个振荡器、一个放大器和一个发声元件组成。蜂鸣器广泛应
    的头像 发表于 08-09 10:13 586次阅读

    有源蜂鸣器与无源蜂鸣器发声原理是什么

    有源蜂鸣器与无源蜂鸣器是两种常见的蜂鸣器类型,它们在发声原理上存在一些差异。以下是对这两种蜂鸣器发声
    的头像 发表于 08-09 10:04 938次阅读

    蜂鸣器和喇叭的区别

    蜂鸣器和喇叭作为电子发声设备,在多个方面存在显著差异。以下将从工作原理、发声特性、应用场景、驱动方式及成本等方面对两者进行详细比较。
    的头像 发表于 08-08 17:39 2361次阅读

    第二讲:单片机STC89C52+RA8889驱动控制彩屏 代码移植介绍

    介绍51单片机如何移植RA8889的代码进行彩屏驱动与控制
    的头像 发表于 06-04 10:36 822次阅读
    第二讲:<b class='flag-5'>单片机</b>STC89C52+RA8889<b class='flag-5'>驱动</b>控制彩屏 代码移植介绍

    玩转嵌入式单片机,必会的50个电路(收藏)

    单片机 电源 声音模块 收音 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收
    的头像 发表于 03-28 17:25 1149次阅读
    玩转嵌入式<b class='flag-5'>单片机</b>,必会的50个电路(收藏)

    如何系统、科学地自学单片机

    很多初学者都会面临这个问题,我想学习单片机、我也想学好单片机、我也想系统地学习单片机,但是单片机涉及到的学科多且杂根本不是三天两天就能学完的,很多人都逃脱不了从入门到放弃的怪圈?那么我
    的头像 发表于 03-28 08:03 996次阅读
    如何系统、科学地自学<b class='flag-5'>单片机</b>?

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

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

    单片机的最小系统由什么组成 单片机的最小系统包括哪些

    单片机(Microcontroller Unit,MCU)的最小系统包括以下几个主要组成部分: 单片机芯片:单片机是整个最小系统的核心部分,它集成了中央处理器(Central Processing
    的头像 发表于 02-02 11:27 9866次阅读

    为什么单片机I/O口驱动MOS管时,不是直接驱动,而是经过三极管

    为什么单片机I/O口驱动MOS管时,不是直接驱动,而是经过三极管 单片机I/O口驱动MOS管时,通常会通过三极管进行中间
    的头像 发表于 01-16 11:14 3137次阅读

    蜂鸣器工作发声原理图和电路图

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

    单片机boot脚干嘛的

    单片机boot脚是单片机的引导脚,用于控制单片机的启动和引导过程。在单片机系统中,boot脚的作用十分重要,它影响着整个单片机的工作状态和功
    的头像 发表于 12-19 09:47 9529次阅读

    单片机如何检测电流?

    单片机如何检测电流? 随着科技的发展,单片机技术在电子设备中得到了广泛应用。其中,电流检测是单片机的一个重要功能之一。本文将详细介绍单片机电流检测技术的原理与应用,并着重探讨了A/D转
    的头像 发表于 12-07 15:37 3668次阅读