【STM32学习笔记】(10)——蜂鸣器实验详解

蜂鸣器实验

蜂鸣器的简介

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“ZZG”、“LB”、“JD”等)表示。

蜂鸣器的构造原理

        1、压电式蜂鸣器

压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管

多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出100~500HZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

压电蜂鸣片 由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。

        2、电磁式蜂鸣器

电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

蜂鸣器工作发声原理图

蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型。

无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声音信号输出,无源他激型蜂鸣器的工作发声原理图如下图:

         有源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号,有源自激型蜂鸣器的工作发声原理图如下图:

蜂鸣器的分类

BUZZER蜂鸣器的分类:

        1、按其驱动方式的原理分,可分为:有源蜂鸣器(内含驱动线路,也叫自激式蜂鸣器)和无源蜂鸣器(外部驱动,也叫他激式蜂鸣器);

        2、按构造方式的不同,可分为:电磁式蜂鸣器压电式蜂鸣器

        3、按封装的不同,可分为:DIP BUZZER(插针蜂鸣器)和SMD BUZZER(贴片式蜂鸣器);

        4、按电流的不同,可分为:直流蜂鸣器和交流蜂鸣器。

        其中,以直流最为常见压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。

电磁式蜂鸣器,主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。

        由于两种蜂鸣器发音原理不同,压电式结构简单耐用但音调单一,适用于报警器等设备。而电磁式由于音质好,所以多用于语音、音乐等设备。

有源蜂鸣器和无源蜂鸣器

        有源蜂鸣器和无源蜂鸣器的外观如下图中a、b所示。

 

                                                                a)有源 b)无源 

判断有源蜂鸣器和无源蜂鸣器的方法:

        从上图中a、b外观上看,两种蜂鸣器好像一样,但仔细看,两者的高度略有区别,有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚都朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。

        进一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "-"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。

        有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。

有源蜂鸣器与无源蜂鸣器的区别:

        注意:这里的“不是指电源,而是指震荡源。

        也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫;

        而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K-5K的方波去驱动它。

        有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

无源蜂鸣器的优点是:

        1. 便宜

        2. 声音频率可控,可以做出“多来米发索拉西”的效果

        3. 在一些特例中,可以和LED复用一个控制口

有源蜂鸣器的优点是:

        程序控制方便

硬件设计

        本章需要用到的硬件有:

        1)指示灯 DS0

        2)蜂鸣器

        蜂鸣器的驱动信号连接在 STM32 的 PB8 上。

        图中我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R33 主要用于防止蜂鸣器的误发声。

        当 PB8 输出高电平的时候,蜂鸣器将发声,当 PB.8 输出低电平的时候,蜂鸣器停止发声。

 

软件设计

       在工程文件目录下面新建两个文件夹分别为:beep.c和beep.h。并在把源文件添加到工程,和添加头文件的路径。

       在beep.c中的代码为:

#include "beep.h"
//初始化 PB8 为输出口.并使能这个口的时钟 
//LED IO 初始化
void BEEP_Init(void)
{
 	GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 	//使能 GPIOB 端口时钟
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->GPIOB.8 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为 50MHz
 	GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化 GPIOB.8
 	GPIO_ResetBits(GPIOB,GPIO_Pin_8); //输出 0,关闭蜂鸣器输出
} 

        这段代码 仅包含 1 个函数:void BEEP_Init(void),该函数的作用就是使能 PORTB 的时钟,同时配置 PB8 为推挽输出。

        在beep.h中的代码为:

#ifndef __BEEP_H
#define __BEEP_H
#include "sys.h" 
//蜂鸣器端口定义
#define BEEP PBout(8) // BEEP,蜂鸣器接口
void BEEP_Init(void); //初始化 
#endif

        通过位带操作来实现某个 IO 口的输出控制,BEEP 就直接代 表了 PB8 的输出状态。我们只需要令 BEEP=1,就可以让蜂鸣器发声。

        在 main.c 里面编写如下代码:

#include "sys.h"
#include "delay.h"
#include "led.h" 
#include "beep.h"
//ALIENTEK 精英 STM32 开发板实验 2
//蜂鸣器实验 
int main(void)
{
    delay_init(); //延时函数初始化 
    LED_Init(); //初始化与 LED 连接的硬件接口
    BEEP_Init(); //初始化蜂鸣器端口
    while(1)
    {
  	    LED0=0;
        BEEP=0; 
        delay_ms(300);
        LED0=1; 
        BEEP=1; 
        delay_ms(300);
    }
} 

 

实验现象

        DS0 亮的时候蜂鸣器不叫,而 DS0 灭的时候,蜂鸣器叫(因为他们的有效信号相反)。间隔为 0.3 秒左右,符合程序设计。

物联沃分享整理
物联沃-IOTWORD物联网 » 【STM32学习笔记】(10)——蜂鸣器实验详解

发表评论