MAKER:Sandeep Mistry/譯:趣無盡
簡介
本指南將教你如何使用樹莓派 Pico 和外部數字麥克風制作屬于自己的 USB 麥克風。本項目通過 RP2040 微控制器(MCU)的編程 I/O(PIO)、直接存儲器訪問(DMA)和通用串行總線(USB)功能來實現。
組件清單
– 樹莓派 Pico
– Adafruit PDM MEMS 麥克風拓展板
– 面包板
– 條線若干
關于 USB
USB 是一種于 1996 年發布的極其流行的標準,適用于有線計算機外圍設備,例如鍵盤、鼠標、打印機、掃描儀和麥克風等。
樹莓派 Pico 的 RP2040 MCU 具有*“USB 1.1主機/設備”*功能,正是因為這個功能,樹莓派 Pico 既可以連接到現有的 USB 外圍設備(主機模式),又可以創建自己的 USB 外圍設備(設備模式)。另外,樹莓派 Pico SDK 使用 TinyUSB 庫作為其 USB 軟件堆棧。
Tiny USB 庫是一個開源的、跨平臺的嵌入式系統 USB 堆棧,支持包括樹莓派 RP2040 在內的多種 MCU,同時還支持設備和主機兩種模式。我們可以利用它內置的 USB 音頻類支持把樹莓派 Pico 變成 USB 麥克風。
選擇麥克風
RP2040 MCU 具有內置的 4 通道 12 位精度模數轉換器(ADC)功能,可用于從外部模擬麥克風收集音頻,但我們發現模擬麥克風的音頻包含大量噪音,因此我們改用數字麥克風。
數字麥克風有兩種常用接口:
– PDM
– I2S
雖然 RP2040 沒有自帶這兩種接口的支持,但靈活的可編程 I/O (PIO) 特性使我們能通過軟件創建 PDM 或 I2S 的外圍接口。在本指南中,我們將使用 Adafruit PDM MEMS 麥克風拓展板來實現。為了從麥克風獲取數據,我們會利用一個引腳來生成輸出時鐘脈沖信號,并使用另一個引腳來接收數據。
PDM 如何運轉?
當 PDM 麥克風接收到時鐘脈沖信號后,它會根據麥克風捕獲的模擬音頻值輸出 0 或 1 信號。為了以每秒 16000 個樣本(16 kHz)的采樣率捕獲音頻,則必須將 PDM 麥克風的時鐘輸入驅動到 1.024 MHz,然后才可以對 PDM 麥克風數據信號進行過濾和降采樣。對于每個樣本,系統會將 64 個值的 0 或 1 輸出進行平均,來創建一個介于 -32678 和 32767 之間的 16 位值,用于表示該樣本的音頻數據。
為了使數據更直觀,你可以使用邏輯分析儀(比如 https://www.saleae.com/)來查看 PDM CLK 和 DAT 信號。
處理流程
系統將執行以下操作:
1. 使用 PIO 在 PDM 麥克風中生成 1.024 MHz 時鐘信號。
2. 在每個時鐘周期,使用 PIO 從 PDM 麥克風捕獲一次數字值。
3. DMA 將被配置為捕獲 1 毫秒的音頻,采樣率為 16 kHz,每毫秒生成 16 個樣本。這 16 個樣本將由 64 x 16 = 1024 位組成。
4. 收到 16 個樣本的原始 PDM 數據后,它將使用 *OpenPDM2PCM* 庫將 1024 位原始 PDM 數據進行過濾并降采樣,生成 16 個 16 位 https://en.wikipedia.org/wiki/Pulse-code_modulation(PCM)音頻樣本。
5. 最后,將 16 個 PCM 音頻樣本通過 USB 接口發送到電腦。
硬件設置
你需要在樹莓派 Pico 和 Adafruit PDM MEMS 麥克風拓展版上焊接排針,以便把它們插在面包板上。如果要了解更多關于焊接排針的細節,請參閱 MagPi 網站的 https://magpi.raspberrypi.org/articles/how-to-solder-gpio-pin-headers-to-raspberry-pi-pico 指南。
焊接完這兩個部分后,把它們放在面包板上,并按以下方式設置接線:
+---------+-------------------+ | PDM Mic | Raspberry Pi Pico | |---------+-------------------| | 3V | 3V3 | |---------+-------------------| | GND | GND | |---------+-------------------| | SEL | GND | |---------+-------------------| | DAT | GPIO2 | |---------+-------------------| | CLK | GPIO3 | +---------+-------------------+
注意:把 PDM Mic. SEL 連接到 GND 接口會導致它在時鐘信號下降(從邏輯電平 1 變為 0)后輸出新數據。
設置 Pico SDK 開發環境
首先,在電腦上安裝樹莓派官方提供的 Pico SDK 和所需的工具鏈。
若要了解更多信息,請參考 https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf 手冊。
該指南的第 2.1 節適用于所有操作系統,對于特點的操作系統,參考以下幾個章節:
–Linux:第 2.2 節
–macOS:第 9.1 節
–Windows:第 9.2 節
下載并編譯 pico-microphone 庫和示例
設置環境變量 PICO_SDK。
export PICO_SDK_PATH=/path/to/pico-sdk
打開終端,克隆源碼并切換到相應目錄:
cd ~/ git clone https://github.com/sandeepmistry/pico-microphone.git cd pico-microphone
創建 build 目錄,并切換到相應目錄:
mkdir build cd build
執行編譯命令:
make .. -DPICO_BOARD=pico make
按住開發板上的 BOOTSEL 按鈕,同時用 USB 數據線把開發板連到電腦上。
把 examples/usb_microphone/usb_microphone.uf2 文件復制到樹莓派 Pico 的 ROM 引導磁盤中:
cp -a examples/usb_microphone/usb_microphone.uf2 /Volumes/RPI-RP2/.
不出意外的話,電腦上會出現一個名為 “MicNode” 的新麥克風設備:
錄制音頻數據
現在我們已經把樹莓派 Pico 開發板配置為 USB 麥克風,只需安裝錄音軟件就能通過 USB 接口獲取音頻數據。本文中以 https://www.audacityteam.org/為例。
https://www.audacityteam.org/download/并安裝 Audacity。安裝完成后,打開 Audacity,然后選擇 “MicNode” 作為輸入設備。
你可以點擊“錄制” 按鈕開始為錄制音頻,并在需要停止時按下“停止” 按鈕。
總結
我們使用樹莓派 Pico 和外部 PDM 麥克風制作屬于自己的 USB 麥克風。本項目中使用了樹莓派 RP2040 的 PIO、DMA 和 USB 硬件特性,以及 OpenPDM2PCM 和 TinyUSB 軟件庫,在 Arm Cortex-M0+ 架構的 RP2040 處理器上運行。
我們的 USB 麥克風從 PDM 麥克風捕獲 PDM 音頻數據,將 PDM 數據轉換為 PCM 格式,然后通過 USB 實時將 PCM 數據發送到 PC!
由于USB音頻標準用于樹莓派 Pico板和PC之間的通信,因此PC端不需要定制軟件。
本文通過 USB 將音頻數據從樹莓派 Pico 傳輸到電腦,但你也可以把 https://github.com/sandeepmistry/pico-microphone 庫與模擬(或 PDM) 麥克風搭配使用,并在設備上執行數字信號處理 (DSP) ,這樣就可以在沒有電腦的情況下對開發板的音頻環境做出反應。
-
微控制器
+關注
關注
48文章
7542瀏覽量
151316 -
mcu
+關注
關注
146文章
17123瀏覽量
350982 -
麥克風
+關注
關注
15文章
636瀏覽量
54811 -
usb
+關注
關注
60文章
7936瀏覽量
264474 -
樹莓派
+關注
關注
116文章
1706瀏覽量
105607
原文標題:使用樹莓派 Pico 制作 USB 麥克風
文章出處:【微信號:趣無盡,微信公眾號:趣無盡】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論