一、项目概述
这款电子鼓使用STM32F103RET6做为主控,采用DAC或R/2R DAC方式实现16bit音频数据的采样输出。用户通过触摸主控面板上的6处金属铜箔区域,从而点亮WS2812彩灯,输出相应的乐器声。项目可扩展部分:①,包含预留出的扩展接口(含8个GPIO口)。②,波形转换方式可通过拨码开关选择通道,电路可提供PWM、R/2R、DAC三种数模转换方式。③,提供SPI Flash外部存储电路,供用户保存各类主流乐器声。
二、系统框图
三、电路原理图
首先当然是主控MCU的基本单元电路:
Type-C的接口电路,可给电子鼓电池充电。
锂电池充电电路,电池充电LED4常亮,电池充满LED4熄灭。
稳压电路使用了电池供电,为整个板子提供稳定的工作电流。
触摸电路与WS2812 RGB彩灯电路都集成在同一面板上,彩灯颜色随机产生。
关于音频数据处理,当然去噪处理的滤波电路也是不可缺少的。
由于MCU内部的ADC模块最大只支持12bit的数据采样,因此设计了R/2R电路,以达到16bit的数据采样。
本电子鼓采用数字功放电路,芯片PAM8403
四、硬件设计
电子鼓采用双面PCB板设计,材料中有富余的一块PCB板起到美观对称的作用。两块PCB板通过6个M3的铜柱固件相连,形成一个整体。正如上述系统框图,6块金属铜箔构成一个正六边形,做为输入信号触发电路。主控STM32F103芯片负责信号中断处理,控制应用逻辑处理,包括音频数据流的存储与DAC处理,彩灯的驱动等。经数字功放电路,直接输出给扬声器,输出的音频也可通过耳机接口输出到外置音响设备。
五、软件调试
项目中借助STM32CubeMX图形工具,快速构建基本工程框架,然后再对每个按键进行文件播放关联。项目中还需要用到MDK,Audition,Pycharm。Audition是用来截取音频源,用其导出的PCM文件需要转化成C语言数组,得需要Pycharm工具的运行,Pycharm工具建议采用免费的社区版。
运行老师提供的“pcm2c.py”脚本,除了安装Pycharm工具外,还需要搭建好python的编译环境。
1)首先需要在Pycharm中指定调用你安装python的执行文件路径。
2)cmd终端中安装numpy支持库。
3)cmd终端中安装matplotlib支持库。
搭建好编译“pcm2c.py”脚本的环境,接下来可以做属于个人喜爱的乐器声啦。
使用Audition工具截取一段乐器声,时间不宜过长,否则数据过大会造成编译报错,因为项目暂且采用的是STM32F103内部存储。
并将这段音频数据设置成相适应的参数
然后去到存储这段音频数据的本地,确保音频文件后缀名为PCM,并将“pcm2c.py”文件拷贝到当前目录下,然后打开Pycharm工具,加载该目录下的“pcm2c.py”文件,修改文件名并运行,则可获取到这段音频转化出的C语言数组。
将生成的数组粘贴到工程中,这样编译出的固件就包含了这段DIY的音频啦。这里再来看看这段“精髓”的Python脚本文件:
import struct import numpy as np from matplotlib import pyplot as plt arr = np.array( [ ] ) f = open("china_03.pcm", 'rb') j = 0 k = 0 print("") for i in range(1024 * 240): try: data = f.read(2) a, = struct.unpack('h', data) arr = np.append(arr, a) print("%d," % a, end='') j += 1 k += 1 if j == 64: j = 0 print("") except: break f.close() print("") x = np.arange(k) plt.plot(x, arr) plt.show()
工程的部分代码截图如下所示:
六、效果演示
开机操作流程都在视频中做了详细的介绍,按照Type-C接口的金属铜箔区域(PC12)作为第1个按键,则逆时针方向按键GPIO的分布为:PC12--->PC6--->PA3--->PA1--->PC0--->PD2。WS2812 RGB彩灯使用PC3。视频已上传至优酷官方网站,欢迎观看。
https://v.youku.com/v_show/id_XNjAyMjk2MjM0OA==.html?spm=a2hcb.playlist.page.1&playMode=pugv
七、项目总结
项目整体来讲不算太难,起初也是抱着锻炼锻炼告别已久的焊接手艺,焊接过程中需要认真焊接好每个小料,节奏可慢,但质量要保证,否则后续的调试就很痛苦,什么短路、空焊、虚焊必须杜绝。项目中学会了WCH-Link的工作模式切换,起初没注意这个烧录工具的工作模式,还以为是坏掉了。基本了解了使用Audition的音频编辑,利用Pychram编译脚本文件。一路过来,感觉比较顺,这还得感谢鹏老师提供的参阅视频。总之,非常高兴能参加此次DIY活动,感谢EEPW平台。最后奉上工程中生成的hex文件,见附件。