51单片机——蜂鸣器实验

目录

[1. 蜂鸣器概述](#1. 蜂鸣器概述)

[2. 模块电路](#2. 模块电路)

[3. 蜂鸣器驱动电路](#3. 蜂鸣器驱动电路)

[4. 软件设计](#4. 软件设计)


1. 蜂鸣器概述

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

蜂鸣器按驱动方式分为有源蜂鸣器 (电磁式蜂鸣器)和无源蜂鸣器(压电式蜂鸣器)

有源蜂鸣器:一般由振荡器、电磁线圈、磁铁、震动膜片、外壳共同组成。内部自带震荡源,将正负极接上直流电压即可持续发声,频率固定

无源蜂鸣器:一般由多谐振荡器,压电蜂鸣片、阻抗匹配器、共鸣箱、外壳共同组成。内部不带震荡源,需要控制器提供震荡脉冲才可发声,调整提供震荡脉冲的频率,可发出不同频率的声音

(对于无源蜂鸣器,输入频率变化的电流才会发出声音。在上电的一瞬间,电流从 0 到 1 瞬间产生一次跳变,所以无源蜂鸣器会响)

2. 模块电路

通过 P2^5 管脚输出一定频率的脉冲信号,控制蜂鸣器工作;

当 P2^5 输出高电平,BEFF 则输出低电平;

当 P2^5 输出低电平,BEFF 则输出高电平;

(图中并没有使用三极管放大电流,而是使用 ULN2003 芯片来驱动)

开发板上使用的是无源蜂鸣器,需要连续输出一定频率的脉冲(高低电平)信号才会发声

因此需要让 P2^5 引脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音

3. 蜂鸣器驱动电路

蜂鸣器的功率一般较大,单片机的 IO 口不能直接驱动,需要增加驱动电路

最常用的驱动电路是三极管驱动

NPN型:高电平导通,低电平闭合

PNP型:低电平导通,高电平闭合

此外,驱动电路还有 集成电路驱动

其主要依赖驱动芯片 ULN2003(达林顿晶体管阵列)

达林顿晶体管是两个三极管驱动复合成的,故又称为 **复合管,**可以增大驱动能力

达林顿晶体管常用于步进电机的驱动

4. 软件设计

无源蜂鸣器需要提供一定频率的脉冲信号才能发声,频率大小通常在 1.5 - 5KHZ之间

蜂鸣器发声的本质是:通过高低电平交替产生交流信号驱动振膜振动,振动频率即为发声频率

频率 f(单位:Hz):每秒振动的次数;

周期 T(单位:s):完成一次振动(高电平 + 低电平 )的总时间,满足 T = 1/f

延时时间:需让高电平和低电平各占「半个周期」(否则无法形成对称振动,声音失真或不发声),因此单端延时时间 :T=2t ,t= 1/(2f)

最低频率(1.5KHz)对应的最大延时

t_max = 1/(2×1500) ≈ 0.000333 秒 = 333 微秒(μs)

最高频率(5KHz)对应的最小延时

t_min = 1/(2×5000) = 0.0001 秒 = 100 微秒(μs)

实验:蜂鸣器发出声音,一段时间后关闭。

cpp 复制代码
#include <at89c51RC2.h>
//蜂鸣器实验

typedef unsigned char u8;
typedef unsigned int u16;

sbit BEEP = P2^5;

//延时函数
void Delay10us(u8 time)	//@11.0592MHz	10us
{
	unsigned char data i;
	while(time--)
	{
		i = 2;
		while (--i);
	}
}

void main()
{
	u16 i = 2000;	//蜂鸣器发出声音的时间段
	while(1)
	{
		while(i--)
		{
			BEEP = !BEEP;	//y引脚电平反转:高、低、高、低、高......
			Delay10us(20);	//形成200us高电平,200us低电平的交替信号
		}
		i = 0;	//蜂鸣器停止发声
		BEEP = 0;	//蜂鸣器停止发声后,固定引脚为低电平,避免干扰和杂声,让停止状态更稳定
	}
}

控制蜂鸣器声音的大小:

cpp 复制代码
#include <at89c51RC2.h>
//蜂鸣器实验:蜂鸣器响一阵后停止发声

typedef unsigned char u8;
typedef unsigned int u16;

sbit BEEP = P2^5;

//延时函数
void Delay10us(u8 time)	//@11.0592MHz	10us
{
	unsigned char data i;
	while(time--)
	{
		i = 2;
		while (--i);
	}
}

void main()
{
	u16 i = 2000;	//蜂鸣器发出声音的时间段
	while(1)
	{
		while(i--)
		{
//			BEEP = !BEEP;	//y引脚电平反转:高、低、高、低、高......
//			Delay10us(20);	//形成200us高电平,200us低电平的交替信号

			//改变声音大小
			BEEP = 0;
			Delay10us(10);
			BEEP = 1;
			Delay10us(30);	//高低电平时间加在一起仍为一个周期即可,这里一周是 40
		}
		i = 0;	//蜂鸣器停止发声
		BEEP = 0;	//蜂鸣器停止发声后,固定引脚为低电平,避免干扰和杂声,让停止状态更稳定
	}
}
相关推荐
CODECOLLECT6 分钟前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen41 分钟前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠3 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_3 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技6 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计6 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报7 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业7 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能7 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微
czwxkn7 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件