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。
我在這個項目中的目標(biāo)是創(chuàng)造一個音頻合成的“瑞士軍刀”。 在最小和最便宜的板上包裝最大功能。
憑借其所有連接(USB,2 x 音頻輸出,1 x 音頻輸入,I2C,UART,GPIO),它可用于許多不同的任務(wù):
- 數(shù)字合成器,帶 MIDI 接口或其他一些控制手段
- 吉他踏板或合成器的音頻效果(延遲,混響,失真)
- 音頻 FX 觸發(fā)板,播放預(yù)先錄制的聲音
- 音頻播放,從輸入錄制聲音,然后按一下按鈕即可播放
- USB 聲音接口
硬件設(shè)計的主要目標(biāo)是簡單和占用空間小。
該系統(tǒng)的核心顯然是 STM32F446 微控制器。 它基于 ARM Cortex-M4 內(nèi)核,浮點(diǎn)單元運(yùn)行頻率為 180MHz,還有大量外設(shè)。
在 STM32F4 周圍,我們有:
- USB micro-B 連接器
- 一個電源穩(wěn)壓器,可從 USB 連接器的 5V 提供 3.3V 電壓
- 用于 STM32F4 時鐘的晶體振蕩器
- 一個用戶按鈕和一個按鈕進(jìn)入設(shè)備固件更新(DFU)模式
- 用于存儲樣本數(shù)據(jù)的閃存
- 自定義 IO
- 一個調(diào)試頭
- 一個耳機(jī)插孔
- 音頻數(shù)模轉(zhuǎn)換器(DAC)
我本來可以使用 STM32F4 的 DAC,但一方面它們只有 12 位而 16 位用于正確的音頻 DAC,另一方面它需要額外的電路來驅(qū)動耳機(jī)。 因此,使用 SGTL5000 可提供更高的音質(zhì)和簡單性。
SGTL5000 還有很多 IO 選項:
- 耳機(jī)輸出
- 線路輸出
- 線路輸入
- 麥克風(fēng)輸入
這意味著不同應(yīng)用程序有很多選項。
在 Noise Nugget 的 rev-B 上,我沒有使用麥克風(fēng)輸入。 我認(rèn)為這是一個錯誤,因為電路板上有一些用于 MEMS 麥克風(fēng)的空間,這將開啟更多可能性。 例如實(shí)時語音效果或樣本錄制。
DFU 按鈕的設(shè)計靈感來自 Numworks 開放式計算器。 如果在插入 USB 電纜時按下按鈕,STM32F4 將自動進(jìn)入 DFU 模式。 然后,在不使用任何調(diào)試探針的情況下安裝不同的固件非常容易。
軟件設(shè)計
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ù)乃俣葌魉蜆颖荆纛l將出現(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)先級,因為它負(fù)責(zé)填充音頻緩沖區(qū)。 這意味著只要有要填充的音頻緩沖區(qū),就會執(zhí)行此任務(wù)。
另一項任務(wù)是在輪詢循環(huán)中處理 USB 請求。 在將來,這可以移動到并中斷處理程序。
在依賴性方面,驅(qū)動程序來自 Ada_Drivers_Library ,這是我?guī)啄昵伴_始的一個項目,旨在鼓勵在微控制器上使用 Ada。 音頻合成器基于 Raphael Amiard 的 ada-synth-lib 。
Noise Nugget 的未來
我對 Noise Nugget 的未來有一些想法。 其中之一是擁有一個 GUI,讓用戶可以使用基本模塊(如振蕩器,濾波器,效果等)構(gòu)建聲音。類似于青少年音頻工具,但實(shí)時,不需要為用戶提供任何代碼。 這可以成為一個有趣和多功能的微型合成器。
如果你對這個項目感興趣,想獲取完整信息請訪問:
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)隊在這個賽事中互動交流、切磋技藝。
?
?
這個《硬件改變世界》系列,我們挑選在前幾屆 Hackadayprize 大賽中獲獎的優(yōu)秀作品加以展示,硬件技術(shù)可以多有意思,硬件開發(fā)者可以多有創(chuàng)意,從這些作品中你可以看到。
2019 年 3 月,Hackadayprize 中國區(qū)賽事隆重開啟,我們很期待看到國內(nèi)的硬件開發(fā)者大開腦洞、大展技藝。你準(zhǔn)備好了沒,與來自全球的硬件開發(fā)者同臺 PK?