STM32入坑(四)让你的蜂鸣器响起来

简介

名称:驱动蜂鸣器
功能:蜂鸣器实现报警音,类似于哔哔哔哔…
硬件资源:STM32开发板,有源蜂鸣器及外围电路

蜂鸣器原理

1、按其驱动方式的原理分,可分为:有源蜂鸣器(内含驱动线路)和无源蜂鸣器(外部驱动,本文所说的即是此蜂鸣器);
无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
在这里插入图片描述
①从图a、b外观上看,如将两种蜂鸣器的引脚朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。
②万用表测电阻区别用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。
③同时有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。

2、按构造方式的不同,可分为:电磁式蜂鸣器和压电式蜂鸣器;

压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。

电磁式蜂鸣器,主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。

由于两种蜂鸣器发音原理不同,压电式结构简单耐用但音调单一音色差,适用于报警器等设备。而电磁式由于音色好,所以多用于语音、音乐等设备。

3.优点不同
无源蜂鸣器的优点是:
①便宜;
②声音频率可控,可以做出“多来米发索拉西”的效果;
③在一些特例中,可以和LED复用一个控制口。

有源蜂鸣器的优点是:
①程序控制方便

蜂鸣器电路

  • 14
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您可以通过以下代码在STM32F107RC上使用定时器来控制蜂鸣器: ```c #include "stm32f10x.h" #define BEEP_GPIO GPIOB #define BEEP_PIN GPIO_Pin_8 void BEEP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = BEEP_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BEEP_GPIO, &GPIO_InitStructure); GPIO_ResetBits(BEEP_GPIO, BEEP_PIN); } void BEEP_Sound(uint32_t freq, uint32_t duration) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; uint16_t prescalerValue = 0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 配置TIM2为PWM模式 TIM_TimeBaseStructure.TIM_Period = 20000; TIM_TimeBaseStructure.TIM_Prescaler = prescalerValue; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 配置TIM2通道1为PWM输出 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = (20000 / (2 * freq)); TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_Cmd(TIM2, ENABLE); // 延时一段时间 delay_ms(duration); TIM_OC1PreloadConfig(TIM2, DISABLE); TIM_Cmd(TIM2, DISABLE); TIM_ITConfig(TIM2, TIM_IT_CC1, DISABLE); GPIO_ResetBits(BEEP_GPIO, BEEP_PIN); } int main(void) { BEEP_Init(); while (1) { BEEP_Sound(1000, 1000); delay_ms(2000); } } ``` 这个代码使用了TIM2定时器的PWM模式来控制蜂鸣器。在`BEEP_Sound`函数中,我们首先配置了TIM2的定时器和通道1的PWM输出,然后通过`TIM_OC1Init`函数来控制频率,最后通过`delay_ms`函数来控制铃的持续时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值