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

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

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

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

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

有源蜂鸣器

有源蜂鸣器的话相当于在这个模块内部已经为我们搭建好了驱动电路了,这个时候我们只需要在蜂鸣器两端加上对应的电压驱动即可(注意有源蜂鸣器引脚区分正负)。
例如下面的这张图可以看到一般有源蜂鸣器会清楚的写出驱动的电压参数以及输出的频率是多少的,因为内部加了震荡源了,所以一般输出频率都是固定的(通常引脚是长脚正,短脚负 )。
图中的这个有源蜂鸣器的驱动电压是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速度,赋值为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);				    //实现GPIOB的初始化while (1){GPIO_ResetBits(GPIOB, GPIO_Pin_9);		//将PB9引脚设置为低电平,蜂鸣器鸣叫Delay_ms(200);							//延时100msGPIO_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模式1TIM_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.xdnf.cn/news/147236.html

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

相关文章

【BEV 视图变换】Ray-based(2): 代码复现+画图解释 基于深度估计、bev_pool

paper:Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D code:https://github.com/nv-tlabs/lift-splat-shoot 一、完整复现代码(可一键运行)和效果图 import torch import torch.nn as nn import mat…

8587 行编辑程序

### 思路 1. **初始化栈**:创建一个空栈用于存储有效字符。 2. **读取输入**:读取输入的行数 n,然后逐行读取字符。 3. **处理字符**: - 如果是 #,则弹出栈顶字符(如果栈不为空)。 - 如果…

谷歌的AI反击战:创始人谢尔盖·布林的回归与大模型组合的未来

近年来,随着AI技术的迅猛发展,尤其是ChatGPT等大语言模型的出现,全球科技格局正发生剧烈变化。作为曾经引领AI潮流的谷歌,在这场竞争中逐渐失去了领头羊的地位。然而,谷歌的创始人之一谢尔盖布林(Sergey Br…

黑马智数Day1

src文件夹 src 目录指的是源代码目录,存放项目应用的源代码,包含项目的逻辑和功能实现,实际上线之后在浏览器中跑的代码就是它们 apis - 业务接口 assets - 静态资源 (图片) components - 组件 公共组件 constants…

【WEB】序列一下

1、 2、反序列化 <?phpclass Polar{public $url polarctf.com;public $ltsystem;public $bls /;function __destruct(){$a $this->lt;$a($this->b);} }$a new Polar(); echo serialize($a); ?>###O:5:"Polar":3:{s:3:"url";s:12:"…

某乐指数爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cuY2hpbmFpbmRleC5uZXQvcmFua2xpc3QvNS8w 一、抓包分析 明显请求参数有sign加密&#xff0c;有经验的很容易就知道这就是个MD5加密&#xff0c;在一个就是响应数据也加密了 二、逆向分析 搜索sign&#xff0c;直接定位到加密位置 进入方法内部 hae方…

win11 wsl2安装ubuntu22最快捷方法

操作系统是win11&#xff0c;wsl版本是wsl2&#xff0c;wsl应该不用多介绍了&#xff0c;就是windows上的虚拟机&#xff0c;在wsl上可以很方便的运行Linux系统&#xff0c;性能棒棒的&#xff0c;而且wsl运行的系统和win11主机之间的文件移动是无缝的&#xff0c;就是两个系统…

某建筑市场爬虫数据采集逆向分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 目标网站 aHR0cHM6Ly9qenNjLm1vaHVyZC5nb3YuY24vZGF0YS9jb21wYW55P2NvbXBsZXhuYW1lPSVFNiVCMCVCNA 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…

Spring AI Alibaba,阿里的AI Java 开发框架

源码地址 https://github.com/alibaba/spring-ai-alibaba

【linux-Day4】linux的基本指令<下>

【linux-Day4】linux的基本指令<下> linux下的基本指令&#x1f4e2;date&#xff1a;显示时间&#x1f4e2;cal&#xff1a;显示公历日历&#x1f4e2;whereis &#xff1a; 查找指令->可执行文件/源代码/帮助手册所在的位置&#x1f4e2;find &#xff1a;在目录中搜…

入门Django

Django Django 简介URL组成部分详解第一个Django项目创建一个Django项目运行Django项目项目结构介绍project和app的关系 URL与视图函数的映射URL的两种传参方式在URL中携带参数 path函数url路由模块化url反转 Django 简介 Django 是一个高级的 Python Web 框架&#xff0c;用于…

握手传输 状态机序列检测(记忆科技笔试题)_2024年9月2日

发送模块循环发送0-7&#xff0c;在每个数据传输完成后&#xff0c;间隔5个clk&#xff0c;发送下一个 插入寄存器打拍处理&#xff0c;可以在不同的时钟周期内对信号进行同步&#xff0c;从而减少亚稳态的风险。 记忆科技笔试题&#xff1a;检测出11011在下一个时钟周期输出…

深度学习03-神经网络01-什么是神经网络?

神经网络的基本概念 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09;&#xff1a; 是一种模仿生物神经网络的计算模型。由多个神经元&#xff08;或称为节点&#xff09;组成&#xff0c;这些节点通过不同的连接来传递信息。 每个神经元可以接…

【Proteus51单片机仿真】PWM直流电机调速

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 ** 基于AT89C51&#xff0c;L298N驱动两个电机&#xff0c;因为是平台&#xff0c;最后用两个电机驱动&#xff0c;然后第一个按键控制所有电机停止&#xff0c;第二个按键按下&#xff0c…

华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域

场景介绍 华为地图的移动是通过模拟相机移动的方式实现的,您可以通过改变相机位置,来控制地图的可见区域,效果如图所示。 本章节将向您介绍相机的各个属性与含义,并移动相机。 相机移动前 接口…

计算机的错误计算(一百)

摘要 探讨 与 的计算精度问题。 从计算机的错误计算&#xff08;九十九&#xff09;知&#xff0c;运算 与 均被列在IEEE754-2019中。然而&#xff0c;似乎并没有哪种语言实现内置了第二个运算。 例1. 计算 与 不妨在Python 3.12.5 下计算&#xff0c;则有 然而&#…

黄酮类化合物及其衍生物生物合成的进展:构建酵母细胞工厂的系统策略-

Advances in Flavonoid and Derivative Biosynthesis: Systematic Strategies for the Construction of Yeast Cell FactoriesCli 黄酮类化合物及其衍生物生物合成的进展&#xff1a;构建酵母细胞工厂的系统策略 摘要 黄酮类化合物是一类重要的天然多酚化合物&#xff0c;具有…

Windows系统文件夹中的文件名排序

一天张三、李四的同事周五接到王哥的一个任务需求&#xff0c;有一个文件夹&#xff0c;里面有许多图片文件&#xff0c;网页访问某个分类展示文件的时候&#xff0c;王哥希望文件名的展示顺序可以按照Windows资源管理器中文件名升序排序的方式展示。 网站图片目录中有如下图片…

[Python学习日记-26] Python 中的文件操作

[Python学习日记-26] Python 中的文件操作 简介 操作模式 循环文件 其他功能 混合模式 修改文件 简介 在 Python 中的文件操作其实和我们平时使用的 Word 的操作是比较类似的&#xff0c;我们先说一下 Word 的操作流程&#xff0c;流程如下&#xff1a; 找到文件&#x…

鸿蒙开发项目中你是怎么理解生命周期?你知道的生命周期函数有那些, 说一下执行时机?(页面和自定义组件生命周期)

生命周期流程如下图所示&#xff0c;下图展示的是被Entry装饰的组件&#xff08;页面&#xff09;生命周期。 #一、怎么理解生命周期&#xff1f; 生命周期&#xff1a;简单点理解就是从创建到销毁的过程 #二、你知道的生命周期函数有那些, 说一下执行时机&#xff1f; 自定义…