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

    文章

    8249

    浏览量

    162384
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18606

    浏览量

    387063
  • 麦克风
    +关注

    关注

    16

    文章

    686

    浏览量

    57285
  • usb
    usb
    +关注

    关注

    60

    文章

    8372

    浏览量

    281699
  • 树莓派
    +关注

    关注

    122

    文章

    2069

    浏览量

    109709

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    无线调频麦克风的设计和制作

    无线调频麦克风的设计和制作
    发表于 05-27 11:27 5664次阅读
    无线调频<b class='flag-5'>麦克风</b>的设计和<b class='flag-5'>制作</b>

    怎么连接麦克风

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

    PIC32MZ怎么与USB麦克风交互

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

    怎样去设计一种基于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

    数字麦克风原理与应用

    数字麦克风介绍
    发表于 08-08 11:46 39次下载

    麦克风阵列原理与应用

    麦克风阵列原理与应用
    发表于 08-08 11:43 64次下载

    麦克风的工作原理及制作注意事项

    麦克风学名为传声器,是将声音信号转换为电信号的能量转换器件,麦克风由最初通过电阻转换声电发展为电感、电容式转换,大量新的麦克风技术逐渐发展起来,这其中包括铝带、动圈等麦克风,以及当前广
    的头像 发表于 07-05 14:28 4.5w次阅读
    <b class='flag-5'>麦克风</b>的工作原理及<b class='flag-5'>制作</b>注意事项

    何为MEMS麦克风

    所有麦克风(传统麦克风和MEMS麦克风)都通过柔性膜片感应声波。在声波压力下,膜片会发生位移。现在市场上大部分MEMS麦克风都使用电容技术来探测声音。电容式MEMS
    的头像 发表于 06-01 15:07 1.1w次阅读
    何为MEMS<b class='flag-5'>麦克风</b>?

    科大讯飞麦克风阵列模块 麦克风设计参考手册

    科大讯飞麦克风阵列模块 麦克风设计参考手册
    发表于 11-04 09:47 224次下载

    教学麦克风为什么推荐使用UHF教学麦克风

    教学麦克风作为教学设备,抗干扰和噪音是评价教学麦克风的首要标准。2.4G是全球通用的,不会受频道所限制,然而缺点也是非常明显,那就是信号干扰多。2.4G应用广泛,如蓝牙,WIFI都是使用2.4G传输
    的头像 发表于 03-31 18:44 4352次阅读
    教学<b class='flag-5'>麦克风</b>为什么推荐使用UHF教学<b class='flag-5'>麦克风</b>?

    使用树莓Pico开发板制作实时音频光谱图可视化器

    本期教程将会通过使用一块带有外置数字麦克风和 TFT LCD 显示屏的树莓 Pico 开发板制作一个实时音频光谱图可视化器。有了它,你就可
    的头像 发表于 10-24 10:49 4091次阅读
    使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>开发板<b class='flag-5'>制作</b>实时音频光谱图可视化器

    高性能USB麦克风解决方案

    高性能USB麦克风的设计思路是将专业录音室级别的音质带到日常使用中,同时保持使用的简便性。传统的专业麦克风通常需要外部音频接口和复杂的设置,而USB
    的头像 发表于 08-21 19:50 1376次阅读
    高性能<b class='flag-5'>USB</b><b class='flag-5'>麦克风</b>解决方案

    什么是麦克风阵列

    什么是麦克风阵列?想象一下一个小型音响部队在你面前,它们站成一排,用不同的麦克风捕捉声音。这就是麦克风阵列的基本概念。麦克风阵列由多个麦克风
    的头像 发表于 11-30 01:08 2656次阅读
    什么是<b class='flag-5'>麦克风</b>阵列