Adafruit PDM Microphone Breakout:電子工程師的新寵
在電子設計領域,一款優(yōu)秀的麥克風對于音頻相關項目至關重要。今天,我們要介紹的是 Adafruit PDM Microphone Breakout,這是一款獨特的麥克風,為電子工程師帶來了新的選擇。
文件下載:3492.pdf
一、概述
PDM(脈沖密度調制)MEMS 麥克風是一種相對較新的麥克風類型,它不同于常見的模擬或 I2S 麥克風。在眾多產(chǎn)品中,PDM 麥克風被廣泛使用,但在創(chuàng)客項目中卻較少見到。Adafruit 推出這款 PDM Microphone Breakout,旨在讓更多人能體驗到它的優(yōu)勢。
特點
- 無模擬輸出:與許多駐極體麥克風組件不同,這款傳感器不提供“模擬”輸出,這對于沒有模擬輸入的芯片來說是一個很好的選擇。
- 數(shù)字接口簡單:其數(shù)字接口采用脈沖密度調制輸出,既不是 PWM 也不是 I2S。不過,使用時需要確保芯片具有 PDM 接口,現(xiàn)在大多數(shù) 32 位處理器都具備這一特性。
- 類似 1 - 比特 PWM:PDM 有點像 1 - 比特 PWM,需要以 1 MHz - 3 MHz 的時鐘速率對麥克風進行時鐘控制,在數(shù)據(jù)線上會輸出與時鐘同步的方波。數(shù)據(jù)線輸出 0 或 1 的邏輯值,方波的密度經(jīng)過平均后可得到模擬值。
管理方式
管理這些麥克風有幾種方式:
- 硬件外設和庫支持:芯片自帶硬件外設和庫,能高速管理數(shù)據(jù)、收集樣本、應用濾波器并給出模擬值,這是最理想的情況。
- 硬件外設但需自行處理:芯片有硬件外設提供值,但需要自己進行抽取/濾波操作。例如在 ATSAMD21 芯片組上就有相關示例代碼。
- 無硬件外設但自行實現(xiàn):芯片沒有硬件外設,但可以通過自己的方法使其工作,如 ATtiny85 的示例。
- 手動生成時鐘并添加濾波:手動生成高速時鐘,然后在數(shù)據(jù)線上添加模擬濾波器,讀取模擬值,這是一種可行但稍顯“hack”的方法。
產(chǎn)品版本
每個 PDM 麥克風訂單都包含一個完全組裝和測試好的麥克風。有兩種版本可供選擇:
- 帶引腳版本:帶有一個小引腳,可用于面包板兼容性。
- 帶 JST SH 連接器版本:配備 4 - JST SH 連接器,通過 3V、GND、DAT、CLK 連接,可使用 JST - SH 電纜實現(xiàn)靈活的麥克風布置。板上的焊接跳線可將麥克風從左聲道切換到右聲道。
二、引腳說明
這款麥克風的引腳非常簡單:
- 3V:電源輸入引腳,直接為芯片供電。如果有安靜的電源引腳,建議使用。芯片支持 1.8 - 3.3V,但未在 1.8V 下進行測試。
- GND:電源和數(shù)據(jù)的接地參考。
- SEL:左右聲道選擇。該引腳為高電平時,輸出在 CLK 的下降沿被視為“右”聲道;為低電平時,輸出在上升沿,即“左”聲道。
- CLK:PDM 時鐘輸入,需要 1 - 3 MHz 的方波。
- DAT:PDM 數(shù)據(jù)輸出。
三、Arduino 接線與測試
目前,僅針對 SAMD21 芯片組提供了使用 I2S 外設的示例代碼。不過,使用 SAMD21 時,引腳選擇有限,且數(shù)字濾波必須在軟件中完成。實際上,對于 SAMD21 來說,模擬麥克風可能會更省心。
可用的 I2S 引腳
對于 Feather M0 / Metro M0 / Arduino Zero 系列,可用的 I2S 引腳如下:
- 時鐘引腳:PA10(D1 或 TX)、PB11(SCK)、PA20(D6)
- 數(shù)據(jù)引腳:PA07(D9)、PA08(D4)、PA19(D12)
安裝庫
需要從 github 下載最新版本的 ZeroPDM 庫并進行常規(guī)安裝。有兩個示例可供選擇,一個使用 DMA 功能獲取數(shù)據(jù),這種方式需要更多的設置,并且需要 ZeroDMA 庫;建議從基本示例開始,它會將音頻數(shù)據(jù)回顯到 A0(模擬輸出),可以連接耳機或示波器到 A0 來聽取或查看音頻。在上傳代碼之前,要確保修改實例化器以匹配引腳。
四、CircuitPython 使用
使用 CircuitPython 可以很方便地使用 Adafruit PDM 麥克風擴展板,借助內(nèi)置的 audiobusio 模塊和 PDMIn 類,可以通過 PDM 記錄來自麥克風的輸入音頻信號。
接線
以 Feather M4 Express 為例,不同版本的接線方式如下:
- 引腳版本:Mic 3V 連接到 Feather 3V,Mic GND 連接到 Feather Gnd,Mic CLK 連接到 Feather TX,Mic DAT 連接到 Feather D12。
- JST 版本:Mic 3V(紅色線)連接到 Feather 3V,Mic GND(黑色線)連接到 Feather Gnd,Mic DAT(藍色線)連接到 Feather D12,Mic CLK(黃色線)連接到 Feather TX。
如果使用 Circuit Playground Express,它內(nèi)置了 PDM 麥克風,有專門的指南頁面介紹如何使用。
代碼示例
將以下代碼保存為 code.py 到微控制器板上:
import time
import array
import math
import board
import audiobusio
# Remove DC bias before computing RMS.
def mean(values):
return sum(values) / len(values)
def normalized_rms(values):
minbuf = int(mean(values))
samples_sum = sum(
float(sample - minbuf) * (sample - minbuf)
for sample in values
)
return math.sqrt(samples_sum / len(values))
# Main program
mic = audiobusio.PDMIn(board.TX, board.D12, sample_rate=16000, bit_depth=16)
samples = array.array('H', [0] * 160)
while True:
mic.record(samples, len(samples))
magnitude = normalized_rms(samples)
print((magnitude,))
time.sleep(0.1)
代碼中首先導入所需的庫,然后定義了兩個輔助函數(shù),用于計算平均值和歸一化的 RMS 平均值。接著設置麥克風對象和樣本變量,開始采集聲音樣本,計算樣本的平均值(即幅度),并將其打印到串行控制臺。需要注意的是,Mu 繪圖儀需要元組值進行打印,所以打印時要使用正確的格式。
查找有效引腳組合
如果想知道哪些引腳組合支持 PDMIn,可以將以下代碼保存為 code.py 到板上,連接到串行控制臺查看:
import board
import audiobusio
from microcontroller import Pin
def is_hardware_PDM(clock, data):
try:
p = audiobusio.PDMIn(clock, data)
p.deinit()
return True
except ValueError:
return False
except RuntimeError:
return True
def get_unique_pins():
exclude = ['NEOPIXEL', 'APA102_MOSI', 'APA102_SCK']
pins = [pin for pin in [getattr(board, p) for p in dir(board) if p not in exclude] if isinstance(pin, Pin)]
unique = []
for p in pins:
if p not in unique:
unique.append(p)
return unique
for clock_pin in get_unique_pins():
for data_pin in get_unique_pins():
if clock_pin is data_pin:
continue
if is_hardware_PDM(clock_pin, data_pin):
print("Clock pin:", clock_pin, "t Data pin:", data_pin)
五、下載資源
可以下載以下文件:
- MP34DT01 - M 數(shù)據(jù)表
- GitHub 上的 Fritzing 文件
- GitHub 上的 3D 模型
Adafruit PDM Microphone Breakout 為電子工程師提供了一個新的音頻解決方案。你在使用這款麥克風時遇到過什么問題嗎?或者你有什么獨特的應用案例,歡迎在評論區(qū)分享。
-
電子設計
+關注
關注
42文章
3050瀏覽量
49943
發(fā)布評論請先 登錄
Adafruit TPL5110 Power Timer Breakout:低功耗電子設計的利器
Adafruit Ultimate GPS Breakout - 66 channel w/10 Hz updates - Version 3:一款出色的GPS模塊
Adafruit DRV8833 DC/Stepper Motor Driver Breakout Board - 電子工程師的實用之選
Adafruit Silicon MEMS Microphone Breakout - SPW2430:小巧而強大的音頻利器
Adafruit FONA 808 Cellular + GPS Breakout:小身材大功能的物聯(lián)網(wǎng)利器
Adafruit TB6612 1.2A DC/Stepper Motor Driver Breakout Board使用指南
探索Adafruit FT232H Breakout:多功能串口協(xié)議擴展板的使用指南
Adafruit AGC Electret Microphone Amplifier - MAX9814 評測與使用指南
深入解析DLC0430BCP10RF - 2:電子工程師的新寵
研發(fā)工程師和測試工程師對于產(chǎn)品新功能的見解有何不同?#電子工程師 #電路知識 #人工智能
想成為硬件工程師?我教你??!你得先學會這些...... #硬件工程師 #電子工程師 #電子愛好者 #電子行業(yè)
Adafruit PDM Microphone Breakout:電子工程師的新寵
評論