【国外开源】4步数字音序器制作 电路方案

jia36963tw 36 0 ZIP 2021-04-26 23:04:35

项目创建者:Jayson Johnston和Bjorn Nelson 在当今的音乐产业中,最常用的“乐器”之一就是数字合成器。从嘻哈到流行音乐,甚至是乡村音乐,每种类型的音乐都使用工作室中的数字合成器来创造他们需要的音乐和节奏。在本教程中,我们将使用Basys 3 FPGA电路板创建一个非常简单的合成器。 合成器将能够以每分钟不变的次数播放四个选定的四分音符。用户将使用开关将每个四分音符分配到一个音高。对于这个项目,我们使用一个4位数模转换器(DAC)来从电路板获取输出并将其转换为模拟信号。然后DAC的输出将被馈送到标准的电脑扬声器,创造我们的音乐。十六个分立的音高是可能的。我们将把我们的合成器限制在12个音符的一个八度音阶之间,这个音符位于中间C(261.6 Hz)和B4(493.9 Hz)之间。用户还可以选择同时分配多个音符,也可以在没有音高开关向上移动的情况下按下分配来分配一个音符。当每个音符被选中并被播放时,字母音符显示在7段显示器上。 一旦用户对其音符的选择感到满意,并且在按下播放按钮之后,合成器将连续播放每个音符,直到用户按下暂停或选择。 以下是所需设备的清单: Vivado(或任何VHDL工作空间) Basys 3或类似的FPGA板 数模转换器(最小4位) 扬声器与耳机插孔 导线 第1步:数字音序器的用户操作 以下步骤是操作数字音序器。数字音序器支持从261.6 Hz到493.9 Hz的12个不同音高(C,Db,D,Eb,E,F,Gb,G,Ab,A,Bb,B)的播放。 1.按下左键将电路板置于选择模式。在此模式下,最左边的4个开关(开关13至16)将分别用于存储不同的音高值。 2.要进行选择,请打开其中一个左侧开关,然后使用最右侧的4个开关(开关1至4)选择所需的音高。与右开关的特定组合相关联的音调将显示在七段显示器上,并且只要右开关被移位到新的组合,显示器就会更新到新的相关音调。可以通过从不给一个左开关分配一个音高,或者通过在显示器上给音符指定一个显示为0的音高来指定一个静止。一旦找到所需的音高并显示在显示屏上,按底部的分配按钮将特定音高分配给音符。 3.对剩下的三个音符重复步骤2,分别打开每个剩余的左侧开关,用右侧开关选择各自的音高,然后按底部按钮将音高分配到音符。通过同时向上移动多个左侧开关,可以为多个音符指定相同的音高。 4.现在已经分配了所有的音符音调,数字音序器就准备好播放了。要在扬声器上播放音符,只需按右侧的播放/暂停按钮即可开始播放音乐。播放顺序的顺序从左到右镜像与左侧开关关联的音高。按照1,2,3,4,1,2 ...的顺序,音符将以每分钟的设定次数播放。显示屏将显示扬声器播放音乐时正在播放的音符。要暂停音乐播放,只需按右键,然后音乐将停止播放,并在显示屏上显示一个暂停符号。再按一次右键将恢复播放。 第2步:技术细节我们的合成器使用许多不同的数字组件。包括有限状态机,寄存器,多路复用器,时钟分频器等等。要构建我们的合成器,我们使用了10个独特的模块化文件。我们不是把每个模块都作为一个组件,而是按功能分解模块化文件。因此,大多数模块不止一个组件。请注意,上面的图片显示了我们顶级设计中的每个块连在一起。 我们将通过描述输入和输出来讨论每个模块,分解它的组件,并在整体设计中解释它的用途。可指导的底部包含一个ZIP文件,其中包含项目中使用的每个VHDL代码文件。 输入 Clk(本地时钟信号) PP(播放/暂停) Sel(将合成器置于选择模式) 分配(分配一个音高) 步骤(位置注释) 频率(开关创建所需的音高) 输出 阳极(7段阳极) 阴极(7段阴极) DAC(4位驱动DAC) 第3步:技术细节 第4步:7段时钟分频器 我们的合成器使用三个时钟分频器,所有这些都产生了在我们的项目中用于不同目的的信号。时钟分频器产生一个本地时钟信号并产生一个频率比原始时钟信号小的改变信号。Basys 3的本地时钟是100 MHz。这是我们时钟分频器使用的频率。如果您使用不同的本地时钟频率的FPGA板,则可能需要更改代码。 7段时钟分频器产生一个驱动seg_display文件的信号。我们将在解释该文件时详细解释这个文件是如何工作的。本质上,这个时钟分频器产生一个240赫兹的信号,将被用来在显示器上的阳极和阴极之间切换。该信号是240Hz,因为人眼不能识别不存在光的频率是60Hz。我们使用两位数字,所以通过加倍这个频率,每个数字将以60Hz振荡。然后,我们加倍得到240赫兹,因为系统只在信号变高时变化,而不是变低。 为了实现这一点,分频器采用本机的100 MHz信号,并在每个上升沿计数。当计数器达到416667时,输出将从低到高,反之亦然。 输入 Clk(本地时钟信号) 输出 clk_7seg(对seg_display) 组件

用户评论
请输入评论内容
评分:
暂无评论