蜂鸣器实验

蜂鸣器简介

        蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、报警器等电子产品中作发声器件。

        蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型:

        压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳 等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。

        电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

        区别在于:压电式蜂鸣器发声,需提供一定频率的脉冲信号;想要电磁式蜂鸣器发声,只需提供电源即可。

         本实例使用的蜂鸣器是无源蜂鸣器,属于压电式蜂鸣器类型。注意,此处有源和无源,并非指电源,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一 定频率的脉冲信号才能发声,频率大小通常在 1.5-5KHz 之间。

        蜂鸣器实物图如下图所示;

蜂鸣器实验_第1张图片

        对于无源蜂鸣器,如果改变频率就可以调节蜂鸣器音调,产生各种不同音色、 音调的声音。如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小

        对于有源蜂鸣器,通常内部已经固定了频率,对于调节频率或占空比可能改变不了蜂鸣器的音调和音量,当然也有的有源蜂鸣器可以实现和无源蜂鸣器一样的效果。

硬件部分

        51 单片机是用来做控制的,而不是驱动,51 单片机 IO 口的驱动能力较弱(即使外接上拉电阻),而驱动蜂鸣器需要约 30mA,所以很困难,即使可以驱动,对于整个芯片的其它 IO的驱动能力就会减弱甚至无法工作, 所以不会直接使用 IO 口驱动蜂鸣器,而是通过三极管把电流放大后再驱动蜂鸣器,这样 51 单片机的 IO 口只需要提供不到 1mA 的电流就可控制蜂鸣器。

        对三极管不太了解,可以看看这个视频:三极管是如何导电?超形象动画让你一看就懂!_哔哩哔哩_bilibili

        我用的是普中的开发板A7,开发板的蜂鸣器模块电路如下图所示:

蜂鸣器实验_第2张图片

        由图得知,J7 端子可接任意 IO 控制,可直接连接到 51 单片机的 P2.2 管脚上。图中使用三极管进行电流放大,从而驱动蜂鸣器,当P2.2输出高电平,三极管截止,蜂鸣器不得电(低电平);当 P25 输出低电平,三极管导通,蜂鸣器得电(高电平)。

        开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲(高低电平)才会发声,因此需要让 P2.2 脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音。

 代码实现

        P2端口带上拉电阻,默认输出高电平,因此直接对BEEF取反:BEEF=!BEEF;通过while循环不断反复取反,就可以不断输出高低电平脉冲信号。

#include "reg52.h"

typedef unsigned int u16;//使用关键字 typedef 对系统默认数据类型 unsigned int 重新命名
typedef unsigned char u8;
 
sbit BEEF=P2^2;//将P2.2管脚定义为BEEF

void delay_10us(u16 ten_us)//延时函数,ten_us=1 时,大约延时 10us
{
 	while(ten_us--);
}

void main()	   //主函数
{
	u16 i=20000;
	
	while(1)	
	{
	   	 while(i--)
		 {
		  	BEEF=!BEEF;	  //产生一定频率的脉冲信号
			delay_10us(10000);
		 }
		 i=0;	 //清零
		 BEEF=0;	  //关闭蜂鸣器
	}
}

补充:

         对于无源蜂鸣器,如果改变频率就可以调节蜂鸣器音调,产生各种不同音色、 音调的声音。

修改延时函数delay_10us(10000);当延时为10000,1000,100时,蜂鸣器音调明显不同,可以多尝试!

你可能感兴趣的:(51单片机,单片机,stm32,嵌入式硬件,c语言)