新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 计算机接口使19世纪管风琴自行弹奏

计算机接口使19世纪管风琴自行弹奏

作者:时间:2013-04-07来源:网络收藏
电子设计

在进行电子设计时,我们大家坐下来,粗略地设计出电子结构;图3为基本结构图。在图的左侧,MIDI消息由外部传入(我将在下文详细介绍MIDI协议)。图的右侧是一个位移寄存器链;控制器在驱动相应的“数据”值填充位移寄存器链时,负责切换“时钟”信号,然后通过“选通”信号将位移寄存器链的内容并行发送至电磁铁驱动器的输入端。

newmaker.com
图3:电子结构我们在位移寄存器/驱动器链上采用了74HC595位移寄存器IC。不过,电磁铁试验显示每个电磁铁大约需要15V电源提供350mA驱动电流——超出了CMOS输出级的提供范围。这了满足这个要求,我们在每个位移寄存器IC上增加了一个ULN2803A Darlington输出级。这个芯片还具备一个保护二极管,对切断电流时电磁铁生成的高反激电压进行分流,避免增加一个分立式二极管。我们在万用板上制作了几个驱动器电路板原型,每个可驱动16个电磁铁。

控制器设计

尽管我们可以采取多种方法设计控制器(包括利用Arduino平台或采用其他微控制器),但我们最终还是选择使用赛灵思Spartan-3E入门套件,因为我在赛灵思的日常工作中用过这种开发板,对相关工具了如指掌。特别是,我知道如何使用Platform Studio SDK和ChipScope等调试工具,由于这有可能是一个现场调试项目,这样做可节省时间。我们使用赛灵思嵌入式开发套件,开发核心组件MicroBlaze子系统(图4)。

newmaker.com
图4:MicroBlaze 子系统除了MIDI接口和位移寄存器接口,我们还选择增加了串行RS-232控制端口,帮助我们调试系统。RS-232协议看起来有点老套,但在此类项目中,它的价值非凡。我们也增加了一些GPIO端口,用于驱动LED,读取开关和按钮,以便在无需使用控制端口的情况下,完成某些交互操作。

写入MicroBlaze固件

我们已经确定系统的最佳输入接口是MIDI端口。自20世纪80年代以来,乐器数字接口(MIDI)已经成为连接合成器等数控乐器与其他乐器或控制计算机的标准接口,因此,显然我们也应当采用这种接口。MIDI将使我们取得了连接的最大灵活性。

MicroBlaze可从内部显示整个键盘的状态以及系统正在按压哪些键——即系统正在为哪些电磁铁加电。

MIDI是一种单向低速串行协议,传输速率为31250波特。它包含多种类型的信息,但就我们的目的而言,只有NOTE ON和NOTE OFF是重要的信息类型。每个NOTE ON信息由3个字节构成。

第一个字节是0x9n,这里的n代表通道数。
第二个字节是0至127的音符数,中间的C为第60号。
第三个字节是0至127的速度值。

NOTE OFF除第一个字节是0x8n外,其余与此非常相似。

在我们的设计中,我们决定同步听取所有通道的信息( “omni”操作)。由于键盘对速度并不敏感,因此,我们可安全地忽略所有速度字节。

EDK UART IP核接收MIDI消息,然后通过FIFO,一次向MicroBlaze处理器发送一条信息。MicroBlaze可从内部显示整个键盘的状态和系统正在按压哪些键(即系统正在为哪些电磁铁加电)。固件采用一个静态查找表,指出与这个音符相关的电磁铁,将这个用做内部图的索引;到达的NOTE ON消息将相应entry值设为“1”,而NOTE OFF消息将entry值设为“0”。

内部图更新后,利用图的全部内容更新电磁铁寄存器;通过GPIO端口的位拆裂,MicroBlaze处理器一次将一位的图内容写入位移寄存器的数据输入端,然后切换时钟信号,移动一下位移寄存器。一旦利用图内容对整个位移寄存器进行了更新,MicroBlaze会将一个上升沿写入STROBE行,这能够将位移寄存器的值拷贝至输出寄存器,为正确的电磁铁加电或断电,从而产生悦耳的音乐。

我们将固件用作软件状态机;对于不采用实时操作系统的嵌入式应用而言,这可提供某些多线程应用功能,但没有实际线程实现开销。静态结构数组根据当前的状态,指出系统针对特定事件应当采取什么措施。



评论


技术专区

关闭