FPGA板上的音乐盒和旋转编码器

引言


我们是在Innopolis大学学习计算机科学的第一年学生,我们想分享我们开发Verilog程序的经验,该程序可在FPGA板上创建最酷(至少也是最响亮)的旋转编码器。

在本文中,您将找到有关我们的项目,我们使用的硬件,软件以及有关旋转编码器和在FPGA蜂鸣器中创建声音的一些背景理论的精彩故事。 最后,我们将提供指向github存储库的链接,读者可以在其中访问源代码。 我们希望您会喜欢该项目,并且会激发您做出类似的想法。
所以,让我们开始吧!

硬件和软件



图片

  • Cyclone IV FPGA器件对Quartus Prime的支持

  • Quartus Prime Lite版

  • Arduino套件中的旋转编码器

  • ModelSim * -Intel FPGA(仅用于调试)

  • arduino套件中的电线

一个简短的故事


很久以前,在一个遥远的银河系中,一群学生(我们)决定靠近硬件。 计算机架构课程为我们提供了一个在FPGA板上进行项目的绝好机会。 经过一番讨论,我们选择实现带有旋转编码器的系统。 我们完成了任务,但还不足以满足我们的期望,因此我们决定通过使用键盘和板的蜂鸣器将其变成乐器来演奏不同的音符来升级我们的项目。 但是,事实证明FPGA的PS / 2端口已失效。

最终,我们最终编写了一个简单的旋律,当按下按钮时会播放该旋律。

音乐盒


我们可以通过它们的声波频率将一个音符与另一个音符区分开。 因此,要使蜂鸣器弹奏不同的音符,我们需要使其产生不同频率的声波。

我们决定使用方波,因为它们很容易实现。

方波是在高低之间改变其状态的信号。 方波的主要思想是高电平信号的时间和低电平信号的时间相同。 要生成方波,您需要打开一个I / O,等待x倍的时间,关闭I / O,等待x倍的时间,然后根据需要重复这些操作多次。

图片

这张照片是从这里拍摄的。

Cyclone IV具有频率为50 MHz的时钟发生器。 使用方波的定义,不难得出以下公式:

x =(50 * 10 ^ 6)/(2 * n

其中n是所需的频率(单位为Hz), x是多个时钟周期,在将状态从高电平更改为低电平之前需要等待,反之亦然。

为了使蜂鸣器产生频率为n Hz的波,我们实现了时钟分频器。
有关时钟分频器和方波的更多信息,请在此处阅读。

另一个但是
由于蜂鸣器质量低下,因此无法演奏低频音符。 因此,我们使用了从第4个八度的F#到第5个八度的C#。

这是显示音乐盒逻辑的流程图。

图片

旋转编码器


旋转编码器如何工作?

它是由带有导体板和两个模拟传感器的圆圈组成的。

从图片中可以看到,当转动旋转编码器时,其中一个传感器首先触摸板,然后从低到高变化。 因此,在那一刻,我们可以知道是顺时针还是逆时针旋转编码器。 其想法如下:每次传感器A从低变高时,我们都会查看传感器B。 如果在那一时刻B被断言,则编码器顺时针旋转,否则逆时针旋转。 现在,通过旋转一词,我们的意思是将编码器转到一个部分。

图片

(图片从howtomechatronics.com被盗)

图2是表示旋转编码器的逻辑的流程图。

图片

另外,我们想将旋转角度输出到8段显示器上。 我们的编码器有20个分段,因此在一个分段上的旋转等于在18度角上的旋转,我们使用的公式为:

角度 =(模数20 的转数 )* 18

用料


我们项目的代码在这里

这里这里是旋转编码器和音乐盒的视频。

作者 :Amina Miftahova,Kamil Kamaliev,Lev Svalov。

Source: https://habr.com/ru/post/zh-CN431612/


All Articles