在此項目中,學(xué)習(xí)使用 Arduino Nano 或 Arduino Uno 創(chuàng)建數(shù)控振蕩器或基于 DCO 的音頻合成器。
我喜歡音樂,也喜歡電子產(chǎn)品。多年來,我一直在制造音樂電子設(shè)備,主要是為我的電吉他演奏服務(wù)。在構(gòu)建和修改了幾個電子管放大器和效果踏板之后,我決定涉足音頻合成領(lǐng)域。我經(jīng)常夢想創(chuàng)建自己的 Eurorack 合成器,一次一個模塊,但對于我的第一個合成器項目,我決定從一個獨立的鍵盤開始。我的成品——一個改裝過的玩具鍵盤。
在這個項目中,我移除了現(xiàn)有的電子設(shè)備,并用一個以Arduino Nano為核心的基于數(shù)控振蕩器 (DCO) 的音頻合成器取而代之。雖然我使用的是 Arduino Nano,但也可以使用Arduino Uno 。讓我們深入探討如何制作基于 DCO 的合成器。然而,在走得太遠(yuǎn)之前,讓我們先談?wù)勗诤铣善髦惺褂谜袷幤鳌?/p>
振蕩器:任何合成器的心臟
任何合成器的關(guān)鍵要素是其振蕩器電路。模擬合成器通常有兩個或多個獨立可控的振蕩器。但是,任何進(jìn)入過模擬壓控振蕩器 (VCO)原理圖的互聯(lián)網(wǎng)兔子洞的人都知道它們通常很復(fù)雜且雜亂無章。一些混亂來自可以優(yōu)雅地處理的功能,例如多個控制電壓輸入。然而,即使最簡單的振蕩器電路在原理圖中被隔離,剩下的部分仍然很復(fù)雜,因為熱反饋技巧使振蕩器在其組件預(yù)熱時保持調(diào)諧。
當(dāng)我考慮創(chuàng)建自己的合成器時,VCO 電路的復(fù)雜性和混亂一直是我的絆腳石,即使我喜歡模擬合成器,我也無法克服它凌亂的電子軟肋。當(dāng)我欣賞Roland Juno 系列合成器時,這一切都改變了。
Roland 的 Juno-6于 1982 年上市,作為當(dāng)時其他和弦合成器的更實惠的替代品。它也是第一個使用 DCO 代替?zhèn)鹘y(tǒng) VCO 的合成器。與替代品相比,這顯著提高了儀器的調(diào)諧穩(wěn)定性,因為 DCO 使用數(shù)字電路來控制振蕩器模擬信號的頻率??紤]到這一點,使用 DCO 而不是 VCO 當(dāng)然需要權(quán)衡取舍。許多人喜歡兩個略微失諧的 VCO 齊聲演奏的“溫暖”聲音,這是很難用基于 DCO 的合成器模擬的。然而,調(diào)制效果可以應(yīng)用于 DCO 的干輸出信號,以產(chǎn)生豐富、優(yōu)美的聲音。
總的來說,Arduino Uno 和 Nano 開發(fā)板的普遍性和低成本,再加上這些數(shù)字平臺預(yù)裝了 16 MHz晶體振蕩器,使得創(chuàng)建便宜的 DCO 變得異常容易。
查看任何現(xiàn)代微控制器的數(shù)據(jù)表,您會在其外圍設(shè)備中找到定時器模塊。定時器模塊允許嵌入式設(shè)計人員在獨立于CPU(中央處理器)的嵌入式系統(tǒng)后臺設(shè)置運行計數(shù)器。此外,定時器模塊可以在多種情況下中斷 CPU,例如當(dāng)它們溢出計數(shù)寄存器或達(dá)到特定計數(shù)時。嵌入式設(shè)計人員可以配置中斷條件以滿足其特定應(yīng)用的需要。
對于這個項目, ATMega328P的定時器模塊——Arduino Nano 和 Uno 的大腦——充當(dāng)合成器的 DCO。通過配置定時器模塊的時鐘源和最大計數(shù)值,可以實現(xiàn)音頻觸發(fā)定時器模塊中斷。DCO 輸出是通過在這些周期性中斷的中斷服務(wù)例程 (ISR) 期間操縱微控制器的 GPIO 引腳來實現(xiàn)的。
在接下來的部分中,我將討論這個項目背后的硬件和軟件設(shè)計,然后展示這個自制合成器的一些音頻片段。
使用 Arduino Nano 的音頻合成器硬件
在深入了解該項目中涉及的不同硬件以及它們?nèi)绾螀f(xié)同工作之前,表 1 顯示了 BOM(物料清單)。
數(shù)量 | 成分 |
---|---|
1個 | Arduino 納米 v3.x |
4個 | 470 nF電容 |
1個 | 2.1 毫米筒式千斤頂 |
1個 | 1/4" 單聲道開關(guān)插孔 |
2個 | 4.7k電阻 |
3個 | 47k電阻 |
7 | 100k電阻 |
1個 | 100k電阻 |
2個 | 100k電位器 |
1個 | 1M電位器 |
23 | SPDT微型瞬時開關(guān) |
1個 | 開關(guān)式DC-DC 轉(zhuǎn)換器(5 V 輸出) |
1個 | MicrochipMCP23017I/O 擴(kuò)展器 |
1個 | LF411運算放大器(運放) |
接下來,讓我們看一下圖 2 的系統(tǒng)圖,它顯示了這個合成器的各個部分是如何組合在一起的。
圖 2.合成器的硬件系統(tǒng)圖。
鍵盤部分由一組 23 個 SPDT 開關(guān)組成,每個開關(guān)一個。其中 16 個鍵被路由到 MCP23017 I/O 擴(kuò)展器,其余 7 個鍵直接路由到 Arduino Nano 上的 GPIO 輸入。MCP23017 然后通過I2C連接到 Arduino Nano 。
Arduino Nano 從這里開始處理來自鍵盤的輸入,并根據(jù)這些按鍵在 D11、D12 和 D10 上生成三個獨立的振蕩器輸出。Arduino Nano 上這些數(shù)字引腳的輸出被路由到加法放大器電路,其原理圖如圖 3 所示。
圖 3.加法放大器電路原理圖 [點擊圖片放大]。
求和放大器包含三個電位器。它們獨立控制振蕩器 2 和 3 的音量以及樂器的主音量。放大器電路的輸出直接路由到 ?” 單聲道音頻插孔,可以輕松直接插入吉他放大器。
為了給這個樂器供電,我使用了一個標(biāo)準(zhǔn)的 2.1 毫米 9 V DC 吉他踏板桶形插孔。此外,來自該插孔的 +9 V 被路由到小型 DC-DC 開關(guān)電源轉(zhuǎ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)地操作定時器模塊寄存器(有關(guān)代碼,請參見此處的 Arduino 草圖 PDF)。在草圖中的 setup() 函數(shù)之前,聲明了幾個全局變量,包括兩個大型二維數(shù)組的定時器模塊寄存器值對應(yīng)于音符。setup() 函數(shù)的過程遵循圖 5 的流程圖,其中僅涉及:
設(shè)置 GPIO 輸入和輸出
啟動 I2C 通信
初始化三個定時器模塊
啟用中斷
選擇定時器 B 模塊的時鐘源作為定時器 A 的時鐘
啟用全局中斷
圖 5.該儀器的 Arduino 草圖的 setup() 函數(shù)流程圖。
圖 6 顯示了表示 Arduino 草圖的 loop() 函數(shù)的流程圖。
圖 6.該儀器的 Arduino 草圖的 loop() 函數(shù)流程圖 [單擊圖像放大]。
循環(huán)函數(shù)執(zhí)行三個主要任務(wù):
檢測鍵盤上按下的鍵
根據(jù)特定鍵的音符設(shè)置定時器模塊參數(shù)
設(shè)置門變量以允許將振蕩器信號轉(zhuǎn)發(fā)到它們各自的 GPIO 引腳
循環(huán)函數(shù)一次評估連接到鍵盤的每個 I/O 端口,直到檢測到按下的按鈕。端口的評估順序是鍵盤上從最低音符到最高音符,這意味著較低的音符實際上具有較高的優(yōu)先級。當(dāng)我考慮使用 GPIO 和 I2C 中斷來處理鍵盤按鈕按下時,我最終使用了連續(xù)輪詢方法,并且我沒有注意到任何不利的性能結(jié)果。
最后,圖 7 表示 ATMega328P 中三個定時器模塊中每一個的中斷服務(wù)例程。
圖 7.Arduino Nano 的 ATMega328P 定時器模塊的中斷服務(wù)例程流程圖。
如果設(shè)置了門變量,這些 ISR 中的每一個都會切換其輸出引腳值。這種切換是為每個振蕩器生成音頻輸出的原因。
產(chǎn)生的聲音樣本和潛在的改進(jìn)
您可以在下面找到該項目的兩個音頻樣本。請務(wù)必單擊播放按鈕圖像進(jìn)行播放 - 請注意,音頻將在單獨的窗口中打開并播放。
聲音剪輯 1.音頻合成器演示。
正如您從第一個音頻樣本中聽到的那樣,該合成器產(chǎn)生了一種漂亮的斯巴達(dá)式低保真聲音。該樣本首先演示了根音振蕩器,然后是根音和八度向下振蕩器,最后是根音、向下八度和 7 個半音向上振蕩器。
聲音剪輯 2。帶有效果器和鼓的音頻合成器演示。
第二個示例通過一些延遲和相位效果展示了合成器,并覆蓋了多個軌道。所有旋律聲音都來自 Arduino 合成器,但鼓聲來自 Roland 808 風(fēng)格的鼓機(jī) vst 插件。
總而言之,我對這個項目的結(jié)果感到非常興奮,但我確實認(rèn)為這個基于 Arduino 的合成器可以實現(xiàn)許多潛在的改進(jìn)。例如,我想為這個 Arduino 合成器實現(xiàn)一個 USB midi 接口。我還想使用這些方法創(chuàng)建一個可擴(kuò)展的復(fù)音合成器。然而,就目前而言,這個項目的玩具屋已經(jīng)變成了一種有趣、適合舞臺的低保真樂器,具有非常堅韌的低音。
彩蛋來了
從基礎(chǔ)到高級的ADC講座,將涵蓋高速ADC設(shè)計的原理、傳統(tǒng)架構(gòu)和最先進(jìn)的設(shè)計。第一部分首先回顧了ADC的基本知識,包括采樣、開關(guān)電容和量化理論。接下來,介紹了經(jīng)典ADC架構(gòu)的基礎(chǔ)和設(shè)計實例,如閃存、SAR和流水線ADC。然后,本教程將對混合型ADC架構(gòu)進(jìn)行總體概述,這就結(jié)束了第一部分。在第二部分,首先描述了ADC的度量。然后,介紹混合或非混合架構(gòu)的各種先進(jìn)設(shè)計。該教程最后將以數(shù)字輔助解決技術(shù)結(jié)束。
-
微控制器
+關(guān)注
關(guān)注
48文章
7844瀏覽量
153348 -
振蕩器
+關(guān)注
關(guān)注
28文章
3949瀏覽量
140206 -
合成器
+關(guān)注
關(guān)注
0文章
280瀏覽量
25944 -
音頻
+關(guān)注
關(guān)注
29文章
2995瀏覽量
82818 -
Arduino
+關(guān)注
關(guān)注
188文章
6485瀏覽量
189691
原文標(biāo)題:如何創(chuàng)建基于DCO的音頻合成器
文章出處:【微信號:moorexuetang,微信公眾號:摩爾學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
使用 Arduino Nano 創(chuàng)建基于 DCO 的音頻合成器

敏捷合成器的技術(shù)原理和應(yīng)用場景
合成器
基于DDS的頻率合成器設(shè)計介紹
如何利用FPGA設(shè)計PLL頻率合成器?
什么是頻率合成器
頻率合成器,頻率合成器原理及作用是什么?
什么是直接式頻率合成器(DS)
間接式頻率合成器(IS)的定義和原理是什么?
單環(huán)鎖相頻率合成器,單環(huán)鎖相頻率合成器是什么意思
集成鎖相環(huán)頻率合成器,什么是集成鎖相環(huán)頻率合成器
基于Arduino的頻率合成器
pll頻率合成器工作原理與pll頻率合成器的原理圖解釋

如何制作一個音頻合成器?

評論