加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

工程师用STM32F4造出最小音频合成器

2019/04/22
134
阅读需 22 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2019 Hackadayprize 中国区赛事正在火热报名 ing,我们将为大家介绍在过去几届 Hackadayprize 中获奖的作品,希望能给你带来启发!快点来报名参赛,12.5 万美元的终极大奖在等你认领:https://www.cirmall.com/hackadayprize_2019

Noise Nugget 是一款紧凑型数字合成器,基于 180MHz Cortex-M4 和带耳机放大器的高品质音频 DAC。

我在这个项目中的目标是创造一个音频合成的“瑞士军刀”。 在最小和最便宜的板上包装最大功能。

凭借其所有连接(USB,2 x 音频输出,1 x 音频输入,I2CUARTGPIO),它可用于许多不同的任务:

  • 数字合成器,带 MIDI 接口或其他一些控制手段
  • 吉他踏板或合成器的音频效果(延迟,混响,失真)
  • 音频 FX 触发板,播放预先录制的声音
  • 音频播放,从输入录制声音,然后按一下按钮即可播放
  • USB 声音接口

硬件设计

硬件设计的主要目标是简单和占用空间小。

该系统的核心显然是 STM32F446 微控制器。 它基于 ARM Cortex-M4 内核,浮点单元运行频率为 180MHz,还有大量外设。

在 STM32F4 周围,我们有:


我本来可以使用 STM32F4 的 DAC,但一方面它们只有 12 位而 16 位用于正确的音频 DAC,另一方面它需要额外的电路来驱动耳机。 因此,使用 SGTL5000 可提供更高的音质和简单性。

SGTL5000 还有很多 IO 选项:

  • 耳机输出
  • 线路输出
  • 线路输入
  • 麦克风输入

这意味着不同应用程序有很多选项。

在 Noise Nugget 的 rev-B 上,我没有使用麦克风输入。 我认为这是一个错误,因为电路板上有一些用于 MEMS 麦克风的空间,这将开启更多可能性。 例如实时语音效果或样本录制。

DFU 按钮的设计灵感来自 Numworks 开放式计算器。 如果在插入 USB 电缆时按下按钮,STM32F4 将自动进入 DFU 模式。 然后,在不使用任何调试探针的情况下安装不同的固件非常容易。

软件设计

Noise Nugget 的软件是用 Ada 编写的。 Ada 编程语言都是关于功能安全的,也就是说,检测软件何时没有做到应该做的事情(错误!)。 使用 Ada,您可以快速准确地知道出现了什么问题,而不是在缓冲区溢出或未初始化的驱动程序上搔痒几个小时。 这意味着减少调试时间。 由于我没有足够的时间来开发这个软件,因此每分钟都很重要。

该软件最重要的方面是生成音频样本并将其发送到 DAC。

样本是 16 位有符号整数,表示给定时间点的音频信号的值。

DAC 配置为每秒 44_100 个样本(CD 质量)。 如果软件无法以适当的速度传送样本,音频将出现故障(响亮的砰砰声和咔嗒声)。 所以这是系统真正的实时要求。

样本不是一个接一个地发送,而是在 512 个样本的缓冲区中*每个样本 2 个字节* 2 个通道(立体声),所以 2048 个字节。 缓冲器 B 在发送缓冲器 A 时被填充,反之亦然(触发器缓冲器)。 来自音频输入的样本以类似的方式接收。 缓冲区的传输是通过 DMA 完成的,因此在该操作期间不使用 CPU,这意味着生成样本的时间更长。

为了确保实时要求,我使用了 Ada Ravenscar 运行时。 您可以将其视为集成在 Ada 编程语言中的实时操作系统(RTOS)。 如果你想看看它的样子,我写了一篇关于它的博客文章: https : //blog.adacore.com/theres-a-mini-rtos-in-my-language

系统中有两个任务:

音频任务,它具有最高优先级,因为它负责填充音频缓冲区。 这意味着只要有要填充的音频缓冲区,就会执行此任务。


另一项任务是在轮询循环中处理 USB 请求。 在将来,这可以移动到并中断处理程序。


在依赖性方面,驱动程序来自 Ada_Drivers_Library ,这是我几年前开始的一个项目,旨在鼓励在微控制器上使用 Ada。 音频合成器基于 Raphael Amiard 的 ada-synth-lib 。


Noise Nugget 的未来


我对 Noise Nugget 的未来有一些想法。 其中之一是拥有一个 GUI,让用户可以使用基本模块(如振荡器,滤波器,效果等)构建声音。类似于青少年音频工具,但实时,不需要为用户提供任何代码。 这可以成为一个有趣和多功能的微型合成器。

如果你对这个项目感兴趣,想获取完整信息请访问:

https://hackaday.io/project/160437-noise-nugget

 

与非网编译内容,未经许可,不得转载!

 

有人说硬件技术将很快达到极限,而在我们看来,硬件创新,尤其是中国硬件工程师的创新,还远未走到尽头,而只是刚刚开始。作为致力于为全球硬件开发者提供技术共享服务的平台,与非网母公司 SupplyFrame 旗下最大的全球硬件开发者社区 Hackaday.com 已连续五年举办全球硬件开发者大赛 Hackadayprize,有超过 3000 多个硬件团队在这个赛事中互动交流、切磋技艺。

 

 



这个《硬件改变世界》系列,我们挑选在前几届 Hackadayprize 大赛中获奖的优秀作品加以展示,硬件技术可以多有意思,硬件开发者可以多有创意,从这些作品中你可以看到。



2019 年 3 月,Hackadayprize 中国区赛事隆重开启,我们很期待看到国内的硬件开发者大开脑洞、大展技艺。你准备好了没,与来自全球的硬件开发者同台 PK?

相关推荐

电子产业图谱