嵌入式学习---蜂鸣器篇

news2025/3/13 18:14:58

1. 蜂鸣器分类

蜂鸣器是一种电子发声器件,采用直流电压供电,能够发出声音。广泛应用于计算机、打印机、报警器、电子玩具等电子产品中作为发声部件。一般仅从外形不易分辨蜂鸣器的种类。但是有些蜂鸣器使用广泛,见得多了就很容易分辨。例如常见的有源蜂鸣器会带一个白色贴纸,而无源蜂鸣器不带(当然这并不是绝对的)。

一般在单片机系统中,会按照驱动方式,将蜂鸣器分为以下两类:

  • 有源蜂鸣器:内部自带振荡源,接通电压即可发声,振荡频率固定,常用作报警器。
  • 无源蜂鸣器:内部不带振荡源,需要外加振荡信号,频率可改变,更加灵活实用。
无源蜂鸣器
有源蜂鸣器

有源蜂鸣器只需一个高低电平即可发声,和之前讲的LED的驱动方式完全相同。

无源蜂鸣器需要外部频率变化的震荡信号才可以发声,相对稍复杂一点。

其他分类:

(1)按工作原理分类

压电式蜂鸣器
电磁式蜂鸣器

1. 压电式蜂鸣器
原理:利用压电效应,当施加电压时,压电材料(如钛酸钡或锆钛酸铅)会发生形变,从而产生振动并发出声音。
特点:

  • 高效节能,功耗低。
  • 结构简单,体积小,适合空间有限的应用场景。
  • 适用于高频范围(通常在2kHz到4kHz之间),音质较为清脆。
  • 耐用性强,没有移动部件,不易损坏。

2. 电磁式蜂鸣器
原理:通过电磁铁吸引膜片振动发声。当电流通过线圈时,产生磁场,该磁场与永久磁铁相互作用,使膜片振动。
特点:

  • 可以发出较低频率的声音,音质较为浑厚。
  • 相对压电式蜂鸣器,功耗较高。
  • 结构相对复杂一些,但价格通常较低。

(2)按结构特点分类

敞开式蜂鸣器
封闭式蜂鸣器

1. 封闭式蜂鸣器
特点:

  • 内部结构被完全封装在一个外壳中,具有较好的防护性能。
  • 适合在恶劣环境中使用,能够防止灰尘、湿气等进入影响工作。
  • 外观美观,便于安装。

2. 敞开式蜂鸣器
特点:

  • 没有外壳保护,直接暴露在外。
  • 更适合用于需要散热或不需要严格防护的应用场景。
  • 成本较低,但在某些环境下可能需要额外的防护措施。

(3)按供电类型分类

交流蜂鸣器
直流蜂鸣器

1. 直流蜂鸣器
特点:

  • 使用直流电源供电,通常为5V、12V等常见电压等级。
  • 广泛应用于电子设备中,特别是那些依赖电池供电的便携式设备。

2. 交流蜂鸣器
特点:

  • 使用交流电源供电,通常为市电电压(如110V或220V)。
  • 主要应用于工业控制、家用电器等领域,由于其功率较大,常用于报警系统。

2. 两种蜂鸣器的区别

特性无源蜂鸣器有源蜂鸣器
内置振荡电路
驱动方式需要外部方波信号直流电源
音调可调性可调固定
控制复杂度较高(需生成信号)简单(直接供电)
功耗根据信号可变较高
应用场景多音调、复杂音频单一音调、简单提示

3.驱动代码

有源蜂鸣器驱动方式和LED是一样的,因此它的驱动代码也是和LED通用的。这里就不再赘述。

无源蜂鸣器不像有源蜂鸣器那样内置振荡电路,因此需要外部提供一个振荡信号来驱动。具体来说,你需要通过微控制器或其他信号源生成一定频率的方波信号,并将其施加到无源蜂鸣器上,才能产生声音。

包括STM32在内的大多数微控制器,都会使用PWM方波信号来驱动无源蜂鸣器。

先初始化PWM,在PA1 IO口输出PWM波。

pwm.c
void PWM_Init(void)
{
	GPIO_InitTypeDef  		    GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef     TIM2_InitStructure;
	TIM_OCInitTypeDef   		TIM_OCInitStructure;
    NVIC_InitTypeDef    		NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	//5ms
	TIM2_InitStructure.TIM_Period = 4999;
	TIM2_InitStructure.TIM_Prescaler = 71;
	TIM2_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM2_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM2, &TIM2_InitStructure);
	
	//PWM输出引脚配置  TIM2_CH2 PA1  
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //不是常规引脚功能,因此配置为复用推挽
	GPIO_InitStructure.GPIO_Pin = PWM_PIN; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(PWM_PORT, &GPIO_InitStructure);

	//PWM配置  TIM2_CH2 PA1  占空比:2500/(4999+1) = 50%
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //PWM模式1 
	TIM_OCInitStructure.TIM_Pulse = 2500;              //初始值2500个高电平
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  //主通道使能
	TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; //TIM2无此功能  随便写或不写
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //开始时输出高
	TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;  //TIM2无此功能  随便写或不写
	TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//TIM2无此功能  随便写或不写
	TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;//TIM2无此功能  随便写或不写
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);  
	//中断分组配置
	NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);
	TIM_Cmd(TIM2, ENABLE);
}


//TIM2中断服务程序  
void TIM2_IRQHandler(void)                		
{
	u8 i=0;
	if(TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)  //TIM2捕获比较中断
	{
		i++;
		if(i==255)  //产生一次PWM后做的事情 根据自己需求修改
		{
		  i=0;
		}
		
		TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);  //清除中断标志位
	}
}
​
main.c

main()
{
    SystemTinerInit(7200-1, 1000-1);
    Delay_Init();
	USART1_Init(115200);
	LED_Init();
	PWM_Init();

    while(1)
    {
      TIM_SetCompare2(TIM2, 300);  //输出占空为300/5000=6%的方波。
    }
}

虽然有些无源蜂鸣器没有明确的正负极标识,但最好确认一下。如果蜂鸣器有标记(如“+”号),则该端应接至PWM信号输出端;如果没有明确标识,则一般情况下不会因为接反而损坏,但仍建议按照制造商提供的指南进行连接。

在这里我们把无源蜂鸣器的随便一个引脚(或“+”)接到PA1,另一引脚接地。代码是上一章节的PWM的代码,具体配置细节可到上一章节查看。

另外,通过改变PWM占空比,可以调节无源蜂鸣器的音调,利用这一特点,再结合适当的延迟,可以演奏简单的音乐。但是要注意蜂鸣器并不能像扬声器那样直接播放音乐,只能播放简单的节拍(就像纯音乐一样,还只能是简单的)。假如你想播放一首MP3音乐,应该选择扬声器作为输出,而不是蜂鸣器。这是很多小白的一个误区,在此提醒一下。

制作不易,如果对你有帮助可否点个赞再走~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2292019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【优先算法】专题——前缀和

目录 一、【模版】前缀和 参考代码: 二、【模版】 二维前缀和 参考代码: 三、寻找数组的中心下标 参考代码: 四、除自身以外数组的乘积 参考代码: 五、和为K的子数组 参考代码: 六、和可被K整除的子数组 参…

【Linux】使用管道实现一个简易版本的进程池

文章目录 使用管道实现一个简易版本的进程池流程图代码makefileTask.hppProcessPool.cc 程序流程: 使用管道实现一个简易版本的进程池 流程图 代码 makefile ProcessPool:ProcessPool.ccg -o $ $^ -g -stdc11 .PHONY:clean clean:rm -f ProcessPoolTask.hpp #pr…

找不到msvcp140.dll解决方法

您可以尝试以下方案进行修复,看看是否可以解决这个问题: 一、重新注册 msvcp140.dll 运行库文件: “WinR”打开运行,键入:regsvr32 MSVCP140.dll,回车即可; 如果出现找不到该文件的提示&…

【优先算法】专题——位运算

在讲解位运算之前我们来总结一下常见的位运算 一、常见的位运算 1.基础为运算 << &&#xff1a;有0就是0 >> |&#xff1a;有1就是1 ~ ^&#xff1a;相同为0&#xff0c;相异位1 /无进位相加 2.给一个数 n&#xff0c;确定它的二进制表示…

【Cadence仿真技巧学习笔记】求解65nm库晶体管参数un, e0, Cox

在设计放大器的第一步就是确定好晶体管参数和直流工作点的选取。通过阅读文献&#xff0c;我了解到L波段低噪声放大器的mos器件最优宽度计算公式为 W o p t . p 3 2 1 ω L C o x R s Q s p W_{opt.p}\frac{3}{2}\frac{1}{\omega LC_{ox}R_{s}Q_{sp}} Wopt.p​23​ωLCox​Rs…

Docker入门篇(Docker基础概念与Linux安装教程)

目录 一、什么是Docker、有什么作用 二、Docker与虚拟机(对比) 三、Docker基础概念 四、CentOS安装Docker 一、从零认识Docker、有什么作用 1.项目部署可能的问题&#xff1a; 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会碰到一些问题&#xff1…

开源智慧园区管理系统对比其他十种管理软件的优势与应用前景分析

内容概要 在当今数字化快速发展的时代&#xff0c;园区管理软件的选择显得尤为重要。而开源智慧园区管理系统凭借其独特的优势&#xff0c;逐渐成为用户的新宠。与传统管理软件相比&#xff0c;它不仅灵活性高&#xff0c;而且具有更强的可定制性&#xff0c;让各类园区&#…

【C++】P5734 【深基6.例6】文字处理软件

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;题目描述输入格式输出格式示例输入与输出输入&#xff1a;输出&#xff1a; &#x1f4af;我的做法操作1&#xff1a;在文档末尾插入字符串操作2&…

CSS核心

CSS的引入方式 内部样式表是在 html 页面内部写一个 style 标签&#xff0c;在标签内部编写 CSS 代码控制整个 HTML 页面的样式。<style> 标签理论上可以放在 HTML 文档的任何地方&#xff0c;但一般会放在文档的 <head> 标签中。 <style> div { color: r…

013-51单片机红外遥控器模拟控制空调,自动制冷制热定时开关

主要功能是通过红外遥控器模拟控制空调&#xff0c;可以实现根据环境温度制冷和制热&#xff0c;能够通过遥控器设定温度&#xff0c;可以定时开关空调。 1.硬件介绍 硬件是我自己设计的一个通用的51单片机开发平台&#xff0c;可以根据需要自行焊接模块&#xff0c;这是用立创…

CMake项目编译与开源项目目录结构

Cmake 使用简单方便&#xff0c;可以跨平台构建项目编译环境&#xff0c;尤其比直接写makefile简单&#xff0c;可以通过简单的Cmake生成负责的Makefile文件。 如果没有使用cmake进行编译&#xff0c;需要如下命令&#xff1a;&#xff08;以muduo库echo服务器为例&#xff09;…

OPENPPP2 —— VMUX_NET 多路复用原理剖析

在阅读本文之前&#xff0c;必先了解以下几个概念&#xff1a; 1、MUX&#xff08;Multiplexer&#xff09;&#xff1a;合并多个信号到单一通道。 2、DEMUX&#xff08;Demultiplexer&#xff09;&#xff1a;从单一通道分离出多个信号。 3、单一通道&#xff0c;可汇聚多个…

语言月赛 202412【正在联系教练退赛】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 正在联系教练退赛 题目背景 在本题中&#xff0c;我们称一个字符串 y y y 是一个字符串 x x x 的子串&#xff0c;当且仅当从 x x x 的开头和结尾删去若干个&#xff08;可以为 0 0 0 个&#xff09;字符后剩余的字…

【数据结构】_链表经典算法OJ:复杂链表的复制

目录 1. 题目链接及描述 2. 解题思路 3. 程序 1. 题目链接及描述 题目链接&#xff1a;138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;…

python的pre-commit库的使用

在软件开发过程中&#xff0c;保持代码的一致性和高质量是非常重要的。pre-commit 是一个强大的工具&#xff0c;它可以帮助我们在提交代码到版本控制系统&#xff08;如 Git&#xff09;之前自动运行一系列的代码检查和格式化操作。通过这种方式&#xff0c;我们可以确保每次提…

【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)

目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…

音标-- 02-- 重音 音节 变音

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 国际音标1.重音2.音节3.变音 国际音标 1.重音 2.音节 3.变音

[STM32 标准库]EXTI应用场景 功能框图 寄存器

一、EXTI 外部中断在嵌入式系统中有广泛的应用场景&#xff0c;如按钮开关控制&#xff0c;传感器触发&#xff0c;通信接口中断等。其原理都差不多&#xff0c;STM32会对外部中断引脚的边沿进行检测&#xff0c;若检测到相应的边沿会触发中断&#xff0c;在中断中做出相应的处…

C语言练习【互斥锁、信号量线程同步、条件变量实现生产者消费者模型】

练习1 请使用互斥锁 和 信号量分别实现5个线程之间的同步 互斥锁实现同步 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>…

w190工作流程管理系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…