【STM32 基础实验蜂鸣器发声】

这篇具有很好参考价值的文章主要介绍了【STM32 基础实验蜂鸣器发声】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、认识蜂鸣器

(1)蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

(2)蜂鸣器分类

BUZZER蜂鸣器的分类:
1、按其驱动方式的原理分,可分为:有源蜂鸣器(内含驱动线路,也叫自激式蜂鸣器)和无源蜂鸣器(外部驱动,也叫他激式蜂鸣器);
2、按构造方式的不同,可分为:电磁式蜂鸣器压电式蜂鸣器
3、按封装的不同,可分为:DIP BUZZER(插针蜂鸣器)和SMD BUZZER(贴片式蜂鸣器);
4、按电流的不同,可分为:直流蜂鸣器交流蜂鸣器,其中,以直流最为常见压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。
电磁式蜂鸣器,主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。
由于两种蜂鸣器发音原理不同,压电式结构简单耐用但音调单一,适用于报警器等设备。而电磁式由于音质好,所以多用于语音、音乐等设备。

二、基于stm32f10c8t6 基础实验蜂鸣器发声

(1)本实验蜂鸣器型号说明

笔者本次实验用到的是有源蜂鸣器与无源蜂鸣器,见下图所示:
有源蜂鸣器模块:蜂鸣器是低电平触发还是高电平触发,STM32,stm32,嵌入式硬件,单片机
无源蜂鸣器模块:蜂鸣器是低电平触发还是高电平触发,STM32,stm32,嵌入式硬件,单片机

(2)蜂鸣器发声原理

有源蜂鸣器模块低电平触发,通过配置I/O口,给它低电平即可发声。可见电路图如下:
有源蜂鸣器电路图:蜂鸣器是低电平触发还是高电平触发,STM32,stm32,嵌入式硬件,单片机
无源蜂鸣器模块,通过配置方波,方波的话可以联想到PWM,使配置PWM占空比、频率即可驱动发声。可见电路图如下:
无源蜂鸣器电路图:蜂鸣器是低电平触发还是高电平触发,STM32,stm32,嵌入式硬件,单片机

然后了解一下PWM
我们就以以STM32单片机为例,其IO口只能输出高电平和低电平。

假设高电平为5V、低电平则为0V,那么要输出不同的模拟电压就要用到PWM。通过改变IO口输出的方波的占空比,从而获得使用数字信号模拟成的模拟电压信号。

电压是以一种脉冲序列被加到模拟负载上去的,接通时是高电平1,断开时是低电平0。接通时直流供电输出,断开时直流供电断开。通过对接通和断开时间的控制,理论上来讲,可以输出任意不大于最大电压值5V的模拟电压。

比方说,占空比为50%那就是高电平时间一半,低电平时间一半。在一定的频率下,就可以得到模拟的2.5V输出电压。那么75%的占空比,得到的电压就是3.75V,如下图所示。

蜂鸣器是低电平触发还是高电平触发,STM32,stm32,嵌入式硬件,单片机

也就是说,在一定的频率下,通过不同的占空比即可得到不同大小的输出模拟电压,PWM就是通过这种原理实现数字模拟信号转换的。

PWM应用
以经常使用的呼吸灯举例。
LED呼吸灯本次实验也使用了一颗LED来实现呼吸灯,衬托无源蜂鸣器的实验现象,

一般人眼睛对于80Hz以上刷新频率则完全没有闪烁感,那么我们平时见到的LED灯,当它的频率大于50Hz的时候,人眼就会产生视觉暂留效果,基本就看不到闪烁了,而是误以为是一个常亮的LED灯。

由于频率很高时看不到闪烁,占空比越大LED越亮,占空比越小LED越暗。所以,在频率一定时,可以用不同占空比改变LED灯的亮度,使其达到一个呼吸灯的效果。

(3)代码部分

有源蜂鸣器部分代码:(用了一颗LED循环闪烁,表示正在跑程序)
beep.c

#include "sys.h"
#include "beep.h"

void BEEP_Init(void)
 {
	GPIO_InitTypeDef  GPIO_InitStructure;//声明结构体——GPIO
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//时钟使能GPIOB
	 //RCC APB2PeriphClockcmd(RCC APB2Periph GPIOB | RCC APB2Periph AFIO,ENABLE); 
	 //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//定义引脚pin_8 
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//频率50Mhz
	GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB
	GPIO_SetBits(GPIOB,GPIO_Pin_8);//低电平触发所以置位高电平
 }
 

main.c

#include "stm32f10x.h"
#include "beep.h"
#include "delay.h"
#include "led.h"

int main()
{
	BEEP_Init();
	delay_init();	
	LED_Init();
	
	while(1)
	{

	  shansuo();
		GPIO_SetBits(GPIOB,GPIO_Pin_8);  
		delay_ms(500);
		GPIO_ResetBits(GPIOB,GPIO_Pin_8); 
		delay_ms(500);
		
	}
}



// An highlighted block
var foo = 'bar';

无源蜂鸣器部分代码:(用了一颗LED循环呼吸灯,表示正在跑程序)
pwm.c

#include "stm32f10x.h"


void PWM_Init(void)
{
 	GPIO_InitTypeDef  GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;//输出比较的结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//时钟使能GPIOA
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  //复用时开启
	//GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE); //重映射
	//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //解除PA15调试功能
	

	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_7;//定义引脚pin_0|Pin_15
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出模式,改变引脚控制权给片上外设
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//频率50Mhz
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	
	TIM_InternalClockConfig(TIM2);
	TIM_InternalClockConfig(TIM3);
	
	TIM_TimeBaseInitStructure.TIM_ClockDivision =TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInitStructure.TIM_Period = 100-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 计数到20为2ms  //ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720-1; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  //psc
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
	
	TIM_OCStructInit(&TIM_OCInitStructure);//用StructInit赋初始值函数,可避免语法错误
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//输出比较的模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出比较的极性
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出比较的使能
	TIM_OCInitStructure.TIM_Pulse = 0;//输出比较配置CCR条件码寄存器  //占空比50%  占空比10%   占空比90%  
	TIM_OC1Init(TIM2,&TIM_OCInitStructure);//查看引脚定义表知道,非重映射默认只有PA0输出
	TIM_OC2Init(TIM3,&TIM_OCInitStructure);
	

	
	/*公式:PWM频率:Freq = CK_PSC/(PSC+1)/(ARR+1)
					PWM占空比:Doty = CCR/(ARR+1)
					PWM分辨率:Reso = 1/(ARR+1)   */
  TIM_Cmd(TIM2, ENABLE);  //使能TIMx外设
	TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
							 
}

void PWM_SetCompare1(uint16_t Compare1)//单独更改通道1的值对应TIM_OC1Init ,从而改变CCR实现占空比变化
{
	TIM_SetCompare1(TIM2, Compare1);
	
}

void PWM_SetCompare2(uint16_t Compare2)//单独更改通道1的值对应TIM_OC2Init ,从而改变CCR实现占空比变化
{
	TIM_SetCompare2(TIM3, Compare2);
	
}


main.c

#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "pwm.h"

uint8_t i;

int main(void)
{	
	
	delay_init();	    	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	PWM_Init();
	
	
	while(1)
	{
		for(i=0;i<=100;i++)
		{
			PWM_SetCompare1(i);
			PWM_SetCompare2(i);
			delay_ms(20);
		}
		for(i=0;i<=100;i++)
		{
			PWM_SetCompare1(100-i);
			PWM_SetCompare2(100-i);
			delay_ms(20);
		}
	}
}

(4)效果展示

(声音可能刺耳,注意调节音量;声音已做过处理)
实验现象:有源蜂鸣器发声鸣叫

有源蜂鸣器


实验现象:无源蜂鸣器发声鸣叫

无源蜂鸣器

三、总结与扩展

总结:
根据以上内容,学习有源蜂鸣器,跟LED类似还是容易理解的,给电信号驱动发声。
无源蜂鸣器主要是应用PWM使能方波,驱动发声。
针对可能出现的问题,说明一下:
(1)蜂鸣器模块的触发的电平与代码对应
(2)蜂鸣器声音小,可能是额定电压或功率不够,可适当提高电压;还可能是硬件坏了的问题,或者铜暴露出来导致的短路。
所以要有信心一步步积累理论和实践经验,一起学习加油!
扩展:可通过有源蜂鸣器可以做警报、提醒,如声光报警、人体红外等实验。无源蜂鸣器可以做闹铃、音乐等实验。那么就分享到这,大胆尝试实践探索吧,欢迎讨论。

附上参考文献链接与视频链接出处

链接: 参考PWM知乎
链接: 参考PWM视频
链接: 有源蜂鸣器视频
链接: 无源蜂鸣器视频
链接: 源码例程
提取码:3232文章来源地址https://www.toymoban.com/news/detail-790414.html

到了这里,关于【STM32 基础实验蜂鸣器发声】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • (STM32基础)STM32实现LED闪烁&LED流水灯&蜂鸣器

    (STM32基础)STM32实现LED闪烁&LED流水灯&蜂鸣器

    1、按照新建工程步骤创建工程,新建start、library、user三个文件夹,从固件库添加相应文件 2、keilkil小程序用来清理listings和objects文件夹中编译产生的中间文件,以后需要打包工程的话可以先用keilkill先清理,这样文件夹会大大缩小所占内存。 在library中可以查看外设函数库,

    2024年02月07日
    浏览(17)
  • 【【51单片机的蜂鸣器发声】】

    我们在设置板子的时候要翻转 翻转IO口是因为使用了步进电机的多余的芯片管脚 我们翻转之后还想让它保持一段时间 就是先翻转500次 Delay(1)之后 就是最小的单位每隔1ms 周期就是2ms 频率就是500HZ

    2024年02月16日
    浏览(13)
  • STM32实战-无源蜂鸣器

    STM32实战-无源蜂鸣器

    前言: 主要通过无源蜂鸣器实现功能有: 1、上电后,无源蜂鸣器发出警报声; 2、通过触摸按键1打开或关闭蜂鸣器; 目录  1、硬件电路部分 2、技术讲解  2.1通用定时器(TIMx)  2.2主要特性   2.3框图 3.软件编程  3.1参数配置  3.2程序框架  3.3蜂鸣器函数  3.4回调函数    

    2024年02月04日
    浏览(10)
  • STM32——有源蜂鸣器模块

    STM32——有源蜂鸣器模块

            蜂鸣器模块在一个单片机项目中同样不可或缺,可能这篇文章对大多数人帮助并不大,但对刚刚入门的同学快速上手蜂鸣器模块应该有所帮助。        有源蜂鸣器模块,与无源蜂鸣器模块最大的区别是其内部已经包含振荡器,只要输入高低电平,就能控制蜂鸣器的

    2024年04月25日
    浏览(55)
  • 【STM32】GPIO之蜂鸣器

    文章目录 00. 目录 01. 蜂鸣器简介 02. 硬件设计 03. 程序示例一 04. 程序示例二 05. 程序实例三 06. 附录 07. 声明

    2024年02月06日
    浏览(12)
  • STM32 蜂鸣器介绍 配置 播放音节

    STM32 蜂鸣器介绍 配置 播放音节

             蜂鸣器一般被分为两类 : 有源蜂鸣器 和 无源蜂鸣器 。 其中源是振荡源 。 有源蜂鸣器内部有振荡电路,可以把直流电源转换为一定频率的脉冲信号。 因为它一直输出一定的频率,我们无法改变频率,所以声音只有一种,我们只能通过电源,控制它发不发声。

    2024年02月04日
    浏览(10)
  • STM32蜂鸣器播放音乐(代码全)

    在STM32F103ZET6板子上使用蜂鸣器播放音乐,我们可以将其分为几个模块:初始化模块、蜂鸣器控制模块、音乐播放模块和主函数模块。以下是一个简单的示例代码,使用STM32 HAL库和定时器来驱动蜂鸣器播放音乐。 首先,确保你已经配置了STM32CubeMX或STM32CubeIDE,并生成了HAL库代码

    2024年04月25日
    浏览(10)
  • 【STM32F103】谁在用蜂鸣器弹奏一曲东风破(无源蜂鸣器&PWM)

    【STM32F103】谁在用蜂鸣器弹奏一曲东风破(无源蜂鸣器&PWM)

    蜂鸣器一般可以分为两种,一种是有源蜂鸣器,另一种是无源蜂鸣器。 有源蜂鸣器中的源是指震荡源,也就是给了电压再给个触发信号就会以固定的频率发出声响。 而无源蜂鸣器内部没有震荡源,我们可以将触发信号的频率传给无源蜂鸣器,这样就可以发出不同音阶的声响

    2024年01月19日
    浏览(9)
  • stm32蜂鸣器实现电子琴(原理+代码)

    stm32蜂鸣器实现电子琴(原理+代码)

    许久没有摸32了,今天是培训的第一天,做个电子琴练练手。 编程难度很小,无非就是gpio控制引脚高低电平转换,比较值得注意的主要是一些乐理上的知识。 我们能听到的1 2 3 4 5 6 7的音符,实际上是一个个固定的频率,这个具体算我也不懂,问巴赫去吧 总而言之,通过百度

    2024年02月06日
    浏览(15)
  • STM32控制蜂鸣器间隔发出声音(响1s,关闭1s)

    我现在这个蜂鸣器是有缘蜂鸣器,只能发出一种声音。而且是 低电平触发 (根据你们自己的蜂鸣器决定),现在我要做的一个实验就是蜂鸣器响1s,关闭1s。实现间隔的发出声音。 这里我使用的是 定时器6 进行计时。 我这边蜂鸣器对应的引脚是GPIOA_Pin_8 代码也不算多,到这里

    2024年02月12日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包