[摘 要] 本文设计了一种基于FPGA的电子琴,电子琴的61个琴键以8*8矩阵式电路来设计,编程由VHDL硬件描述语言在Altera公司的CycloneⅡ系列的EP2C5Q208C8芯片上实现。
[关键词] FPGA 电子琴 VHDL
电子琴因为操作简单,而广受大众的喜爱。本文基于可编程逻辑控制器件FPGA,利用VHDL语言设计系统的核心部分,配以适当的外围接口电路,可以在琴键上演奏各种电路。该电子琴设计同常用的电子琴一样采用61个按键,总共有5个音区,每个音区总共12个琴键,7个白色琴键和5个黑色琴键(半音键),演奏时可以显示唱名。
该电路共包括5个模块:分频模块,琴键扫描模块,音调产生编码模块,显示模块,扬声器模块。
1.系统组成
该电子琴的系统组成如图1所示。
2.系统各模块电路设计
2.1分频电路模块设计
该系统需要两个主要的分频频率:一是产生对各琴键产生分频系数的系统频率1MHz,一是对琴键进行扫描的频率1KHz.
2.2琴键扫描模块设计
由于共需要61个琴键,因此琴键电路的部分采用矩阵式连接。矩阵式琴键的扫描电路有两种基本方法:扫描法和线翻转法两种。本文采用了扫描法。扫描法的原理是在程序中逐行或是逐列扫描琴键接口,根据端口的输入情况,判断是哪个琴键有按下。
扫描法电路将行接为输出,列接为输入,其扫描的流程为:
(1)判断琴键是否有按下。
(2)琴键去抖动。去抖动电路分为软件和硬件电路,这里采用硬件去抖动电路。
(3)扫描琴键的位置。先令逐个列线输出为0,然后读取行线的状态,若均为高电平,则无琴键按下,如不全为0,则表示其中低电平的行线与为0的扫描列线相交叉的位置的琴键被按下。
2.3音调产生编码模块
音调指频率的高低。音调发生器产生各个音区与音符对应的频率。这里共用到5个音区,每个音区有12个半音,其中C、D、E、F、G、A、B等对应7个白色琴键,C*、D*、F*、G*、A*等对应5个黑色琴键。
该模块的作用是产生各音符的分频预制值。各琴键对应的分频预制值(1MHz)如表1所示。由于对扬声器电路的频率对应的是方波波形,因此这里所使用的分频系数是2倍音符频率的分频值。
其中该模块CODE的输出表示对应的唱名,TONE为各预制值,连接发光二极管,当发光二极管亮时,弹奏的为白色琴键,不亮时,弹奏的是黑色琴键。
2.4扬声器模块
該模块主要是数控分频器电路。该模块的主要结构是采用加法电路来实现。当计数值为音调产生电路TONE的值时,计数值清零,并将SPERK的值取反输出(作用是2分频),否则的话则累加1。这里采用2分频的目的是使得输出的频率的脉宽比较宽,以便于驱动扬声器。
2.5显示模块
该模块的主要作用是将唱名通过数码管显示出来。
3.结束语
该设计将电子琴设计的核心部分集成在FPGA上完成,大大降低了外围电路的设计,而且可以在此的基础上增加相当部分功能,降低了设计的成本。而且可以在设计的各个阶段进行计算机模拟,增加设计的正确性,缩短了设计的周期,具有较为广阔的设计前景。
参 考 文 献
[1]谢自美 电子线路设计﹒实验﹒测试 华中科技大学出版社
[2]赵艳华 曹炳霞 张睿 基于Quartus‖的FPGA/CPLD的设计与应用电子工业出版社
[3]陈中平 高金定 高建芳 基于Quartus‖的FPGA/CPLD的设计与实践 电子工业出版社
[4]侯伯亨 VHDL硬件描述语言与数字逻辑电路设计 西安电子科技大学出版社■