当前位置:文档之家› 蜂鸣器--LINUX

蜂鸣器--LINUX

蜂鸣器--LINUX
蜂鸣器--LINUX

基于2.6内核的pwm蜂鸣器驱动设计

一、开发环境

二、PWM怎样工作在ARM Linux中

1. 什么是PWM?

PWM(脉冲宽度调制)简单的讲是一种变频技术之一,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。如果还不是很清楚,好吧,来看看我们实际生活中的例子,我们的电风扇为什么扭一下按扭,风扇的转速就会发生变化;调一下收音机的声音按钮,声音的大小就会发生变化;还有待会儿我们要讲的蜂鸣器也会根据不同的输入值而发出不同频率的叫声等等!!这些都是PWM的应用,都是通过PWM输出的频率信号进行控制的。

2. ARM Linux中的PWM

根据S3C2440的手册介绍,S3C2440A内部有5个16位的定时器,定时器0、1、2、3都带有脉冲宽度调制功能(PWM),定时器4是一个没有输出引脚的内部定时器,定时器0有一个用于大电流设备的死区生成器。看下图解释吧!!

由S3C2440的技术手册和上面这幅结构图,我们来总结一下2440内部定时器模块的特性吧:

1)共5个16位的定时器,定时器0、1、2、3都带有脉冲宽度调制功能(PWM);

2)每个定时器都有一个比较缓存寄存器(TCMPB)和一个计数缓存寄存器(TCNTB);

3)定时器0、1共享一个8位的预分频器(预定标器),定时器2、3、4共享另一个8位的预分频器(预定标器),其值范围是0~255;

4)定时器0、1共享一个时钟分频器,定时器2、3、4共享另一个时钟分频器,这两个时钟分频器都能产生5种不同的分频信号值(即:1/2、1/4、1/8、1/16和TCLK);

5)两个8位的预分频器是可编程的且根据装载的值来对PCLK进行分频,预分频器和钟分频器的值分别存储在定时器配置寄存器TCFG0和TCFG1中;

6)有一个TCON控制寄存器控制着所有定时器的属性和状态,TCON的第0~7位控制着定时器0、第8~11位控制着定时器1、第12~15位控制着定时器2、第16~19位控制着定时器3、第20~22位控制着定时器4。

还是根据S3C2440手册的描述和上图的结构,要开始一个PWM定时器功能的步骤如下(假设使用的是第一个定时器):

1)分别设置定时器0的预分频器值和时钟分频值,以供定时器0的比较缓存寄存器和计数缓存寄存器用;

2)设置比较缓存寄存器TCMPB0和计数缓存寄存器TCNTB0的初始值(即定时器0的输出时钟频率);

3)关闭定时器0的死区生成器(设置TCON的第4位);

4)开启定时器0的自动重载(设置TCON的第3位);

5)关闭定时器0的反相器(设置TCON的第2位);

6)开启定时器0的手动更新TCNTB0&TCMPB0功能(设置TCON的第1位);

7)启动定时器0(设置TCON的第0位);

8)清除定时器0的手动更新TCNTB0&TCMPB0功能(设置TCON的第1位)。

由此可以看到,PWM的输出频率跟比较缓存寄存器和计数缓存寄存器的取值有关,而比较缓存寄存器和计数缓存寄存器的值又跟预分频器和时钟分频器的值有关;要使用PWM功能其实也就是对定时器的相关寄存器进行操作。手册上也有一个公式:定时器输出频率= PCLK / {预分频器值+ 1} / 时钟分频值。下面我们来通过一个蜂鸣器的实例来说明PWM功能的使用。

三、蜂鸣器驱动实例

1. 蜂鸣器的种类和工作原理

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

有源蜂鸣器和无源蜂鸣器的区别:这个“源”字是不是指电源,而是指震荡源,即有源蜂鸣器内有振荡源而无源蜂鸣器内部没有振荡源。有振荡源的通电就可以发声,没有振荡源的需要脉冲信号驱动才能发声。

2. 开发板上蜂鸣器原理图分析

由原理图可以得知,蜂鸣器是通过GPB0 IO口使用PWM信号驱动工作的,而GPB0口是一个复用的IO口,要使用它得先把他设置成TOUT0 PWM输出模式。

3. 编写合适开发板的蜂鸣器驱动程序,文件名:my2440_pwm.c

================================================

Name : my2440_pwm.c

Author : Huang Gang

Date : 25/11/09

Copyright : GPL

Description : my2440 pwm driver

================================================

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define PWM_MAJOR 0 //主设备号

#define PWM_NAME "my2440_pwm" //设备名称

static int device_major = PWM_MAJOR; //系统动态生成的主设备号

//打开设备

static int pwm_open(struct inode *inode, struct file *file)

{

//对GPB0复用口进行复用功能设置,设置为TOUT0 PWM输出

s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_TOUT0);

return 0;

}

//关闭设备

static int pwm_close(struct inode *inode, struct file *file)

{

return 0;

}

//对设备进行控制

static int pwm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

{

if(cmd <= 0)//如果输入的参数小于或等于0的话,就让蜂鸣器停止工作

{

//这里又恢复GPB0口为IO口输出功能,由原理图可知直接给低电平可让蜂鸣器停止工作

s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_OUTP);

s3c2410_gpio_setpin(S3C2410_GPB0, 0);

}

else//如果输入的参数大于0,就让蜂鸣器开始工作,不同的参数,蜂鸣器的频率也不一样

{

//定义一些局部变量

unsigned long tcon;

unsigned long tcnt;

unsigned long tcfg1;

unsigned long tcfg0;

struct clk *clk_p;

unsigned long pclk;

//以下对各寄存器的操作结合上面讲的开始一个PWM定时器的步骤和2440手册PWM寄存器操作部分来看就比较容易理解

tcfg1 = __raw_readl(S3C2410_TCFG1); //读取定时器配置寄存器1的值

tcfg0 = __raw_readl(S3C2410_TCFG0); //读取定时器配置寄存器0的值

tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;

tcfg0 |= (50 - 1); //设置tcfg0的值为49

tcfg1 &= ~S3C2410_TCFG1_MUX0_MASK;

tcfg1 |= S3C2410_TCFG1_MUX0_DIV16; //设置tcfg1的值为

0x0011即:1/16

__raw_writel(tcfg1, S3C2410_TCFG1); //将值tcfg1写入定时器配置寄存器1中

__raw_writel(tcfg0, S3C2410_TCFG0); //将值tcfg0写入定时器配置寄存器0中

clk_p = clk_get(NULL, "pclk");

pclk = clk_get_rate(clk_p); //从系统平台时钟队列中获取pclk的时钟频率,在include/linux/clk.h中定义

tcnt = (pclk/50/16)/cmd; //计算定时器0的输出时钟频率

(pclk/{prescaler0 + 1}/divider value)

__raw_writel(tcnt, S3C2410_TCNTB(0)); //设置定时器0计数缓存寄存器的值

__raw_writel(tcnt/2, S3C2410_TCMPB(0)); //设置定时器0比较缓存寄存器的值

tcon = __raw_readl(S3C2410_TCON); //读取定时器控制寄存器的值

tcon &= ~0x1f;

tcon |= 0xb; //关闭死区、自动重载、关反相器、更新

TCNTB0&TCMPB0、启动定时器0

__raw_writel(tcon, S3C2410_TCON); //设置定时器控制寄存器的0-4位,即对定时器0进行控制

tcon &= ~2;

__raw_writel(tcon, S3C2410_TCON); //清除定时器0的手动更新位}

return 0;

}

//设备操作结构体

static struct file_operations pwm_fops =

{

.owner = THIS_MODULE,

.open = pwm_open,

.release = pwm_close,

.ioctl = pwm_ioctl,

};

//定义一个设备类

static struct class *pwm_class;

static int __init pwm_init(void)

{

//注册为字符设备,主设备号为0让系统自动分配,设备名为

my2440_pwm,注册成功返回动态生成的主设备号

device_major = register_chrdev(PWM_MAJOR, PWM_NAME, &pwm_fops);

if(device_major < 0)

{

printk(PWM_NAME " register falid!\n");

return device_major;

}

//注册一个设备类,使mdev可以在/dev/目录下自动建立设备节点

pwm_class = class_create(THIS_MODULE, PWM_NAME);

if(IS_ERR(pwm_class))

{

printk(PWM_NAME " register class falid!\n");

return -1;

}

//创建一个设备节点,设备名为PWM_NAME,即:my2440_pwm

device_create(pwm_class, NULL, MKDEV(device_major, 0), NULL, PWM_NAME);

return 0;

}

static void __exit pwm_exit(void)

{

//注销设备

unregister_chrdev(device_major, PWM_NAME);

//删除设备节点

device_destroy(pwm_class, MKDEV(device_major, 0));

//注销设备类

class_destroy(pwm_class);

}

module_init(pwm_init);

module_exit(pwm_exit);

MODULE_LICENSE("PGL");

MODULE_AUTHOR("Huang Gang");

MODULE_DESCRIPTION("my2440 pwm driver");

4. 将PWM蜂鸣器驱动代码部署到内核中。

tristate "My2440 PWM Beep

Device"

depends on ARCH_S3C2440

default y

---help---

My2440 PWM Beep

5.配置内核,选择PWM蜂鸣器设备选项

Character devices --->

<*> My2440 PWM Beep Device

(NEW)

6. 编译内核并下载到开发板上。这里要注意,现在我们不需要手动的在开发板上创建设备的节点了,因为我们现在使用了mdev进行管理了(使用方法请看:设备文件系统剖析与使用),在驱动程序中也添加了对类设备接口的支持。之前讲的一些驱动都没有,以后我们都使用这种方法。现在可以查看到/dev目录下自动创建好的my2440_pwm设备节点,就直接可以使用它了。

7. 编写PWM蜂鸣器驱动的测试程序。文件名:pwm_test.c

==============================================

Name : pwm_test.c

Author : Huang Gang

Date : 25/11/2009

Copyright : GPL

Description : my2440 pwm driver test

==============================================

*/

#include

#include

#include

#include

int main(int argc, char **argv)

{

int tmp;

int fd;

int i;

//打开蜂鸣器设备

fd = open("/dev/my2440_pwm", O_RDWR);

if(fd < 0)

{

printf("Open PWM Device Faild!\n");

exit(1);

}

//提示用户输入一个参数来对蜂鸣器进行调频,0表示停止工作

printf("please enter the times number(0 is stop):\n");

while(1)

{

//输入参数

scanf("%d", &tmp);

printf("times = %d\n", tmp);

//IO控制

ioctl(fd, tmp);

if(tmp <= 0)

{

break;

}

}

//关闭设备

close(fd);

return 0;

}

8. 在开发主机上交叉编译测试应用程序,并复制到文件系统的/usr/sbin目录下,然后重新编译文件系统下载到开发板上。

9. 在开发板上运行测试程序。可以看到根据你输入参数的大小,蜂鸣器也会发生不同频率的叫声,输入0蜂鸣器停止鸣叫。

来自: https://www.doczj.com/doc/461829596.html,/shentuhongfeng/blog/item/cf7c0b36d76c22d0a2cc2b22.html

转:基于EasyARM2103的交流蜂鸣器音乐播放设计133331457

1.1 蜂鸣器简介

蜂鸣器是一种一体化结构的电子讯响器,采用直流或者交流供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中的发声器件。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。蜂鸣器的外观如下图所示。

图1.1 蜂鸣器

根据发声材料、结构和驱动方式的不同,蜂鸣器可以分为压电式、电磁式等,如表1.1所示。

1.1.1 驱动电路分析与参数计算

根据上述的几个蜂鸣器驱动电路分析发现,蜂鸣器驱动电路无一例外都包含以下几个部分:一个三极管、一个蜂鸣器、一个续流二极管和一个电源滤波电容。驱动电路如图1.2所示。

图1.2 蜂鸣器驱动电路

蜂鸣器驱动电路分析如下:

1.蜂鸣器

发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声,其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式(直流/方波)等。这些都可以根据需要来选择。

2.续流二极管

蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管提供续流。否则,在蜂鸣器两端会产生几十伏的尖峰电压,可能损坏驱动三极管,并干扰整个电路系统的其它部分。

3.滤波电容

滤波电容C1的作用是滤波,滤除蜂鸣器电流对其它部分的影响,也可改善电源的交流阻抗,如果可能,最好是再并联一个220uF的电解电容。

4.三极管

三极管Q1起开关作用,其基极的高电平使三极管饱和导通,使蜂鸣器发声;而基极低电平则使三极管关闭,蜂鸣器停止发声。

1.1.2 驱动程序设计

1.直流蜂鸣器驱动程序

直流蜂鸣器的驱动是非常简单的,只要在其两端施加额定工作电压,蜂鸣器就发声。以NPN 三极管驱动电路为例,只要在三极管的基极接入高电平,蜂鸣器就能发声。例如:蜂鸣器每秒钟发声100mS时,三极管基极的驱动波形如图1.3所示。

图1.3 NPN管驱动直流蜂鸣器

2.交流蜂鸣器驱动程序

交流蜂鸣器的驱动相对复杂一点,要在蜂鸣器两端施加额定电压的方波。蜂鸣器的工作频率范围通常是很窄的,这意味着一个蜂鸣器通常只能工作在其额定频率才会有良好的发声效果

(包括声压和音色等)。有些蜂鸣器的工作频率范围是比较宽的,这样就可以通过调整驱动方波的频率而使蜂鸣器发出音乐,演奏歌曲。例如:蜂鸣器每秒钟发声100mS时,三极管基极的驱动波形如下图1.4所示。

图1.4 驱动交流蜂鸣器

1.2 设计原理

本实例采用LPC2103的定时器1产生PWM脉冲控制8050导通与闭合,使交流蜂鸣器两端产生方波信号,驱动蜂鸣器发声。三个LED分别显示高、中和低音的状态。电路原理如图1.5所示。

图1.5 原理图

1.3 电路制作

1.3.1 元器件选择

本文电路制作中需要用到的元件如表1.3所列。

表1.3 元件列表

1.3.2 焊接

按照原理图连接电路,要注意蜂鸣器、三极管、二极管和LED的管脚极性。硬件电路焊接完成后,实物如图1.6所示。

图1.6 实物图

系统实物如图1.7所示。

图1.7 整体实物图

1.4 程序设计

本实例通过LPC2103的定时器1产生PWM脉冲来控制交流蜂鸣器发声。根据不同的音频,LPC2103产生不同频率的PWM脉冲,使交流蜂鸣器发出不同频率的声音。并通过三个LED 分别显示高、中和低音的状态。以下为部分程序,详细程序参见程序源码。

蜂鸣器初始化程序:设置蜂鸣器控制引脚为GPIO输出低电平。蜂鸣器不发声。见程序清单1.1。

程序清单1.1 蜂鸣器初始化程序

蜂鸣器指定频率发声程序:根据指定频率设定定时器1的PWM的输出周期,控制蜂鸣器发出指定频率的声音。见程序清单1.2。

程序清单1.2 蜂鸣器指定频率发声程序

蜂鸣器停止发声程序:复位定时器1,设置蜂鸣器控制引脚为GPIO输出低电平,蜂鸣器停止发声。见程序清单1.3。

程序清单1.3 蜂鸣器停止发声程序

LED初始化程序:分别设置LED1、LED2和LED3的控制引脚为GPIO输出,并熄灭。见程序清单1.4。

程序清单1.4 LED初始化程序

点亮指定LED程序:根据入口参数点亮指定的LED,见程序清单1.5。

程序清单1.5 点亮指定LED程序

熄灭指定LED程序:根据入口参数熄灭指定的LED。见程序清单1.6。

程序清单1.6 熄灭指定LED程序

来自: https://www.doczj.com/doc/461829596.html,/largeji/blog/item/c7cb683ee02386f0828b1351.html

view plaincopy to clipboardprint? .........10........20........30........40........50........60........70........80........90........100.......110. (12)

0.......130.......140. (150)

/**************************************************************** Copyright(c) 2009-2010,Newkoom Net Tech.Co,.Ltd

模块名称(Filename): beep_s3c2410.c

项目名称(Projectname): RPM(Remote Power Manager System)

版本号(Version): 1.0.0

创建日期(Date): 2009-11-22

作者(Author): ZMF(Zheng meifu)

功能描述(Description): buzzer(beep) driver for linux2.6.14.1

其他说明(Others):

修改记录(History): 调试成功:2009-11-23

2009-12-1:之前只能在定时任务结束后才释放锁,今天改为

设置完ioctl后立即释放,以便连续发声。

****************************************************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define BEEPDEV_NAME "beep" /*设备名beep*/

#define PWM_IOCTL_SET_FREQ 1 /*定义宏常量,用于后面的ioctl 中的switch case*/

#define PWM_IOCTL_STOP 2

#define SET_RIGHT_ACTION_BEEP 3 // 此处宏数字不能改,和以下beep_const序号相关

#define SET_ERROR_ACTION_BEEP 4 // 同上

#define SET_KEY_PRESS_BEEP 5 // 同上

#define BEON (1<<(sizeof(int)*8-1))

#define BEOF 0

#define PRESET_FREQ 1000

#define KEY_DELAYMS(X) (HZ/(1000/(X)))

static struct semaphore lock; /*定义信号量lock*/

static struct semaphore ioctl_lock;

/* freq: pclk/50/16/65536 ~ pclk/50/16

* if pclk = 50MHz, freq is 1Hz to 62500Hz

* human ear : 20Hz~ 20000Hz

*/

const int beep_const[3][8]={

{500|BEON,100|BEOF,0,0,0,0,0,0}, // right

{100|BEON,50|BEOF,100|BEON,50|BEOF,100|BEON,50|BEOF,0,0}, // error

{100|BEON,50|BEOF,0,0,0,0,0,0}, // key

};

struct timer_list beep_timer;

static int beep_step;

static void PWM_Set_Freq(unsigned long freq);

static void PWM_Stop(void);

static void beep_timer_handler(unsigned long data){

int onofftime=beep_const[data][beep_step++];

if(onofftime !=0){

beep_timer.data = data;

mod_timer(&beep_timer, jiffies+ KEY_DELAYMS(onofftime&(~BEON)));

if(onofftime&BEON)

PWM_Set_Freq(PRESET_FREQ);

else PWM_Stop();

}else{

PWM_Stop();

del_timer(&beep_timer);

//up(&ioctl_lock);

}

}

static void set_beep_type(int type){

int tmp_time= beep_const[type-3][0]&(~BEON);

del_timer(&beep_timer);

init_timer(&beep_timer);

beep_timer.expires = jiffies + KEY_DELAYMS(tmp_time);

beep_timer.function = beep_timer_handler;

beep_timer.data = type-3;

beep_step=1;

add_timer(&beep_timer);

PWM_Set_Freq(PRESET_FREQ);

}

static void PWM_Set_Freq( unsigned long freq ) /*设置pwm的频率,配置各个寄存器*/

{

unsigned long tcon, tcnt, tcfg1, tcfg0,pclk;

struct clk *clk_p;

/*set GPB0 as tout0, pwm output 设置GPB0为tout0,pwm输出*/

s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_TOUT0);

tcon = __raw_readl(S3C2410_TCON); /*读取寄存器TCON到tcon*/

tcfg1 = __raw_readl(S3C2410_TCFG1); /*读取寄存器TCFG1到tcfg1*/

tcfg0 = __raw_readl(S3C2410_TCFG0); /*读取寄存器TCFG0到tcfg0*/

//prescaler = 50

tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK; /* S3C2410_TCFG_PRESCALER0_MASK定时器0和*/

/* 1的预分频值的掩码,TCFG[0~8]*/

tcfg0 |= (50 - 1); /* 预分频为50 */

蜂鸣器工作原理介绍及并联电阻原理

蜂鸣器工作原理介绍及并联电阻原理 目前市场上广泛使用的蜂鸣器有电磁式与压电式,我司使用的蜂鸣器以压电式为主。 压电式蜂鸣器主要由多谐振荡器,压电蜂鸣片(以压电陶瓷为主,如下图所示),阻抗匹配器及共鸣箱,外壳等组成。其主要原理是以压电陶瓷的压电效应,来带动金属片的震动而发声。 压电陶瓷其实是一能够将机械能和电能互相转换的功能陶瓷材料。 所谓压电效应是指某些介质在受到机械压力时,哪怕这种压力微小得像声波振动那样小,都会产生压缩或伸长等形状变化,引起介质表面带电,便会产生电位差,这是正压电效应。反之,施加激励电场或电压,介质将产生机械变形,产生机械应力,称逆压电效应。如果压力是一种高频震动,则产生的就是高频电流。而高频电信号加在压电陶瓷上时,则产生高频声信号(机械震动),这就是我们平常所说的超声波信号。也就是说,压电陶瓷具有机械能与电能之间的转换和逆转换的功能。压电式蜂鸣器就是运用其将电能转换问机械能的逆压电效应。 压电蜂鸣器的主要应用电路如下图所示,R为阻抗匹配电阻。 当脉冲信号为高电平时,通过三级管导通,则在蜂鸣器两端形成一个VDC的电压,使压电陶瓷产生形变。当脉冲信号为低电平时,通过三极管关断。此时压电陶瓷形变复原,则在其两端产生一个由机械能转换为电能的电压,此时的电压需要通过阻抗匹配电阻进行释放,从而可使蜂鸣器产生一个稳定频率的声音信号。如下图所示,幅值与VDC相等,频率与芯片控制端口频率相等。 压电蜂鸣片

蜂鸣器端口信号主控芯片端口信号 R=1K时蜂鸣器两端信号

蜂鸣器两端,以及当R=1K时,其等效电容的放电时间为46us 蜂鸣器两端,以及当R=100Ω时,其等效电容的放电时间为6.8us

嵌入式- 蜂鸣器控制实验

实验二蜂鸣器控制实验 实验目的:1 了解ARM处理器PWM接口的处理机制 2 掌握在S3C2440A平台下进行PWM接口应用编程实验器材:Sinosys-EA2440实验箱PC机 实验原理:脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。即通过改变方波的占空比表示不同的模拟信号的电平。 在ARM嵌入式实验中,其实是通过微处理器中的计数器,对经过频率变换的输出频率周期进行计数,在PWM中,是通过两个寄存器(TCNTBn和TCMPBn)对输出信号的占空比进行调制,TCNTBn可以设置为TCMPBn+X,当TCNTBn在TCMPBn和TCMPBn+X 之间计数时,TOUTn(即输出信号)输出低电平,当TCNTBn计数下降到TCMPBn时,TOUTn电平反转,变为高电平,直到TCNTBn计数减到0,如果此时开启了重载,则又把预定的值重新装入TCNTBn和TCMPBn中,重复以上过程。 在ARM嵌入式PWM中,会提供一个基准时钟作为输入时钟,PWM调制会对输入的时钟进行分频等操作进入计时器逻辑,其电路图2.1如下:

图2.1 PWM计时器框图 如图2.1,输入的时钟PCLK经过一个8bit预置器和一个分频器,将得到的时钟进入计数器逻辑板块作为驱动时钟,而输出的TOUT则作为蜂鸣器(蜂鸣器控制电路如图2.2)的驱动信号。 图2.2 蜂鸣器控制电路

实验总结:实验的主函数首先设置时钟,端口初始化,并捕捉进入测试函数的指令,与实验一大致相同,在此不在赘述,重点分析测试函数。测试函数如下: void Beep(int freq,int ms) { int div,i rGPBCON&=~0x3; //将GPB0作为输入口rGPBCON|=0X2; // 接入TIMER0 rTCFG0&=~0XFF; // 设置prescaler为32 rTCFG0|=0XF; rTCFG1&=~0XF; //选择mux=1/16 rTCFG1|=0X3; div=plck/32/16/freq 计算TCNTB0的值rTCNTB0=div; rTCMPB0=rTCNTB0>>2; 占空比为4:1 rTCON&=~0X1F; 设置死区自动重载反转人工载入开始rTCON|=0XB; 关闭死区开启重载关反转开人工载入开始rTCON&=~2; 关闭人工载入 for(i=1,i

蜂鸣器歌唱原理以及代码

3.3 蜂鸣器播放歌曲原理 一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。 1)音调的确定 音调就是我们常说的音高。它是由频率来确定的!我们可以查出各个音符所对应的相应的频率,那么现在就需要我们来用51来发出相应频率的声音!我们常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。 2)节拍的确定 一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。 3.3 蜂鸣器播放歌曲程序 #include sbit speaker = P1^5; //定义蜂鸣器端口 unsigned char timer0h, timer0l, time; //-------------------------------------- //单片机晶振采用11.0592MHz

// 频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据code unsigned char FREQH[] = { 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 234567 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567 // 频率-半周期数据表低八位 code unsigned char FREQL[] = { 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音1234567 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 234567 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567 //-------------------------------------- //世上只有妈妈好数据表要想演奏不同的乐曲, 只需要修改这个数据表 code unsigned char sszymmh[] = { 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, //一个音符有三个数字。前为第几个音、中为第几个八度、后为时长(以半拍为单位)。 //6, 2, 3 分别代表:啦, 中音, 3个半拍; //5, 2, 1 分别代表:嗦, 中音, 1个半拍; //3, 2, 2 分别代表:咪, 中音, 2个半拍; //5, 2, 2 分别代表:嗦, 中音, 2个半拍; //1, 3, 2 分别代表:哆, 高音, 2个半拍; 6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1, 6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2, 5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1, 2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0}; //-------------------------------------- void t0int() interrupt 1 //T0中断程序,控制发音的音调 { TR0 = 0; //先关闭T0 speaker = !speaker; //输出方波, 发音 TH0 = timer0h; //下次的中断时间, 这个时间, 控制音调高低 TL0 = timer0l; TR0 = 1; //启动T0 } //-------------------------------------- void delay(unsigned char t) //延时程序,控制发音的时间长度 { unsigned char t1; unsigned long t2;

蜂鸣器电路

报警电路的设计 蜂鸣器俗称喇叭,是广泛应用于各种电子产品的一种元器件,它用于提示、报警、音乐等许多应用场合。 蜂鸣器与家用电器上面的喇叭在用法上也有相似的地方,通常工作电流比较大,电路上的TTL 电平基本上驱动不了蜂鸣器,需要增加一个电流放大的电路才可以,这一点与家用电器中的功放有相似之处。 学习板采用了一个很简单的 电路来实现蜂鸣器的联接,由上所述,一个管脚很难驱动蜂鸣器发出声音,所以增加了一个三极管来增加通过蜂鸣器的电流,见下方原理图。 蜂鸣器的正极性的一端联接到5V 电源上面,另一端联接到三极管的集电极,三极管的基级由单片机的P1.5管脚通过一个与非门来控制,当P1.5管脚为低时,与非门输出高电平,三极管导通,这样蜂鸣器的电流形成回路,发出声音。当P1.5管脚为高时,与非门输出低电平,三极管截止,蜂鸣器不发出声音。在这里与非门是作为非门来用的,这里采用一个非门的作用是为了防止系统上电时峰鸣器发出声音,以为系统复位以后,I/O 口输出的是高电平。 用户可以通过程序控制P1.5管脚的置低和置高来使蜂鸣器发出声音和关闭。 蜂鸣器的声音大小及音调可以通过调整P1.5管脚的置高时间及输出的波形进行控制,这一点可以在调试程序的时候来试验。 EA/ VP 31X119X218RESET 9RD 17WR 16 INT 012INT 113T014 T115P10/T 1P11/T 2P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSE N 29 ALE /P 30TXD 11RX D 10VCC 40GN D 20U1 SST 89E554RC C7 30P C630P XA L1 11.0592M HZ RX D TXD VCC GN D 23456789 1PR1 5.1K VCC P1.0P1.1P1.2P1.3 P1.5P1.6P1.7RST INT 0 VCC VCC P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P1.4IO1IO023456789 1PR3 5.1K F_R P2.7H_R P2.6P2.6

单片机实验报告-蜂鸣器驱动实验

本科实验报告 课程名称:单片机原理与接口技术实验项目:蜂鸣器驱动实验 实验地点:电机馆 专业班级:学号: 学生姓名: 指导教师: 2015年 6 月9 日

蜂鸣器驱动实验 一、实验目的 1、学习输入/输出端口控制方法 2、了解音频发声原理 二、实验说明 本实验是利用89C51端口定时器输出控制端口,驱动扬声器发声,声音的频率高低由延时快慢控制。本实验是利用单片机唱歌的声音控制程序,请用户思考如何修改程序,可以让蜂鸣器发出不同频率,不同长短的声音。 三、实验原理 1、通过单片机控制驱动信号使蜂鸣器发出不同音调的声音,驱动方波的频率越高,音调就越高;驱动方波频率越低,音调越低。由此,我们可以根据驱动方波的频率使蜂鸣器凑出各种音调的声音。 2、由于单片机I/O口的输出电流较小,因此需要三极管放大电路驱动蜂鸣器。 四、主要仪器设备 单片机仿真试验箱,THKL-C51型单片机仿真器,计算机 五、实验内容及步骤 INT1输出音频信号接音频驱动电路,使蜂鸣器的发声。 1、使用单片机最小应用系统和蜂鸣器模块。蜂鸣器模块的短路帽J1插到VCC方向,用导线将INT1接到蜂鸣器输入端。 2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。 3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“MUSIC.ASM”源程序,进行编译,直到编译无误。 4、全速运行程序,扬声器周期性的发出“八月桂花开”歌曲。(添加“MUSIC1.ASM”程序为“祝你平安”歌曲) 5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二)

蜂鸣器的介绍

蜂鸣器的介绍 推荐 一)蜂鸣器的介绍 1.蜂鸣器的作用蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 2.蜂鸣器的分类蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 3.蜂鸣器的电路图形符号蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。 (二)蜂鸣器的结构原理 1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。 多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。 2.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 一、常规电磁蜂鸣器产品是如何工作的? 无源电磁蜂鸣器工作原理是:交流信号通过绕在支架上的线包在支架的芯柱上产生一交变的磁通,交变的磁通和磁环恒定磁通进行叠加,使钼片以给定的交流信号频率振动并配合共振腔发声。产品的整个频率和声压的响应曲线与间隙值、钼片的固有振动频率(可粗略折射为小钼片的厚度)、外壳(亥姆霍兹共振声腔)频率、磁环的磁强漆包线的线径有直接关系。 二、常规电磁无源蜂鸣器产品由哪些材料组成? 三、常规压电蜂鸣器产品是如何工作的?

中断定时蜂鸣器实验

中断定时蜂鸣器实验 一.实验目的 1.掌握ARM2131开发环境ADS,熟悉开发环境的常用工具以及相应功能。 2.学习建立ADS的工程文件、编译连接设置、调试操作等。 3.学习对中断向量VTC、GPIO口的设置。 4.学习定时器中断的应用 二.实验设备 PC兼容机一台,操作系统WINDOWS 2000,安装ADS1.2(ARM Developer Suite 的成熟版本) 三.实验原理 随着信息技术技术的飞速发展,ARM技术方案架构作为一种具备低功耗、高性能、以及小体积等特性的32位嵌入式微处理器,得到了众多的知识产权授权用户,其中包括世界顶级的半导体和系统公司。目前已被广泛的用于各类电子产品,汽车、消费娱乐、影像、工业控制、海量存储、网络、安保和无线等领域。被业界人士认为,基于ARM的技术方案是最具市场前景和市场优势的解决方案。LPC2131 Philips LPC2131 是基于ARM7TDMI-S 的高性能32 位RISC 微控制器,它一方面具有ARM处理器的所有优点:低功耗、高性能;同时又具有较为丰富的片上资源,非常适合嵌入式产品的开发。其特点如下: ·集成了Thumb 扩展指令集。 ·32KB可在系统中编程(ISP)的片内Flash和可在应用中编程(IAP)的8KB RAM,具有向量中断控制器。 ·2个UART,2个I2C 串行接口,2 个SPI串行接口,2 个定时器(7 个捕获/ 比较通道),PWM单元可提供多达6个PWM输出,8通道10位ADC,实时时钟RTC,看门狗定时器WDT,48 个通用I/O引脚。 ·CPU时钟高达60MHz,具有片内晶体振荡器和片内PLL。 GPIO:(General Purpose Input Output) GPIO是用来进行输入输出的,那么肯定有寄存器进行控制。对于输入的话,可以通过读取寄存器来确定引脚的高电平还是低电平;对于输出的话,可以通过写某个寄存器来让这个引脚输出高低电平.GPxCON,GPACON每一位对应着一根引脚(23根)0:代表输出;1:相应的引脚为地址线或用于地址控制对于PORT B-PORT J的话,GPxCON中每两位控制一根引脚00:输入;01:输出;10:特殊功能;11:保留。GPxDA T用于读或者写。GPxUP,1:不使用内部的上拉电阻;0:使用内部上拉电阻。 向量控制寄存器VICVectCntl0-15记录了各个通道号及其使能位。 当中断发生时,VICVectAddr0-15中的一个值会被copy到VICVectAddr. 如果是非向量中断则VICdefaultAddr被copy到VICVectAddr. 程序跳转到VICVectorAddr指向的地址。 中断返回时,写0x00到VICVectAddr. 非向量中断是指那些虽然已经打开(允许),但是没有在相应的VICVectorCntl0~15 和VICVectorAddr0~15中设置的中断。 关于中断设置: 1、首先,硬复位后所有的Special Function Registor都有默认值。不必考虑设置的顺序问题。可以先设置好中断,再开通模块功能。

蜂鸣器电路及其原理

蜂鸣器电路及其原理 蜂鸣器是一种一体化结构的电子讯响器,在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。蜂鸣器采用直流电压供电,其能发出单调的或者某个固定频率的声音,如嘀嘀嘀,嘟嘟嘟等。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,通常在计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件使用。下面为大家介绍的是蜂鸣器的工作原理。 蜂鸣器的工作原理 电路原理图使用SH69P43 为控制芯片,使用4MHz 晶振作为主振荡器。 PORTC.3/T0 作为I/O 口通过三极管Q2 来驱动蜂鸣器LS1,而PORTC.2/PWM0 则作为PWM 输出口通过三极管Q1 来驱动蜂鸣器LS2。另外在PORTA.3 和PORTA.2 分别接了两个按键,一个是PWM 按键,是用来控制PWM 输出口驱动蜂鸣器使用的;另一个是PORT 按键,是用来控制I/O 口驱动蜂鸣器使用的。连接按键的I/O口开内部上拉电阻。

先分析一下蜂鸣器。所使用的蜂鸣器的工作频率是2000Hz,也就是说蜂鸣器的驱动信号波形周期是500μs,由于是1/2duty 的信号,所以一个周期内 的高电平和低电平的时间宽度都为250μs。软件设计上,将根据两种驱动方式来进行说明。 a)蜂鸣器工作原理:PWM 输出口直接驱动蜂鸣器方式 由于PWM 只控制固定频率的蜂鸣器,所以可以在程序的系统初始化时就对PWM 的输出波形进行设置。 首先根据SH69P43 的PWM 输出的周期宽度是10 位数据来选择PWM 时钟。系统使用4MHz 的晶振作为主振荡器,一个tosc 的时间就是0.25μs,若是将PWM 的时钟设置为tosc 的话,则蜂鸣器要求的波形周期500μs 的计数值为

蜂鸣器程序

单片机蜂鸣器实验 C程序: #include "reg51.h" #define uchar unsigned char #define uint unsigned int sbit FM=P2^3; void delay ( uchar x) { uint y; for (; x > 0 x-- ) for( y=500 y>0;y--); } void main() { FM=0; while(1) { delay(20); FM=1; delay(20); FM=0; } } 因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音

单片机驱动蜂鸣器原理与设计 蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。下面是电磁式蜂鸣器的外形图片及结构图。。。电磁式蜂鸣器实物图:一、电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,原理图见下面图3:S51增强型单片机实验板蜂鸣器驱动原理图:如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平 时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。程序中改变单片机P3.7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变P3.7输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。二、蜂鸣器列子下面我们举几个简单的单片机驱动蜂鸣器的编程和电路设计的列子。1、简单的蜂鸣器实验程序:本程序通过在P3.7输出一个音频范围的方波,驱动实验板上的蜂鸣器发出蜂鸣声,其中DELAY延时子程序的作用是使输出的方波频率在人耳朵听觉能力之内的20KHZ以下,如果没有这个延时程序的话,输出的频率将大大超出人耳朵的听觉能力,我们将不能听到声音。更改延时常数,可以改变输出频率,也就可以调整蜂鸣器的音调。大家可以在实验中更改#228为其他值,听听蜂鸣器音调的改变。 ORG 0000H AJMP MAIN ;跳转到主程序 ORG 0030H MAIN: CPL P3.7 ;蜂鸣器驱动电平取反 LCALL DELAY 延时 AJMP MAIN 反复循环 DELAY:MOV R7,#228 ;延时子程序,更改该延时常数可以改变蜂鸣器发出的音调 DE1: DJNZ R7,DE1 RET

嵌入式系统原理实验四蜂鸣器

实验四蜂鸣器实验 实验目的: 控制ALIENTEK 战舰STM32 开发板上的蜂鸣器发出:“嘀”…“ 嘀”… 的间隔声,进一步熟悉STM32 IO 口的使用 内容要点: 1.硬件介绍 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 战舰STM32 开发板板载的蜂鸣器是电磁式的有源蜂鸣器 这里的有源不是指电源的“源”,而是指有没有自带震荡电路, 有源蜂鸣器自带了震荡电路,一通电就会发声 STM32的单个IO 最大可以提供25mA 电流(来自数据手 册),而蜂鸣器的驱动电流是30mA 左右,两者十分相近,但是全盘考虑,STM32 整个芯片的电流,最大也就150mA,如果用IO 口直接驱动蜂鸣器,其他地方用电就得省着点了…所以,我们不用STM32 的IO 直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32 的IO 只需要提供不到1mA 的电流就足够了。IO 口使用虽然简单,但是和外部电路的匹配设计,还是要十分讲究的,考虑越多,设计就越可靠,可能出现的问题也就越少。 蜂鸣器在硬件上也是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣器的驱动信号连接在STM32 的PB8 上。 图1 蜂鸣器与STM32 连接原理图 当PB.8 输出高电平的时候,蜂鸣器将发声,当PB.8 输出低电平的时候,蜂鸣器停止发声 2.软件设计 可以直接打开本实验工程,也可以按下面的步骤在实验 1 的基础上新建蜂鸣器实验工程。复制上一章的LED 实验工程,然后打开USER 目录,把目录下面工程LED.uvprojx 重命名为BEEP.uvprojx。,然后在HARDWARE 文件夹下新建一个BEEP 文件夹,用来存放与蜂鸣器相关的代码

蜂鸣器知识汇总(完整资料).doc

【最新整理,下载后即可编辑】 蜂鸣器知识汇总 1)蜂鸣器的介绍 1.蜂鸣器的作用蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 2.蜂鸣器的分类蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 3.蜂鸣器的电路图形符号蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。 2)蜂鸣器的分类 蜂鸣器根据结构不同分为压电式蜂鸣器和电磁式蜂鸣器; 无论是压电式蜂鸣器还是电磁式蜂鸣器,都有有源和无源的区分,其中,“有源”是指蜂鸣器本身内含驱动了,直接给它一定的电压就可以响;“无源”是需要靠外部的驱动才可以响的 1.蜂鸣器的结构原理 压电式蜂鸣器:以压电陶瓷的压电效应,来带动金属片的振动而发声,主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出 1.5~ 2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。 压电式蜂鸣器需要比较高的电压才能有足够的音压,一般建议为9V以上。压电的有些规格,可以达到120dB以上,较大尺寸的也很容易达到100dB 电磁式蜂鸣器:用电磁的原理,通电时将金属振动膜吸下,不通电时依振动膜的弹力弹回,由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 用1.5V就可以发出85dB以上的音压了,唯消耗电流会大大的高于压电式蜂鸣器, 2.有源蜂鸣器和无源蜂鸣器 有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声,有源蜂鸣器工作的理想信号是直流电,通常标示为VDC、VDD等。因为蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,从面实出磁场交变,带动钼片振动发音。 但是在某些有源蜂鸣器在特定的交流信号下也可以工作,只是对交流信号的电压和频率要求很高,此种工作方式一般不采用。 无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声,原因在于内部没有驱动电路。无源蜂鸣器工作的理想信号方波。如果给预直流信号蜂鸣器是不响应的,因为磁路恒定,钼片不能振动发音。有些公司和工厂称为讯响器,国标中称为声响器。 3.外观区分有源蜂鸣器和无源蜂鸣器

实验蜂鸣器实验

实验8 蜂鸣器实验 (仿真部分) 1.实验任务 用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。 2.电路原理图 3.硬件连线 (1.P1.0端口用导线通过“音频放大模块”连接到喇叭SOUNDER上; (2.把P1.7端口用导线连接到“拨动开关”K1端口上; 4.程序设计内容 (1.信号产生的方法 500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms, 信号电平每500us变反1次; 5.程序框图

图4.6.2 6.汇编源程序(非中断软延时) FLAG BIT 00H ORG 00H START: JB P1.7,START JNB FLAG,NEXT MOV R2,#200 DV: CPL P1.0 LCALL DELY500 LCALL DELY500 DJNZ R2,DV CPL FLAG NEXT: MOV R2,#200 DV1: CPL P1.0 LCALL DELY500 DJNZ R2,DV1 CPL FLAG SJMP START DELY500: MOV R7,#250 LOOP: NOP DJNZ R7,LOOP RET END 7.C语言源程序(非中断软延时) #include #include bit flag;

unsigned char count; void dely500(void) { unsigned char i; for(i=250;i>0;i--) { _nop_(); } } void main(void) { while(1) { if(P1_7==0) { for(count=200;count>0;count--) { P1_0=~P1_0; dely500(); } for(count=200;count>0;count--) { P1_0=~P1_0; dely500(); dely500(); } } } } 8.汇编源程序(计数方式采用中断方式) ORG 0000H LJMP MAIN ORG 0003H LJMP INT0P ORG 0013H LJPM INT1P MAIN: MOV SP,#60H SETB IT0 SETB IT1 SETB IE0 SETB IE1 SETB EA MOV R0,#00H LOOP: MOV P1,R0 JMP LOOP INT0P:INC R0 RETI INT1P:DEC R0 RETI END 9.实验要求 学会C51和ASM51两种编程工具。并尝试采用定时器实现定时。

单片机控制蜂鸣器唱歌的原理

单片机控制蜂鸣器唱歌 的原理 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。1)音调的确定 音调就是我们常说的音高。它是由频率来确定的!我们可以查出各个音符所对应的相 应的频率,那么现在就需要我们来用51来发出相应频率的声音! 我们常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。那么怎样确定一个频率所对应的定时器的定时值呢? 以标准音高A 为例: A 的频率f = 440 Hz, 其对应的周期为:T = 1/ f = 1/440 =2272μs 那么,单片机上对应蜂鸣器的I/O 口来回取反的时间应为: t = T/2 = 2272/2 = 1136 μs ,也就是清零、置位在一个周期内完成. 这个时间t 也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0 ,则定时器的予置初值由下式来确定: t = 12 * (TALL – THL)/ f0 式中TALL = 216= 65536,T HL为定时器待确定的计数初值。因此定时器的高低计数器的初值为: TH =THL/ 256 = ( TALL – t* f0/12) / 256

单片机驱动蜂鸣器原理与程序学习资料

单片机驱动蜂鸣器原 理与程序

单片机驱动蜂鸣器原理与设计 作者:mcu110 来源:51hei 点击数:12159 更新时间:2007年08月01日【字体:大中小】 蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。 蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 下面是电磁式蜂鸣器的外形图片及结构图。。。 电磁式蜂鸣器实物图:电磁式蜂鸣器结构示意图:

图 1 图 2 电磁式蜂鸣器内部构成: 1. 防水贴纸 2. 线轴 3. 线圈 4. 磁铁 5. 底座 6. 引脚 7. 外壳 8. 铁芯 9. 封胶 10. 小铁片 11. 振动膜 12. 电路板 一、电磁式蜂鸣器驱动原理 蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,原理图见下面图3: S51增强型单片机实验板蜂鸣器驱动原理图:

蜂鸣器演奏原理

蜂鸣器发声的音调和节拍的确定方法 单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。 在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央C上 方的A音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即 f2=2f1 时,则称f2 比f1高一个倍频程, 在音乐中1(do)与i ……正好相差一倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12 个半音。以1—i八音区为例,12个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5 一#5、 #5—6、6—#6、#6—7、7—i。这12 个音阶的分度基本上是以对数关系来划分的。 如果我们知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程 的关系得到其他音符基本音调的频率。 知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音, 我们只需将定时器予置不同的定时值就可实现。那么怎样确定一个频率所对应的定时器 的定时值呢?以标准音高A为例: A的频率f = 440 Hz,其对应的周期为: T = 1/ f = 1/440 =2272μs 由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为: t = T/2 = 2272/2 = 1136μs 这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时, 其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0, 则定时器的予置初值由下式来确定: t = 12 *(TALL –THL)/ f0 式中TALL = 2^16 = 65536,THL 为定时器待确定的计数初值。因此定时器的高低计数器 的初值为: TH = THL / 256 = ( TALL –t* f0/12) / 256 TL = THL % 256 = ( TALL –t* f0/12) %256 将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求 出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1 下的定时器高低计数 器的予置初值为: TH440Hz = (65536 –1136 * 12/12) /256 = FBH TL440Hz = (65536 –1136 * 12/12)%256 = 90H 根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。 音符的节拍我们可以举例来说明。在一张乐谱中,我们经常会看到这样的表达式,如 1=C 3/4 、1=G 4/4 ……等等,这里1=C,1=G 表示乐谱的曲调,和我们前面所谈的音 调有很大的关联,3/4 、4/4 就是用来表示节拍的。以3/4 为例加以说明,它表示乐谱 中以四分音符为节拍,每一小结有三拍。比如:

有源蜂鸣器与无源蜂鸣器的区别(超全)

有源蜂鸣器与无源蜂鸣器的区别(转) 有源(引脚长)无源(引脚长度相同) 无源蜂鸣器的优点是: 1。便宜 2。声音频率可控,可以做出“多来米发索拉西”的效果 3。在一些特例中,可以和LED复用一个控制口 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 有源蜂鸣器的优点是:程序控制方便 区分 1 把蜂鸣器一脚朝天,如果电路板是黑色的表明是有缘的,如果电路板是绿色的表示无源的。 2 把万用表调到欧姆挡RX1位,用黑表笔接蜂鸣器的正极,慢慢触碰,如果发出咔咔生,电阻组织为8Ω或16Ω表示无源蜂鸣,如果发出持续的声音,表示有源! 现在很常用的是一种有源蜂鸣器,内部有振荡、驱动电路。加电源就可以响,你所说的估计就是那种。优点是用起来省事,缺点是频率固定了,就只一个单音。 有源蜂鸣器和无源蜂鸣器的差别主要差别为:有源蜂鸣器和无源蜂鸣器的根本区别是产品对输入信号的要求不一样;有源蜂鸣器工作的理想信号是直流电,通常标示为VDC、VDD等。因为蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,从面实出磁场交变,带动钼片振动发音。但是在某些有源蜂鸣器在特定的交流信号下也可以工作,只是对交流信号的电压和频率要求很高,此种工作方式一般不采用。而无源蜂鸣器没有内部驱动电路,有些公司和工厂称为讯响器,国标中称为声响器。无源蜂鸣器工作的理想信号方波。如果给预直流信号蜂鸣器是不响应的,因为磁路恒定,钼片不能振动发音。 实例中,把驱动方式给为交流驱动(PWM输出)控制,频率选为5kHz。 在实际使用蜂鸣器时,区分是有源还是无源蜂鸣器,电磁式还是压电式。 对于后者,他们的区别是: 电磁无源蜂鸣属于感性负载器件,理想输入是正向方波通常记作:VO-P。压无源蜂鸣属于容性负载器件,理想输入是双向方波通常记作:VP-P。但是如果IC是反向器4049等,取一非门的输入和输出接蜂鸣器也是很理想的,只是有时IC的输出功率太小,声音达不到预期要求。如果蜂鸣器是作为高声压报警用的,普通的两引脚电感还不能满足要求,一般会采用三脚抽头电感,一般为10倍的升压比,有些高声压110dB以上的可能要用小功率变压器实现升压。

实验十蜂鸣器应用

实验十蜂鸣器应用 蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。本单片机实验板通过一个三极管9015来放大驱动蜂鸣器。 蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻后由单片机的P2.1引脚控制,当P2.1输出高电平时,三极管截止,没有电流流过线圈,蜂鸣器不发声;当P2.1输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P2.1脚的电平来使蜂鸣器发出声音和关闭。 程序中改变单片机P2.1引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变P2.1输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。 (1) 实验任务 产生500Hz的音频信号驱动扬声器,作报警信号。 学习板默认是没有接通蜂鸣器,需要用跳线帽短接SPcon。本实验需要产生一个500Hz的报警声,即可以通过计算1S内开关蜂鸣器500次。 (2) 实验电路 (3)实验目的: ●掌握蜂鸣器的使用 ●学会编写软件延时函数 (4)实验步骤 ●分析设计内容,设计软硬件设计方法 ●编写C语言代码 ●编译代码 ●下载可执行文件 ●硬件调试 ●观察现象

/**************************头文件***********************/ #include"regx52.h" #include #define uchar unsigned char #define uint unsigned int sbit buzzer=P2^1; //控制蜂鸣器 uchar i; //全局变量 /*********************毫秒级延时函数*****************/ void delayms(uint ms) { uchar b; while(ms--) { for(b=0;b<125;b++); } } /***********************主函数***********************/ main() { while(1) //大循环 { buzzer=~buzzer; delayms(1); //延时1MS } } (7)现象 500HZ音调发生。 (8)扩展任务 自行改变频率,例如可以播放一首简短的歌曲。

蜂鸣器的驱动电路设计及原理分析.pdf

蜂鸣器的驱动电路设计及原理分析 蜂鸣器的驱动电路设计及原理分析 以下介绍的几种蜂鸣器驱动电路是针对单片机I/O口的驱动电路,适用于现行的压电式蜂鸣器。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。 当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kH Z的音频信号,阻抗匹配器推动压电蜂鸣片发声。 一、以一个9012驱动P1.0口方波 测试程序: 二、双端口驱动

电路原理图 工作原理简介 BUZ1、BUZ2两端口均接单片机的I/O口或单片机的蜂鸣器驱动口。 BUZ1端口为“高频口”(相对BUZ2而言),其脉冲电压频率一般为几KHz,具体频率依蜂鸣器需发出的音乐声来调整; BUZ2端口为“低频口”,其电压周期相对较长一些,一般为数十ms至数百ms。工作时,两端口输出电压脉冲驱动三极管Q2和Q3,当BUZ2端口出现高电平时, 三极管Q3导通, +12V电压经Q4三极管给蜂鸣器提供工作电压,同时为电容E7充电; BUZ2端口电平变低时,Q3和Q4三极管均截止,+12V电压被隔离,此时 已充满电的电容E7放电,为蜂鸣器工作提供能量。蜂鸣器的工作状态直接由三极管Q2决定,当BUZ1端口出现高电平时,三极管Q2导通,蜂鸣器工作,BUZ1 端口电平变低时,Q2三极管截止,蜂鸣器停止工作。蜂鸣器的通电频率与内部的谐振频率(固定)相互作用就产生我们所需的音乐声。

——本站文章均来自本公司工程师整理或用户来稿或网络,如果我们转载的文章中有涉及或侵犯您的相关权益,请即时与我们取得联系。邮件内容中请注明文章所在网址及文章标题,我们会即时处理或删除,感谢您的合作!

相关主题
文本预览
相关文档 最新文档