蜂鸣器简介

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出1.5~5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。其实一句话就可概括它们之间的区别,想要压电式蜂鸣器发声,需提供一定频率的脉冲信号;想要电磁式蜂鸣器发声,只需提供电源即可。这里说的有源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一定频率的脉冲信号才能发声,频率大小通常在1.5-5KHz 之间。如果给有源蜂鸣器加一个1.5-5KHz 的脉冲信号,同样也会发声,而且改变这个频率,就可以调节蜂鸣器音调,产生各种不同音色、音调的声音。输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小

硬件设计

在前面我们已经对STM32 的GPIO 做了简单介绍,并且还使用了其中IO 口直接控制开发板上的LED。对于本章要实现蜂鸣器的控制,我们能否直接使用STM32 的IO 口驱动呢?根据STM32F103 芯片数据手册可知,单个IO 口的最大输出电流是25mA,而蜂鸣器的驱动电流是30mA 左右,两者非常接近,有的朋友就想直接用IO 口来驱动,但是有没有考虑到整个芯片的输出电流,整个芯片的输出电流最大也就150mA,如果在驱动蜂鸣器上就耗掉了30mA,那么STM32 其他的IO 口及外设电流就非常拮据了。所以我们不会直接使用IO 口驱动蜂鸣器,而是通过三极管把电流放大后再驱动蜂鸣器,这样STM32 的IO 口只需要提供不到1mA 的电流就可控制蜂鸣器。所以我们也经常说到STM32 芯片是用来做控制的,而不是驱动

我们开发板上的蜂鸣器模块电路如图所示:

从这两个电路图可以看到,无源蜂鸣器的控制需要给其一定频率的脉冲才能发声,仅给一个高电平或者低电平是不能发声的,因此蜂鸣器模块电路直接将STM32 引脚接在NPN 三极管的基极上,然后三极管的发射极连接蜂鸣器,无需考虑外界对PB5 脚产生的高低电平会对蜂鸣器发声干扰。而有源蜂鸣器,它只要有电源就会发声,因此就必须考虑外界对PB5 引脚电平的干扰问题。通过电阻R06 和PNP 三极管TP6 进行电流放大,从而驱动蜂鸣器。电阻R66 是一个上拉电阻,用来防止蜂鸣器误发声。当PB5 引脚输出低电平时,PNP三极管导通,蜂鸣器发声;当PB5 引脚输出高电平时,PNP 三极管截止,蜂鸣器
停止发声。

软件设计

蜂鸣器初始化函数
我们打开工程中beep.c 文件,里面代码如下:

#include "beep.h"
/****************************************************************
***************
* 函数名: BEEP_Init
* 函数功能: 蜂鸣器初始化
* 输入: 无
* 输出: 无
*****************************************************************
**************/
void BEEP_Init() //端口初始化
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO
RCC_APB2PeriphClockCmd(BEEP_PORT_RCC,ENABLE); /* 开启GPIO 时钟*/
/* 配置GPIO 的模式和IO 口*/
GPIO_InitStructure.GPIO_Pin=BEEP_PIN; //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; // 设置推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(BEEP_PORT,&GPIO_InitStructure); /* 初始化GPIO*/
}

BEEP_Init()函数用来初始化蜂鸣器的端口及时钟,在函数内我们看到有几个参数不是库函数内的,比如BEEP_PIN、BEEP_PORT、BEEP_PORT_RCC,这种情况一般是我们自己定义的宏,通常放在对应的头文件内,我们打开beep.h,可
以看到如下代码:

#ifndef _beep_H
#define _beep_H
#include "system.h"
/* 蜂鸣器时钟端口、引脚定义*/
#define BEEP_PORT       GPIOB
#define BEEP_PIN         GPIO_Pin_5
#define BEEP_PORT_RCC    RCC_APB2Periph_GPIOB
#define beep    PBout(5)
void BEEP_Init(void);
#endif

里面就将蜂鸣器的GPIO 端口及管脚进行了宏定义,这样做是方便大家移植程序,只需要对这个宏修改就能实现蜂鸣器的初始化修改。

主函数
我们打开工程中main.c 文件,里面代码如下:

/****************************************************************
***************
* 函数名: main
* 函数功能: 主函数
* 输入: 无
* 输出: 无
*****************************************************************
**************/
int main()
{
u16 i=0;
SysTick_Init(72);
LED_Init();
BEEP_Init();
while(1)
{
i++;
if(i%10==0)
{
beep=!beep;
}
if(i%20000==0)
{
led1=!led1;
}
delay_us(10);
}
}

主函数实现的功能比较简单,首先将使用到的外设硬件进行初始化,然后进入while 循环,间隔100us 对蜂鸣器管脚电平翻转,这样就产生了一个频率为5KHz 的脉冲,因此无源蜂鸣器就会发声,当然有源蜂鸣器的控制可以更简单,只需要给它一个低电平即可,为了实现2 块板子程序的兼容,这里就统一采用此种方式控制蜂鸣器。间隔200ms 对led1 管脚电平翻转,因为使用到了delay_us延时函数,所以在main 函数开始处就需要调用SysTick_Init(72)初始化。

11 . 蜂鸣器实验介绍相关推荐

  1. 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...

    1)实验平台:探索者 STM32F407 开发板 2)摘自<STM32F4 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 蜂鸣器实验 上一章,我们介绍了 ...

  2. ×××(虚拟专用网)服务实验介绍

    打造×××(虚拟专用网)服务实验介绍(一)          ×××的作用就是实现分布式访问,通过拨号或虚拟专用网连接网络,一旦客户机可以登陆网络,就好象局域网一样,使用网络资源.介绍几个实验给大家. ...

  3. 【BP靶场portswigger-服务端5】业务逻辑漏洞-11个实验(全)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  4. 51单片机 | 蜂鸣器实验

    文章目录 一. 蜂鸣器介绍 二.硬件设计 三.软件设计 四.实验现象   通过单片机的一个 IO 口控制 板载无源蜂鸣器,实现蜂鸣器控制. 一. 蜂鸣器介绍   蜂鸣器是一种一体化结构的电子讯响器,采 ...

  5. s5p6818PWM驱动蜂鸣器实验

    s5p6818PWM驱动蜂鸣器实验 一, PWM 概念 PWM (Pulse Width Modulation ):脉冲宽度调制解调器. 阈值:就是输出的 PWM 中,高饱和保持的时间与该PWM 的时 ...

  6. 【正点原子STM32连载】第十四章 蜂鸣器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  7. Zigbee---[复习]--基于CC2530的LED闪烁和蜂鸣器实验

    文章目录 CC2530-I/O相关寄存器 寄存器PxSEL 寄存器PxDIR 寄存器PxINP(本文并不使用,默认值就可以) LED闪烁实验 蜂鸣器实验 CC2530-I/O相关寄存器 这里只是简单介 ...

  8. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  9. C++11 unordered_map详细介绍

    整理的算法模板合集: ACM模板 目录: 1.介绍 1.1 特性 2. 模版 2.1 迭代器 3. 功能函数 3.1 构造函数 3.2 容量操作 3.2.1 size 3.2.2 empty 3.3 ...

最新文章

  1. 一本冷门书:以色列闪盘之父的创业故事
  2. Python程序设计题解【蓝桥杯官网题库】 DAY10-算法训练
  3. 干得累死,并不见得老板就待见你?
  4. SpringBoot 包含处理
  5. ubuntu Django mysqlclient的问题
  6. python面向对象作业_面向对象作业
  7. 正交设计 python算法_SPSS统计分析案例:无空白列重复正交试验设计方差分析
  8. k8s集群的搭建-云服务器
  9. 4部网页配色电子书库之第3部——网页配色方案速查表
  10. 微信SDK删除支付模块流程
  11. openpyxl 打开大文件很慢_解决python执行较大excel文件openpyxl慢问题
  12. redis进阶之bigkey和hotkey
  13. 图片上传时,显示格式错误怎么办?
  14. Edman降解蛋白测序法的基本步骤解析:耦合和裂解过程
  15. 【计算机网络】已知若干个网络,如何计算汇聚成超网后的地址?
  16. Kafaka报错:Creating topics with default partitions/replication factor are only supported in CreateTopi
  17. 【算法训练营学习笔记-Week06】一遍不懂就多刷几遍
  18. 技术分享| 视频监控融合方案
  19. 获取商品ID下所有的sku精准库存api
  20. Life Situation Two

热门文章

  1. 某计算机桌面右下角本地连接图标变为,win7系统本地连接图标显示红色叉的解决方法...
  2. 性能测试的常见瓶颈分析及调优方法
  3. Hadoop详细配置教程
  4. springboot 常用工具(IOUtils、FileUtils)
  5. 如何在6秒内计算出机载激光雷达理论平均点密度
  6. 利用php屏蔽海外ip访问,高效实现
  7. HashMap底层原理分析
  8. 解决UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c
  9. 现代计算机网络的发展,现代计算机网络发展-东南大学学报.pdf
  10. Windows Server 2003 共享文件夹权限设置