STM32实例-蜂鸣器实验

2023-05-16

本章我们通过另外一个实验来讲述 STM32 IO 口的输出。通过 STM32F1 芯片的一个 IO口控制板载有源/无源蜂鸣器,实现蜂鸣器控制。
蜂鸣器介绍
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(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%100)
    {
    beep=!beep;
    }
    if(i%20000
    0)
    {
    led1=!led1;
    }
    delay_us(10);
    }
    }
    主函数实现的功能比较简单,首先将使用到的外设硬件进行初始化,然后进入 while 循环,间隔 100us 对蜂鸣器管脚电平翻转,这样就产生了一个频率为5KHz 的脉冲,因此无源蜂鸣器就会发声,当然有源蜂鸣器的控制可以更简单,只需要给它一个低电平即可,为了实现 2 块板子程序的兼容,这里就统一采用此种方式控制蜂鸣器。间隔 200ms 对 led1 管脚电平翻转,因为使用到了 delay_us延时函数,所以在 main 函数开始处就需要调用 SysTick_Init(72)初始化,这个在我们后面所有程序都会使用,后面就不重复。
    将工程程序编译下载到开发板内,可以看到 D1 指示灯间隔 200ms 闪烁,蜂鸣器发声。
    更多学习交流可以私我薇:(壹叁贰陆零伍陆贰零贰玖)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32实例-蜂鸣器实验 的相关文章

随机推荐

  • python--爬取微信公众号

    缘由 相信大家有时候面试的时候会遇到爬取微信公众号的事情 xff0c 终于闲了会参考大佬文章自己也搞了一个微信公众号的爬取简单分享一下 xff0c 莫嫌弃代码low 借鉴知识 博客参考 xff1a https blog csdn net x
  • 物联网操作系统的三大核心流派

    物联网操作系统的三大核心流派 目前 xff0c 市面上的物联网操作系统 基本形成了三大核心流派 1 由传统的嵌入式RTOS发展而来 xff0c 典型代表 xff1a FreeRTOS RT Thread LiteOS uCOS MICO 优
  • “> /dev/null 2>&1“ 含义

    在使用python时 xff0c 有时我们可能会看到这样的代码段 pip install gym pyvirtualdisplay span class token operator gt span span class token ope
  • 认识MEC

    文章目录 一 什么是MEC 二 什么是移动通信系统 三 为什么要有MEC 一 什么是MEC 所谓MEC 从字面上直观理解就能知道 这是一种运用在移动通信系统 Mobile 边缘节点 Edge 并承担大量计算任务 Computer 的玩意儿
  • ROS学习-2 工作空间文件结构和创建功能包

    古月居ROS入门21讲第九个视频 src放功能包的源码和laungh文件 build是编译过程中产生的中间文件 xff0c 二进制文件 install是安装空间 xff0c 放最终编译生成的可执行文件的 xff0c 可以给客户使用的文件 d
  • HC32L系列MCU在KEIL新建工程后在JLINK 下 SW Device下找不到设备的解决方法

    HC32L系列MCU在KEIL新建工程后在JLINK 下 SW Device下找不到设备的解决方法 问题 xff1a 新建工程HC32L的工程 xff0c 通过JLINK连接目标板 xff0c 点击KEIL环境的魔术棒 xff0c 选取JL
  • 漫谈Anchor-based和Anchor-Free

    曾几何时 xff0c Anchor based独霸目标检测这块CV疆域内的肥沃之地 如今 xff0c Anchor Free以其灵活的走位在目标检测中有了一席之地 xff0c 正以星星之火可以燎原之势扩大着自己的声势 Anchor base
  • 【新书推荐】【2020】基于MATLAB和Pixhawk的多轴飞行器设计与控制实践

    本书是斯普林格于2017年出版的 Introduction to Multicopter Design and Control 的姊妹版本 xff0c 旨在通过一个实际的过程帮助读者加深对多轴飞行器设计与控制的理解 As the siste
  • 【新书推荐】【2020】无人机系统设计

    从系统角度全面介绍无人飞机系统的设计和分析 Provides a comprehensive introduction to the design and analysis of unmanned aircraft systems with
  • HDFS使用Kerberos

    转载自 xff1a http www datastart cn tech 2016 06 07 kerberos 1 html 本文尝试记录HDFS各服务配置使用kerberos的过程 xff0c 配置的东西比较多 xff0c 一定会有疏漏
  • 【无人机】【2011.03】无人飞行器的自主飞行研究

    本文为澳大利亚悉尼大学 xff08 作者 xff1a Nicholas R J Lawrance xff09 的博士论文 xff0c 共233页 无人机 xff08 UAV xff09 在一系列工业 科学和国防应用中提供了独特的能力 小型无
  • 【无人机】【2019】无人机巡线路由算法研究

    本文为美国密苏里理工大学 xff08 作者 xff1a YU LI xff09 的硕士论文 xff0c 共79页 随着机器人技术的迅速发展 xff0c 越来越多的公用事业公司使用机器人来执行各种任务 无人机是一种高效的高压输电线路巡检机器人
  • 【电力电子】【2010.09】无人机系统的自适应控制

    四旋翼直升无人机 本文为美国麻省理工学院 xff08 作者 xff1a Zachary Thompson Dydek xff09 的博士学位论文 xff0c 共139页 自适应控制被认为是未来高性能 关键安全系统 xff08 如高超声速飞行
  • 【新书推荐】【2018.11】无人机多传感器导航的非线性卡尔曼滤波

    2018 11 无人机多传感器导航的非线性卡尔曼滤波Nonlinear Kalman Filter for Multi Sensor Navigation of Unmanned Aerial Vehicles xff0c 共254页 如果
  • 【源码】轻松实现四轴飞行器的模拟与控制

    本模型取自题为 Quadcopter Simulation and Control Made Easy 的网络研讨会 xff0c 您可以在这里找到相关视频内容 xff1a https www mathworks com videos qua
  • 【无人机】【2014.08】无人机循环路由

    本文为以色列理工学院 xff08 作者 xff1a Nir Drucker xff09 的硕士论文 xff0c 共65页 许多无人驾驶飞行器 xff08 UAV xff09 针对的国防和民用相关任务涉及在各种时间限制下监测预先确定的一组地面
  • 学习【gRPC C++简单示例及代码】

    文章目录 0 启动程序1 未作修改部分1 1 demo proto 2 添加注释部分2 1 server cc2 2 client cc 3 重点修改部分3 1 CMakeLists txt原始代码3 2 CMakeLists txt精简修
  • 利用Gitee搭建私人仓库-https篇

    利用Gitee搭建私人仓库 https篇 第一步 xff1a 注册Gitee账号https gitee com 第二步 xff1a 创建私人仓库 安装git 第一步 xff1a 下载git git下载地址第二步 xff1a 按照默认安装就好
  • 嵌入式开发必看:PCB设计的这几个问题,你能明白了吗?

    PCB设计布局 xff0c 是把电路器件放在印制电路板布线区内 布局是否合理不仅影响后面的布线工作 xff0c 而且对整个电路板的性能也有重要影响 在保证电路功能和性能指标后 xff0c 要满足工艺性 检测和维修方面的要求 xff0c 元件
  • STM32实例-蜂鸣器实验

    本章我们通过另外一个实验来讲述 STM32 IO 口的输出 通过 STM32F1 芯片的一个 IO口控制板载有源 无源蜂鸣器 xff0c 实现蜂鸣器控制 蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器 xff0c 采用直流电压供电 xff0