基于FPGA的简易电子琴控制电路设计

2014-11-04 15:59吴翠娟
电脑知识与技术 2014年28期
关键词:电子琴

吴翠娟

摘要:该文采用FPGA芯片EP1K100QC208-3作为控制核心芯片实现简易电子琴的控制电路。该简易电子琴具有手动弹奏和自动演奏预存乐曲的功能,并可同时显示手动弹奏或自动演奏的音节名称。控制电路包含自动节拍产生、手/自动弹奏音名产生、手/自动音名输出选择、音节分频系数产生、音名频率产生和BCD-7段译码等模块的电路功能,用VHDL描述各电路设计。

关键词:FPGA;电子琴;手动弹奏;自动演奏;音名显示

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)28-6777-04

1 概述

众所周知,物体振动能够发出声音。振动的频率不同,声音的音调就不同。乐谱中的每个音名都对应有特定的发声频率。同样,电子琴演奏出的每个音名,也是由一个个不同频率的电信号,通过扬声器的音圈,使扬声器的振膜以与原电信号同频率振动来控制扬声器发出不同的音调的。

本简易电子琴的设计可以通过按键选择手动弹奏和自动演奏两种模式。手动弹奏模式时,可通过按压14个不同的按键,使扬声器能对应弹奏从中音1到低音1之间的全部音名。自动演奏模式时,扬声器会自动播放预先设定的某段音乐。在两种工作模式下,扬声器发出的音名,可以通过数码管显示出来。

简易电子琴系统框图如图1所示。

图1的框图,通过手/自动模式切换电路可选择电子琴的手动弹奏/自动演奏模式。手动模式时,通过弹奏电路的音节键盘,可以手动弹奏n个音节对应的n个弹奏按键;自动模式时,FPGA将基准频率产生电路产生的高频标准频率信号处理产生自动演奏所需的节拍自动控制信号。通过FPGA编程实现的控制系统,能够播放出手动弹奏/自动演奏的乐曲,并在1位数码管上显示手动弹奏/自动演奏的音节名称。

2 简易电子琴的FPGA控制电路设计

本设计FPGA的外围接口电路原理简单,技术成熟,便于实现。

简易电子琴的FPGA控制电路结构如图2所示。

FPGA内部的控制电路各功能模块用VHDL描述其设计功能。

2.1 自动节拍产生模块

自动节拍产生模块的设计是基于分频器的设计,用于将高频的基准频率信号分频产生自动演奏模式下8Hz的节拍自动控制信号。

用VHDL语言设计描述本电路模块,得到的设计电路模块如图3所示。

图中,CLKIN为基准频率100KHz信号的输入端口,CLKOUT为经过12500分频后得到的8Hz节拍信号输出端口。

2.2 手动弹奏音名产生模块

当手/自动模式为手动模式时,手动弹奏音名产生模块检测n个弹奏按键的动作状态,生成按键对应音名的BCD编码。

本模块设计使用1位数码管,为了使数码管显示的音名易于识别,中低音1~7和中音1~7的BCD编码采用正常的数字1~7的BCD编码,而低音和中音可用小数点是否点亮来标识:如小数点点亮为低音,小数点未点亮为中音。也可以多增加1位数码管用于显示高、中、低音。

以14音电子琴为例,4个弹奏按键的标号与14个音名的对应关系如图4所示。

用VHDL设计描述本设计模块,得到手动弹奏音名产生模块如图5所示。

图5所示模块图中,MODE为手动/自动模式开关的状态输入端,高电平1时为手动弹奏模式;PLAYKEY[13..0]为14个弹奏按键的状态输入端,每一时刻只有一个按键被按下(按键按下为高电平1),如图4-5所示,PLAYKEY(13)到PLAYKEY(7) 依次顺序对应低音1~7,PLAYKEY(6)到PLAYKEY(0) 依次顺序对应中音1~7;PLAYLOW为手动弹奏音名的低音/中音标志信号输出端,用于识别低音和中音,PLAYLOW为1时表示低音,PLAYLOW为0时表示中音;PLAYNAME[3..0]为手动弹奏的低音1~7和中音1~7的BCD编码输出端。

2.3 自动演奏音名产生模块

当为自动模式时,自动演奏音名产生模块以自动节拍分频模块产生的8Hz频率信号为节拍,将按照预先设定的某段音乐的音符顺序,依次循环输出用于显示音名的BCD码和低音/中音标志。

以自动演奏乐谱拍号为4/4为例,即以四分音符为一拍,每小节有四拍。每小节可为4个四分音符或8个八分音符。每个八分音符为1个8Hz节拍,则每拍为1个四分音符(亦即2个八分音符),即占2个8Hz的节拍。因此,乐谱中,每拍为2个八分音符的每个音符占1个8Hz节拍,每拍是1个四分音符的占2个8Hz节拍。在程序设定中每个8Hz节拍产生一个音名,因此1个八分音符产生一个音名,1个四分音符应产生两个相同的音名,1个二分音符应产生4个相同的音名,1个全音符应产生8个相同的音名。

用VHDL设计描述本设计模块,得到自动演奏音名产生模块如图6所示。

图6所示模块图中,MODE为手动/自动模式开关的状态输入端,低电平0时为自动弹奏模式;JIEPAI为自动节拍产生模块生成的8Hz节拍信号输入端, AUTOLOW為自动弹奏音名的低音/中音标志信号输出端,用于识别低音和中音,AUTOLOW为1时表示低音,AUTOLOW为0时表示中音;AUTONAME[3..0]为自动弹奏的低音1~7和中音1~7的BCD编码输出。

2.4 手动/自动音名输出选择模块

手动弹奏音名产生模块和自动弹奏音名产生模块产生的两组不同的音名BCD码输出(PLAYNAME和AUTONAME)及低音/中音标志(PLAYLOW和AUTOLOW),但FPGA的接口电路不可能同时处理两组信号,因此本模块的作用是根据手动/自动模式开关的状态,选择两组信号中的一组输出给后续电路进行处理。

手动/自动音名输出选择模块相当于是一个二选一的数据选择器。当MODE为高电平,即手动弹奏模式时,选择输出手动弹奏音名产生模块输出的PLAYNAME和PLAYLOW;当MODE为低电平,即自动演奏模式时,选择输出自动演奏音名产生模块输出的AUTONAME和AUTOLOW。

用VHDL设计描述本设计模块,得到手动/自动音名输出选择模块如图7所示。

图7所示模块图中,MODE为手动/自动模式开关的状态输入端;PLAYLOW和PLAYNAME为手动弹奏模式下的低音/中音标志和音名的BCD码;AUTOLOW和AUTONAME为自动演奏模式下的低音/中音标志和音名的BCD码;NAMEOUT和LOWOUT为输出到后续模块使电子琴发音的音名BCD码和低音/中音标志,根据MODE的状态,选择手动和自动两种模式下的一组音名BCD码和低音/中音标志作为输出。

2.5 音节分频系数产生模块

1) 音节分频系数产生模块的设计思路

乐谱中的每个音节都对应有特定的发声频率。不同音节的发声频率需对基准频率进行不同分频系数而得到。音节分频系数产生模块的功能是产生不同音节对应的分频系数。

简谱中音名与频率的对应关系如表1所示。

2.6 音名频率产生模块

音名频率产生模块是用于对基准频率信号进行不同分频系数分频而得到各音名对应的发声频率。分频系数是音名分频系数产生模块生成的数值,作为音名频率产生模块的分频系数预置值,使不同音名的分频系数预置值不同,从而产生对应音名的发音频率。

本模块相当于一个可预置分频系数的分频器。考虑到本模块输出的音名频率信号需送蜂鸣器发声,为了提高声音信号的功率,可以采用图9所示的高占空比分频波形。

2.7 BCD-七段译码模块

七段译码模块是将低音1~7及中音1~7的音名BCD码译码为数码管的七段字段码,使音名1~7的字形在数码管上显示出来。低音1~7及中音1~7的音名BCD码对应相同,低音和中音可用小数点是否点亮来标识:小数点点亮为低音,小数点未点亮为中音。

3 结束语

根据简易电子琴的原理框图,将用VHDL语言设计的功能模块正确连接并编译,编程数据下载配置到FPGA芯片中,该可编程芯片就可以实现要求的设计功能。再连接上外围的输入、输出接口电路,该FPGA系统实现了简易电子琴电路的设计功能。

本设计采用高集成度的FPGA芯片实现,用VHDL描述设计,精确的数字分频系数使电子琴的发音准确,避免了需要专业调音师反复调试、硬件电路设计修改困难、电路系统可靠性等问题,设计修改方便,功能扩展易于实现,设计开发成本低,系统控制的可靠性和灵活性提高,系统的性价比大大提升。具有一定的现实意义。

参考文献:

[1] 徐志军,徐光辉.CPLD/FPGA的开发与应用[M].北京:电子工业出版社,2002.

[2] 潘松,黄继业.SOPC技术实用教程[M]. 北京:清华大学出版社,2005.

[3] 盛青松.基于AT89C51可弹奏电子琴的设计[J].科技信息,2010(11).

[4] 章丹.基于單片机的简易电子琴的设计与实现[J].电脑知识与技术,2014(6).

[5] 王琼英.电子琴的一种音色处理方法及其电路[J].山东省科技院院刊,1988(5).

[6] 田立坤,张珊.基于CPLD的简易电子琴的设计[J].黑龙江科技信息,2009(7).

猜你喜欢
电子琴
基于AT89C51单片机的电子琴设计
电子琴在群众文艺演出中的独特作用
电子琴
电子琴在小学音乐课堂中的应用探讨