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

news2024/11/19 15:14:51

目录

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


前言

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


硬件介绍

PWM基础

占空比
频率

延时实现
定时器实现


蜂鸣器简介

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

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

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

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

判断有源无源的方法

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

原理图分析

蜂鸣器驱动电路

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

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

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


软件实现

蜂鸣器短鸣

#include <REG52.H>

#define DELAY_TIME 100

typedef 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,即频率为500Hz
			i++;
		}
	}
}

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


蜂鸣器功能封装

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%占空比,持续时间约1s
	beep_once(100, 1000);
	while(1);
}

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


总结

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

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

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

相关文章

计算机竞赛 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…

【CPU】常见术语解释

interrupt service routine&#xff0c;ISR&#xff1a;中断服务程序。 中断&#xff1a;指当CPU正在处理某件事情时&#xff0c;外部发生的某一事件&#xff08;如一个电平的变化&#xff0c;一个脉冲沿的发生或 定时器计数溢出等&#xff09;请求CPU迅速去处理&#xff0c;于…

select多选回显问题 (取巧~)

要实现的效果&#xff1a; 实际上select选择框&#xff0c;我想要的是数组对象&#xff0c;但是后端返回来的是个字符串。 以下是解决方法&#xff1a; 以上是一种简单的解决方法~ 也可以自己处理数据。

【聚类】DBCAN聚类

OPTICS是基于DBSCAN改进的一种密度聚类算法&#xff0c;对参数不敏感。当需要用到基于密度的聚类算法时&#xff0c;可以作为DBSCAN的一种替代的优化方案&#xff0c;以实现更优的效果。 原理 基于密度的聚类算法&#xff08;1&#xff09;——DBSCAN详解_dbscan聚类_root-ca…

分类算法系列⑥:随机森林

目录 集成学习方法之随机森林 1、集成学习方法 2、随机森林 3、随机森林原理 为什么采用BootStrap抽样 为什么要有放回地抽样 4、API 5、代码 代码解释 结果 6、随机森林总结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家…

Llama-7b-hf和vicuna-7b-delta-v0合并成vicuna-7b-v0

最近使用pandagpt需要vicuna-7b-v0&#xff0c;重新过了一遍&#xff0c;前段时间部署了vicuna-7b-v3&#xff0c;还是有不少差别的&#xff0c;transforms和fastchat版本更新导致许多地方不匹配&#xff0c;出现很多错误&#xff0c;记录一下。 更多相关内容可见Fastchat实战…

Python小知识 - 【Python】如何使用Pytorch构建机器学习模型

【Python】如何使用Pytorch构建机器学习模型 机器学习是人工智能的一个分支&#xff0c;它的任务是在已有的数据集上学习&#xff0c;最终得到一个能够解决新问题的模型。Pytorch是一个开源的机器学习框架&#xff0c;它可以让我们用更少的代码构建模型&#xff0c;并且可以让模…

docker 安装rabbitmq

前提&#xff1a;安装好docker docker安装_Steven-Russell的博客-CSDN博客 centos7安装docker_centos7 docker 安装软件_Steven-Russell的博客-CSDN博客 1、启动docker systemctl start docker 2、下载镜像 // 可以先search查询一下可用镜像&#xff0c;此处直接下载最新版本…

LinkedList(3):并发异常

1 LinkedList并发异常 package com.example.demo;import java.util.Iterator; import java.util.LinkedList;public class TestLinkedList {public static void main(String[] args) {LinkedList linkedList new LinkedList(); //双向链表linkedList.add(11);linkedList.add(…

【ES6】require、export和import的用法

在JavaScript中&#xff0c;require、export和import是Node.js的模块系统中的关键字&#xff0c;用于处理模块间的依赖关系。 1、require&#xff1a;这是Node.js中引入模块的方法。当你需要使用其他模块提供的功能时&#xff0c;可以使用require关键字来引入该模块。例如&…

docker从零部署jenkins保姆级教程

jenkins&#xff0c;基本是最常用的持续集成工具。在实际的工作中&#xff0c;后端研发一般没有jenkins的操作权限&#xff0c;只有一些查看权限&#xff0c;但是我们的代码是经过这个工具构建出来部署到服务器的&#xff0c;所以我觉着有必要了解一下这个工具的搭建过程以及简…

分布式环境下的数据同步

一般而言elasticsearch负责搜索&#xff08;查询&#xff09;&#xff0c;而sql数据负责记录&#xff08;增删改&#xff09;&#xff0c;elasticsearch中的数据来自于sql数据库&#xff0c;因此sql数据发生改变时&#xff0c;elasticsearch也必须跟着改变&#xff0c;这个就是…

数据结构与算法-插入希尔归并

一&#xff1a;排序引入 我们通常从哪几个方面来分析一个排序算法&#xff1f; 1.时间效率&#xff1a;决定了算法运行多久&#xff0c;O&#xff08;1&#xff09; 2.空间复杂度&#xff1a; 3.比较次数&交换次数:排序肯定会牵涉到两个操作&#xff0c;一个比较是肯定的。…

mac常见问题(五) Mac 无法开机

在mac的使用过程中难免会碰到这样或者那样的问题&#xff0c;本期为您带来Mac 无法开机怎么进行操作。 1、按下 Mac 上的电源按钮。每台 Mac 电脑都有一个电源按钮&#xff0c;通常标有电源符号 。然后检查有没有通电迹象&#xff0c;例如&#xff1a; 发声&#xff0c;例如由风…

springmvc5.x-mvc实现原理及源码实现

上文&#xff1a;spring5.x-声明式事务原理及源码实现 系列文章&#xff1a; spring5.x-声明式事务原理及源码实现 spring5.x-AOP实现原理及源码分析 spring5.x-监听器原理及源码实现 spring5.x-解决循环依赖分析 spring5.x-IOC模块源码学习 spring5.x介绍及搭配spring源码阅读…

Xcode 清空最近打开的项目

打开Xcode任意项目 File -> Open Recent -> Clear Menu

桌面应用小程序,一种创新的跨端开发方案

Qt Group在提及2023年有桌面端应用程序开发热门趋势时&#xff0c;曾经提及三点&#xff1a; 关注用户体验&#xff1a;无论您是为桌面端、移动端&#xff0c;还是为两者一起开发应用程序&#xff0c;有一点是可以确定的&#xff1a;随着市场竞争日益激烈&#xff0c;对产品的期…

怎么批量在图片名后加相同的文字

怎么批量在图片名后加相同的文字&#xff1f;有个小伙伴通过私信想我咨询一个问题&#xff0c;它从事的是摄影类的工作&#xff0c;每天会在电脑上存储非常多的图片&#xff0c;时间一久电脑上保存的图片非常的多&#xff0c;这让图片的管理和查找变得比较麻烦&#xff0c;有时…

从智能手机到智能机器人:小米品牌的高端化之路

原创 | 文 BFT机器人 前言 在前阵子落幕的2023世界机器人大会“合作之夜”上&#xff0c;北京经济技术开发区管委会完成了与世界机器人合作组织、小米机器人等16个重点项目签约&#xff0c;推动机器人创新链和产业链融合&#xff0c;其中小米的投资额达到20亿&#xff01; 据了…

E5061B/是德科技keysight E5061B网络分析仪

181/2461/8938产品概述 是德科技E5061B(安捷伦)网络分析仪在从5 Hz到3 GHz的宽频率范围内提供通用的高性能网络分析。E5061B提供ENA系列常见的出色RF性能&#xff0c;还提供全面的LF(低频)网络测量能力&#xff1b;包括内置1 Mohm输入的增益相位测试端口。E5061B从低频到高频的…