麦斯科技 · 2021年05月30日

用树莓派PICO创建 USB 麦克风

https://www.hackster.io/sandeep-mistry/create-a-usb-microphone-with-the-raspberry-pi-pico-cc9bd5

Sandeep Mistry 发布于2021 年 5 月 20 日

本指南将引导您使用RP2040的PIO、DMA和USB功能在树莓派PICO上创建一个USB麦克风。

此项目中使用的东西

硬件组件

微信图片_20210529212915.png

故事

本指南是代表 Arm 软件开发团队创建的,请关注我们的推特:@ArmSoftwareDev和 YouTube:Arm软件开发人员 以获得更多资源!

介绍

本指南将介绍如何使用树莓派 Pico板和外部数字麦克风创建自己的USB麦克风设备。该项目将利用RP2040微控制器(MCU)板的编程I/O(PIO)、直接内存访问(DMA)和通用串行总线(USB)功能。

USB

USB是1996年发布的一个非常流行的标准,用于有线计算机外围设备,如键盘、鼠标、打印机、扫描仪和麦克风。

树莓派Pico开发板的RP2040 MCU具有“USB 1.1主机/设备”功能,允许您连接到现有USB外围设备(主机模式)或创建自己的USB外围设备(设备模式)。树莓派 Pico SDK使用TinyUSB库作为其USB软件堆栈。

微型USB库是“一个用于嵌入式系统的开源跨平台USB堆栈”,支持多种类型的MCU,包括树莓派 RP2040。并且支持设备和主机模式。我们可以使用它的内置USB音频类支持,将我们的Pico转换成USB麦克风设备。

选择麦克风

RP2040 MCU具有内置4通道模数转换器(ADC)功能,具有12位精度,可用于从外部模拟麦克风采集音频,但是我们发现模拟麦克风的音频质量包含大量噪声,因此将改用数字麦克风。

数字话筒有两种常见接口:

  • 脉冲密度调制(PDM)
  • 内部IC声音标准(I2S)

虽然RP2040没有对这两种接口类型的内置支持,但超级灵活的可编程I/O(PIO)功能可用于在软件中创建我们自己的PDM或I2S外围接口。我将在一个引脚上生成一个输出时钟信号到麦克风,并使用另一个引脚从麦克风接收数据。对于本指南,我们将使用Adafruit PDM MEMS麦克风转接板。

PDM 如何工作?

当PDM麦克风接收到时钟信号时,它会根据从麦克风捕获的模拟音频值输出0或1信号。要以每秒16000个采样(16kHz)的速度捕获音频,PDM麦克风的时钟输入必须以1.024MHz=64x16kHz的频率驱动,然后PDM麦克风的数据单可以进行滤波和降采样。对于每个样本,对64个值的0或1输出进行平均,为样本创建一个介于-32678和32767之间的16位值。

微信图片_20210529213748.png
您可以使用逻辑分析器(如Saleae)查看PDM CLK和DAT信号。
screen_shot_2021-05-20_at_9_22_43_am_bZEIbPUrU6.jpg

处理流程

系统将执行以下操作:

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位脉冲编码调制(PCM)16位音频样本。

5.通过USB将16个PCM音频样本发送到PC。

screen_shot_2021-05-18_at_3_44_34_pm_1wuS6LxDgy.jpg

硬件设置

将公头焊接到树莓派Pico板和Adafruit PDM MEMS麦克风转接板上,这样就可以将它们插入到面包板中。请参阅MagPi的“如何将GPIO引脚头焊接到Raspberry Pi Pico”指南https://magpi.raspberrypi.org/articles/how-to-solder-gpio-pin-headers-to-raspberry-pi-pico,以了解有关将引脚头焊接到树莓派 Pico板的更多详细信息。

两个项目焊接完成后,将其放在试验板上,并按如下方式设置接线:

screen_shot_2021-05-19_at_2_43_36_pm_k8xgxjttTW.png

微信图片_20210529214336.png

注意:连接PDM麦克风。SEL到GND将导致它在时钟信号下降(从逻辑电平1到0)后时钟输出新数据。

img_2221_ieGjhF4wFr.jpg

设置picosdk开发环境

您首先需要使用树莓派Pico SDK和必需的工具链来设置您的计算机。

有关更多信息,请参阅“Raspberry Pi Pico入门”。https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf

本指南第2.1节适用于所有操作系统,后面是操作特定部分:

  • Linux:第2.2节
  • MacOS:第9.1节
  • Windows:第9.2节

获取和编译pico麦克风库及示例

确保设置了PICO_SDK环境变量。

export PICO_SDK_PATH=/path/to/pico-sdk

在终端窗口中,克隆git存储库并更改目录

cd ~/ 

git clone https://github.com/sandeepmistry/pico-microphone.git


cd pico-microphone

创建生成目录并将目录更改为当前目录:

mkdir build

cd build

运行cmake并使其编译:

cmake .. -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”的新麦克风设备连接到您的系统:

screen_shot_2021-05-18_at_4_19_39_pm_G0pzeqnHST.png

录制音频数据

现在,我们已经将树莓派Pico板配置为USB麦克风,任何桌面录音应用程序(如Audacity)都可以用于通过USB从设备捕获数据。

在您的计算机上下载并安装Audacity。

安装完成后,打开应用程序,选择“MicNode”设备作为输入。

screen_shot_2021-05-18_at_4_32_14_pm_HkSJCRnwhk.jpg

单击记录⏺ 按钮开始录制的树莓派Pico音频。按下停止按钮⏹ 停止录制音频的按钮。

screen_shot_2021-05-20_at_9_22_28_am_LRt5C4tj0D.jpg

结论

我们创建了自己的USB麦克风使用树莓派Pico和外部PDM麦克风。树莓派RP2040的PIO、DMA和USB硬件功能都在本项目中使用,同时还使用了RP2040的Arm Cortex-M0+处理器上的OpenPDM2PCM和TinyUSB软件库。

我们的USB麦克风从PDM麦克风捕获PDM音频数据,将PDM数据转换为PCM格式,然后通过USB将PCM数据实时发送到PC!由于USB音频标准用于树莓派Pico板和PC之间的通信,因此PC端不需要定制软件。

当本指南通过USB将音频数据从树莓派 Pico传输到PC时,您还可以使用带有模拟或PDM麦克风的Pico麦克风库,并在没有PC的情况下执行设备上的数字信号处理(DSP)以响应电路板的音频环境。

附加树莓派RP2040资源

有关使用树莓派RP2040的更多教程,请查看以下项目:

How to add LoRaWAN to the Raspberry Pi Pico

Connect your Adafruit Feather RP2040 to The Things Network V3 using LoRaWAN

Enable Ethernet connectivity on your Raspberry Pi Pico

Low-power IoT intruder detector with the Raspberry Pi 4 and Pico

推荐阅读
关注数
5758
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息