单片机学习笔记---蜂鸣器工作原理
- 开源代码
- 2025-08-04 14:09:01

目录
蜂鸣器介绍
蜂鸣器的驱动方式
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
下一节开始代码演示!
单片机学习笔记---蜂鸣器工作原理由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“单片机学习笔记---蜂鸣器工作原理”