打工人日报#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 秒发声和停止发声的效果。

阅读

《县中的教育》

相关推荐
疯狂打码的少年30 分钟前
【程序语言与编译】NFA转DFA(子集构造法)
前端·笔记
咸甜适中40 分钟前
rust语言学习笔记Trait(十七)Send、Sync(线程间数据所有权)
笔记·学习·rust
尘汐筠竹1 小时前
Day1-2 学习笔记:在 AMD 云环境上部署 Gemma 4 大模型
笔记·学习·datawhale·amdev
逸模1 小时前
逸模 VS CAD+SU系列(三)工程量---逸模模型级智能算量,数据同源闭环 助力公装项目精准控本高效拓店
人工智能·笔记·算量·公装·构件库
zhangrelay1 小时前
个体智能大模型使用的主观数据复盘-节选-2026-
笔记·学习·课程设计
lunzi_08261 小时前
【学习笔记】《Python编程 从入门到实践》第9章:类、继承、组合与面向对象编程
笔记·python·学习
神明不懂浪漫1 小时前
【第二章】Java中的数据类型,运算符与程序逻辑控制
java·开发语言·经验分享·笔记
05候补工程师2 小时前
【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析
数据结构·经验分享·笔记·考研·算法·排序算法
问心无愧05132 小时前
ctf show web入门107
android·前端·笔记·android studio
chase。2 小时前
【学习笔记】面向机器人食物舀取的 spillage-aware 引导扩散策略
笔记·学习·机器人