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

阅读

《县中的教育》

相关推荐
burning_maple1 分钟前
mysql数据库笔记
数据库·笔记·mysql
hkNaruto4 分钟前
【AI】AI学习笔记:LangGraph 与 LangChain的关系以及系统性学习路线选择
笔记·学习·langchain
jrlong15 分钟前
DataWhale大模型基础与量化微调task3学习笔记(第 5章:深入大模型架构_MoE 架构解析)
笔记·学习
wdfk_prog2 小时前
[Linux]学习笔记系列 --[drivers][base]map
linux·笔记·学习
浅念-2 小时前
链表经典面试题目
c语言·数据结构·经验分享·笔记·学习·算法
啥都会点的大秀3 小时前
声学仿真学习笔记
笔记·学习
不会代码的小猴4 小时前
Linux环境编程第三天笔记
linux·笔记
狐574 小时前
2026-01-18-LeetCode刷题笔记-1895-最大的幻方
笔记·算法·leetcode
AI视觉网奇5 小时前
Epic linux 打包。
笔记·学习·ue5
biuyyyxxx5 小时前
Power Query学习笔记(一)
笔记·学习