加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

工程師用STM32F4造出最小音頻合成器

2019/04/22
144
閱讀需 22 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2019 Hackadayprize 中國(guó)區(qū)賽事正在火熱報(bào)名 ing,我們將為大家介紹在過(guò)去幾屆 Hackadayprize 中獲獎(jiǎng)的作品,希望能給你帶來(lái)啟發(fā)!快點(diǎn)來(lái)報(bào)名參賽,12.5 萬(wàn)美元的終極大獎(jiǎng)在等你認(rèn)領(lǐng):https://www.cirmall.com/hackadayprize_2019

Noise Nugget 是一款緊湊型數(shù)字合成器,基于 180MHz Cortex-M4 和帶耳機(jī)放大器的高品質(zhì)音頻 DAC。

我在這個(gè)項(xiàng)目中的目標(biāo)是創(chuàng)造一個(gè)音頻合成的“瑞士軍刀”。 在最小和最便宜的板上包裝最大功能。

憑借其所有連接(USB,2 x 音頻輸出,1 x 音頻輸入,I2C,UART,GPIO),它可用于許多不同的任務(wù):

  • 數(shù)字合成器,帶 MIDI 接口或其他一些控制手段
  • 吉他踏板或合成器的音頻效果(延遲,混響,失真)
  • 音頻 FX 觸發(fā)板,播放預(yù)先錄制的聲音
  • 音頻播放,從輸入錄制聲音,然后按一下按鈕即可播放
  • USB 聲音接口

硬件設(shè)計(jì)

硬件設(shè)計(jì)的主要目標(biāo)是簡(jiǎn)單和占用空間小。

該系統(tǒng)的核心顯然是 STM32F446 微控制器。 它基于 ARM Cortex-M4 內(nèi)核,浮點(diǎn)單元運(yùn)行頻率為 180MHz,還有大量外設(shè)。

在 STM32F4 周圍,我們有:


我本來(lái)可以使用 STM32F4 的 DAC,但一方面它們只有 12 位而 16 位用于正確的音頻 DAC,另一方面它需要額外的電路來(lái)驅(qū)動(dòng)耳機(jī)。 因此,使用 SGTL5000 可提供更高的音質(zhì)和簡(jiǎn)單性。

SGTL5000 還有很多 IO 選項(xiàng):

這意味著不同應(yīng)用程序有很多選項(xiàng)。

在 Noise Nugget 的 rev-B 上,我沒(méi)有使用麥克風(fēng)輸入。 我認(rèn)為這是一個(gè)錯(cuò)誤,因?yàn)?a class="article-link" target="_blank" href="/tag/%E7%94%B5%E8%B7%AF%E6%9D%BF/">電路板上有一些用于 MEMS 麥克風(fēng)的空間,這將開(kāi)啟更多可能性。 例如實(shí)時(shí)語(yǔ)音效果或樣本錄制。

DFU 按鈕的設(shè)計(jì)靈感來(lái)自 Numworks 開(kāi)放式計(jì)算器。 如果在插入 USB 電纜時(shí)按下按鈕,STM32F4 將自動(dòng)進(jìn)入 DFU 模式。 然后,在不使用任何調(diào)試探針的情況下安裝不同的固件非常容易。

軟件設(shè)計(jì)

Noise Nugget 的軟件是用 Ada 編寫(xiě)的。 Ada 編程語(yǔ)言都是關(guān)于功能安全的,也就是說(shuō),檢測(cè)軟件何時(shí)沒(méi)有做到應(yīng)該做的事情(錯(cuò)誤?。?。 使用 Ada,您可以快速準(zhǔn)確地知道出現(xiàn)了什么問(wèn)題,而不是在緩沖區(qū)溢出或未初始化的驅(qū)動(dòng)程序上搔癢幾個(gè)小時(shí)。 這意味著減少調(diào)試時(shí)間。 由于我沒(méi)有足夠的時(shí)間來(lái)開(kāi)發(fā)這個(gè)軟件,因此每分鐘都很重要。

該軟件最重要的方面是生成音頻樣本并將其發(fā)送到 DAC。

樣本是 16 位有符號(hào)整數(shù),表示給定時(shí)間點(diǎn)的音頻信號(hào)的值。

DAC 配置為每秒 44_100 個(gè)樣本(CD 質(zhì)量)。 如果軟件無(wú)法以適當(dāng)?shù)乃俣葌魉蜆颖?,音頻將出現(xiàn)故障(響亮的砰砰聲和咔嗒聲)。 所以這是系統(tǒng)真正的實(shí)時(shí)要求。

樣本不是一個(gè)接一個(gè)地發(fā)送,而是在 512 個(gè)樣本的緩沖區(qū)中*每個(gè)樣本 2 個(gè)字節(jié)* 2 個(gè)通道(立體聲),所以 2048 個(gè)字節(jié)。 緩沖器 B 在發(fā)送緩沖器 A 時(shí)被填充,反之亦然(觸發(fā)器緩沖器)。 來(lái)自音頻輸入的樣本以類似的方式接收。 緩沖區(qū)的傳輸是通過(guò) DMA 完成的,因此在該操作期間不使用 CPU,這意味著生成樣本的時(shí)間更長(zhǎng)。

為了確保實(shí)時(shí)要求,我使用了 Ada Ravenscar 運(yùn)行時(shí)。 您可以將其視為集成在 Ada 編程語(yǔ)言中的實(shí)時(shí)操作系統(tǒng)(RTOS)。 如果你想看看它的樣子,我寫(xiě)了一篇關(guān)于它的博客文章: https : //blog.adacore.com/theres-a-mini-rtos-in-my-language

系統(tǒng)中有兩個(gè)任務(wù):

音頻任務(wù),它具有最高優(yōu)先級(jí),因?yàn)樗?fù)責(zé)填充音頻緩沖區(qū)。 這意味著只要有要填充的音頻緩沖區(qū),就會(huì)執(zhí)行此任務(wù)。


另一項(xiàng)任務(wù)是在輪詢循環(huán)中處理 USB 請(qǐng)求。 在將來(lái),這可以移動(dòng)到并中斷處理程序。


在依賴性方面,驅(qū)動(dòng)程序來(lái)自 Ada_Drivers_Library ,這是我?guī)啄昵伴_(kāi)始的一個(gè)項(xiàng)目,旨在鼓勵(lì)在微控制器上使用 Ada。 音頻合成器基于 Raphael Amiard 的 ada-synth-lib 。


Noise Nugget 的未來(lái)


我對(duì) Noise Nugget 的未來(lái)有一些想法。 其中之一是擁有一個(gè) GUI,讓用戶可以使用基本模塊(如振蕩器,濾波器,效果等)構(gòu)建聲音。類似于青少年音頻工具,但實(shí)時(shí),不需要為用戶提供任何代碼。 這可以成為一個(gè)有趣和多功能的微型合成器。

如果你對(duì)這個(gè)項(xiàng)目感興趣,想獲取完整信息請(qǐng)?jiān)L問(wèn):

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

?

與非網(wǎng)編譯內(nèi)容,未經(jīng)許可,不得轉(zhuǎn)載!

?

有人說(shuō)硬件技術(shù)將很快達(dá)到極限,而在我們看來(lái),硬件創(chuàng)新,尤其是中國(guó)硬件工程師的創(chuàng)新,還遠(yuǎn)未走到盡頭,而只是剛剛開(kāi)始。作為致力于為全球硬件開(kāi)發(fā)者提供技術(shù)共享服務(wù)的平臺(tái),與非網(wǎng)母公司 SupplyFrame 旗下最大的全球硬件開(kāi)發(fā)者社區(qū) Hackaday.com 已連續(xù)五年舉辦全球硬件開(kāi)發(fā)者大賽 Hackadayprize,有超過(guò) 3000 多個(gè)硬件團(tuán)隊(duì)在這個(gè)賽事中互動(dòng)交流、切磋技藝。

?

?



這個(gè)《硬件改變世界》系列,我們挑選在前幾屆 Hackadayprize 大賽中獲獎(jiǎng)的優(yōu)秀作品加以展示,硬件技術(shù)可以多有意思,硬件開(kāi)發(fā)者可以多有創(chuàng)意,從這些作品中你可以看到。



2019 年 3 月,Hackadayprize 中國(guó)區(qū)賽事隆重開(kāi)啟,我們很期待看到國(guó)內(nèi)的硬件開(kāi)發(fā)者大開(kāi)腦洞、大展技藝。你準(zhǔn)備好了沒(méi),與來(lái)自全球的硬件開(kāi)發(fā)者同臺(tái) PK?

相關(guān)推薦

電子產(chǎn)業(yè)圖譜