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

阅读

《县中的教育》

相关推荐
锦瑟弦音2 小时前
Luban + Cocos3.8.7 + Typescript + Json
笔记·游戏·typescript
大胡子大叔2 小时前
【与身俱能】机械臂训练(学习笔记)
笔记·学习
码以致用3 小时前
docker-compose笔记
笔记·docker·容器
南_山无梅落4 小时前
4-Python3输入输出学习笔记:input()与print()的灵活使用
笔记·python·学习·input·print
中屹指纹浏览器4 小时前
指纹浏览器分布式协同计算技术架构与实现
服务器·网络·经验分享·笔记·媒体
代码游侠4 小时前
学习笔记——文件I/O
linux·数据库·笔记·学习·算法
WYiQIU4 小时前
突破字节前端2-1⾯试: JS异步编程问题应答范式及进阶(视频教学及完整源码笔记)
开发语言·前端·javascript·vue.js·笔记·面试·github
im_AMBER5 小时前
Canvas架构手记 08 CSS Transform | CSS 显示模型 | React.memo
前端·css·笔记·学习·架构
Hacker_Z&Q5 小时前
HTML5笔记3 (表格、表单、H5新标签)
笔记