关于有源蜂鸣器及无源蜂鸣器的区别及驱动各类单片机案例

news2024/11/16 12:33:48

关于有源蜂鸣器及无源蜂鸣器的区别及驱动各类单片机案例

  • 有源蜂鸣器与无源蜂鸣器区别
    • 有源蜂鸣器
    • 无源蜂鸣器
    • 模块化有源蜂鸣器及无源蜂鸣器驱动方式的说明
  • 有源、无源蜂鸣器代码驱动
  • 总结

有源蜂鸣器与无源蜂鸣器区别

有源蜂鸣器与无源蜂鸣器区别在于是否有振荡源。
有源蜂鸣器即有震荡源的蜂鸣器,通常只需要在正负极上加对应的供电电压就可以驱动发声。
无源蜂鸣器即无震荡源的蜂鸣器,这个时候就需要搭建驱动电路(后面章节会提到相关驱动电路)进行驱动蜂鸣器进行发声了。

有源蜂鸣器

有源蜂鸣器的话相当于在这个模块内部已经为我们搭建好了驱动电路了,这个时候我们只需要在蜂鸣器两端加上对应的电压驱动即可(注意有源蜂鸣器引脚区分正负)。
例如下面的这张图可以看到一般有源蜂鸣器会清楚的写出驱动的电压参数以及输出的频率是多少的,因为内部加了震荡源了,所以一般输出频率都是固定的(通常引脚是长脚正,短脚负 )。
图中的这个有源蜂鸣器的驱动电压是5V,输出频率是2.3KHz左右的。
在这里插入图片描述

无源蜂鸣器

无源蜂鸣器需要自己外搭驱动电路,此时对于蜂鸣器本身来说引脚是不分正负的。
同样可以查看自己手中的无源蜂鸣器提供的参数,重要的就是两个,一个驱动电压,一个是驱动的频率(常见:2-5KHz)。这里给出一个简单的驱动电路可以用来驱动无源蜂鸣器发声的。
在这里插入图片描述
这里我用来试验的是输入2KHz驱动的蜂鸣器,看下实际接线图:

在这里插入图片描述
这里使用的是PWM发生器来给蜂鸣器提供一个方波信号驱动其发声,最快速方法就是搭建洞洞板来驱动就能快速知道这个无源蜂鸣器是否可以正常驱动及好坏。

模块化有源蜂鸣器及无源蜂鸣器驱动方式的说明

在这里插入图片描述
单片机驱动比较常用的是这种模块化的蜂鸣器,可以看到两者之间的外观是一模一样的(这里有些厂商会用贴纸区分,有些是一样的),如果是贴纸是一样的,只能通过输入信号听蜂鸣器是否发声分辨是有源还是无源。
VCC,GND按参数供电5V,这里供电建议还是使用稳压电源会好些(有些人用USB转TTL或者STlink进行供电发现无法驱动的情况,市面上还是有部分USB转串口和stlink是劣质的,很容易出现供电不足的情况,所以模块的供电都是建议使用稳压电压进行供电),然后在I/O口输入一个低电平(看自己手中的模块写的是高/低电平驱动然后输入对应的电平,这里是低电平驱动)看蜂鸣器是否发声:

  • 蜂鸣器发声–>模块为有源蜂鸣器
  • 蜂鸣器无声–>坏了或者为无源蜂鸣器
    然后把 I/O口输入从低电平换成一个方波信号来驱动,输入方波信号后可以听到蜂鸣器发声就是无源蜂鸣器,依旧无声的话,排查自己的方波信号是否驱动能力不够大/信号地和电源地没有共地的问题,如果驱动能力足够且都有共地的话那可能就是模块坏了。

有源、无源蜂鸣器代码驱动

有源蜂鸣器:单片机IO口输出一个高/低电平信号
无源蜂鸣器:单片机IO口输出一个方波(占空比不为0%或者100%的)
这里只举例STM32F103C8T6的驱动主函数代码,需要整个工程的可以评论区留言!(其他单片机arduino,51等都是同理,配置好IO口输出即可)
有源蜂鸣器驱动代码(main.c):

##现象:蜂鸣器响一下停一下,按这样一直循环
int main(void)
{
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//开启GPIOB的时钟
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;				//GPIO引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure);				    //实现GPIOB的初始化
	while (1)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_9);		//将PB9引脚设置为低电平,蜂鸣器鸣叫
		Delay_ms(200);							//延时100ms
		GPIO_SetBits(GPIOB, GPIO_Pin_9);		//将PB9引脚设置为高电平,蜂鸣器停止
		Delay_ms(200);							//延时100ms
	}
}

无源蜂鸣器驱动代码(pwm.c)

#这个的现象主要和设置的频率和占空比有关,自行在主函数确定好即可输出对应的现象
void PWM_Init(void)
{
	/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);			//开启TIM2的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);			//开启GPIOA的时钟
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);							//将PA0引脚初始化为复用推挽输出	

	/*配置时钟源*/
	TIM_InternalClockConfig(TIM2);		//选择TIM2为内部时钟,若不调用此函数,TIM默认也为内部时钟
	
	/*时基单元初始化*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定义结构体变量
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,选择向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;					//计数周期,即ARR的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;				//预分频器,即PSC的值
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重复计数器,高级定时器才会用到
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);             
	/*输出比较初始化*/
	TIM_OCInitTypeDef TIM_OCInitStructure;							//定义结构体变量
	TIM_OCStructInit(&TIM_OCInitStructure);							//结构体初始化,若结构体没有完整赋值
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;				//输出比较模式,选择PWM模式1
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;		//输出极性,选择为高,若选择极性为低,则输出高低电平取反
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//输出使能
	TIM_OCInitStructure.TIM_Pulse = 0;								//初始的CCR值
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);						//将结构体变量交给TIM_OC1Init,配置TIM2的输出比较通道1
	/*TIM使能*/
	TIM_Cmd(TIM2, ENABLE);			//使能TIM2,定时器开始运行
}
/**
  * 函    数:PWM设置CCR
  * 参    数:Compare 要写入的CCR的值,范围:0~100
  * 注意事项:CCR和ARR共同决定占空比,此函数仅设置CCR的值,并不直接是占空比
  *           占空比Duty = CCR / (ARR + 1)
  */
void PWM_SetCompare1(uint16_t Compare)
{
	TIM_SetCompare1(TIM2, Compare);		//设置CCR1的值
    //这里的ARR+1正好是100 所以CCR设置为多少占空比就是多少
}

无源蜂鸣器驱动代码主要是PWM的输出,这个时候改变频率改变的是输出声音的音调。

总结

1.区分好有源、无源蜂鸣器后再进行驱动,不要不发声就认为模块是坏的。
2.有些贴片式的无源蜂鸣器有多个引脚,有些是固定引脚要看手册区分好引脚的功能。
3.有源区分正负,一般长脚正,短脚负;无源不分正负。

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

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

相关文章

Redis——redispluspls库通用命令以及String类型相关接口使用

文章目录 通用命令get,setkeys插入迭代器 expire和ttltype string 类型接口set和getset NX和XXmset 和 mgetgetrange 和 setrangeincr 和 decr 通用命令 get,set void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringV…

Hadoop的安装

文章目录 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。二. 环境变量三. 配置 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。 随后点击下载即可 由于Hadoop不直接支持Windows系统,因此,需要修改一些配置才能运行 二. 环境变量 三. 配置 进…

《飞机大战游戏》实训项目(Java GUI实现)(设计模式)(简易)

目录 一、最终实现后,效果如下。 (1)简单介绍本游戏项目(待完善) (2)运行效果图(具体大家自己可以试) 初始运行情况。 手动更换背景图。 通过子弹攻击敌机,累…

如何在Mac上查看剪贴板历史记录

重点摘要 macOS 内建的剪贴簿查看器可以透过 Finder 存取,但只能显示最近一次复制的内容,而且重新开机后就会清除。若要更进阶的剪贴簿管理,第三方 app 像是 CleanClip 提供了强大的功能和更好的组织方式。CleanClip 提供了全方位的剪贴簿历史管理解决方案,支援各种内容类型和…

HarmonyOS鸿蒙开发实战(5.0)表情图片聊天案例实践

鸿蒙HarmonyOS NEXT开发实战往期文章必看(持续更新......) HarmonyOS NEXT应用开发性能实践总结 HarmonyOS NEXT应用开发案例实践总结合集 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门…

线性表一(vector)

#include<bits/stdc.h> using namespace std; vector<int> a(5,2);//定义一个初始长度为5&#xff0c;每个元素值为2的可变数组 vector<char> b(3);//定义一个初始长度为3&#xff0c;每个元素为默认值的可变数组 vector<int> v;//定义一个长度为0的可…

mxnet系统架构

mxnet系统架构 MXNet 是一个高性能、灵活的深度学习框架&#xff0c;最早由李沐&#xff08;Mu Li&#xff09;等人开发&#xff0c;并且得到了 Amazon 的支持。它支持多种语言&#xff08;包括 Python、Scala、C、R、Julia、Perl 等&#xff09;&#xff0c;并以其灵活的编程…

【保奖思路】2024年华为杯研赛B题完整代码建模过程(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接加入【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/XzdIsvbiM0https://qm.qq.com/q/XzdIsvbiM0请根据附件WLAN网络实测训练集中所提供…

python多继承 - 子类指定父类

菜鸟教程-面向对象 https://www.runoob.com/python3/python3-class.html 子类内指定父类 父类名称.__init__(self,参数1&#xff0c;参数2&#xff0c;...) 子类对象指定父类 class Parent1:def my_method(self):print("Parent1s my_method")class Parent2:def my_…

基于uni-app的计算机类面试宝设计与实现(毕业论文)

目 录 1 前言 1 1.1 研究目的与意义 1 1.2 研究现状 1 1.3 论文结构 2 2 可行性分析 3 2.1 经济可行性 3 2.2 法律可行性 3 2.3 技术可行性 4 2.4 市场可行性 4 2.5 可行性分析结论 4 3 系统需求分析 4 3.1 用户需求分析 4 3.2 系统功能分析 5 3.3 系统性能需求分析 6 4 概要设…

前端vue-ref与document.querySelector的对比

ref只在本组件中查找&#xff0c;而document.querySelector是在整个页面查找

【学习笔记】手写Tomcat 四

目录 一、Read 方法返回 -1 的问题 二、JDBC 优化 1. 创建配置文件 2. 创建工具类 3. 简化 JDBC 的步骤 三、修改密码 优化返回数据 创建修改密码的页面 注意 测试 四、优化响应动态资源 1. 创建 LoginServlet 类 2. 把登录功能的代码放到 LoginServlet 类 3. 创…

hackmyvm靶场--zon

环境 攻击机kali 靶机 未知 主机探测 因为在同一个局域网内使用ARP协议探测存活主机 靶机为192.168.56.128 端口探测 常见的80和22端口 那么一定是寻找web漏洞拿shell了 后台扫描 后台扫描常用dirsearch和gobuster,有时候小字典可能不太行&#xff0c;可以尝试换个大点…

Android SystemUI组件(07)锁屏KeyguardViewMediator分析

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分即可。 为了更好理解本文的内容&#xff0c;优先说明下SystemUI中与Ke…

电力行业螺钉螺帽螺丝缺失检测数据集 voc yol

电力行业螺钉螺帽螺丝缺失检测数据集 数据集描述 该数据集旨在用于电力行业中的螺钉、螺帽、螺丝等紧固件的缺失检测任务。数据集包含了大量的图像及其对应的标注信息&#xff0c;可用于训练计算机视觉模型&#xff0c;以识别和定位电力设施中的螺钉、螺帽、螺丝等部件是否存在…

Go-知识-定时器

Go-知识-定时器 1. 介绍2. Timer使用场景2.1 设定超时时间2.2 延迟执行某个方法 3. Timer 对外接口3.1 创建定时器3.2 停止定时器3.3 重置定时器3.4 After3.5 AfterFunc 4. Timer 的实现原理4.1 Timer数据结构4.1.1 Timer4.1.2 runtimeTimer 4.2 Timer 实现原理4.2.1 创建Timer…

golang学习笔记1-go程序执行流程

声明&#xff1a;本人已有C&#xff0c;C,Python基础&#xff0c;只写本人认为的重点&#xff0c;方便自己回顾。 命令行执行go程序有两种方式&#xff0c;其流程如下图 注意第一种方式会得到可执行文件&#xff0c;第二种不会。 例1 在当前目录下编译hello.go go build hel…

更换硬盘后,电脑装完系统进不去?或PE能识别硬盘但开机/启动/BIOS识别不了硬盘解决办法

由于现在的电脑主板&#xff0c;默认都是UEFI启动&#xff0c;硬盘只有使用GUID分区表&#xff0c;主板BIOS才找得到系统引导&#xff01; 而当我们拿到一块新硬盘&#xff0c;使用分区工具默认类型分区&#xff0c;默认是MBR类型&#xff0c;所以这种分区的硬盘&#xff0c;B…

【后端开发】JavaEE初阶—线程的理解和编程实现

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解多线程的知识哟~~~&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【后端开发】JavaEE初阶——计算机是如何工作的&#xff1f;&#xff1f;&#xff1f;-CSDN博客 &#x1f308;感兴趣的小伙…

腾讯云ssl证书到期,续期免费证书并部署

首先咱用的免费证书&#xff0c;现在最长90天有效期&#xff0c;今天又到期了&#xff0c;得及时续期避免关联资源访问受限。 我这个证书是关联了一个负载均衡和两个容器服务的&#xff08;如果您的应用是ngnix或其他的应用那和本文操作可能有点不一样&#xff09; 所以需要做…