蜂鸣器实验
在这里插入图片描述
蜂鸣器这个实验最重要的是当IO不足以直接支撑设备时,要使用放大电路的意识。其次的蜂鸣器类型的认识以及代码落实相对都没有这么重要的。
项目实现代码
刨根问底环节
蜂鸣器介绍
浅看一下,知道有这个东西,就当做硬件常识积累起来就好。
蜂鸣器常常用作电子产品中作发声器件
蜂鸣器的分类
主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
想要压电式蜂鸣器发声,需提供一定频率的脉冲信号;
想要电磁式蜂鸣器发声,只需提供电源。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳
等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工
作电压),多谐振荡器起振,输出1.5~5kHZ 的音频信号,阻抗匹配器推动压电
蜂鸣片发声。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
蜂鸣器的有源无源之分
51开发板上使用的蜂鸣器是无源蜂鸣器,属于压电式蜂鸣器类型。这里说的有源和无源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路。
有源蜂鸣器内部自带振荡电路,只需提供电源即可发声;
而无源蜂鸣器则需提供一定频率的脉冲信号才能发声,频率大小通常在1.5-5KHz 之间。
两者的明显差别
对于无源蜂鸣器,可以改变频率调节蜂鸣器音调,产生各种不同音色、音调的声音。如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小。
对于有源蜂鸣器,通常内部已经固定频率,对于调节频率或占空比可能改变不了蜂鸣器的音调和音量
放大电路引入
常规情况下,想要驱动蜂鸣器大约需要30mA的电流
此时就可以引入咱的应该着重拿捏的思想——放大电路
通过三极管把电流放大后再去驱动蜂鸣器,这样51 单片机的IO 口只需要提供不到1mA 的电流就可控制蜂鸣器。
51单片机中并没有直接简单粗暴的上一个三极管进行电流放大,而是使用ULN2003 芯片来驱动,但是本质仍旧是对电流的放大。
代码设计
代码要根据开发板文档中提供蜂鸣器电路图来思考咱们要怎么控制它。
这个电路图中涉及一个网络标号的知识点,需要积累一下
简单来说就是具备相同标号的节点,是可以连接在一起的,比如上图中框起来的两个位置节点,其实是相连的。
从图中可以看出,蜂鸣器控制管脚直接连接到51 单片机的P2.5 管脚上。
这个ULN2003芯片的具体的了,暂时不展开,不然会很冗杂,现在记住在使用ULN2003芯片来驱动的时候,有点像一个非门。当P25输出高电平,BEEP输出低电平;当P25输出低电平,BEEP则输出高电平。
因为使用的是无源蜂鸣器,它需要使用一定频率的脉冲(即出现高低电平)才会发出声音,因此需要让P25引脚用一定的频率不断的输出高低电平信号才能够控制蜂鸣器发出声音。
项目代码
#include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit BEEP = P2^5;//操作和蜂鸣器相连的P2.5引脚 //延时函数 void delay_10us(u16 ten_us) { while(ten_us--); } void main() { u16 i=1,j=2000; while(i) { while(j--) { //通过反转赋值,产生一定频率的脉冲信号 BEEP=1; delay_10us(190); BEEP=0; delay_10us(10); BEEP = !BEEP; delay_10us(100);//延时鸣响一段时间 } i = 0;//结束循环 BEEP = 0;//关闭蜂鸣器 } }