您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 单片机学习之蜂鸣器驱动
技术支持:主讲:wang1jinWang1jin带您从零学单片机配套开发板:WJ-V4.0AVR+51开发板第6章:蜂鸣器部分技术支持:主讲:wang1jin本章目录:Ø蜂鸣器简介Ø蜂鸣器硬件结构与原理Ø蜂鸣器驱动方法Ø单片机如何输出一定频率Ø蜂鸣器唱歌原理Ø蜂鸣器小电子琴设计Ø蜂鸣器唱歌程序设计Ø课后作业技术支持:主讲:wang1jin蜂鸣器的种类蜂鸣器按其结构分主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。技术支持:主讲:wang1jin蜂鸣器的分类蜂鸣器按其是否带有信号源又分为有源和无源两种类型。有源蜂鸣器只需要在其供电端加上额定直流电压,其内部的震荡器就可以产生固定频率的信号,驱动蜂鸣器发出声音。无源蜂鸣器可以理解成与喇叭一样,需要在其供电端上加上高低不断变化的电信号才可以驱动发出声音。技术支持:主讲:wang1jin有源和无源蜂鸣器的区别实验板中,单片机P17脚输出接Q1基极,通过控制Q1导通或截止来控制蜂鸣器上是否有电流,从而发出声音,要用单片机控制蜂鸣器发出不同频率的声音,最好采用无源的蜂鸣器,如果用有源蜂鸣器,可以会因为二种不同频率声音(有源蜂鸣器本身固有发音频率与单片机驱动频率)互相叠加,造成效果混乱、发音不清。不过为了照顾初学者,我们的开发板上的是有源的蜂鸣器.(因为有源的驱动很简单,无源的则很复杂.)技术支持:主讲:wang1jin蜂鸣器的工作原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。实验板通过一个三极管Q1来放大驱动蜂鸣器。技术支持:主讲:wang1jin蜂鸣器的工作原理蜂鸣器的正极接到Q1的集电极C极上面,蜂鸣器的负极地,三极管发射极E极接电源VCC,基级B经过限流电阻R33后由单片机的P1.7引脚控制,当P1.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P17输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P1.7脚的电平来使蜂鸣器发出声音和关闭。程序中改变单片机P1.7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变P1.7输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。技术支持:主讲:wang1jin有源蜂鸣器的驱动方法对于有源和无源的驱动方式,略有不同,我们先讲解一下有源蜂鸣器的驱动方法。有源蜂鸣器因为内含有信号源,因此只要加上额定的工作电压就可以发出固定频率的声音,因此,我们在实验板中,只要将P17端口置成低电平,就可以使Q1导通,蜂鸣器得电工作。技术支持:主讲:wang1jin无源蜂鸣器的驱动方法对于无源的蜂鸣器,驱动其发出声音就较为复杂,因为它本身不带信号源,因此,只是通上电源,是不能发出声音的,必须要不断的重复“通电-断电”,才能使其发出声音,我们可以通过编写程序,控制P17口不断的置为高电平—低电平—高电平…,这样蜂鸣器就可以不断的通、断电,从而发出声音。而通电、断电的时间不同,相当于振荡周期的不同,因此又可以得到不同频率的声音。技术支持:主讲:wang1jin单片机如何输出频率为了让单片机发出不同频率的声音,我们采用定时中断来计算延时时间,我们只需将定时器预置不同的定时值就可实现不同时间的定时。那么怎样确定一个频率所对应的定时器的定时值呢?以标准音高A为例:A的频率f=440Hz,其对应的周期为:T=1/f=1/440=2272us技术支持:主讲:wang1jin单片机如何输出频率单片机控制蜂鸣器的波形图,通过对端口P17循环的置位、清零来达到输出固定频率波形,相对于A音频率440Hz图T=2272us,那么t=T/2=2272/2=1136us所以,我们只要在程序中将P17置为高电平,延时1136us,再置为低电平,延时1136us,如此循环,就可以得到440Hz频率的声音。这个延时,可以用定时器中断来做,假设单片机晶振频率为12MHz,以定时器工作方式1来做定时中断,可以得到定时器计数器初值为TH=(65536–1136)/256=0xFBTL=(65536–1136)%256=0x90技术支持:主讲:wang1jin音符频率及定时器初值对照表技术支持:主讲:wang1jin单片机频率音频计算方法从上图中可以看出,高、中、低音的音符频率存在倍频关系,比如1其低音频率是262Hz,中音频率是523Hz,中音是低的2倍频率,高音频率是1045Hz,高音又是中音的2倍频率,所以,我们可以根据其中的12个音符频率来推算出其它的音符频率。这种可推算的频率关系有利于我们在程序采用运算方法来确定音符的频率。技术支持:主讲:wang1jin技术支持:主讲:wang1jin实例练习1实例练习1:4*4电子琴程序的实现。利用WJ-V4.0开发板按下相应键盘时,蜂鸣器发出相应频率的声音。松开按键声音即停止。实现简单的电子琴功能。技术支持:主讲:wang1jin音乐基础知识如果驱动无源蜂鸣器发出频率、持续时间不同的声音,就可以达到单片机控制演奏歌曲的目的。一般说来,单片机演奏音乐基本都是单音频率,因为单片机的IO端口,只能输出高电平或低电平,相当于方波信号,它虽然谐波很丰富,但不包含足够幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音,这也就是为什么单片机演奏歌曲听起来声音单调的原因。因此单片机用于演奏歌曲,只需搞清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符该唱的频率,节拍表示一个音符该唱多长的时间。技术支持:主讲:wang1jin音乐中的音调在音乐中所谓“音调”,其实就是我们常说的“音高”,实质就是频率不同的声音。音乐中以ABCDEFG来表示音高,A音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程,在音乐中1(do)与,2(来)与……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。技术支持:主讲:wang1jin音乐中的音调以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个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。技术支持:主讲:wang1jin音乐基础知识A、B、C、D、E、F、G。经过声学家的研究,全世界都用这些字母来表示固定的音高。比如,A这个音,标准的音高为每秒钟振动440周。除了这些标准间外,还有5个半音,#1B2-#6B7。升C调:1=#C,也就是降D调:1=BD;277(频率)升D调:1=#D,也就是降E调:1=BE;311升F调:1=#F,也就是降G调:1=BG;369升G调:1=#G,也就是降A调:1=BA;415升A调:1=#A,也就是降B调:1=BB。466,技术支持:主讲:wang1jin音乐基础所谓1=A,就是说,这首歌曲的“导”要唱得同A一样高,人们也把这首歌曲叫做A调歌曲,或叫“唱A调”。1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。同样是“导”,不同的调唱起来的高低是不一样的。技术支持:主讲:wang1jin音乐基础音调的确定,我们在前面已经详细讲解过,这里就不再重复。对于一个音符,确定了它的发音频率后,就要确定这个音符发音要发多长时间,也就是节拍,在一张乐谱中,我们经常会看到这样的表达式,如1=C、1=G……等等,这里1=C、1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,、就是用来表示节拍的。以为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。技术支持:主讲:wang1jin音乐基础其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。1、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400~500ms。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。技术支持:主讲:wang1jin连音,顿音,符点音乐中较为常见的还有连音、顿音、符点等,连音就是乐谱上用连线连起来的音,它是用连线来标记的,表示连线内不同音高的音要奏的连贯,即中间不需要停顿。顿音是用三角符标记在音符的上面,在演奏或表演上要表现得短促而又轻巧有弹性。符点就是记在音符右边的小圆点,表示增加前面音符时值的一半,带符点的音符叫符点音符。技术支持:主讲:wang1jin音符演奏长度控制实现在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,为了使这个时间更精确,使用定时器来实现,设定定时器为10ms中断一次,那么,我们需要多少延长时间就延时多少次中断。比如说十六分音符的时长为100ms,八分音符的时长就为200ms,那么,对于一个音符,如果它为十六分音符,则只需产生10次中断,延时时间就刚好是100ms,如果它为八分音符,则只需产生20次中断,依次类推。技术支持:主讲:wang1jin程序实现方法通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播
本文标题:单片机学习之蜂鸣器驱动
链接地址:https://www.777doc.com/doc-4645420 .html