0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用树莓派Pico制作USB麦克风

jf_zGNBEhbi 来源:趣无尽 2023-08-17 10:12 次阅读

becf8d38-3ca2-11ee-ac96-dac502259ad0.jpg

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 位值,用于表示该样本的音频数据。

bef33dd2-3ca2-11ee-ac96-dac502259ad0.jpg

为了使数据更直观,你可以使用逻辑分析仪(比如 https://www.saleae.com/)来查看 PDM CLK 和 DAT 信号。

bf053334-3ca2-11ee-ac96-dac502259ad0.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 个 16 位 https://en.wikipedia.org/wiki/Pulse-code_modulation(PCM)音频样本。
5. 最后,将 16 个 PCM 音频样本通过 USB 接口发送到电脑

bf1294a2-3ca2-11ee-ac96-dac502259ad0.jpg

硬件设置

你需要在树莓派 Pico 和 Adafruit PDM MEMS 麦克风拓展版上焊接排针,以便把它们插在面包板上。如果要了解更多关于焊接排针的细节,请参阅 MagPi 网站的 https://magpi.raspberrypi.org/articles/how-to-solder-gpio-pin-headers-to-raspberry-pi-pico 指南。

焊接完这两个部分后,把它们放在面包板上,并按以下方式设置接线:

bf31b5f8-3ca2-11ee-ac96-dac502259ad0.jpg

+---------+-------------------+
| PDM Mic | Raspberry Pi Pico |
|---------+-------------------|
|    3V   |        3V3        |
|---------+-------------------|
|    GND  |        GND        |
|---------+-------------------|
|    SEL  |        GND        |
|---------+-------------------|
|    DAT  |       GPIO2       |
|---------+-------------------|
|    CLK  |       GPIO3       |
+---------+-------------------+

注意:把 PDM Mic. SEL 连接到 GND 接口会导致它在时钟信号下降(从逻辑电平 1 变为 0)后输出新数据。

bf3f4ad8-3ca2-11ee-ac96-dac502259ad0.jpg

设置 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” 的新麦克风设备:

bf57d710-3ca2-11ee-ac96-dac502259ad0.png

录制音频数据

现在我们已经把树莓派 Pico 开发板配置为 USB 麦克风,只需安装录音软件就能通过 USB 接口获取音频数据。本文中以 https://www.audacityteam.org/为例。

https://www.audacityteam.org/download/并安装 Audacity。安装完成后,打开 Audacity,然后选择 “MicNode” 作为输入设备。

bf693690-3ca2-11ee-ac96-dac502259ad0.jpg

你可以点击“录制” 按钮开始为录制音频,并在需要停止时按下“停止” 按钮。

bf89acfe-3ca2-11ee-ac96-dac502259ad0.png

总结

我们使用树莓派 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

    文章

    6809

    浏览量

    147637
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343620
  • 麦克风
    +关注

    关注

    14

    文章

    596

    浏览量

    54195
  • usb
    usb
    +关注

    关注

    59

    文章

    7432

    浏览量

    258164
  • 树莓派
    +关注

    关注

    113

    文章

    1639

    浏览量

    104741

原文标题:使用树莓派 Pico 制作 USB 麦克风

文章出处:【微信号:趣无尽,微信公众号:趣无尽】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎么连接麦克风

    连接麦克风的时候把正负极接反了,会不会把麦克风给烧坏掉,急急急;该怎么检测,请指教。
    发表于 08-01 09:16

    为什么需要麦克风阵列?

    消费级麦克风阵列的兴起得益于语音交互的市场火热,主要解决远距离语音识别的问题,以保证真实场景下的语音识别率。这涉及了语音交互用户场景的变化,当用户从手机切换到类似Echo智能音箱或者机器人的时候
    发表于 07-28 14:25

    麦克风阵列介绍

    1 麦克风阵列麦克风阵列,是一组位于空间不同位置的全向麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的一种装置,采集到的信号包含了其空间位置信息。根据声源和麦克风
    发表于 08-08 18:43

    了解麦克风灵敏度

    Jerad Lewis灵敏度,即模拟输出电压或数字输出值与输入压力之比,对任何麦克风来说都是一项关键指标。在输入已知的情况下,从声域单元到电域单元的映射决定麦克风输出信号的幅度。本文将探讨模拟麦克风
    发表于 10-22 16:57

    麦克风技术规格解析

    作者 :Jerad Lewls简介在 ADI 公司的众多产品中,MEMS 麦克风 IC 的独特之处在于其输入为声压波。因此,这些器件的数据手册中包括的某些技术规格可能不为大家所熟悉,或者虽然熟悉,但
    发表于 11-01 11:26

    微机电系统 (MEMS) 麦克风ICS-40212

    AmplifiersSABRE9018Q2C 手机、USB DAC Headphone AmplifiersICS-43434麦克风ICS-43432麦克风ICS-41350麦克风I
    发表于 11-08 10:13

    MEMS与ECM:比较麦克风技术

    从可穿戴设备到家庭助理,越来越多的设备利用麦克风准确捕捉几乎任何声音。麦克风构造中最常用的两种技术是微机电系统(MEMS)麦克风和驻极体电容式麦克风(ECM),其中任何一种都有许多用例
    发表于 02-23 14:05

    PIC32MZ怎么与USB麦克风交互

    我有一个PIC32 MZ2048 EFH144。我也有一个USB麦克风,我直接连接到PIC32 MZ。我试图使用和声,并使用一个示例项目(USB麦克风),但似乎PIC32 MZ不支持该
    发表于 04-30 07:53

    如何录制多个麦克风通​​道

    是否可以使用STEVAL-MKI129V3,STEVAL-MKI138V1和STEVAL-MKI126V3的组合在USB上录制多个麦克风通​​道(多于立体声)? #STEVAL-板换MEMS的麦克风
    发表于 07-17 09:53

    麦克风灵敏度探讨

    作者: Jerad Lewis灵敏度, 即模拟输出电压或数字输出值与输入压力之比,对任何麦克风来说都是一项关键指标。在输入已知的情况下,从声域单元到电域单元的映射决定麦克风输出信号的幅度。 本文将
    发表于 07-23 07:51

    MEMS麦克风设计方法及关键特性

    的前端是麦克风,它检测语音和其他环境噪声。因此,改善音频捕捉可以提高信号链整体的性能并降低功耗。麦克风是把声学信号转换为电信号以供助听器音频信号链处理的传感器。有许多技术可用于这种声电转换,但电容麦克风
    发表于 11-05 08:00

    树莓pico如何入门?

    树莓pico如何入门?
    发表于 10-13 08:11

    怎样去设计一种基于esp8266+树莓+u***麦克风的智能音箱呢

    怎样去设计一种基于esp8266+树莓+u***麦克风的智能音箱呢?如何去实现呢?
    发表于 02-24 07:34

    驻极体麦克风电路

    三pin的驻极体麦克风和两pin的驻极体麦克风可以共用电路吗,就如下图,是2pin的麦克风假差分电路,那如果是三pin的麦克风,应用于这个电路中,引脚该怎么接呢
    发表于 04-14 11:21

    基于树莓pico的FM接收器

    到 Raspberry Pi Pico 的 GPIO26(ADC 引脚)和右扬声器输出连接到 GPIO27(ADC 引脚),这将允许用户使用 Raspberry pi Pico 作为任何 PC 或笔记本电脑的麦克风输入
    发表于 07-08 07:56