这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【EEPW电子鼓DIY活动】成品验收篇

共2条 1/1 1 跳转至

【EEPW电子鼓DIY活动】成品验收篇

专家
2023-09-12 19:52:50     打赏

、项目概述

       这款电子鼓使用STM32F103RET6做为主控,采用DAC或R/2R DAC方式实现16bit音频数据的采样输出。用户通过触摸主控面板上的6处金属铜箔区域,从而点亮WS2812彩灯,输出相应的乐器声。项目可扩展部分:①,包含预留出的扩展接口(含8个GPIO口)。②,波形转换方式可通过拨码开关选择通道,电路可提供PWM、R/2R、DAC三种数模转换方式。③,提供SPI Flash外部存储电路,供用户保存各类主流乐器声。

二、系统框图

系统框图.png三、电路原理图

首先当然是主控MCU的基本单元电路:

009.png

Type-C的接口电路,可给电子鼓电池充电。

001.png

锂电池充电电路,电池充电LED4常亮,电池充满LED4熄灭。

002.png

稳压电路使用了电池供电,为整个板子提供稳定的工作电流。

003.png

触摸电路与WS2812 RGB彩灯电路都集成在同一面板上,彩灯颜色随机产生。

006.png005.png关于音频数据处理,当然去噪处理的滤波电路也是不可缺少的。

004.png

由于MCU内部的ADC模块最大只支持12bit的数据采样,因此设计了R/2R电路,以达到16bit的数据采样。

007.png

本电子鼓采用数字功放电路,芯片PAM8403

008.png四、硬件设计

电子鼓采用双面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支持库。

安装numpy库.png3)cmd终端中安装matplotlib支持库。

安装matplotlib库.png搭建好编译“pcm2c.py”脚本的环境,接下来可以做属于个人喜爱的乐器声啦。

使用Audition工具截取一段乐器声,时间不宜过长,否则数据过大会造成编译报错,因为项目暂且采用的是STM32F103内部存储。

存储选区.png截取一段音频.png并将这段音频数据设置成相适应的参数

音频设置.png然后去到存储这段音频数据的本地,确保音频文件后缀名为PCM,并将“pcm2c.py”文件拷贝到当前目录下,然后打开Pycharm工具,加载该目录下的pcm2c.py”文件,修改文件名并运行,则可获取到这段音频转化出的C语言数组。

借助脚本生成代码.png

将生成的数组粘贴到工程中,这样编译出的固件就包含了这段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()

工程的部分代码截图如下所示:

代码截图.png

六、效果演示

开机操作流程都在视频中做了详细的介绍,按照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文件,见附件。

MyDrun.rar


管理员
2023-09-13 00:44:36     打赏
2楼

项目介绍经验老道!点赞~感谢支持!


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]