【51单片机实验笔记】声学篇(一) 蜂鸣器基本控制

目录

  • 前言
  • 硬件介绍
    • PWM基础
    • 蜂鸣器简介
  • 原理图分析
    • 蜂鸣器驱动电路
  • 软件实现
    • 蜂鸣器短鸣
    • 蜂鸣器功能封装
  • 总结


前言

蜂鸣器在生活中的应用实则相当广泛。通过本章你将学会制造噪声 (笑~)你将学会驱动它们,并发出响声


硬件介绍

PWM基础

占空比
频率

延时实现
定时器实现


蜂鸣器简介

蜂鸣器的英文为Buzzer,是将电信号转化为音频信号的基本电子器件。蜂鸣器有无源蜂鸣器有源蜂鸣器两种。

  • 无源蜂鸣器:即压电式蜂鸣器。内部不带振荡源,须提供脉冲信号驱动。通过改变频率调节音调高低,改变占空比调节音量大小。
  • 有源蜂鸣器:即电磁式蜂鸣器。内部自带振荡源,只需通直流电即响驱动简单,但频率固定

这里的与电源无关,指的是内部是否有振荡源有源蜂鸣器通常用于只需要发出响声的场景,如:按键音报警器等等。无源蜂鸣器由于可以改变电压,可以应用于电子琴变声器中。

图1 无源蜂鸣器
图2 有源蜂鸣器

判断有源无源的方法

  • 万用表测试
    • 无源蜂鸣器电阻大致为10Ω左右。对于脉冲信号才能发声。
    • 有源蜂鸣器电阻大致为几百欧姆。且接通持续发声
  • 表面封装
    • 无源蜂鸣器一般都是无贴纸标识。
    • 有源蜂鸣器一般都是有贴纸标识。

原理图分析

蜂鸣器驱动电路

一般IO输出电流小于20mA不能直接驱动蜂鸣器,需要相应的驱动电路,一般利用三级管放大开关作用驱动蜂鸣器
在这里插入图片描述

如图所示,R1用于限制基极电流R2用于限制蜂鸣器电流8550PNP型三极管,当IO引脚为低电平导通

对于有源蜂鸣器而言,IO引脚输出低电平就能持续发声。
对于无源蜂鸣器而言,需要IO引脚输出PWM脉冲信号来使之发声。


软件实现

蜂鸣器短鸣

#include <REG52.H>#define DELAY_TIME 100typedef unsigned char u8;
typedef unsigned int u16;sbit BEEP = P1^5; //信号端与P1.5引脚相连void delay(u16 i){while(i--);
}void main(){u8 i = 0;while(1){while(i < DELAY_TIME){BEEP = !BEEP; //内部上拉,初始为1,占空比为50%delay(100); //延时1ms,周期2ms,即频率为500Hzi++;}}
}

通过调节不同的频率,可以得到不同音调的声音;调节占空比,可以控制音量高低


蜂鸣器功能封装

delay.h

#ifndef _DELAY_H_
#define _DELAY_H_#include <regx52.h>typedef unsigned char u8;
typedef unsigned int u16;void delay_10us(u16);
void delay_ms(u16);#endif

delay.c

#include "delay.h"/***  @brief  延时函数(10us)*  @param  t:0~65535,循环一次约10us*  @retval 无*/
void delay_10us(u16 t){while(t--);
}/***  @brief 延时函数(ms)*  @param t:0~65535,单位ms*  @retval 无*/
void delay_ms(u16 t){while(t--){delay_10us(100);}
}

beep.h

#ifndef _BEEP_H_
#define _BEEP_H_#include "delay.h"sbit BEEP_PORT = P1^5;void beep_once(u8, u16);#endif

beep.c

#include "beep.h"/***  @brief 蜂鸣器单响*  @param t 持续时长, fre 频率HZ*  @retval*/
void beep_once(u8 t, u16 fre){while(t--){BEEP_PORT = !BEEP_PORT; // 取反delay_10us(1e5/2/fre);}
}

main.c

#include "beep.h"void main(){// 以1000Hz频率,50%占空比,持续时间约1sbeep_once(100, 1000);while(1);
}

蜂鸣器本身的控制很简单,它也经常和其他元器件一起搭配使用


总结

本章相对轻松,了解了蜂鸣器主要类别驱动方式。还学习了PWM基本原理。继续加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/67534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell bash中设置命令set

1 Preface/Foreword set命令用于shell脚本在执行命令时候&#xff0c;遇到异常的处理机制。 2 Usage 2.1 set -e 当执行命令过程中遇到异常&#xff0c;那么就退出脚本&#xff0c;不会往下执行其它命令。 #!/bin/bash #set -eroot GIT_TAG${CI_BUILD_TAG-NOTAG} GIT_REV…

设计模式之建造者模式与原型模式

目录 建造者模式 简介 使用场景 优缺点 模式结构 实现 原型模式 简介 应用场景 优缺点 模式结构 实现 建造者模式 简介 将复杂对象的构建与表示进行分离&#xff0c;使得同样的构建过程可以创建不同的表示。是一个将复杂的对象分解为多个简单的对象&#xff0c;然…

npm版本升级报错

解决方法&#xff1a; 执行npm install --legacy-peer-deps依赖对等 npm install xxx --legacy-peer-deps命令用于绕过peerDependency里依赖的自动安装&#xff1b;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但版本不同的问题&#xff0c;以npm v4-v6的方式去继续执行…

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

目录 前言环境使用模块使用数据来源分析 代码实现导入模块请求数据解析保存 数据可视化导入模块、数据年份分布情况月份分布情况出行时间情况费用分布情况人员分布情况 前言 2023年的中秋节和国庆节即将来临&#xff0c;好消息是&#xff0c;它们将连休8天&#xff01;这个长假…

Docker 使用

简介 Docker是一个开源的容器引擎&#xff0c;它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序&#xff0c;并可以缩短从编写到部署运行代码的周期。 Docker…

uniapp 项目实践总结(二)从零开始搭建一个项目

导语:本篇文章主要是项目方面的技术开发总结,新建一个项目可以选择使用可视化界面,也可以使用命令行搭建。 目录 可视化界面命令行搭建安卓开发环境苹果开发环境可视化界面 安装软件 使用官方推荐的 HbuilderX 软件,开发方式比较简单,内置相关环境以及终端,无需配置 no…

【python】可视化

柱状图 matplotlib之pyplot模块之柱状图&#xff08;bar()&#xff1a;基础参数、外观参数&#xff09;_plt.bar_mighty13的博客-CSDN博客 bar()的基础参数如下&#xff1a; x&#xff1a;柱子在x轴上的坐标。浮点数或类数组结构。注意x可以为字符串数组&#xff01; height&…

Unity中Shader的UV扭曲效果的实现

文章目录 前言一、实现的思路1、在属性面板暴露一个 扭曲贴图的属性2、在片元结构体中&#xff0c;新增一个float2类型的变量&#xff0c;用于独立存储将用于扭曲的纹理的信息3、在顶点着色器中&#xff0c;根据需要使用TRANSFORM_TEX对Tilling 和 Offset 插值&#xff1b;以及…

通过cpolar内网穿透,在家实现便捷的SSH远程连接公司内网服务器教程

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置路由器。…

Spring Boot 整合 Shiro(后端)

1 Shiro 什么是 Shiro 官网&#xff1a; http://shiro.apache.org/ 是一款主流的 Java 安全框架&#xff0c;不依赖任何容器&#xff0c;可以运行在 Java SE 和 Java EE 项目中&#xff0c;它的主要作用是对访问系统的用户进行身份认证、 授权、会话管理、加密等操作。 …

FreeRTOS操作系统中,断言输出 Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,766 原因

分析&#xff1a;Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,766 出现这个原因表示&#xff0c;你现在系统某个中断的优先级高于FreeRTOS可管理的优先级范围&#xff0c;一旦你这个中断触发&#xff0c;断言的信息即你串口就会输出这个条语句&#xff08;前提你串口…

OpenCV(十九):模板匹配

1.模板匹配&#xff1a; OpenCV提供了一个模板匹配函数&#xff0c;用于在图像中寻找给定模板的匹配位置。 2.图像模板匹配函数matchTemplate void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method, InputArray mask noArray() ); image…

《Python魔法大冒险》005 魔法挑战:自我介绍机器人

魔法师和小鱼坐在图书馆的一扇窗户旁&#xff0c;窗外的星空闪烁着神秘的光芒。魔法师轻轻地拍了拍小鱼的肩膀。 魔法师&#xff1a; 小鱼&#xff0c;你已经学会了编写简单的魔法程序&#xff0c;现在我要教你如何创造一个有自己思想的机器人&#xff0c;让它能够和我们一样&…

Ansible学习笔记6

stat模块&#xff1a;获取文件的状态信息&#xff0c;类似Linux的stat状态。 获取/etc/fstab文件的状态。 [rootlocalhost tmp]# ansible group1 -m stat -a "path/etc/fstab" 192.168.17.106 | SUCCESS > {"ansible_facts": {"discovered_inter…

【Java转Go】Go中使用WebSocket实现聊天室(私聊+群聊)

目录 前言功能效果&#xff08;一人分饰多角.jpg&#x1f60e;&#xff09;用户上线、群聊私聊和留言下线 实现思路代码服务端 chat.go 完整代码客户端 html 完整代码 最后 前言 之前在Java中&#xff0c;用 springbootwebsocket 实现了一个聊天室&#xff1a;springbootwebso…

算法笔记:二叉树

1 基本二叉树 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常称为“左子节点”和“右子节点”。 二叉树的根是唯一没有父节点的节点&#xff0c;而所有其他节点都有一个父节点和零个或两个子节点。 1.1 基础术语 节点&#xff08;Node&…

Python 内置函数详解 (1) 数学运算

近期在外旅游,本篇是出发前定时发布的,不完整,旅游回来后再补充。 Python 内置函数 Python3.11共有75个内置函数,其来历和分类请参考:Python 新版本有75个内置函数,你不会不知道吧_Hann Yang的博客-CSDN博客 函数列表 abs aiter all …

基于PyTorch的交通标志目标检测系统

一、开发环境 Windows 10PyCharm 2021.3.2Python 3.7PyTorch 1.7.0 二、制作交通标志数据集&#xff0c;如下图 三、配置好数据集的地址&#xff0c;然后开始训练 python train.py --data traffic_data.yaml --cfg traffic_yolov5s.yaml --weights pretrained/yolov5s.pt --e…

【Java 基础篇】Java继承:打开面向对象编程的大门

继承是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;中的一个重要概念。在Java中&#xff0c;继承允许一个类&#xff08;子类&#xff09;从另一个类&#xff08;父类&#xff09;继承属性和方法。这种机制使得代码重用、扩展和维护变得更…

算法笔记 近似最近邻查找(Approximate Nearest Neighbor Search,ANN)

1 介绍 精准最近邻搜索中数据维度一般较低&#xff0c;所以会采用穷举搜索&#xff0c;即在数据库中依次计算其中样本与所查询数据之间的距离&#xff0c;抽取出所计算出来的距离最小的样本即为所要查找的最近邻。 当数据量非常大的时候&#xff0c;搜索效率急剧下降。——>…