标题：蜂鸣器
结构原理
  蜂鸣器1．压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。当接通电源后（1.5~15V直流工作电压）,多谐振荡器起振,输出1.5~2.5kHZ的音频信号，阻抗匹配器推动压电蜂鸣片发声。  蜂鸣器
压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极，经极化和老化处理后，再与黄铜片或不锈钢片粘在一起。
2．电磁式蜂鸣器 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后，振荡器产生的音频信号电流通过电磁线圈，使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下，周期性地振动发声。
制作工艺
（1）制  蜂鸣器备电磁铁M:在长约6厘米的铁螺栓上绕100圈导线,线端留下5厘米作引线,用透明胶布把线圈粘好,以免线圈松开,再用胶布把它粘在一个盒子上,电磁铁就做好了.
（2）制备弹片P：从铁罐头盒上剪下一条宽约2厘米的长铁片，弯成直角，把电磁铁的一条引线接在弹片上，再用胶布把弹片紧贴在木板上．
（3）用曲别针做触头Q，用书把曲别针垫高，用胶布粘牢，引出一条导线，如图连接好电路．
（4）调节M与P之间的距离（通过移动盒子），使电磁铁能吸引弹片，调节触点与弹片之间的距离，使它们能恰好接触，通电后就可以听到蜂鸣声．
分类
  蜂鸣器
教你区分有源蜂鸣器和无源蜂鸣器
现在市场上出售的一种小型蜂鸣器因其体积小(直径只有llmm)、重量轻、价格低、结构牢靠，而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路中。有源蜂鸣器和无源蜂鸣器的外观如图a、b所示。  有源蜂鸣器和无源蜂鸣器
图：有源和无源蜂鸣器的外观
a)有源 b)无源
从图a、b外观上看，两种蜂鸣器好像一样，但仔细看，两者的高度略有区别，有源蜂鸣器a，高度为9mm，而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚都朝上放置时，可以看出有绿色电路板的一种是无源蜂鸣器，没有电路板而用黑胶封闭的一种是有源蜂鸣器。
迸一步判断有源蜂鸣器和无源蜂鸣器，还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "-"引脚，红表笔在另一引脚上来回碰触，如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的，且电阻在几百欧以上的，是有源蜂鸣器。
有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样，需要接在音频输出电路中才能发声。
[1]
有源蜂鸣器与无源蜂鸣器的区别：
注意：这里的“源”不是指电源，而是指震荡源。 
也就是说，有源蜂鸣器内部带震荡源，所以只要一通电就会叫 
而无源内部不带震荡源，所以如果用直流信号无法令其鸣叫。必须用2K-5K的方波去驱动它 
有源蜂鸣器往往比无源的贵，就是因为里面多个震荡电路 
无源蜂鸣器的优点是： 
1. 便宜 
2. 声音频率可控，可以做出“多来米发索拉西”的效果 
3. 在一些特例中，可以和LED复用一个控制口 
有源蜂鸣器的优点是：程序控制方便。
驱动模块
在单片机应用的设计上，很多方案都会用到蜂鸣器，大部分都是使用蜂鸣器来做提示或报警，比如按键按下、开始工作、工作结束或是故障等等。这里对单片机在蜂鸣器驱动上的应用作一下描述。
驱动方式
  蜂鸣器由于自激蜂鸣器是直流电压驱动的，不需要利用交流信号进行驱动，只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音，很简单，这里就不对自激蜂鸣器进行说明了。这里只对必须用1/2duty 的方波信号进行驱动的他激蜂鸣器进行说明。
单片机驱动他激蜂鸣器的方式有两种：一种是PWM 输出口直接驱动，另一种是利用I/O 定时翻转电平产生驱动波形对蜂鸣器进行驱动。
PWM 输出口直接驱动是利用PWM 输出口本身可以输出一定的方波来直接驱动蜂鸣器。在单片机的软件设置中有几个系统寄存器是用来设置PWM 口的输出的，可以设置占空比、周期等等，通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后，只要打开PWM 输出，PWM 输出口就能输出该频率的方波，这个时候利用这个波形就可以驱动蜂鸣器了。比如频率为2000Hz 的蜂鸣器的驱动，可以知道周期为500μs，这样只需要把PWM 的周期设置为500μs，占空比电平设置为250μs，就能产生一个频率为2000Hz 的方波，通过这个方波再利用三极管就可以去驱动这个蜂鸣器了。
而利用I/O 定时翻转电平来产生驱动波形的方式会比较麻烦一点，必须利用定时器来做定时，通过定时翻转电平产生符合蜂鸣器要求的频率的波形，这个波形就可以用来驱动蜂鸣器了。比如为2500Hz 的蜂鸣器的驱动，可以知道周期为400μs，这样只需要驱动蜂鸣器的I/O 口每200μs 翻转一次电平就可以产生一个频率为2500Hz，占空比为1/2duty 的方波，再通过三极管放大就可以驱动这个蜂鸣器了。
驱动电路
由于蜂鸣器的工作电流一般比较大，以致于单片机的I/O 口是无法直接驱动的*（但AVR可以驱动小功率蜂鸣器），所以要利用放大电路来驱动，一般使用三极管来放大电流就可以了。
蜂鸣器驱动电路一般都包含以下几个部分：一个三极管、一个蜂鸣器、一个续流二极管和一个电源滤波电容。
1．蜂鸣器
发声元件，在其两端施加直流电压（有源蜂鸣器）或者方波（无源蜂鸣器）就可以发声，其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式（直流/方波）等。这些都可以根据需要来选择。
2．续流二极管
蜂鸣器本质上是一个感性元件，其电流不能瞬变，因此必须有一个续流二极管提供续流。否则，在蜂鸣器两端会产生几十伏的尖峰电压，可能损坏驱动三极管，并干扰整个电路系统的其它部分。
3．滤波电容
滤波电容C1的作用是滤波，滤除蜂鸣器电流对其它部分的影响，也可改善电源的交流阻抗，如果可能，最好是再并联一个220uF的电解电容。
4．三极管
三极管Q1起开关作用，其基极的高电平使三极管饱和导通，使蜂鸣器发声；而基极低电平则使三极管关闭，蜂鸣器停止发声[2]。
驱动设计
由于这里要介绍两种驱动方式的方法，所以在设计模块系统中将两种驱动方式做到一块，即程序里边不仅介绍了PWM 输出口驱动蜂鸣器的方法，还要介绍I/O 口驱动蜂鸣器的方法。所以，我们将设计如下的一个系统来说明单片机对蜂鸣器的驱动：系统有两个他激蜂鸣器，频率都为2000Hz，一个由I/O 口进行控制，另一个由PWM 输出口进行控制；系统还有两个按键，一个按键为PORT 按键，I/O 口控制的蜂鸣器不鸣叫时按一次按键I/O 口控制的蜂鸣器鸣叫，再按一次停止鸣叫，另一个按键为PWM 按键，PWM 口控制的蜂鸣器不鸣叫时按一次按键PWM输出口控制的蜂鸣器鸣叫，再按一次停止鸣叫。
电路原理图
  蜂鸣器如图1-3 所示，使用SH69P43 为控制芯片，使用4MHz 晶振作为主振荡器。
PORTC.3/T0 作为I/O 口通过三极管Q2 来驱动蜂鸣器LS1，而PORTC.2/PWM0 则作为PWM 输出口通过三极管Q1 来驱动蜂鸣器LS2。另外在PORTA.3 和PORTA.2 分别接了两个按键，一个是PWM 按键，是用来控制PWM 输出口驱动蜂鸣器使用的；另一个是PORT 按键，是用来控制I/O 口驱动蜂鸣器使用的。连接按键的I/O 口开内部上拉电阻。
软件设计方法
先分析一下蜂鸣器。所使用的蜂鸣器的工作频率是2000Hz，也就是说蜂鸣器的驱动信号波形周期是500μs，由于是1/2duty 的信号，所以一个周期内的高电平和低电平的时间宽度都为250μs。软件设计上，我们将根据两种驱动方式来进行说明。
a) PWM 输出口直接驱动蜂鸣器方式
由于PWM 只控制固定频率的蜂鸣器，所以可以在程序的系统初始化时就对PWM 的输出波形进行设置。
首先根据SH69P43 的PWM 输出的周期宽度是10 位数据来选择PWM 时钟。系统使用4MHz 的晶振作为主振荡器，一个tosc 的时间就是0.25μs，若是将PWM 的时钟设置为tosc 的话， 则蜂鸣器要求的波形周期500μs 的计数值为500μs/0.25μs=（2000）10=（7D0）16，7D0H 为11 位的数据，而SH69P43 的PWM
输出周期宽度只是10 位数据，所以选择PWM 的时钟为tosc 是不能实现蜂鸣器所要的驱动波形的。
这里我们将PWM 的时钟设置为4tosc，这样一个PWM 的时钟周期就是1μs 了，由此可以算出500μs 对应的计数值为500μs/1μs=（500）10=（1F4）16，即分别在周期寄存器的高2 位、中4 位和低4 位三个寄存器中填入1、F 和4，就完成了对输出周期的设置。再来设置占空比寄存器，在PWM 输出中占空比的实现是
通过设定一个周期内电平的宽度来实现的。当输出模式选择为普通模式时，占空比寄存器是用来设置高电平的宽度。250μs 的宽度计数值为250μs/1μs=（250）10=（0FA）16。只需要在占空比寄存器的高2 位、中4 位和低4 位中分别填入0、F 和A 就可以完成对占空比的设置了，设置占空比为1/2duty。
以后只需要打开PWM 输出，PWM 输出口自然就能输出频率为2000Hz、占空比为1/2duty 的方波。
b) I/O 口定时翻转电平驱动蜂鸣器方式
使用I/O 口定时翻转电平驱动蜂鸣器方式的设置比较简单，只需要对波形分析一下。由于驱动的信号刚好为周期500μs，占空比为1/2duty 的方波，只需要每250μs 进行一次电平翻转，就可以得到驱动蜂鸣器的方波信号。在程序上，可以使用TIMER0 来定时，将TIMER0 的预分频设置为/1，选择TIMER0 的始终为系统时钟(主振荡器时钟/4)，在TIMER0 的载入/计数寄存器的高4 位和低4 位分别写入00H 和06H，就能将TIMER0 的中断设置为250μs。当需要I/O 口驱动的蜂鸣器鸣叫时，只需要在进入TIMER0 中断的时候对该I/O 口的电平进行翻转一次，直到蜂鸣器不需要鸣叫的时候，将I/O 口的电平设置为低电平即可。不鸣叫时将I/O 口的输出电平设置为低电平是为了防止漏电。