kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 设计应用> 嵌入式系统中高级提示音的设计与实现
嵌入式系统中高级提示音的设计与实现
2016年微型机与应用第21期
林鹏,尹绍杰
浙江大学台州研究院 电气与控制研究所,浙江 台州 318000
摘要:了在嵌入式系统中加入动听的提示音或音乐效果,增加音效编辑的灵活性,设计了一套完整的带有余音控制的音效解决方案。该方案主要由电脑端的音乐编辑软件、经改进的蜂鸣器驱动电路及单片机参考处理流程组成,可提供可视化的音乐编辑环境,能够及时试听音乐效果,解决了以往需要将程序烧录至单片机后才能试听效果的不便。经测试,该方案简单方便,降低了音效编辑的复杂度,音效清晰嘹亮,能提升嵌入式产品的人机交互体验。
关键词: 单片机 蜂鸣器 音乐 C#
Abstract:
Key words :

  林鹏,尹绍杰

  (浙江大学台州研究院 电气与控制研究所,浙江 台州 318000)

摘要:为了在嵌入式系统中加入动听的提示音或音乐效果,增加音效编辑的灵活性,设计了一套完整的带有余音控制的音效解决方案。该方案主要由电脑端的音乐编辑软件、经改进的蜂鸣器驱动电路及单片机参考处理流程组成,可提供可视化的音乐编辑环境,能够及时试听音乐效果,解决了以往需要将程序烧录至单片机后才能试听效果的不便。经测试,该方案简单方便,降低了音效编辑的复杂度,音效清晰嘹亮,能提升嵌入式产品的人机交互体验。

关键词:单片机;蜂鸣器;音乐;C#;WPF

0引言

  在嵌入式产品中加入提示音或音乐能使用户的操作得到反馈,提升了人机交互体验,也提高了产品的档次。在大多数的产品中,为了节省成本,一般使用单片机驱动蜂鸣器来发出声音而非使用专用芯片。然而单片机音效的调音和编曲工作比较繁复,往往需要烧录程序后反复地试听,大大增加了操作强度。本文介绍一套在嵌入式系统中增加提示音或音乐的开发方案,能够比较直观地编写出提示音效,并且每个音符带有余音控制,而非普通的生硬地切换音符。

1方案简介

图像 001.png

本方案包括一套电脑端的音乐编辑软件、经改进的蜂鸣器驱动电路以及供参考的单片机端的处理流程。系统框架如图1所示,电脑和单片机通过串口通信,单片机根据接收到的数据驱动蜂鸣器。在电脑端完成音效的编辑并定型后,可移除串口通信的代码,将电脑端生成的文件加入单片机工程即可。

2蜂鸣器音乐的发声原理

  音乐的基本要素包括音的高低、长短、强弱和音色[1],要使蜂鸣器发出声音就需要控制这些要素。蜂鸣器的固有特性决定了音色,无法被控制;通过驱动蜂鸣器的频率可以改变音的高低;控制蜂鸣器导通的时间可以决定音的长短;调节蜂鸣器的供电电压可以模拟出音的强弱。值得一提的是,蜂鸣器分为有源和无源两种,有源蜂鸣器内部自带谐振电路,直接加电压即可发出声音,无法控制声音的频率,而无源蜂鸣器需要有脉冲频率的驱动。本方案选择无源蜂鸣器。

  本方案使用的蜂鸣器驱动电路[2]如图2所示。由图可见该驱动电路稍显复杂,一般的蜂鸣器驱动电路只有简单的右半部分,只能控制音的高低和长短,无法控制音的强弱,加入了左半部分的控制电路后,能调节蜂鸣器的供电电压,在一定程度上使得音的强弱也有所变化。

图像 002.png

  蜂鸣器驱动电路的原理为:在一个音程内,BUZ_PWM端输入指定频率的方波信号,当BUZ_CTRL端的信号为高时,NPN三极管Q2导通,PNP三极管Q1也导通,电解电容C1充电,通过R3、R4的限流和分压后,蜂鸣器得到供电,在BUZ_PWM端信号的驱动下发出特定频率的声音;当BUZ_CTRL端的信号为低时,三极管Q2和Q1截止,蜂鸣器由电解电容C1的残余能量供电,蜂鸣器的音量将逐渐减低,体现出音的强弱特性。BUZ_CTRL端的信号有两种选择:一种是输出PWM(Pulse Width Modulation)脉宽调制信号,并搭配一个小容量的电容,通过调整脉冲的宽度,随意调节音的强弱变化;另一种是一个周期的高低信号,配合一个较高容量的电容,驱动信号先高使电容充电,在某个合适的时刻置低,蜂鸣器仅由电容供电,声音缓慢减弱。第一种方法需要两路PWM波驱动,较复杂,对单片机的要求也较高,但是能做出非常丰富的音乐效果;第二种方法只要一路PWM波驱动,外加一路开关信号,一些单片机即使没有硬件PWM发生器也能较好地实现控制效果,产生带有余音效果的音效。为了方便和控制简单起见,本方案选用第二种控制方式,驱动信号和电容上的电压波形如图3所示。

图像 003.png

3电脑端音乐编辑软件的设计

  为了方便编辑单片机音乐,开发了配套的电脑端单片机音乐编辑器,能够更加直观地调音和编曲,加快开发进度。

3.1开发环境简介

  电脑端的音乐编辑器采用C#和Windows Presentation Foundation(WPF)技术开发,使用Visual Studio 2010作为开发编译平台,编译后的可执行文件可运行在装有.Net Framework 4.0运行环境的电脑上。选用C#作为软件开发语言主要是因其方便、强大,并且随着微软宣布终止对Windows XP操作系统的支持,使用C#编写的软件可直接运行的电脑将越来越多,从而不必担心需要再安装运行环境的问题。软件的界面使用了WPF技术作为用户界面框架而非传统的WinForm界面,因为WPF包含诸多优异的特性,数据驱动、数据绑定、动画特效、界面可定制程度高等特点使得界面开发更加得心应手,而且这也是被微软官方所推荐使用的[3-4]。

3.2电脑端音乐编辑软件的功能简介

  电脑端音乐编辑软件的主界面如图4所示,主要有以下功能:

  (1)选择串口端口号及波特率,启停串口连接。

  (2)键盘“←”和“→”按键可调整一个音符的持续长度,鼠标左右拖动方波中间的下降沿能分配电容的供电时间。

  (3)键盘“↑”和“↓”按键能调整音符的基础频率区间,以C大调的频率为基准。

  (4)能载入或新建音乐编辑文件,支持拖拽打开文件。

  (5)当软件主界面获得焦点时,如果已连上串口通信,按键盘的小键盘数字“0~7”按键能够试听音符效果;在按小键盘数字“0~7”按键的同时按住键盘上的左“Ctrl”键,如果此时已打开编辑音乐文件界面则会将当前的音符添加至编辑界面的音符列表中,否则会打开一个空白的编辑界面。

图像 004.png

  电脑端音乐编辑器软件的音符编辑界面如图5所示,从左至右、从上至下其功能有:

  (1)将主界面按下的音符添加至列表尾部。

  (2)修改音符名或备注,能在下拉菜单选择音符名并自动修改对应的频率值或直接输入备注文字。

  (3)能修改频率、电容开通时间及音符持续时间,带有数值合法性检验。

  (4)列表中的每一个音符选中时能删除(快捷键为键盘上的“Delete”键)和试听(快捷键“F2”,需连上串口通信)。

  (5)当连上串口通信后,可以点击界面右边的“播放”按钮(快捷键“F5”)从头开始播放或停止播放;点击“播放”按钮下面的按钮(快捷键“F1”)从当前选中的行开始播放。正在播放的行底色为淡红色,用以指示播放进度。

  (6)有删除行时提示和修改频率后试听选项。

  (7)可以在选中的行下面新增一行(快捷键“F3”),新增的行底色为淡绿色以区分其他普通的行。

  (8)将当前编辑的音乐进度保存为“.umf”格式,方便以后导入文件继续修改。

  (9)当完成音乐编辑后,可以导出C语言格式的文件,加入到单片机工程中,以便完成整个单片机音乐功能的开发。

图像 005.png

3.3音符数据的设计

  软件中的音符数据主要由音符名称或备注、音符频率、蜂鸣器供电电容上电时间和音符持续时间组成。其中电容上电时间和音符持续时间比较简单,在软件主界面中能直观地调整,下面着重介绍音符名称及其对应的频率。

  根据科学音调记号法及相关的乐理知识[5], C、D、E、F、G、A、B为C大调的七个主音,唱名分别为do、re、mi、fa、so、la、si,简谱分别记为数字1~7,并可以知道每一个音符的频率值。在软件中程序默认的八度区为中央C,即主界面右边滑块所指向的“C.262”(科学音调记号法记为“C4”,为了突出频率的概念,软件中的滑块右边标示符号格式为“C.”加对应的频率值),音符标示名的格式为音符所在的八度区C音的频率值加音符的唱名,如“C4”的音符名称为“C262_Do”。由于一般简单的歌曲很少用到升音或降音,为了操作方便,程序中将其忽略,在录入歌曲时先用临近的音符代替,调试时再修改备注和频率。程序中将各个音符的频率保存为一个二维数组,这样根据主界面右边当前滑块值和按下的数字键就能很方便地获得所需要录入音符的频率值,该二维数组代码如下:

  private static readonly ushort[,] ToneFrequency = new ushort[7,7] {

  {65, 73, 82, 87, 98, 110, 123},

  {131, 147, 165, 175, 196, 220, 247},

  {262, 294, 330, 349, 392, 440, 494},

  {523, 587, 659, 698, 784, 880, 988},

  {1047, 1175, 1319, 1397, 1568, 1760, 1976},

  {2093, 2349, 2637, 2794, 3135, 3520, 3951},

  {4186 ,4699, 5274, 5588, 6272, 7040, 7902}

  };

3.4软件主界面的程序流程图

  软件主界面的程序流程图如图6所示。

图像 006.png

3.5串口通信的数据格式

  为了能测试所编辑音乐的实际效果,需要将音符数据发送给单片机演奏,本方案使用串口来传递数据。播放一表1串口通信的数据格式字节偏移字节内容0数据帧头码1,0xEE1数据帧头码2,0xFF2音符频率,高8位3音符频率,低8位4电容通电时间,每单位10 ms5音符持续时间,每单位10 ms个音符时,只需要通过串口向单片机发送音符数据即可,由于需要发送定长多字节的数据,在数据帧中加入头码来方便单片机判断数据帧的开始和结束。数据帧的格式如表1所示。

图像 008.png

3.6导出文件的格式

  在完成音乐的编辑和调试后,可以导出C语言文件,加入单片机工程中,完成单片机音乐的功能。导出的文件中包含音符结构体的定义、停止标识符及音符结构体数组,可以根据需要添加多个音符结构体数组,并修改数组名称。

4单片机参考处理流程

  在串口接收到完整的一帧音符数据后,调用Music_StartANewTone函数,启动一次音符演奏的控制流程,在该函数内将音符的电容上电时间赋值给CURBuzzerOnTime全局变量,音符的持续时间赋值给CURToneTime全局变量,将音符的计时器全局变量ToneTimer置为0,并打开电容的供电控制并设置好蜂鸣器的驱动频率。一个音符的控制过程中每10 ms处理一次相关的变量操作,其程序流程图如图7所示。

图像 007.png

  程序中定义了音符结构体指针变量pMusicTone,用于方便控制音乐的播放和停止,在需要播放音乐或停止播放时,将指针变量pMusicTone指向对应的音乐音符数组即可,在音符的控制流程中将自动处理。

5结束语

  本文介绍了一套完整的在嵌入式系统中加入高级提示音或音乐的方法,能够快速方便地编辑音乐和调试音乐效果,加快嵌入式系统提示音或音乐功能的开发进度,能够广泛地适用于需要警报提示音或开关机音乐的应用场合。

 参考文献

  [1] 百度百科.音乐基本要素[EB/OL]. [2016-06-10]. http://baike.baidu.com/view/1417685.htm.

  [2] 深圳和而泰智能控制股份有限公司. 一种蜂鸣器电路:中国,2006200340907[P]. 2007-07-25.

  [3] 刘铁猛. 深入浅出WPF[M]. 北京:中国水利水电出版社,2010.

  [4] KARLI W, JACOB V H, JON D R,等. C#入门经典[M]. 齐立波,黄俊伟,译. 北京:清华大学出版社,2013.

  [5] Wikipedia. Scientific pitch notation[EB/OL]. [2016-06-10]. https://en.wikipedia.org/wiki/Scientific_pitch_notation.


此内容为AET网站原创,未经授权禁止转载。
Baidu
map