普中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延时)

相关推荐
星栖与芯12 分钟前
# STM32MP157+LiteOS-M GCC极简工程:启动源码适配+Windows Make终极避坑
windows·stm32·单片机
深圳市恒锐丰科技杨生1 小时前
SA8330 2.5‑15V 2.0A 三相半桥无刷电机驱动芯片|低压 BLDC 预驱动方案
嵌入式硬件·硬件工程
智购科技自动售卖机厂家1 小时前
2026自动售货机云端数据备份策略:从全量备份到增量恢复的工程实践~YH
数据库·stm32·嵌入式硬件·物联网·架构·零售
小何code1 小时前
STM32入门教程,第12课(下),旋转编码器计次
单片机·嵌入式硬件
春风解人意2 小时前
从零开始学习嵌入式P29----线程间的通信
c语言·嵌入式硬件·学习
SMT贴片河南芯途电子2 小时前
中小批量SMT贴片加工的痛点与现代化柔性制造解决方案!
嵌入式硬件·物联网·边缘计算·制造
Messy create3 小时前
【BMS-AFE汇总】
stm32·能源
恒锐丰小瑞3 小时前
率能SS8837T 12V/1.8A/单通道H桥电机驱动IC,超低睡眠电流(120nA)与独立逻辑电源,用于摄像机/玩具/机器人
嵌入式硬件·机器人
从零开始的嵌入式之旅3 小时前
day32
linux·c语言·经验分享·笔记·嵌入式硬件
集芯微电科技有限公司3 小时前
低压功率MOSFETs选型手册
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络