鎴戣鎶曠ǹ
鎮ㄧ殑褰撳墠浣嶇疆锛主页 > 小鱼儿论坛13723官方网站 >

蜂鸣器_图文_百度文库

鏃ユ湡锛2019-07-30 12:01 鏉ユ簮:未知 浣滆:admin

  Wang1jin 带您从零学单片机 第 6 章:蜂鸣器部分 配套开发板:WJ-V4.0 AVR+51开发板 主 讲: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 =0xFB TL = (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 技术支持:程序实现方法 通过上面关于一个音符音调和节拍的确定方 法,我们就可以在单片机上实现演奏音乐了。具 体的实现方法为:将乐谱中的每个音符的音调及 节拍变换成相应的音调参数和节拍参数,将他们 做成数据表格,存放在存储器中,通过程序取出 一个音符的相关参数,播放该音符,该音符唱完 后,接着取出下一个音符的相关参数……,如此 直到播放完毕最后一个音符,根据需要也可循环 不停地播放整个乐曲。 主 讲:wang1jin 技术支持:生日快乐 主 讲:wang1jin 技术支持:简谱图说明 《生日快乐歌》的简谱图,在简谱的左 上角有1=F ,表示该乐曲在演奏的时候,“1” (即“C”)这个音符需要演奏成“F”调,其它 的音符则按此平移。则表示这首乐曲每1小 节有3拍,每拍是四分音符长度,一般大约 400ms~500ms。 ABCDEF 12345 F调是第5个调 主 讲:wang1jin 技术支持:音频数据保存格式 ? 。在编写程序中,定义数组用于存放乐曲 的信息,用2个字节来表示,第1个存储音 调信息,第2个存储音长信息,而以两个字 节均为0表示乐曲信息数组的结尾。其格式 如下: ? uchar code MusicName{音调,音长,音 调,音长...., 0,0}; 主 讲:wang1jin 技术支持:音调存储结构 其中,音调由三位数字组成,每个字节最大值为十进制数255,则: 取其个位表示 1~7 这七个音符; 十位表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。 主 讲:wang1jin 技术支持:音长数据结构 音长也由三位数字组成: 个位表示音符的时值: 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位::0-无符点,1-有符点 关于连音,顿音,符点在程序中的解释: 连音:演奏时不需要停顿直接到下一个音符 顿音:演奏长度是原长度的1半。 符点:演奏长度是原长度1.5倍 主 讲:wang1jin 技术支持:生日快乐转换码 《生日快乐歌》开头两小节的基本两个音符转换成数据的示例,通过这种转换格式,将整 首歌曲转换成数据如下: uchar code MusicHappyBirthday[]={ 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02, 0x15,0x02, 0x11,0x01, 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02, 0x16,0x02, 0x15,0x01, 0x0F,0x03, 0x0F,0x03, 0x19,0x02, 0x17,0x02, 0x15,0x02, 0x11,0x0C, 0x10,0x02, 0x18,0x03, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x02, 0x17,0x01, 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02, 0x15,0x02, 0x11,0x01, 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02, 0x16,0x02, 0x15,0x01, 0x0F,0x03, 0x0F,0x03, 0x19,0x02, 0x17,0x02, 0x15,0x02, 0x11,0x0C, 0x10,0x02, 0x18,0x03, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x02, 0x10,0x01, 0x00,0x00 }; 主 讲:wang1jin 技术支持:单片机演奏步骤(1) 1.根据歌曲的演奏调号和演奏音区生成新的频率 表。 因为不同的演奏调号,意味着最低的频率不一 定是从A起,像(生日快乐)就是F调起。升F 调:1=#F,也就是降G调:1=BG;369HZ 演奏音区代表是(降调)(平调)(升调)演 奏。这些参数都影响音调的频率,所以需要这二 个参数来生成新的频率表。 主 讲:wang1jin 技术支持:单片机演奏步骤2 2.计算歌曲长度。计算出歌曲的长度,方便 判断出歌曲是否播放完毕。这个部分可以 用一个while循环来做判断。 主 讲:wang1jin 技术支持:单片机演奏步骤3 3.取出音乐数组数据,并根据新的频率表, 计算出新的频率参数,并送到定时器中。 百位:0 不升 ,1 升半音 十位: 1低音,2中音,3高音 个位:1-7代表这七个音符 定时器值 = 65536 - (1000000/频率/2) 主 讲:wang1jin 技术支持:单片机演奏步骤4 4.读出音乐数组数据,设置1分音的时长,再 根据音乐数组数据,计算出连音,顿音, 符号等数据。 如果当前音符小于16分音,则发连音时需 要间隔。间隔时间=原时间的4/5。 主 讲:wang1jin 技术支持:单片机演奏步骤5 5.读取演奏的时长数 据,并读取不演奏 时长数据。同时打 开蜂鸣器。演奏完 指向下一数据,并 一直演奏完。 主 讲:wang1jin 技术支持:实例操作: 1.利用WJ-V4.0开发板,设计一个16键电子 琴。按下相应按键的时候,蜂鸣器发出相 应频率的声音。 2.利用WJ-V4.0开发板,设计一个播放音乐的 程序。演奏《生日快乐》、《挥着翅膀的 女孩》等音乐。 主 讲:wang1jin 技术支持:课后作业 1.利用WJ-V4.0开发板实现带音乐功能的电子 琴,当按下开发板4*4键时实现演奏功能。 当按下开发板1*4键时,实现歌曲播放功 能。4个独立键盘对应歌曲:1《生日快 乐》,2《十年》,3《梁祝》4《珍惜》。 当按下4*4键时,歌曲停止播放。松开后歌 曲记忆播放。 作业请提交到:主 讲:wang1jin 技术支持:带您从零学单片机 欢迎光临我们的论坛: 主 讲:wang1jin 技术支持:

鐑棬鎺ㄨ崘
闅忔満鎺ㄨ崘
鏈鏂版枃绔