普中STM32-PZ6806L开发板(HAL库函数实现-无源蜂鸣器响动)

简介

复制代码
本篇将驱动无源蜂鸣器进行5KHz的响动。

电路原理图

蜂鸣器电路原理图

主芯片驱动引脚原理图

其他知识

蜂鸣器类型

蜂鸣器分为

有源蜂鸣器 :触发就会响。

无源蜂鸣器 : 需要给源, 输出一定频率的音频信号, 震动发声;

占空比

为什么占空比总是50%呢?

当蜂鸣器的信号占空比较低时,即高电平时间较短,低电平时间较长。这时蜂鸣器的发声强度会较低,声音持续时间也较短。

当蜂鸣器的信号占空比较高时,即高电平时间较长,低电平时间较短。这时蜂鸣器的发声强度也会较高,但声音持续时间相对较短。因为蜂鸣器在高电平时间过长的情况下,虽然能够充分振动产生较大的声音,但声音传播时间变短,导致发声时间较短。这种情况下,蜂鸣器的声音更加尖锐和紧凑。- 来自 蜂鸣器发声强度与信号占空比的关系是怎么样的?

虽然查到的资料并没有说明占空比50%是绝对的, 除非你仔细测试研究了适合你蜂鸣器的占空比, 否则50%就是比较合适的, 本次实验也是在50%占空比的情况下进行测试的;

us延时

参考 普中STM32-PZ6806L开发板(HAL库函数实现-TIM2实现us延时)

本次使用us延时, 而不是PWM实现对应音阶频率, 需要用到us延时, 而系统提供的延时是ms级别的, 所以需要实现一个us的延时方式。

半周期

因为占空比是50%, 高低电平各一半, 半周期指的就是时间的一半

实现振动

如何实现振动, 浅意来说就需要实现波, 令蜂鸣片振动,从而发声, 无源蜂鸣器发声频率范围是在1.5KHz-5KHz, 所以实现这个范围的延时, T(时间s) = 1/f(Hz频率), 例如我要产生5KHz的音频信号, 时间是200us, 那半周期就是100us, 就是在

实现步骤

创建项目

参考 普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯)

TIM2初始化

TIM2用来实现us级别的延时

初始化 参考 普中STM32-PZ6806L开发板(HAL库函数实现-TIM2实现us延时)

初始化蜂鸣器引脚

PB5 引脚设置为输出

添加用户代码

main.c

c 复制代码
/*
 *  time : 执行次数
*/
void BEEP_5KHzAction(uint16_t time)
{
	while (time--)
	{
		HAL_GPIO_TogglePin(BEEP_PORT, BEEP_PIN); 
		delay_us(100); // 半周期100us
	}
}

int main()
{
...
while (1)
{
	BEEP_5KHzAction(1); 
}
...
}

代码

不需要下载, 基本代码上面都提供了

参考

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)
普中STM32-PZ6806L开发板(HAL库函数实现-TIM2实现us延时)

相关推荐
赋能大师兄1 小时前
单片机3.3V和5V电压等级
单片机·3.3v·5v
BreezeJuvenile1 小时前
外设模块学习(6)——DHT11温湿度传感器(STM32)
stm32·单片机·dht11·温湿度传感器
桃里桑1 小时前
【嵌入式软件】STM32 UART转485通信问题
stm32·单片机·嵌入式硬件
萧技电创EIIA3 小时前
基于wifi摄像头与单片机的串口透传及二次开发
单片机·51单片机·硬件工程·个人开发
三佛科技-134163842123 小时前
迷你加湿器方案开发,加湿器/香薰机MCU控制方案开发设计
单片机·嵌入式硬件·智能家居·pcb工艺
hazy1k3 小时前
51单片机基础-矩阵按键
嵌入式硬件·矩阵·51单片机
一支闲人4 小时前
带你了解STM32:SPI通信(硬件部分)
stm32·单片机·嵌入式硬件·基础知识
我先去打把游戏先6 小时前
VSCode通过SSH连接到Ubuntu虚拟机失败“找不到ssh安装”问题解决
笔记·vscode·单片机·嵌入式硬件·学习·ubuntu·ssh
XiangrongZ6 小时前
江协科技STM32课程笔记(三)—定时器TIM(输出比较)
笔记·科技·stm32
学工科的皮皮志^_^9 小时前
电压源和电流源学习理解
单片机·嵌入式硬件·学习