打工人日报#20251210

打工人日报#20251210

有源蜂鸣器和无源蜂鸣器是两种常见的发声器件,核心区别在于是否内置振荡电路,以及由此导致的驱动方式、应用场景等差异。

核心区别

  1. 结构与驱动方式
    有源蜂鸣器
    内置振荡电路(包含三极管、电阻、电容等组成的振荡模块),只需通入直流电压(如 3V、5V),即可通过内部振荡电路产生固定频率的声波,直接发声。
    引脚通常为 2 根(正、负极),极性敏感(需区分正负极供电)。
    无源蜂鸣器
    无内置振荡电路,本质是一个电磁式扬声器(由线圈、磁铁、振动膜片组成),需要外部输入交变信号(如方波、正弦波),通过交变电流产生变化的磁场,带动膜片振动发声。
    引脚无极性(部分型号可能有正负极标识,但主要是为了方便焊接,实际可互换)。
  2. 发声频率
    有源蜂鸣器:频率固定(由内置振荡电路决定,常见 4kHz 左右),只能发出单一音调。
    无源蜂鸣器:频率由外部输入信号的频率决定,可通过改变信号频率发出不同音调(如音乐、高低音报警)。
  3. 功耗与体积
    有源蜂鸣器:因内置电路,功耗稍高(通常几 mA 到十几 mA),体积相对较大(内置电路占用空间)。
    无源蜂鸣器:无额外电路,功耗较低(通常 1-5mA),体积可做得更小。
  4. 价格
    有源蜂鸣器因包含振荡电路,成本略高;无源蜂鸣器结构简单,价格更低。

应用场景

  1. 有源蜂鸣器
    适合只需单一固定音调的场景,驱动简单(无需复杂信号生成电路),例如:
    设备上电提示音、故障报警(如烟雾报警器、门禁系统);
    按键反馈音(如计算器、遥控器);
    低功耗场景中需要简单发声(如电池供电的小型仪器)。
    优点:驱动方便,只需连接直流电源即可工作,适合对电路设计复杂度要求低的场景。
  2. 无源蜂鸣器
    适合需要多样化音调的场景,可通过编程控制频率实现丰富音效,例如:
    音乐播放(如玩具电子琴、儿童故事机);
    多模式报警(如不同频率区分不同故障类型,如设备过热、电压异常);
    语音提示(配合特定频率组合模拟简单语音信号)。
    优点:灵活性高,可实现复杂音效,且功耗低、体积小,适合需要定制化声音的场景。

总结

使用 STM32 控制有源蜂鸣器的代码示例,假设蜂鸣器连接到 PA5 引脚,以 STM32F407 为例,使用 HAL 库进行开发

bash 复制代码
#include "stm32f4xx_hal.h"

// 定义蜂鸣器控制引脚
#define Buzzer_GPIO_Port GPIOA
#define Buzzer_Pin GPIO_PIN_5

// 初始化蜂鸣器相关GPIO
void Buzzer_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 使能GPIOA时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();

    // 配置PA5为推挽输出模式
    GPIO_InitStruct.Pin = Buzzer_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(Buzzer_GPIO_Port, &GPIO_InitStruct);

    // 初始状态关闭蜂鸣器
    HAL_GPIO_WritePin(Buzzer_GPIO_Port, Buzzer_Pin, GPIO_PIN_RESET);
}

// 控制蜂鸣器发声
void Buzzer_On(void)
{
    HAL_GPIO_WritePin(Buzzer_GPIO_Port, Buzzer_Pin, GPIO_PIN_SET);
}

// 控制蜂鸣器停止发声
void Buzzer_Off(void)
{
    HAL_GPIO_WritePin(Buzzer_GPIO_Port, Buzzer_Pin, GPIO_PIN_RESET);
}

int main(void)
{
    // 初始化HAL库
    HAL_Init();

    // 初始化蜂鸣器
    Buzzer_Init();

    while (1)
    {
        // 蜂鸣器发声1秒
        Buzzer_On();
        HAL_Delay(1000);

        // 蜂鸣器停止发声1秒
        Buzzer_Off();
        HAL_Delay(1000);
    }
}

Buzzer_Init函数用于初始化蜂鸣器所连接的 GPIO 引脚,将其配置为推挽输出模式,并初始化为低电平(蜂鸣器关闭状态)。

Buzzer_On函数通过设置引脚为高电平来使蜂鸣器发声。

Buzzer_Off函数通过设置引脚为低电平来使蜂鸣器停止发声。

在main函数中,通过循环调用Buzzer_On和Buzzer_Off函数,实现蜂鸣器每隔 1 秒发声和停止发声的效果。

阅读

《县中的教育》

相关推荐
INS_KF8 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
tju新生代魔迷9 小时前
Verilog HDL 学习笔记(十三)| 第13章 编程语言接口(PLI)
笔记·学习
点心的游戏开发世界10 小时前
UnityShaderGraph滚动UV笔记
笔记·uv
瑞码空间10 小时前
git知识点黄金笔记
笔记·git·elasticsearch
天若有情67312 小时前
Node+MySQL小型全栈笔记项目实战课程分享
数据库·笔记·mysql
摇滚侠14 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 JDBC 事务管理 阅读笔记 33
spring boot·笔记·后端
Wendy不吃榴莲15 小时前
# AI短剧教程 - 《后西游记》开播后,AI影视为什么更考验“连续讲故事”?
人工智能·笔记·学习·ai·视频
Agudamu116115 小时前
B站学习视频怎么变笔记:用 Ai好记 + Obsidian 搭建个人知识库的完整教程
人工智能·笔记·学习·音视频
疯狂打码的少年17 小时前
【数据库技术】SQL嵌套查询(IN/EXISTS/ANY/ALL)
数据库·笔记·sql
凯尔萨厮17 小时前
Java学习笔记十四(网络通信)
笔记·学习