蜂鸣器选型与设计(电磁蜂鸣器篇)

蜂鸣器选型与设计(电磁蜂鸣器篇)

蜂鸣器常用分类从两方面
声源类型:压电蜂鸣器( Piezoceramic Element Buzzers )、电磁蜂鸣器( Magnetic Buzzers )
驱动类型:有源蜂鸣器( Indicators )、无源蜂鸣器( Transducers )
本章只简单讨论电磁蜂鸣器的部分结构,重点讨论其在电路中的表现和影响

电磁蜂鸣器

内部构造

在这里插入图片描述

电磁式的蜂鸣器一般是用的电磁的原理,线圈(Coil)通电流产生电磁感应,让磁体(Magnet)产生极性将带有金属的振动膜(Vibrating Disk)吸下,在不通电流时根据振动膜的弹力弹回来。以一定频率间断的通断直流电,使振膜振动发声。

驱动类型

有源蜂鸣器驱动方式

无论电磁压电,有源蜂鸣器外围驱动电路很简单。只要连通,内部的振荡电路会发出方波自激。这里不再过多介绍。

在这里插入图片描述

但需要按照额定供电、且只能按照额定的频率发声,应用场景有限。

无源电磁蜂鸣器驱动方式

无源电磁蜂鸣器需要他励电路让其发声。然而一般 MCU 的引脚并不能输出几十mA的电流( 使用的 STM32F103ZET6 IO最大输出 25mA )直接控制蜂鸣器,使用三极管通断是一种简单的驱动电路

在这里插入图片描述

左侧用开发板连接 PE_5 管脚,使用 TIM3 计时器 生成 4000kHz 的 50% 方波。先将 72M时钟源 预分频至 800k 的频率,计数到 100 生成一次 8kHz 的中断频率,在中断中反转管脚状态。达到 4kHz 的50% 方波

在这里插入图片描述

↑可以看出来 MCU 输出一个近似于 4kHz 的 峰峰值为 3.3V 周期方波。

实线是 A 采样点、虚线是 B 采样点。我们先不连接二极管观察蜂鸣器电压情况。

在这里插入图片描述

黄线为 MCU 输出的方波信号,蓝线为无源电磁蜂鸣器正极对地电压。
可以看到没有二极管的时候,每次关断的时候都会有一个最大 16.8V 的尖峰,远超供电电压 3.3V。
电磁蜂鸣器为了产生磁感应震动振膜,在中柱缠绕的电磁线圈特性类似于电感,会在开通和关断的瞬间都会产生反激电压尖峰。需要二极管来钳位在快速开关时产生的反激电压。↓

在这里插入图片描述

效果显著,在一个关断的反激电压仅仅达到 4.3V 左右在一个可以接受的范围,我们放大看一下。

在这里插入图片描述

电磁蜂鸣器的线圈类似于电感,电感用于电路中的作用更多的是防止瞬间的电源突变,保护核心芯片不受到冲击,也就是图中 MCU 切换至高电平的瞬间,线圈会对徒增的电流有一定的扼制,产生一个比较柔和的充能曲线,直到最后会无限趋近于 2.6V(3.3V 减去三极管的 0.7V 压降)。但在关断的时候就会将之前储存的电能以反向大电流的形式释放出来,会产生有一个比充能前更高的反向尖峰电压,一般使用钳位二极管,配合电路上滤波电路(电容)可以放电。

为了保证三极管有一个确定的状态,不会因为 MCU 上电瞬间误动作,使用一个下拉电阻 R2 并联在基极和发射极端。但不能使用太小的阻值,要保证三级管的导通电压,一般大于 5K 即可。

下一篇我会主要介绍压电蜂鸣器和其无源驱动方式。对比两者的优缺点。
我会尽快更新的

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
压电陶瓷是一种具有压电效应的高灵敏度、微功耗电声器件。首先介绍压电陶瓷蜂鸣器的技术特性,然后重点阐述数字多用表蜂鸣器电路的设计,包括适配ICL7106 型3位单片A / D 转换器、ICL7129 型4位单片A/ D转换器的两种蜂鸣器电路的设计。   目前, 在现代电子技术、传感技术、电声技术及家用电器领域中普遍使用了压电陶瓷。压电陶瓷材料具有压电系数高、耐潮湿、耐高温、烧制方便、成本低廉等优点。由它构成的压电蜂鸣器是一种高效率电声器件, 可制成数字仪器仪表用蜂鸣器 BZ( buzzer) 、扬声器、耳机、传声器( 即话筒) , 电话中的送话器和受话器等。   压电陶瓷( PZT ) 是一种多晶铁电体, 通常是锆钛酸铅 Pb ( ZriT i) O3 , 经高温烧结后又在一定温度下进行极化处理而制成的。原始的压电陶瓷并不具有压电性能。所谓极化, 就是以强磁场使内部紊乱的“磁畴”按照一定的规则重新排列, 从而呈现出压电特性。压电陶瓷蜂鸣器属于灵敏度高( 压电系数可达 2×10 - 9~5×10 - 9 C/ N, 比石英晶体高几百倍) 、微功耗的电声器件。压电效应具有可逆性: 若在压电陶瓷上施以音频电压, 就能产生机械振动, 发出声响; 反之, 压电陶瓷受到机械振动( 或压力) 时, 就产生一定数量的电荷Q, 从电极上可输出电压信号。压电陶瓷的制造工艺成熟, 通过控制搀入杂质的浓度, 可以改变其技术参数, 以满足不同用途的需要。它还具有良好的工艺性, 可以很方便地加工成各种形状。
蜂鸣器演奏乐曲是一种常见的数字系统设计练习。本文将介绍如何使用Verilog语言设计一个能够演奏指定乐曲的蜂鸣器控制系统。 1. 系统概述 本系统由蜂鸣器模块和控制模块组成,其中控制模块通过时钟信号控制蜂鸣器模块的输出,从而实现演奏指定乐曲的目的。 2. 系统设计 2.1 蜂鸣器模块 蜂鸣器模块的主要功能是输出指定频率的正弦波信号。根据正弦波的公式,我们可以得出如下的输出信号: ```verilog assign sin_out = sin_addr[11] ? ~sin_out_pre : sin_out_pre; assign sin_addr = sin_addr_pre + sin_step; ``` 其中,sin_out_pre表示上一个时钟周期的正弦波输出值,sin_addr_pre表示上一个时钟周期的正弦波地址,sin_step为每个时钟周期地址的增量。根据正弦波的性质,我们可以通过改变sin_step来改变输出频率。 2.2 控制模块 控制模块的主要功能是控制蜂鸣器模块的输出,从而实现演奏指定乐曲的目的。 在控制模块中,我们需要定义一个指定乐曲的时序脉冲信号。每个时序脉冲信号的周期代表一个音符的持续时间,而每个时序脉冲信号的高电平时间代表该音符的频率。 ```verilog always @(posedge clk or negedge rst) begin if(~rst) begin tone_step <= 12'b0; tone_addr <= 12'b0; tone_pulse <= 1'b0; end else begin if(tone_pulse) begin tone_addr <= tone_addr + tone_step; end if(count == 1) begin tone_pulse <= ~tone_pulse; if(tone_pulse) begin tone_step <= tone_data[tone_index][11:0]; tone_addr <= 12'b0; tone_index <= tone_index + 1; end end end end ``` 其中,tone_data表示指定乐曲的频率数据,每个元素代表一个音符的频率。tone_index表示当前演奏的音符序号,tone_step表示当前音符的地址增量,tone_addr表示当前正弦波的地址。count表示当前时序脉冲信号的计数器,当计数器为1时,需要切换到下一个音符。 3. 系统实现 在实现时,我们需要将蜂鸣器模块和控制模块集成起来。 ```verilog module buzzer( input clk, input rst, output reg sin_out ); reg [11:0] sin_addr_pre; // 正弦波地址 reg [11:0] sin_step; // 正弦波地址增量 reg sin_out_pre; // 上一个时钟周期的正弦波输出值 // 蜂鸣器模块 assign sin_out = sin_addr[11] ? ~sin_out_pre : sin_out_pre; assign sin_addr = sin_addr_pre + sin_step; always @(posedge clk or negedge rst) begin if(~rst) begin sin_addr_pre <= 12'b0; sin_step <= 12'b0; sin_out_pre <= 1'b0; end else begin sin_addr_pre <= sin_addr; sin_step <= 12'd10; sin_out_pre <= sin_out; end end endmodule module buzzer_controller( input clk, input rst, output reg [11:0] sin_addr, input [11:0] tone_data[7] ); reg [11:0] tone_step; // 音符地址增量 reg [11:0] tone_addr; // 音符地址 reg [2:0] count; // 时序脉冲信号计数器 reg [2:0] tone_index; // 当前演奏的音符序号 reg tone_pulse; // 时序脉冲信号 // 控制模块 always @(posedge clk or negedge rst) begin if(~rst) begin tone_step <= 12'b0; tone_addr <= 12'b0; tone_pulse <= 1'b0; count <= 3'd0; tone_index <= 3'd0; end else begin if(tone_pulse) begin tone_addr <= tone_addr + tone_step; end if(count == 3'd1) begin tone_pulse <= ~tone_pulse; if(tone_pulse) begin tone_step <= tone_data[tone_index][11:0]; tone_addr <= 12'b0; tone_index <= tone_index + 1; end end if(count == 3'd7) begin count <= 3'd0; end else begin count <= count + 1; end end end assign sin_addr = tone_pulse ? tone_addr : 12'b0; endmodule module buzzer_top( input clk, input rst, output reg sin_out ); wire [11:0] sin_addr; wire [11:0] tone_data[7] = { 12'd477, // C 12'd425, // D 12'd379, // E 12'd357, // F 12'd318, // G 12'd283, // A 12'd252 // B }; buzzer_controller controller(clk, rst, sin_addr, tone_data); buzzer buzzer(clk, rst, sin_out); endmodule ``` 在实现时,我们需要将蜂鸣器模块和控制模块实例化起来,并通过wire连接起来。tone_data数组中存储了指定乐曲的频率数据,通过修改该数组中的元素可以演奏不同的乐曲。 4. 总结 本文介绍了如何使用Verilog语言设计一个能够演奏指定乐曲的蜂鸣器控制系统。该系统由蜂鸣器模块和控制模块组成,其中控制模块通过时序脉冲信号控制蜂鸣器模块的输出,从而实现演奏指定乐曲的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值