使用霍尔效应传感器对管风琴踏板位置进行磁性检测
磁性可以称得上是最接近于魔法的东西了,微控制器则紧随其后。以下是一个两者兼有的故事,而且故事与巴赫,J.S.巴赫有关。管风琴踏板的作用方式与键盘相同,为演奏者提供了一种额外的“输入装置”(图 1)。
图 1:管风琴踏板的布局跟乐器键盘如出一辙,您能想象跟敲筷子一样演奏管风琴吗?(图片来源:Michael Dunn)
换言之,本文讨论的内容适用于各种踏板。事实上,它也适用于您可以想到的几乎任何类型的开关或位置感测应用。精彩继续。
我的管风琴背景(可随意跳过)
从少年时代开始,我就梦想着拥有一架管风琴,哪怕是一件过得去的仿制品——主要用来演奏 J.S.巴赫的美妙音乐。您能想象到使用巴黎圣日耳曼奥塞尔教堂华丽的管风琴演奏巴赫乐章带给人们的震撼体验吗(图 2)?由于费用和空间的原因,实现这个梦想无异于天方夜谭;但是,从早些年庞然大物的全模拟设计,到后来以数字方式生成的加法合成概念,设计一架电子管风琴的念头几十年来一直在我的脑海中盘旋。可以这样说,要实现这些计划,除了获得键盘和踏板之外别无他途。当然,也可以购买电子管风琴,但这些不是我所喜欢的,而且这样做还有什么乐趣可言呢?
图 2:没有空间放置,而且也不供出售。(图片和来源:巴黎圣日耳曼奥塞尔教堂管风琴,通过 Wikipedia.org 获取)
但近些年来,诸如 Hauptwerk(相信您应该知道,这是一种管风琴键盘的德语名称)这类计划取得了长足的发展,有力地推动了使用采样技术重构真实管风琴声音的进程。我得承认,是时候放弃多年以来从头设计一架管风琴的梦想了。
感测踏板位置
在决定使用商业软件运行管风琴仿真之后,接下来我需要构建控制台,包括两个或三个键盘和一个踏板。我在很多年前就获得了这些机构,但其中并未包含任何类型的开关/感测装置。该怎么办呢?
最初的解决方案是为每个按键和踏板使用某种类型的开关(或裸触点)。但这样做会妨碍速度和位置的感测。您可能想知道我为什么会关心管风琴的这个问题,但事实证明,经典的全机械式管风琴确实可以对接触做出响应,但远远达不到钢琴的程度。
但我们仍然有几种开关选项,包括交错排列的触点对(测量一个开路与另一个闭路之间的时间以获得速度)、光学、压力、容性和感性开关等,但我发现自己对磁感测更感兴趣。线性霍尔效应传感器似乎可行,可提供低成本、低功耗的安装选项和位置感测。可供选择的传感器种类繁多,但我最终使用了安装在小型分线板上的 32 个 Honeywell SS39ET 霍尔效应传感器(图 3)。目前仅仅使用 SparkFun 的绝缘导线 PRT-08024 连接了电源。您相信吗?在 1979 年前后,我曾在 Honeywell 公司打过一段暑期工。这是我第一次接触到霍尔效应。它被用于键盘开关(计算机键盘,而不是乐器)。
图 3:安装在小型分线板上的五个 Honeywell SS39ET 霍尔效应传感器视图。如图所示,目前仅仅连接了电源。(图片来源:Michael Dunn)
我担心的一点是,踏板之间的磁性串扰。快速测试显示,移动相邻的磁铁仅在被测试的传感器中引起约 2% 的输出变化,这对本应用而言可以接受。为提供所需的磁场,我使用了 Radial Magnets Inc. 公司 ½ 英寸直径的 8184 磁铁,并将它们安装到踏板中(图 4)。对于更灵敏的应用案例,可能需要使用磁屏蔽。如果您不介意繁杂的导线,也可以选择固定磁铁并移动传感器的做法。
图 4:安装到踏板中的磁铁提供了所需的磁场,以激励霍尔效应传感器。(图片来源:Michael Dunn)
微控制器魔法
下一步,我需要选择微控制器——在本例中,我需要选择在小型板上使用的微控制器。常言道,生产汽车何须重新发明轮子(或 PC 板)?在做选择时,我最看重的方面是:“我想如何为处理器编程?”我的头脑中首先浮现的是默认答案“C 语言”,要么在 Arduino 环境中,要么使用制造商的开发支持。但我早就听说过 MicroPython 的一些优点,作为标准 Python 的粉丝,我决定尝试一下。最终我选择了 Adafruit 的 3857 Feather M4 Express 板,其中搭载了一颗 Microchip Technology ATSAMD51J19A-AU-EFB 120 MHz Arm Cortex-M4 核心,以及一组实用的外设。Adafruit 拥有自己的 MicroPython 版本 CircuitPython,接下来我将使用这个版本。
选择这种语言的缺点是速度。Python 采用解释而不是编译的方式,运行速度仅为 C 语言的百分之几(具体结果取决于库的使用等因素)。鉴于这个项目的实时性质,我可能不得不放弃 Python,但我会在未来的某篇博文中讨论这一主题。无论如何,这都是一次难得的学习体验。
我们究竟需要微控制器做些什么呢?首先,它将扫描霍尔效应传感器,将它们的读数转换为乐器数字接口 (MIDI) 音符速度,然后通过 USB 将该数据发送到运行管风琴软件的主机。
其次,它将接收两个或三个键盘的串行 MIDI 数据,这些数据同样通过 USB 连接汇集。我决定(至少目前为止)将一些旧的闲置合成器重新利用起来,而不是展开一个更大规模的项目,连接 168 个按键传感器。此外,与踏板相比,按键的间距更近,这意味着可能存在串扰的问题。或许可以采用光学反射传感器。我可能最多将这个电路变成一个类似试验板的永久电路。就其目前的形态而言,由两个 Texas Instruments 74HC4067 16 对 1 多路复用器提供 32 路传感器输出之一到微控制器的路径(图 5)。MIDI 输入需要三个 ON Semiconductor H11L1 光耦合器(图 5)。
图 5:从左到右:Feather M4 微控制器版,两个 74HC4067 CMOS 模拟多路复用器,以及三个用于 MIDI 输入的 H11L1 逻辑电平光耦合器。(图片来源:Michael Dunn)
三个 CUI Devices SD-50SN DIN 插孔将被连接到光耦合器的输入,用作标准 MIDI 输入(图 6)。
图 6:一如既往的标准 MIDI DIN 插孔。(图片来源:CUI Devices)
处理器提供的实用系统功能之一是自动校准。由于霍尔效应传感器、磁铁和定位的变化,每个传感器将会生成特定范围的输出电压,大体而言,从磁铁位于最远位置的供电电压中值,到踩下踏板时的电压变化范围。通过在踏下每个踏板的过程中执行校准,微控制器将在闪存中存储各个踏板的最小/最大值。
结语
在我的踏板上坐了几十年后(比喻上,并非字面意义),我很高兴终于将它变为现实。在此过程中,我进一步了解了磁性传感器、最新的微控制器,而且节省了大量寻找和购买新型 MIDI 踏板的时间(相信我,这可不是件寻常的东西)。大多数常见的霍尔效应传感器可能不过是些开关,但线性霍尔效应传感器却能实现多功能感测解决方案。
我们也生活在微控制器的黄金时代,包括许多低成本的开发板和优秀的开发环境。很快,我将确定 CircudPython 是否适合这个项目,还是说出于执行速度的考虑,必须选择其他解决方案。
剩下的工作包括完成硬件接线,然后进行深度软件配置。我已经使用 CircuitPython MIDI 和 USB 库成功完成试验,不过在运行时确实遇到了一些毛刺,并且在 Adafruit 支持论坛的帮助解决了这一问题。我希望很快能够获得成品系统的完整报告,以便能够专注于系统的固件方面。
相关文章:
使用 MicroPython 快速开发实时的基于微控制器的应用,Jacob Beningo,2017 年
工程师眼里的巴赫,Michael Dunn,EDN,2013 年
Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum