单片机学习笔记---蜂鸣器工作原理

目录

蜂鸣器介绍

蜂鸣器的驱动方式

ULN2003D芯片工作原理

实战预备知识:基础乐理

音名的分组

全音和半音的关系

音高的表示

五线谱中的符号定义

简谱上的符号定义

C调音符与频率对照表

相关计算


蜂鸣器介绍

蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号

蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器

有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定。

无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。

不同的工程师画的蜂鸣器的符号不一样,比如上图中间的那张图的样子,

还有下图这种符号也表示蜂鸣器

或者直接画成一个喇叭的形式

它的原理图

PS:BZ是一个网络编号

蜂鸣器也分正负极,像下图中标了一个+极符号的这边引脚就是蜂鸣器的正极。如果引脚没有被剪过的话,长的一边为正极。

蜂鸣器的驱动方式

有源蜂鸣器的驱动方式

一般,有源蜂鸣器一般通电就可以响了。它的正极接到电源的正极,负极接地就额可以响了。

无源蜂鸣器的驱动方式

我们的开发板上是无源蜂鸣器,如果将无源蜂鸣器的正极接到电源的正极,负极接到IO口上,然后IO不断地输出一个频率,不断地震荡,根据这个频率,蜂鸣器也可以发声,并且频率可以由震荡去改变。

以上是两种蜂鸣器的一般驱动方式,但由于LED供电比较小,所以我们一般加一个驱动电路,最常见的是加一个三极管开关驱动电路

三极管分为NPN和PNP两种

NPN型的三极管开关是高电平导通的三极管开关

它相当于一个正常开关的外加一只手来控制这个开关的闭合,如果给这只手一个高电平,那么它就帮我们把这个开关闭合,如果给它一个低电平,它就帮我们把开关打开。

手的那端还接了一个限流电阻,它可以减少控制信号的电流,就是相当于把控制信号的驱动能力这一指标给弱化了。

实际的驱动来源于VCC这里

这个VCC给蜂鸣器提供功率信号,可以省下单片机的驱动能力。

同理,PNP型三极管开关也是一样的工作方式,但是它由低电平导通的。

这个限流电阻只需要能保证三极管开关能够饱和就可以了,1K欧或者10K欧的这个范围都行。

还有一个集成电路驱动的方式用的比较少

很少见到这种驱动方式,但是我们的开放板就是这种驱动方式。单片机的IO口不能直接驱动蜂鸣器,所以就过一个芯片,这个芯片叫做ULN2003(驱动芯片),它的原理图就在步进机的这里:

它和蜂鸣器的连接是这样:

ULN2003D芯片工作原理

那ULN2003D这个芯片是怎么工作的呢?我们要看一下芯片手册的介绍

其中这个达林顿晶体管也是一种三极管开关

一般也可以叫达林顿管为复合管,它可以增大驱动能力。

它是NPN型的三极管开关

然后再看芯片的逻辑框图(虽然图这样话的,但其实它是由达林顿管组成的)

中间那一列是非门(取反),如果输入为0,则输出1,输入1,则输出为0。

如果将它其中一个通路接上负载(比如说蜂鸣器),那么非门的输入端为1时,输出为0,则蜂鸣器就会响。

如果非门的输入端为0,则输出端为1,则这个芯片没有驱动能力,驱动无效,即使是别接了一个接了地的负载也不可以。

这一排LED其实是用来测试的

比如,可以来看一下它的应用电路,如果非门的输入端没有电平,这时,芯片的输出端接上一排负载(LED),当按下这个lamp test灯测试开关之后,那么就相当于芯片内部的LED的阴极接上了低电平0,则外部的LED就导通了,它就会亮。

然后我们51单片机是TTL电平,5V代表高电平,0V代表低电平

以上就把蜂鸣器的驱动原理讲完了。

总结一句话就是,我们只需要控制P15引脚输出1或者0就能控制蜂鸣器是否有电流,然后我们是无源蜂鸣器,我们就需要控制P15产生一个振动频率,蜂鸣器就跟着震动频率发声了。

PS:我们的单片机的设计不太合理,但是自己设计电路的时候,不能让无源蜂鸣器始终充电,很容易烧毁蜂鸣器

实战预备知识:基础乐理

接下来我们开始认识一下钢琴和乐谱,因为我们要用蜂鸣器发出有规律的音乐旋律。

由于我也不是学音乐的专业人士,我也是在网上现学了一下,我会把自己认为解释的好的文章的链接贴出来,大家可以直接点击查看,一定要稍微大概了解一下!

音名的分组

分组如图所示:

更详细的解释可以看这篇文章

链接:音名的分组 - 新芭网 (sin80.com)

全音和半音的关系

官方解释: 相邻的两个音之间,最小的距离叫半音。 钢琴上两个紧挨着的音,就是半音。两个半音的距离构成了一个全音。

更详细的解释可以看这篇文章

链接:3分钟了解钢琴乐理里的全音和半音 - 知乎 (zhihu.com)

音高的表示

如c1和c2相差8度,不同组之间是8度的关系

白键的音:以中央C为分界线,它的左边是降音,右边的是升音,数字头上一个点就是升一个8度,数字底下一个点就是降一个8度,两点就降两个8度

黑键的音:就要用到#(升音)和b(降音)符号,如果是#1就是1升高半音(往右边移一个键),如果是b1就是1降低半音(往左边移一个键)

然后弹钢琴的时候主要是按的音高、按的时长时值)就可以弹出音乐来。

时值就是比如下图中的-符号,表示这个5的音占了两个拍子。

五线谱中的符号定义

再来看看五线谱中的符号定义

一般我们以四分音符为时间基准,这个四分音符可以是100ms也可以是200ms。

比如四分音符是500ms,那么二分音符就是它的两倍,也就是1000ms(1s),全音符就是2000ms(2s)

八分音符就是250ms,十六分音符就是150ms.....

这就跟我们的二进制很像。

简谱上的符号定义

再来看一下简谱上的符号定义

下图中的这符号1=D是调号,4/4是拍号

4/4是拍号,总的意思是以四分音符为一拍,每小节为四拍。

附点表示这个音符延长为原来的二分之一,比如原来这个音符是500ms,加了这个附点之后就变成500ms加上原来的一半=500ms+250ms=750ms。

每一小节的总时间是一样的,都是4*500ms=2000ms=2s

然后还要注意弹的时候的一些细节:

如果到这里还是看不懂乐理的话,可以到某站搜索一下基础乐理,看看基础的解释。

C调音符与频率对照表

有了前面的乐理基础,我们想用蜂鸣器模拟音乐的旋律的话还需要这个表:

这个表只是部分音和频率

表上说的C调就是对应我们前面说的这个D调,只不过我们上表是C调

C调简单说就是全部弹白色的钢琴键,其他调就会出现要弹黑键的情况

其中这个对应中央C键

这张表涵盖了钢琴上的这些键

一组中白色的键和黑色的键一共是12个键,正好对应表中的一列

那么我们就是根据表中的频率值去控制我们的定时器产生相应频率的计时,有了频率就有了计时频率、计时周期,有了周期计时然后就控制中断,再去控制IO的翻转,就可以控制我们的频率。

表上的这些频率的关系成一个平滑的曲线关系

我们以低音6为基准频率,其他频率都是以它为基准做一个倍数的关系

这一个a到下一个a是两倍的关系

一组中的12个键的频率是以等比数列进行平分的,也叫做12平分率

比如这组键的频率比都是1.06,所以是等比数列关系

那么这个a到它自己右边的键的频率是2的1/12次方,比如277=262*2^1/12

相关计算

因为我们是通过频率来产生对应的音符的,但是单片机的定时器是用周期来计时的,所以要将频率转换成周期。

定时器加1的时间就是1微秒,也就是一个机器周期(晶振为12兆),有了这个周期我们翻转IO口就可以控制频率。

重装载值=65536-周期/2(us)

以下是计算好的结果:

音符

频率(Hz)

周期(us)

周期/2(us)

取整

重装载值

索引

1

262

3816.793893

1908.396947

1908

63628

1

1#

277

3610.108303

1805.054152

1805

63731

2

2

294

3401.360544

1700.680272

1701

63835

3

2#

311

3215.434084

1607.717042

1608

63928

4

3

330

3030.30303

1515.151515

1515

64021

5

4

349

2865.329513

1432.664756

1433

64103

6

4#

370

2702.702703

1351.351351

1351

64185

7

5

392

2551.020408

1275.510204

1276

64260

8

5#

415

2409.638554

1204.819277

1205

64331

9

6

440

2272.727273

1136.363636

1136

64400

10

6#

466

2145.922747

1072.961373

1073

64463

11

7

496

2016.129032

1008.064516

1008

64528

12

1

523

1912.045889

956.0229446

956

64580

13

1#

554

1805.054152

902.5270758

903

64633

14

2

587

1703.577513

851.7887564

852

64684

15

2#

622

1607.717042

803.8585209

804

64732

16

3

659

1517.450683

758.7253414

759

64777

17

4

698

1432.664756

716.3323782

716

64820

18

4#

740

1351.351351

675.6756757

676

64860

19

5

784

1275.510204

637.755102

638

64898

20

5#

831

1203.369434

601.6847172

602

64934

21

6

880

1136.363636

568.1818182

568

64968

22

6#

932

1072.961373

536.4806867

536

65000

23

7

988

1012.145749

506.0728745

506

65030

24

1

1046

956.0229446

478.0114723

478

65058

25

1#

1109

901.7132552

450.8566276

451

65085

26

2

1175

851.0638298

425.5319149

426

65110

27

2#

1245

803.2128514

401.6064257

402

65134

28

3

1318

758.7253414

379.3626707

379

65157

29

4

1397

715.8196135

357.9098067

358

65178

30

4#

1480

675.6756757

337.8378378

338

65198

31

5

1568

637.755102

318.877551

319

65217

32

5#

1661

602.0469597

301.0234798

301

65235

33

6

1760

568.1818182

284.0909091

284

65252

34

6#

1865

536.1930295

268.0965147

268

65268

35

7

1976

506.0728745

253.0364372

253

65283

36

下一节开始代码演示!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/380806.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBootStarter】自定义全局加解密组件

【SpringBootStarter】 目的 了解SpringBoot Starter相关概念以及开发流程实现自定义SpringBoot Starter(全局加解密)了解测试流程优化 最终引用的效果&#xff1a; <dependency><groupId>com.xbhog</groupId><artifactId>globalValidation-spring…

2.7日学习打卡----初学RabbitMQ(二)

2.7日学习打卡 JMS 由于MQ产品很多&#xff0c;操作方式各有不同&#xff0c;于是JAVA提供了一套规则 ——JMS&#xff0c;用于操作消息中间件。JMS即Java消息服务 &#xff08;JavaMessage Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面 向消息中间件的…

数据结构-->线性表-->单链表

链表的定义 链表&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 与顺序表不同的是&#xff0c;链表里的每节都是独立申请下来的空间&#xff0c;我们称之为“节点、结点”。 节点的组成主要由…

横扫Spark之 - 22个常见的转换算子

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 1. map()2. flatMap()3. filter()4. mapPartitions()5. mapPartitionsWithIndex()6. groupBy()7. distinct()8. coalesce()9. repartition()10. sortBy()11. intersection()12.union()13.…

5G技术对物联网的影响

随着数字化转型的加速&#xff0c;5G技术作为通信领域的一次重大革新&#xff0c;正在对物联网&#xff08;IoT&#xff09;产生深远的影响。对于刚入行的朋友们来说&#xff0c;理解5G技术及其对物联网应用的意义&#xff0c;是把握行业发展趋势的关键。 让我们简单了解什么是…

使用python-numpy实现一个简单神经网络

目录 前言 导入numpy并初始化数据和激活函数 初始化学习率和模型参数 迭代更新模型参数&#xff08;权重&#xff09; 小彩蛋 前言 这篇文章&#xff0c;小编带大家使用python-numpy实现一个简单的三层神经网络&#xff0c;不使用pytorch等深度学习框架&#xff0c;来理解…

探索设计模式的魅力:代理模式揭秘-软件世界的“幕后黑手”

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 引言 一、魔法世界 1.1 定义与核心思想 1.2 静态代理 1.3 动态代理 1.4 虚拟代理 1.5 代理模式结构图 1.6 实例展示如何工作&#xff08;场景案例&#xff09; 不使用模式实现 有何问题 使用模式重构示例 二、…

【Rust日报】2024-02-08 Loungy:使用 Rust 和 GPUI 开发的 MacOS 启动器

Mira Screenshare&#xff1a;基于 Rust 和 WebRTC 的高性能屏幕分享工具 一群大学生宣布推出了他们的期末项目&#xff1a;Mira Screenshare&#xff0c;一个开源、高性能的屏幕共享工具&#xff0c;由 Rust 和 WebRTC 构建。此项目支持 4k 60 FPS 和 110ms 端到端延迟的屏幕…

CS50x 2024 - Lecture 2 - Arrays

00:00:00 - Introduction 00:01:01 - Story Time 00:06:03 - Compiling make本身并不是编译器&#xff0c;实际上是一个自动运行编译器的程序&#xff0c;如c语言的clang clang -o hello hello.csrc/ $ clang -o hello hello_world.c /usr/bin/ld: /tmp/hello_world-67f51…

Oracle 面试题 | 19.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

你的立身之本是什么?

去年发生的一切&#xff0c;大到疫情、政治经济形势、行业的萎靡和震荡&#xff0c;小到身边的跳槽、裁员、公司倒闭……似乎都在告诉我们&#xff1a; 当冲击到来的时候&#xff0c;它是不会提前跟你打招呼的。 接下来的10年&#xff0c;我们所面临的不确定性&#xff0c;比起…

Linux 软件管理(YUM RPM)

1 YUM yum&#xff08;全称为 Yellow dog Updater, Modified&#xff09;是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理&#xff0c;能够从指定的服务器自动处理依赖性关系&#xff0c;并且一次安装所有依赖的软件包&#xff0c;无须繁琐地一次次…

fps cf游戏,一键断网辅助工具

一键断网瞬移 工具特色&#xff1a;一改常规断网操作&#xff08;断网开启&#xff0c;所有人都卡住&#xff0c;使得还原后找不到人的问题 &#xff09;&#xff0c;不影响任何人移动&#xff0c;开启断网跟着别人一起走&#xff0c;其他人无任何异常卡顿。 工具功能&…

Linux应用程序几种参数传递方式

大家好&#xff0c;今天给大家介绍Linux应用程序几种参数传递方式&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在Linux中&#xff0c;应用程序可以通过多种方式接收参数。以下…

文心一言 VS 讯飞星火 VS chatgpt (198)-- 算法导论14.3 6题

六、用go语言&#xff0c;说明如何来维护一个支持操作MIN-GAP的一些数的动态集Q&#xff0c;使得该操作能给出Q中两个最接近的数之间的差值。例如&#xff0c;Q(1&#xff0c;5&#xff0c;9&#xff0c;15&#xff0c;18&#xff0c;22)&#xff0c;则MIN-GAP返回18-153&#…

【EAI 011】SayCan: Grounding Language in Robotic Affordances

论文标题&#xff1a;Do As I Can, Not As I Say: Grounding Language in Robotic Affordances 论文作者&#xff1a;Michael Ahn, Anthony Brohan, Noah Brown, Yevgen Chebotar, Omar Cortes, Byron David, Chelsea Finn, Chuyuan Fu, Keerthana Gopalakrishnan, Karol Hausm…

【正式】今年第一篇CSDN(纯技术教学)

一、文件上传简介 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff08;木马、病毒、恶意脚本、webshell等&#xff09;&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。上传点一般出现在头像、导入数据、上传压缩包等地方&#xff0c;由于程序对用户上传…

C语言笔试题之求出二叉树的最大深度(递归解决)

实例要求&#xff1a; 1、给定一个二叉树 root &#xff0c;返回其最大深度&#xff1b;2、二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数&#xff1b; 案例展示&#xff1a; 实例分析&#xff1a; 1、判断根节点是否为空&#xff1b;2、分别递归处理左…

物联网数据隐私保护技术

在物联网&#xff08;IoT&#xff09;的世界中&#xff0c;无数的设备通过互联网连接在一起&#xff0c;不断地收集、传输和处理数据。这些数据有助于提高生产效率、优化用户体验并创造新的服务模式。然而&#xff0c;随着数据量的剧增&#xff0c;数据隐私保护成为了一个不能忽…

【java苍穹外卖项目实战二】苍穹外卖环境搭建

文章目录 1、前端环境搭建2、后端环境搭建1、项目结构搭建2、Git版本控制3、数据库创建 开发环境搭建主要包含前端环境和后端环境两部分。 前端的页面我们只需要导入资料中的nginx&#xff0c; 前端页面的代码我们只需要能看懂即可。 1、前端环境搭建 前端运行环境的nginx&am…