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

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

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

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

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

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

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

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

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

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

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

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

在 STM32F4 周圍,我們有:


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


Noise Nugget 的未來


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

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

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

?

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

?

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

?

?



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



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

相關(guān)推薦

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