使用 Arduino Nano 創(chuàng)建基于 DCO 的音頻合成器
出處:維庫電子市場網(wǎng) 發(fā)布于:2024-08-06 17:13:25 | 354 次閱讀
當(dāng)我考慮創(chuàng)建自己的合成器時(shí),VCO 電路的復(fù)雜性和混亂性一直是我的絆腳石,盡管我喜歡模擬合成,但我還是無法擺脫其混亂的電子缺陷。當(dāng)我對Roland Juno 系列合成器產(chǎn)生好感時(shí),一切都改變了。
Roland 的 Juno-6于 1982 年上市,是當(dāng)時(shí)其他復(fù)音合成器更實(shí)惠的替代品。它也是第一款使用 DCO 代替?zhèn)鹘y(tǒng) VCO 的合成器。與其他合成器相比,這大大提高了樂器的調(diào)諧穩(wěn)定性,因?yàn)?DCO 使用數(shù)字電路來控制振蕩器模擬信號的頻率??紤]到這一點(diǎn),使用 DCO 代替 VCO 當(dāng)然是有代價(jià)的。許多人喜歡兩個(gè)略微失諧的 VCO 齊奏的“溫暖”聲音,而這種聲音很難用基于 DCO 的合成器模仿。但是,可以將調(diào)制效果應(yīng)用于 DCO 的干輸出信號,以產(chǎn)生華麗、優(yōu)美的聲音。
總體而言,Arduino Uno 和 Nano 開發(fā)板的普及性和低成本,再加上這些數(shù)字平臺預(yù)裝了 16 MHz晶體振蕩器的事實(shí),使得創(chuàng)建廉價(jià)的 DCO 變得非常容易。
使用微控制器定時(shí)器模塊創(chuàng)建 DCO
查看任何現(xiàn)代微控制器的數(shù)據(jù)表,您都會在其外設(shè)中找到一個(gè)定時(shí)器模塊。定時(shí)器模塊允許嵌入式設(shè)計(jì)人員在獨(dú)立于 CPU (中央處理單元)的嵌入式系統(tǒng)后臺設(shè)置運(yùn)行計(jì)數(shù)器。此外,定時(shí)器模塊可以在多種情況下中斷 CPU,例如當(dāng)它們溢出計(jì)數(shù)寄存器或達(dá)到特定計(jì)數(shù)時(shí)。嵌入式設(shè)計(jì)人員可以配置中斷條件以滿足其特定應(yīng)用的需求。
對于這個(gè)項(xiàng)目, ATMega328P的定時(shí)器模塊(Arduino Nano 和 Uno 的大腦)充當(dāng)合成器的 DCO。通過配置定時(shí)器模塊的時(shí)鐘源和最大計(jì)數(shù)值,可以在音頻頻率觸發(fā)定時(shí)器模塊中斷。DCO 輸出是通過在這些周期性中斷的中斷服務(wù)例程 (ISR) 期間操縱微控制器的 GPIO 引腳來實(shí)現(xiàn)的。
在接下來的章節(jié)中,我將討論該項(xiàng)目背后的硬件和軟件設(shè)計(jì),然后展示一些來自該自制合成器的音頻片段。
使用 Arduino Nano 的音頻合成器硬件
在介紹該項(xiàng)目涉及的不同硬件以及它們?nèi)绾螀f(xié)同工作之前,表 1 顯示了 BOM(物料清單)。
數(shù)量成分
1
Arduino Nano v3.x
4470 nF電容
12.1 毫米筒形插孔
11/4”單聲道開關(guān)插孔
24.7k電阻
347k電阻
7100k電阻
1100k電阻
2100k電位器
11 M 電位器
23SPDT 微型瞬時(shí)開關(guān)
1開關(guān)DC-DC 轉(zhuǎn)換器(5 V 輸出)
1Microchip MCP23017 I/O 擴(kuò)展器
1LF411 運(yùn)算放大器(運(yùn)放) 接下來,讓我們看一下圖 2 的系統(tǒng)圖,它展示了該合成器的各個(gè)部分是如何組合在一起的。

圖 2. 合成器的硬件系統(tǒng)圖。
鍵盤部分由 23 個(gè) SPDT 開關(guān)組成,每個(gè)鍵一個(gè)。其中 16 個(gè)鍵路由到 MCP23017 I/O 擴(kuò)展器,其余 7 個(gè)鍵直接路由到 Arduino Nano 上的 GPIO 輸入。然后 MCP23017 通過I2C連接到 Arduino Nano 。
從這里開始,Arduino Nano 處理來自鍵盤的輸入,并根據(jù)這些按鍵在 D11、D12 和 D10 上生成三個(gè)獨(dú)立的振蕩器輸出。Arduino Nano 上這些數(shù)字引腳的輸出被路由到求和放大器電路,該電路的原理圖如圖 3 所示?! ∏蠛头糯笃麟娐返氖疽鈭D。

求和放大器包含三個(gè)電位器。它們分別控制振蕩器 2 和 3 的音量以及樂器的主音量。放大器電路的輸出直接路由到 ?” 單聲道音頻插孔,因此可輕松直接插入吉他放大器。
為了給該樂器供電,我使用標(biāo)準(zhǔn)的 2.1 毫米 9 V DC 吉他踏板筒形插孔。此外,該插孔的 +9 V 被路由到小型 DC-DC 開關(guān)電源轉(zhuǎn)換器以產(chǎn)生 5 V 電源連接。+5 V 電源為 MCP23017 供電。Arduino 通過其 Vin 引腳由 +9 V 電源供電。運(yùn)算放大器的 V+ 和 V- 由筒形插孔的 +9 V 和接地連接提供,5 V 電源用作運(yùn)算放大器的浮動(dòng)接地連接。
圖 4 顯示了該系統(tǒng)各部分的連接方式?! ≌麄€(gè)系統(tǒng)示意圖

創(chuàng)建音頻合成器的軟件方面
該項(xiàng)目軟件的主要任務(wù)是解釋鍵盤按鈕的輸入并相應(yīng)地操作定時(shí)器模塊寄存器(請參閱此處的 Arduino 草圖 PDF 以獲取代碼)。在草圖中的 setup() 函數(shù)之前,聲明了幾個(gè)全局變量,包括兩個(gè)大型的 2D 數(shù)組,其中包含與音符相對應(yīng)的定時(shí)器模塊寄存器值。setup() 函數(shù)的過程遵循圖 5 的流程圖,其中僅涉及:
設(shè)置 GPIO 輸入和輸出
開始 I2C 通信
初始化三個(gè)定時(shí)器模塊
啟用中斷
選擇定時(shí)器 B 模塊的時(shí)鐘源作為定時(shí)器 A 的時(shí)鐘
啟用全局中斷 該儀器的 Arduino 草圖的 setup() 函數(shù)的流程圖。

圖 6 顯示了表示 Arduino 草圖的 loop() 函數(shù)的流程圖?! 〈藘x器的 Arduino 草圖的 loop() 函數(shù)流程圖

循環(huán)函數(shù)執(zhí)行三個(gè)主要任務(wù):
檢測鍵盤上按下的鍵
根據(jù)特定鍵的音調(diào)設(shè)置定時(shí)器模塊參數(shù)
設(shè)置門變量以允許振蕩器信號轉(zhuǎn)發(fā)到各自的 GPIO 引腳
循環(huán)函數(shù)一次評估連接到鍵盤的每個(gè) I/O 端口,直到檢測到按下的按鈕。端口的評估順序是從鍵盤上的最低音符到最高音符,這意味著低音符實(shí)際上具有更高的優(yōu)先級。雖然我考慮使用 GPIO 和 I2C 中斷來處理鍵盤按鈕按下,但我最終使用了連續(xù)輪詢方法,并且我沒有注意到因此而產(chǎn)生的任何不利性能。
最后,圖 7 表示 ATMega328P 中三個(gè)定時(shí)器模塊各自的中斷服務(wù)程序。 Arduino Nano 的 ATMega328P 定時(shí)器模塊的中斷服務(wù)程序流程圖。

如果設(shè)置了門控變量,則每個(gè) ISR 都會切換其輸出引腳值。此切換會為每個(gè)振蕩器生成音頻頻率輸出。
上一篇:LA4440 音頻放大器
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- LM317:高效構(gòu)建電壓源及電流源電路方案1
- 如何使用多相轉(zhuǎn)換器平衡電流2
- LTC4365 如何實(shí)現(xiàn)敏感電路過壓與反接保護(hù)3
- MOS 管邏輯電路五種門電路特性4
- 點(diǎn)動(dòng)正轉(zhuǎn)控制電路簡介5
- 單鍵開關(guān)機(jī)電路與輕觸開關(guān)的創(chuàng)新設(shè)計(jì)解析6
- 二極管的恒壓降模型7
- MC34063電路計(jì)算公式及應(yīng)用講解8
- 3.3V - 1.8V 電平雙向轉(zhuǎn)換:多場景配置及獨(dú)特優(yōu)勢剖析9
- 液晶電視機(jī)電路結(jié)構(gòu)的關(guān)鍵要點(diǎn)10














