
基于STM32的"STylophone"
简介
使用STM32复刻经典口袋合成器stylophone,同时为其添加了USB-MIDI功能,可用作简易MIDI键盘。
简介:使用STM32复刻经典口袋合成器stylophone,同时为其添加了USB-MIDI功能,可用作简易MIDI键盘。开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
视频链接:
项目简介
本项目基于STM32F103RCT6复刻了经典口袋合成器stylophone,遂命名为"STylophone"。此处ST与stylophone首字母恰好重合,令人忍俊不禁。
本项目最初是用来水课的课设,最终只完成了硬件和基础软件功能的设计。后续可能不再有精力推进软件功能的开发,故将所有资料开源。
2025.2.19 BUG修订:
收到反馈IP5306在关机后无法彻底关断,造成喇叭异响,故修改原有设计,并增补相关外挂模块修复问题。在复刻本项目前请务必详细阅读后文的修订板块。
项目功能
STylophone共有两种工作模式,可以通过用户按钮进行切换。
在演奏模式下,STylophone的功能与stylophone基本一致,演奏中支持输出波形和音域的切换。
用户通过切换音域,最多可以演奏出A1-E7的所有音符。通过代码预先烧录,最多可以切换四种波形的输出,默认情况下为正弦波、方波、锯齿波和一个保留波形。
因为3.5mm耳机接口过于先进,STylophone进行了阉割(其实是设计硬件的时候忘记考虑了),目前只支持喇叭输出。用户可以通过机器边缘的齿轮电位器调整输出音量。
stylophone的颤音功能在STylophone中并未实现,因为相关内容我不太了解,怎么调也调不出颤音的感觉(逃
在MIDI模式下,需使用USB-C数据线连接STylophone与MIDI控制器。STylophone会关断喇叭输出,变成一个简易的MIDI键盘。
该键盘目前只能向MIDI控制器发送Note on和Note off消息,且不支持力度检测。此模式下仍旧可以通过按钮切换音域,但切换波形的按钮并未做软件适配。
项目参数
- 本设计采用STM32F103RCT6作为主控芯片,应该是目前频率能跑到72MHz且支持DAC的ST芯片中最便宜的了;
- 本设计采用LM4871作为驱动喇叭的功放,反馈回路中使用一个20kΩ的齿轮电位器调节音量;
- 本设计采用的喇叭参数为4Ω3W,与功放参数对应;
- 本设计采用IP5306作为电池管理芯片,使用的锂电池容量为1000mAh,大小为22 x 73 x 6.5mm;
原理解析(硬件说明)
STylophone的主要模块有控制模块、交互模块、音频功放模块和电源管理模块。
交互模块包含按钮、键盘与金属笔和指示灯三种部件。控制模块检测交互模块的按钮,决定工作模式和功能的切换;通过金属笔检测交互模块的键盘,确定需要输出的音符。在独立演奏时,控制模块通过DAC输出预设好的波形信号,滤除直流成分后,音频功放对信号进行放大并驱动喇叭发声。在作为MIDI设备时,控制模块通过USB向外部发送MIDI消息。
电源管理模块管理着一块1000mAh的锂电池。能够控制设备的开、关机和锂电池的充、放电,并将锂电池的电压转换为其他元件所需的3.3V和5V电压。
软件代码与外壳模型
详细代码与工程文件请见附件Source.zip
本项目代码采用STM32CUBEMX配置和生成,使用keil5进一步完善。请注意,USB-MIDI功能修改了USB库中的描述符,若从CUBEMX再次生成代码则会覆盖这些修改。请在这之前备份相关的库文件。
外壳模型请见附件3DModel.zip
所有主要模型都以stp和stl两个文件给出,模型详情请见附件中的readme文件。所有模型均可使用3D打印制作,采用若干颗M3 X 6平头螺丝和一颗M2 X 3平头螺丝进行固定。
注意事项
- USB差分线上串联的R44、R45用于阻抗匹配,一般情况下直接焊接0Ω电阻即可。R42与R43上拉电阻用于USB设备识别,本项目中只需要焊接D+上的上拉电阻(R42),R43留空。
- 复位电路中的0Ω电阻(R37,对应电路板RST标识)不需要焊接,烧录程序后短接该电阻的焊盘实现复位。
- 电路板上的H、L(High、Low)标识电阻是BOOT0引脚的电平选择电阻。由于本项目只支持SWD调试,所以这里直接拉低即可。
- ADC输入的排针不需要焊接,此处只需要将金属笔的导线焊接至任意一个孔位即可。
- 用于音量调节的齿轮电位器阻值建议选择15-20kΩ,原理图中的阻值并不准确(
没找到对应阻值的,就随便拿了一个) - 调试接口的排针建议焊接在主控芯片一侧,这样在烧录完成后即使不进行拆除也可以完成组装。(当然烧完程序就拆了会更美观,不过都封在外壳里也看不到)
- IP5306的电量指示LED灯不进行焊接,本设计中并未使用,外壳中也未为其预留开孔。如需使用则需要重新设计相关零件,详情请见readme。
- 请务必整洁且精准地焊接指示LED灯,否则可能会出现外壳灯罩无法对齐嵌入的情况。
- 喇叭和电池的连接端子孔距均为2.0,在购买时务必留意。
- 喇叭与电池的安装孔距只适用于下文链接中的型号,若自行采购其他规格的硬件,需要对外壳重新进行设计。
- IP5306具有低电流自动关断的功能,由于不同芯片体质不同,关断电流可能也不相同。理论上本设备待机时的电流可以超过标称的关断电流,但实际测试中仍有出现关断的情况。故代码中预留了一个power_active函数,若您发现您的设备会在待机30s后自动断电,请在主循环中启用相应的函数并重新烧录程序。
组装流程
详情请见上文视频链接与3DModel.zip中的readme文件。
实物图
电路板完成焊接后外观如图1所示
图1:电路板参考(图中CLK和DIO标反,实际工程中已经修改)
将电路板和喇叭固定在前面板后,效果如图2所示
图2:前面板组件
将锂电池固定在后盖,并连接至电路板,效果如图3所示
图3:后盖与前面板连接
最后使用螺丝固定,外观如图4所示
图4:设备外观
相关硬件购买链接
4欧3W 5555音腔喇叭
可伸缩弹簧圆头P100-D3探针
聚合物锂电池芯652272-1000mAh
齿轮电位器B203 20K单联16x2三脚
修订板块
修订后的设计采用TP4056管理锂电池充电,并使用LN3608对锂电池进行DCDC升压。建议复刻本项目时使用新版设计。
对于已经复刻了旧版项目的朋友,目前有两个解决方法:
- 将C31-C34中的其中一个电容更换为阻值较大的电阻(用于泄放大电容)。具体阻值的选取需要保证IP5306能够正常关机,电阻越小发热越大,泄放速度越快,建议10k以上。这种方法不一定能解决喇叭异响的问题,若喇叭依旧异响吗,请使用方法2
- 在增加泄放电阻的基础上,完全拆除原电路板的电池电源管理模块,并重新打板制作外挂电源模块。将对应的线路飞线连接,焊接时务必留心做好绝缘处理,并在外壳重新开槽固定新的开关。具体连接方式如下图所示。
外挂电源模块已经打板验证,可以正常使用。新版设计未进行打板验证,但与外挂修复方法使用的硬件完全保持一致,仅仅是删除了原有电源管理模块的焊盘,并将外挂电源模块移植到了板上。
由于新版设计修改了开关的样式,原设计中前面板外壳对应位置需要进行相应的打磨修改。目前外壳模型仍在重新修改中,修改完成后会重新上传。
设计图

BOM


评论