当前位置: 首页 > ds >正文

51单片机-驱动蜂鸣器模块教程

本章概述思维导图:

51单片机驱动蜂鸣器模块教程

蜂鸣器简介

蜂鸣器是一种将电信号转换为声音信号的电子元件,广泛应用于报警、提示、通知等场景。其核心原理基于压电效应或电磁感应:因此可分为两种类型蜂鸣器:压电式蜂鸣器和电磁式蜂鸣器;

        压电式蜂鸣器:利用压电陶瓷片在电压变化下产生机械形变,从而振动发声;

        电磁式蜂鸣器:通过电磁线圈与磁铁的相互作用,驱动振膜周期性振动发声;

如图所示:压电式蜂鸣器和电磁式蜂鸣器;

在以后遇到蜂鸣器我们该如何区分呢?

按照驱动方式分:

        有源蜂鸣器内置振荡源:内部集成振荡电路,通电即可发声,声音频率固定;

        无源蜂鸣器无内置振荡源:需外部输入方波信号驱动,声音频率可控(可发出不同音调);

按照结构分类:

        压电式蜂鸣器;

        电磁式蜂鸣器;

有非常多的人会理解为:把有源蜂鸣器当成压电式蜂鸣器,无源蜂鸣器当成电磁式蜂鸣器。这样的理解是错误的小伙伴们。不管是压电式或者电磁式都可以根据内部是否配置振荡源来确定是有源还是无源;


蜂鸣器硬件电路原理图分析

在开发板中使用的蜂鸣器为压电式无源蜂鸣器;

可以观察蜂鸣器的两个引脚,上引脚是接入高电平。下脚是接入ULN2003D芯片的OUT5输出脚,而ULN2003D芯片的IN5输入脚连接了MCU的P25脚来实现控制蜂鸣器。从而可以判断出MCU的P25脚输出一个连续的高低电平ULN2003D芯片则输出一个连续的低高电平形成一个方波信号就可以使得蜂鸣器驱动啦。

这里有小伙伴会有疑问,为什么不直接使MCU的P25脚直接连接蜂鸣器的下脚呢,是因为MCU I/O口无法直接驱动蜂鸣器。所以使用ULN2003D芯片,ULN2003D芯片为达林顿晶体管阵列,单路可承受500mA电流,能轻松驱动蜂鸣器,同时分担MCU的电流负载。

小知识点:ULN2003D驱动芯片的输入脚为低电平时,则对应输出脚为高电平。输入脚为高电平时,则对应输出脚为低电平。


驱动蜂鸣器软件编程设计

要使得蜂鸣器驱动,要产生1.5KHZ~5KHZ的频率脉冲信号,换算周期时间为:0.7ms~0.2ms

意思就是指我们要设计高低电平的一个周期时间为:07ms~0.2ms。

代码示例:

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit BEEP=P2^5;
void Delay_10us(u16 us)//延时函数:输入1大概延时时间为10us
{while(us--);
}
/*蜂鸣器驱动函数:
1、想使得蜂鸣器的声音变长变短,可以更改i的值大小;
2、想改变音色,可以更改频率也就是周期时间:延时函数里的值;
3、想改变音调可以改变高低电平的占空比,音调变高高电平时间高一点,音调变低高电平时间少一点对应的低电平时间也要更改。保证周期总时间不变,改变高低电平占空比*/
void BEEP_OUT(void)//蜂鸣器驱动函数
{u16 i=1000;while(i--){BEEP=1;Delay_10us(30);//产生脉冲信号高低电平转换时间,低电平0.3ms高电平0.3ms;周期时间设置为0.6msBEEP=0;Delay_10us(30);}
}
int main()
{while(1){BEEP_OUT();//蜂鸣器驱动Delay_10us(50000);//延时时间为480msBEEP=1;//蜂鸣器关闭Delay_10us(50000);//延时时间为480ms}
}

小心得:在驱动蜂鸣器函数中:

1、想使得蜂鸣器的声音变长变短,可以更改i的值大小;
2、想改变音色,可以更改频率也就是周期时间:延时函数里的值;
3、想改变音调可以改变高低电平的占空比,音调变高高电平时间高一点,音调变低高电平时间少一点对应的低电平时间也要更改。保证周期总时间不变,改变高低电平占空比;

蜂鸣器驱动效果展示:

蜂鸣器模块实现效果


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!

http://www.xdnf.cn/news/18055.html

相关文章:

  • 力扣400:第N位数字
  • 我的学习认知、高效方法与知识积累笔记
  • 【Docker】搭建一个高性能的分布式对象存储服务 - MinIO
  • 国标调查:构建餐饮满意度动态优化体系,驱动体验价值升级​
  • Linux程序内存布局分析
  • rent8 安装部署教程之 Windows
  • Python采集微店商品详情 API 返回值说明,json数据返回
  • MySQL(多表查询练习)
  • 《嵌入式Linux应用编程(六):并发编程基础:多进程exec函数族及多线程基础》
  • swift多卡并行训练微调qwen3-8B
  • QT开发中QString是怎么转char*类型的
  • ARM Cortex-M7 Thread Mode与Handler Mode
  • 数据结构:严格二叉树 (Strict Binary Tree)
  • PyTorch的安装-CPU版本或者GPU安装有什么区别吗
  • Unity_导航网格
  • 我的第一个音乐元素浏览项目上传至Github啦!
  • MyBatis 与 MyBatis-Plus 的区别
  • STM32L051同时处理Alarm A和Alarm B中断
  • SSH协议的GIT转换
  • 系统介绍pca主成分分析算法
  • flutter开发(二)检测媒体中的静音
  • Day59--图论--47. 参加科学大会(卡码网),94. 城市间货物运输 I(卡码网)
  • 【DDIA】第二部分:分布式数据
  • 应用层协议——HTTP
  • 抽奖程序web程序
  • JavaScript 基础实战:DOM 操作、数据类型与常见需求实现
  • 项目管理工具
  • NPM 、 NPX
  • 清除 pnpm 缓存,解决不同源安装依赖包失败的问题
  • electron之win/mac通知免打扰