电子发烧友App

硬声App

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

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

3天内不再提示
电子发烧友网>电子资料下载>电子资料>适用于Arduino MKR和XMC的I2S MEMS麦克风IM69D130

适用于Arduino MKR和XMC的I2S MEMS麦克风IM69D130

2023-02-08 | zip | 0.47 MB | 次下载 | 免费

资料介绍

描述

本文介绍如何将IM69D130 立体声麦克风 Shield2GoArduino MKR WiFi 1010 和两个为 Arduino IDE 启用的 Infineons 微控制器板、XMC4700 Relax Lite 套件XMC2Go 连接稍后,本项目将介绍如何使用I2S.h 库从麦克风接收音频数据。

1. 设置硬件

您可以在下方找到用于将 MEMS 麦克风 Shield2Go 与- 1.1 Arduino MKR WiFi 1010 - 1.2 XMC4700 Relax Kit - 1.3 XMC2Go控制器连接的引出线和连接。

1.1. Arduino MKR WiFi 1010 - I2S MEMS 麦克风 IM69D130

Arduino 和麦克风之间的连接可以通过使用跨接电缆和以下配置来建立:

麦克风 - Arduino MKR WiFi 1010

  • 3V3——3V3【红色】
  • GND - GND [蓝色]
  • BCLK - Pin2 (SCK) [黑色]
  • 数据 - PinA6 (SD) [黄色]
  • WCLK - Pin3 (FS/WS) [灰色]

 

arduino_mkr_wifi_1010_shield2go_memsmic_im69d130_steckplatine_ZrvNTCRLzI.png?auto=compress%2Cformat&w=740&h=555&fit=max
Arduino MKR WiFi 1010 有线连接到 MEMS 麦克风 Shield2Go
 

 

1.2. XMC4700 Relax Lite 套件 - I2S MEMS 麦克风 IM69D130

将麦克风与 XMC4700 连接的最简单方法是使用My IoT Adapter 此适配器可以直接连接到 XMC4700。要使用麦克风,请将其插入转接板的第一个插座,如下图所示。

 
 
 
img_20211220_130317_w6BvYxsAH0.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 3XMC4700 Lite 套件,带有连接的 MyIoTAdapter 和顶部的 MEMS 麦克风 Shield2Go
 

如果您没有 MyIoTAdapter,请不要担心,因为也可以将其连接起来。我们只需要 XMC4700 Lite 套件和一些电线。连接将按如下方式组装:

麦克风 - XMC4700 Lite 套件

  • 3V3——3V3【红色】
  • GND - GND [蓝色]
  • BCLK - Pin3.9 (SPI:SCK) [黑色]
  • 数据 - Pin3.7 (SPI:MISO) [黄色]
  • WCLK - Pin3.10 (SPI:SS) [灰色]
xmc4700_wire_memsmic_im69d130_1donWAhNgQ.png?auto=compress%2Cformat&w=740&h=555&fit=max
XMC4700 Lite 套件有线连接到 MEMS 麦克风 Shield2Go
 

1.3. XMC2Go - I2S MEMS 麦克风 IM69D130

这是所有介绍的配置中最小的一个。XMC2Go专为适应 Shield2Go 的布局构建,因此无需使用跨接电缆将麦克风连接到 XMC2Go 板。最简单的方法是将公头焊接到其中一块板上,将母头焊接到另一块板上,然后将它们连接起来,如图所示。(我们在 XMC2Go 上使用母头,在麦克风上使用公头。)

 
 
 
im69d130_s2go_w_xmc2go_JnwS8ROHoL.png?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 3XMC2Go 连接到 MEMS 麦克风 Shield2Go
 

也可以从 XMC2Go 到麦克风进行有线连接,但不建议这样做,因为所有有线连接都可能导致 I2S 连接出现错误。如果您仍然想要有线连接,请执行以下操作:

麦克风 - XMC2Go

  • 3V3-VSS【红色】
  • GND - VDD [蓝色]
  • BCLK - Pin0.8 (SPI:SCK) [黑色]
  • 数据 - Pin0.6 (SPI:MISO) [黄色]
  • WCLK - Pin0.9 (SPI:SS) [灰色]
xmc2go_im69d130_steckplatine_iQkCmGnuMC.png?auto=compress%2Cformat&w=740&h=555&fit=max
XMC2Go 有线连接到 MEMS 麦克风 Shield2Go
 

2. 设置软件

首先,我们需要一个可以正常运行的 Arduino IDE 安装,您可以在此处获取

2.1. Arduino MKR WiFi 1010

安装 IDE 后,我们必须将开发板添加到开发板管理器中。因此,单击工具菜单 -> 开发板 -> 开发板管理器并安装 Arduino SAMD 开发板(32 位 ARM Cortex-M0+)。为此,请在 Boards Manager 中单击,选择最新版本并单击安装。

之后,我们现在准备创建我们的第一个草图以使用 IM69D130 MEMS 麦克风 Shield2Go。

有关如何开始的更多信息,请查看此处。

从代码开始:

让我们快速浏览一下 Arduino 草图。这个草图的基本功能是从麦克风读取音频数据并处理它以通过 Arduino IDE 提供的串行绘图仪显示声压级。

首先,我们必须包含 I2S.h 库才能与麦克风通信

#include 

之后我们必须为 Arduino 进行设置。为了在串行监视器中显示麦克风的输出,我们必须设置一个串行连接。此外,我们必须使用库的 begin 函数建立 I2S 连接。

void setup() {
  // Open serial communications and wait for port to open:
  // A baud rate of 115200 is used instead of 9600 for a faster data rate
  // on non-native USB ports
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start I2S at 16 kHz with 32-bits per sample
  if (!I2S.begin(I2S_PHILIPS_MODE, 16000, 32)) {
    Serial.println("Failed to initialize I2S!");
    while (1); // do nothing
  }
}

在循环函数中,我们设置了一个整数变量数组。然后我们检查麦克风上 I2S 数据的可用性。之后,I2S 值从 I2S 缓冲区中读出并保存到我们的整数数组中。计算样本数组的平均值;为了标准化输出,我们从样本的每次迭代中减去平均值。然后我们计算样本的最小值和最大值。最后我们打印出它们之间的差异以显示基本压力水平。您可以在最后找到完整的代码。

void loop() {
  // read a bunch of samples:
  int samples[SAMPLES];

  for (int i=0; i    int sample = 0; 
    while ((sample == 0) || (sample == -1) ) {
      sample = I2S.read();
    }
    // convert to 18 bit signed
    sample >>= 14; 
    samples[i] = sample;
  }

  // ok we hvae the samples, get the mean (avg)
  float meanval = 0;
  for (int i=0; i    meanval += samples[i];
  }
  meanval /= SAMPLES;

  // subtract it from all samples to get a 'normalized' output
  for (int i=0; i    samples[i] -= meanval;
    //Serial.println(samples[i]);
  }

  // find the 'peak to peak' max
  float maxsample, minsample;
  minsample = 100000;
  maxsample = -100000;
  for (int i=0; i    minsample = min(minsample, samples[i]);
    maxsample = max(maxsample, samples[i]);
  }
  Serial.println(maxsample - minsample);
};>;>;>;>

2.2. XMC4700 Relax Lite 套件和 XMC2Go

现在我们来看看 XMC4700 Relax Lite 套件和 XMC2Go 的配置。

在这里,我们假设您有一个可以正常工作的 Arduino IDE,并且已将 XMC 库完全集成到 Arduino IDE 中。如果不是这种情况,请单击此处获取实施指南。

现在一切都应该设置好了,这样我们就可以查看代码了。这段代码的基本功能是从麦克风中读取音频数据并进行处理,通过Arduino IDE提供的串行绘图仪显示声压级。

从代码开始:

首先,我们必须包含 I2S.h 库才能与麦克风通信。

#include 

o 能够在串行监视器中显示麦克风的输出,我们必须设置串行连接。然后我们必须使用库的 begin 函数建立 I2S 连接。

在此之前,我们还禁用两个麦克风并仅启用其中一个,这样信号就不会失真。

void setup()
{
    // Open serial communication with a baudrate of 115200
    Serial.begin(115200);
    // Wait until the serial port is connected
    while (!Serial);

    I2S.disableMicrophones();
    // Enable the microphone when word select is high
    I2S.enableMicrophoneHigh();

    // Start I2S at 11 kHz with 16 bits per sample
    if (I2S.begin(I2S_PHILIPS_MODE, 11000, 16) != 0)
    {
        Serial.println("Failed to initialize I2S!");
        // Do nothing and wait
        while (true);
    }
}

循环函数如下所示。首先,我们创建一个包含 128 个条目的示例数组。当缓冲区中保存了 128 个或更多样本时,我们将读取这些值并将它们保存到我们之前创建的数组中。然后计算平均值并从所有样本中减去平均值以标准化输出。之后计算最小和最大样本,然后打印到串行绘图仪中。您可以在最后找到完整的代码。

void loop()
{
    // Array to store the samples
    int32_t samples[128];
    if (I2S.available() > 128)
    {
        // Read 128 samples into the array
        I2S.read(samples, 128);

        float meanValue = 0;
        for (int i = 0; i < 128; i++)
        {
            meanValue += samples[i];
        }
        meanValue /= 128;

        // Substract it from all samples to normalize output
        for (int i = 0; i < 128; i++)
        {
            samples[i] -= meanValue;
        }

        // Get the peak to peak maximum
        float maxSample, minSample;
        minSample = 100000;
        maxSample = -100000;
        for (int i = 0; i < 128; i++)
        {
            minSample = min(minSample, samples[i]);
            maxSample = max(maxSample, samples[i]);
        }
        Serial.println(maxSample - minSample);
    }   
}

3. 串行绘图仪的配置和输出

要访问绘图仪,请转到Tools -> Serial Plotter 有必要选择我们在代码中设置的相同波特率。可以在串行绘图仪的左下角选择波特率。在我们的例子中,Arduino MKR Wifi 1010的波特率为 115200 ,XMC4700 Relax Lite 套件和 XMC2Go 的波特率为 1000000 。如果您遇到输出未正确显示的问题,您可以随时尝试调整波特率、频率和每个样本的位数。

在查看串行绘图仪的输出时,它可能如下所示:

arduino_ide_plotter_zebuDBqQqa.png?auto=compress%2Cformat&w=740&h=555&fit=max
播放歌曲介绍时的 Arduino IDE 绘图仪。
 

在这张图片中,我们可以在播放歌曲前奏时看到 Arduino IDE 绘图仪。绘图仪显示了整体歌曲音量的上升,高峰是歌曲的节拍。为了能够看到声级的大尖峰,您可以打响指或敲桌子。

如果你得到一个恒定的模糊图,没有明显的尖峰,这是由你的敲击或折断引起的,那么你的数据线连接可能有故障。要解决此问题,请尝试建立更短的电缆、焊接触点或使用屏蔽电缆以确保没有任何东西干扰数据连接。

4. 扩展阅读和更多示例

我们希望您能够遵循我们在此处提供的所有示例和代码片段。如果您对 IM69D130 MEMS 麦克风 Shield2Go 的更多示例和用例感兴趣,您可以查看其GitHub 存储库

如果您想知道如何将此扩展板与 Raspberry-Pi 一起使用,请查看我们关于该主题的其他hackster.io 文章。

此外,如果您想通过 Edge Impulse 将麦克风用于机器学习项目,您可以查看这篇hackster.io 文章


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费