普中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 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg200514 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT16 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen16 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠19 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_19 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技21 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计21 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦1 天前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报1 天前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机