在這個項目中,學(xué)習(xí)使用Arduino Nano或Arduino Uno創(chuàng)建數(shù)字控制振蕩器或基于DCO的音頻合成器。
我喜歡音樂,我也喜歡電子。 多年來,我一直在制造音樂電子設(shè)備,主要是為我的電吉他演奏服務(wù)。 在構(gòu)建和修改了一些電子管放大器和效果踏板之后,我決定涉足音頻合成領(lǐng)域。 我經(jīng)常夢想創(chuàng)建自己的Eurorack合成器,一次一個模塊,但對于我的第一個合成器項目,我決定從獨立鍵盤開始。
在這個項目中,我移除了現(xiàn)有的電子設(shè)備,并用基于數(shù)字控制振蕩器(DCO)的音頻合成器代替了它們,該音頻合成器具有 Arduino Nano
在它的核心。 雖然我使用了Arduino Nano,但 Arduino Uno 也可以使用。 讓我們深入了解如何制作基于 DCO
的合成器。 但是,在走得太遠之前,讓我們先談?wù)務(wù)袷幤髟诤铣善髦械氖褂谩?/p>
振蕩器:任何合成器的心臟
任何合成器的關(guān)鍵元素都是其 振蕩器電路。 模擬頻率合成器通常有兩個或多個獨立可控振蕩器。 然而,任何踏入模擬互聯(lián)網(wǎng)兔子洞的人 壓控振蕩器 (VCO)
原理圖知道它們通常是復(fù)雜和混亂的。 一些雜亂來自可以優(yōu)雅處理的功能,例如多個控制電壓輸入。 然而,即使最簡單的振蕩器電路被隔離在原理圖中,剩下的仍然會因熱反饋技巧而變得復(fù)雜,以保持振蕩器在其組件預(yù)熱時保持調(diào)諧。
當我考慮創(chuàng)建自己的合成器時,VCO電路的復(fù)雜性和混亂一直是我的絆腳石,盡管我喜歡模擬合成,但我無法擺脫其混亂的電子軟肋。 當我對
羅蘭·朱諾系列合成器。
羅蘭的朱諾-6 1982
年上市,作為當時其他復(fù)調(diào)合成器的更實惠的替代品。 它也是第一個使用DCO而不是傳統(tǒng)VCO的合成器。 與其他產(chǎn)品相比,這大大提高了儀器的調(diào)諧穩(wěn)定性,因為DCO使用數(shù)字電路來控制振蕩器模擬信號的頻率。 考慮到這一點,當然,使用DCO而不是VCO肯定需要權(quán)衡。 許多人喜歡兩個略微失諧的VCO齊聲演奏的“溫暖”聲音,這很難用基于DCO的合成器來模擬。 但是,調(diào)制效果可以應(yīng)用于來自DCO的干輸出信號,以產(chǎn)生郁郁蔥蔥,優(yōu)美的聲音。
總體而言,Arduino Uno和Nano開發(fā)板的普遍性和低成本,以及這些數(shù)字平臺預(yù)先配備了16 MHz的事實。 晶體振蕩器,使以便宜的價格創(chuàng)建 DCO
變得非常容易。
查看數(shù)據(jù)表以了解任何現(xiàn)代 微控制器,您將在其外圍設(shè)備中找到一個計時器模塊。 定時器模塊允許嵌入式設(shè)計人員在嵌入式系統(tǒng)的后臺設(shè)置一個獨立于
中央處理器(中央處理器)。 此外,定時器模塊可以在多種情況下中斷CPU,例如當它們溢出其計數(shù)寄存器或達到某個計數(shù)時。 嵌入式設(shè)計人員可以配置中斷條件,以滿足其特定應(yīng)用的需求。
對于這個項目,計時器模塊 ATMega328PArduino
Nano和Uno的大腦充當合成器的DCO。 通過配置定時器模塊的時鐘源和最大計數(shù)值,可以在音頻頻率下觸發(fā)定時器模塊中斷。 DCO
輸出是通過在這些周期性中斷的中斷服務(wù)例程 (ISR) 期間操縱微控制器的 GPIO 引腳來實現(xiàn)的。
在以下部分中,我將討論該項目背后的硬件和軟件設(shè)計,然后展示來自這個自制合成器的一些音頻剪輯。
使用 Arduino Nano 的音頻合成器的硬件
在介紹此項目中涉及的不同硬件以及它們?nèi)绾螀f(xié)同工作之前,表 1 顯示了 BOM(物料清單)。
數(shù)量 | 元件 |
---|---|
1 | Arduino Nano v3.x |
4 | 470 nF [電容器] |
1 | 2.1 毫米槍管插孔 |
1 | 1/4“ 單聲道開關(guān)插孔 |
2 | 4.7千米 [電阻器] |
3 | 47k 電阻器 |
7 | 100k 電阻 |
1 | 100k 電阻 |
2 | 100k [電位計] |
1 | 1 M 電位計 |
23 | 單刀雙擲微型瞬時開關(guān) |
1 | 開關(guān) [直流-直流轉(zhuǎn)換器] (5 V 輸出) |
1 | 微片 [MCP23017] I/O 擴展器 |
1 | [LF411] 運算放大器(運算放大器) |
接下來,讓我們看一下圖 2 的系統(tǒng)圖,它顯示了該合成器的各部分是如何組合在一起的。
***圖2. ** 合成器的硬件系統(tǒng)圖。 *
鍵盤部分由 23 個 SPDT 開關(guān)組成,每個鍵一個。 其中 16 個密鑰路由到 MCP23017 I/O 擴展器,其余 7 個密鑰直接路由到 Arduino Nano 上的 GPIO 輸入。 然后,MCP23017 通過 Arduino Nano 連接到 Arduino Nano。 I2C.
從這里,Arduino Nano 處理來自鍵盤的輸入,并根據(jù)這些按鍵在 D11、D12 和 D10 上生成三個獨立的振蕩器輸出。 Arduino Nano上這些數(shù)字引腳的輸出被路由到求和放大器電路中,其原理圖如圖3所示。
***圖3. ** 求和放大電路原理圖 [點擊圖片放大]。 *
求和放大器包含三個電位計。 它們獨立控制振蕩器 2 和 3 的音量以及儀器的主音量。 放大器電路的輸出直接路由到 1/4“ 單聲道音頻插孔,使其易于直接插入吉他放大器。
為了給這個樂器供電,我使用了一個標準的 2.1 毫米 9 V DC 吉他踏板桶插孔。 此外,來自該插孔的+9 V被路由到小型DC-DC開關(guān)電源轉(zhuǎn)換器,以產(chǎn)生5 V電源連接。 +5 V電源為MCP23017供電。 Arduino通過+9 V電源通過其Vin引腳供電。 運算放大器的V+和V-由桶形插孔的+9 V和接地連接提供,5 V電源用作浮動接地連接運算放大器.
圖4顯示了該系統(tǒng)所有部件的連接方式。
*圖4. 整個系統(tǒng)的原理圖[點擊圖片放大]。 *
創(chuàng)建音頻合成器的軟件方面
該項目軟件的主要任務(wù)是解釋來自鍵盤按鈕的輸入并相應(yīng)地操作計時器模塊寄存器. 在草圖中的 setup() 函數(shù)之前,聲明了幾個全局變量,包括對應(yīng)于音符的計時器模塊寄存器值的兩個大型 2D 數(shù)組。 setup() 函數(shù)的過程遵循圖 5 的流程圖,其中僅涉及:
- 設(shè)置 GPIO 輸入和輸出
- 啟動 I2C 通信
- 初始化三個計時器模塊
- 啟用中斷
- 選擇定時器B模塊的時鐘源作為定時器A的時鐘
- 啟用全局中斷
*圖5. 該儀器的 Arduino 草圖的 setup() 函數(shù)的流程圖。 *
表示 Arduino 草圖的 loop() 函數(shù)的流程圖如圖 6 所示。
*圖6. 該儀器的 Arduino 草圖的 loop() 函數(shù)的流程圖 [單擊圖像放大]。 *
循環(huán)函數(shù)執(zhí)行三個主要任務(wù):
循環(huán)功能一次評估一個連接到鍵盤的每個 I/O 端口,直到檢測到按下的按鈕。 端口的評估順序是從鍵盤上的最低音到最高音,這意味著較低的音符實際上具有更高的優(yōu)先級。 雖然我考慮使用 GPIO 和 I2C 中斷來處理鍵盤按鈕按下,但我最終使用了連續(xù)輪詢方法,并且我沒有注意到任何不利的性能。
最后,圖 7 顯示了 ATMega328P 中三個定時器模塊中每個模塊的中斷服務(wù)例程。
***圖7. **Arduino Nano的ATMega328P定時器模塊的中斷服務(wù)例程流程圖。 *
如果設(shè)置了門變量,則每個 ISR 都會切換其輸出引腳值。 這種切換為每個振蕩器生成音頻輸出。
由此產(chǎn)生的聲音樣本和潛在的增強功能
您可以在下面找到該項目的兩個音頻樣本。 請務(wù)必單擊播放按鈕圖像進行播放 - 請注意,音頻將在單獨的窗口中打開和播放。
*聲音剪輯 1. 音頻合成器演示。 *
正如您從第一個音頻樣本中聽到的那樣,該合成器產(chǎn)生漂亮的斯巴達低保真聲音。 該示例首先演示了根音符振蕩器,然后演示了根音符和八度降振,最后演示了根音符、八度降頻程和 7 個半音上升振蕩器。
***聲音剪輯 2. **帶有效果和鼓的音頻合成器演示。 *
第二個樣本通過一些延遲和相位效果展示了合成器,并疊加了多個軌道。 所有的旋律聲音都來自Arduino合成器,但鼓聲來自Roland 808風(fēng)格的鼓機vst插件。
總而言之,我對這個項目的結(jié)果感到興奮,但我確實認為這個基于 Arduino 的合成器可以實現(xiàn)許多潛在的改進。 例如,我想為這個Arduino合成器實現(xiàn)一個USB midi接口。 我還想使用這些方法創(chuàng)建一個可擴展的多邊形合成器。 然而,就目前而言,這個項目已經(jīng)改造成的玩具外殼是一種有趣的、值得上臺的低保真樂器,具有非常沙礫的低音。
如果您選擇像這樣構(gòu)建自己的基于 Arduino 的合成器, 在下面的評論中讓我知道 聽起來如何。 祝你好運,繼續(xù)制造噪音!
-
合成器
+關(guān)注
關(guān)注
0文章
273瀏覽量
25356 -
Arduino
+關(guān)注
關(guān)注
188文章
6468瀏覽量
186956
發(fā)布評論請先 登錄
相關(guān)推薦
評論