MSM261S4030H0R+ESP32-S3数字麦克风简单测试
MSM261S4030H0R+ESP32-S3数字麦克风简单测试
目录
前言
一、数字麦克风?
1.工作原理
2.优势
3.应用
4.选择考虑
二、测试过程
1.硬件
2.软件
总结
前言
本文主要展示数字麦克风型号(MSM261S4030H0R)简单测试,可能需要先了解关于I2S总线知识点。测试环境使用Arduino IDE架构,主控为ESP32-S3开发板。
一、数字麦克风?
数字麦克风是一种将声音信号转换为数字信号的设备,广泛应用于现代电子设备中,如智能手机、笔记本电脑、智能音箱等。以下是关于数字麦克风的一些基本信息:
1.工作原理
- MEMS 技术:大多数现代数字麦克风使用微机电系统(MEMS)技术。这种技术允许在微小的芯片上集成机械和电子元件。
- 信号转换:数字麦克风将声波转换为电信号,然后通过模数转换器(ADC)将其转换为数字信号。这个过程通常在麦克风内部完成。
- 输出格式:数字麦克风通常输出 PDM(脉冲密度调制)或 I2S(集成电路声频)格式的信号。PDM 是一种简单的数字信号格式,而 I2S 是一种更复杂的音频数据传输标准。
2.优势
- 抗干扰能力强:数字信号在传输过程中不易受到电磁干扰的影响,相比模拟信号更稳定。
- 集成度高:由于 MEMS 技术的应用,数字麦克风可以在非常小的封装中集成多个功能模块,如放大器和 ADC。
- 一致性好:数字麦克风的生产工艺使得其性能参数在不同批次之间具有较高的一致性。
- 低功耗:适合电池供电的便携设备。
3.应用
- 消费电子:如智能手机、平板电脑、笔记本电脑等。
- 智能家居设备:如智能音箱、语音助手。
- 汽车电子:用于语音识别和降噪系统。
- 工业和医疗设备:用于声音检测和分析。
4.选择考虑
在选择数字麦克风时,需要考虑以下几个因素:
- 信噪比(SNR):信噪比越高,麦克风的音质越好。
- 灵敏度:决定了麦克风对声音的响应程度。
- 频率响应:影响麦克风能捕捉的声音频率范围。
- 封装尺寸:根据应用场景选择合适的尺寸。
- 功耗:对于电池供电的设备,低功耗是一个重要的考虑因素。
数字麦克风的广泛应用和不断进步的技术使其成为现代音频设备中不可或缺的组件。
二、测试过程
1.硬件
先来看看这次测试硬件吧!
注意:从图1中可以看到电阻R108,R109 这里左/右通道选择。当设置为低时,麦克风在左通道输出信号,I²S坐标系;当设置高时,麦克风在正确的通道输出信号。MSM261S4030H0R是一种全向麦克风。
图2是麦克风引脚功能说明(图2来自DataSheet)
ESP32-S3 ------I2S-------- MSM261S4030H0R
GPIO41--------i2s---------- SCK
GPIO2 ---------i2s--------- SDO
GPIO42----------i2s-------- WS
这里通信引脚不一定要和一样!
ESP32S3上I2S总线引脚是非常灵活的。
2.软件
硬件我们大概了解了! 现在让我们看看软件吧!
/**
* @file main.cpp
* @author Jonnie Walker iTE
* @brief MSM261S4030H0R——Test
* @version 0.1
* @date 2024-12-1
*
* @copyright Copyright (c) 2024
*
*/
#include <driver/i2s.h>
#define I2S_WS 42 // Word Select (WS) pin
#define I2S_SD 2 // Serial Data (SD) pin
#define I2S_SCK 41 // Serial Clock (SCK) pin
void setup() {
Serial.begin(115200);
// Configure I2S
i2s_config_t i2s_config = {
.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX),
.sample_rate = 16000,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false,
.tx_desc_auto_clear = false,
.fixed_mclk = 0
};
i2s_pin_config_t pin_config = {
.bck_io_num = I2S_SCK,
.ws_io_num = I2S_WS,
.data_out_num = I2S_PIN_NO_CHANGE,
.data_in_num = I2S_SD
};
// Install and start I2S driver
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
i2s_set_pin(I2S_NUM_0, &pin_config);
}
void loop() {
int16_t i2s_data[64];
size_t bytes_read;
// Read data from I2S
i2s_read(I2S_NUM_0, &i2s_data, sizeof(i2s_data), &bytes_read, portMAX_DELAY);
// Print the audio data to Serial Monitor
for (int i = 0; i < bytes_read / 2; i++) {
Serial.println(i2s_data[i]);
}
delay(100);
}
这个程序是用来在 ESP32 上配置和使用 I2S 接口以接收音频数据的。
分析:
1.int16_t i2s_data[64]:定义一个数组用于存储从 I2S 接收到的音频数据。
2.i2s_read:从 I2S 接口读取音频数据,存储到 i2s_data 数组中,bytes_read 存储读取的字数。
3.数据输出:将读取的音频数据通过串口输出到串口监视器。
4.delay(100):延迟 100 毫秒,控制读取和输出的频率。
5. 总结:
这个程序配置 ESP32 的 I2S 接口以接收音频数据,并通过串口监视器输出接收到的音频样 本。它适用于需要从 I2S 音频设备(如麦克风)获取数据的应用。
程序是不是非常非常简单!
**将程序编译通过USB下载到开发板,让我们看看输出数据如下:**
图2-2
由于程序中输出数据没有经过优化处理在加上环境噪音影响导致数据波动非常大,从图2-2中看不出麦克风是否正常采集数据。
然后对着麦克风吹气,就会看到图3-3数据变化情况
图3-3
可以看到图3-3中数据变化非常明显,说明麦克风正常工作。为了确定没有问题这里尝试多次!
感谢阅读!
在现今电子市场数据麦克风应用非常广泛。数字麦克风也有很多型号不一定要使用本文提到的麦克风。
总结
本文主要讲数字麦克风简单应用与测试,通过ESP32S3的I2S总线读取麦克风数据,然后通过串口输出数据。由于I2S内容非常多这里就不仔细讲!希望本文对你有所帮助。iTEM