【Follow me第二季第4期】PDM 麦克风
# 【Follow me第二季第4期】PDM 麦克风Nano RP2040 connect 配有 **MP34DT06JTR** 麦克风,可用于录制音频。
本文介绍的项目实现:当录制到响亮的噪音(如打响指)时,打开或关闭内置的 RGB LED。
所需硬件:(https://store.arduino.cc/nano-rp2040-connect) 开发板、板载 MP34DT06JTR 麦克风传感器。
Arduino IDE 需安装 PDM 库。
详见:(https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-microphone-basics/) .
## PDM 介绍
麦克风是将物理声音转换为数字数据的组件。
环境声音振动压缩空气,导致不同位置的空气密度分布存在差异,由此带来空气分子的波动传输,鼓膜线圈受到空气波动的影响而振动,线圈切割中心磁铁产生的磁感线,并形成感应电流,该感应电流经放大电路放大为模拟信号,传递给 MCU 模数转换器 ADC ,并转化为数字信号并通过串口输出。
麦克风通常用于移动终端、语音识别系统,甚至游戏和虚拟现实输入设备。
MP34DT06JTR 传感器是一种超小型麦克风,它使用 PDM(pulse density mdulation, 脉冲密度调制)来表示具有二进制信号的模拟信号。传感器的不同值范围如下:
- 信噪比:64 dB
- 灵敏度:-26 dBFS ±3 dB
- 温度范围:-40 至 85°C
微机电系统或 MEMS 是使用最初为集成电路 (IC) 开发的技术在硅上蚀刻和制造的。 二十世纪 90 年代以来,MEMS 技术创造了各种传感器和其他机电设备,包括麦克风。
MEMS 麦克风的封装如图所示,麦克风和单独的 ASIC(专用集成电路)组合在同一个封装中,通过引线键合连接。
MEMS 麦克风采用类似 IC 的封装,用于表面贴装组装。声音由顶端开口进入感知器。
**MEMS 数字输出**
具有数字输出的 MEMS 麦克风执行 ADC,将放大的模拟音频信号转换为数字信号。
使用delta-sigma 转换来产生 PDM(脉冲密度调制)输出,如图所示。
当音频信号较高时,高脉冲(蓝色)具有较高的密度。
## 代码
```c++
#include <PDM.h>
// default number of output channels
static const char channels = 1;
// default PCM output frequency
static const int frequency = 16000;
// Buffer to read samples into, each sample is 16-bits
short sampleBuffer;
// Number of audio samples read
volatile int samplesRead;
void setup() {
Serial.begin(9600);
while (!Serial);
// Configure the data receive callback
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1);
}
}
void loop() {
// Wait for samples to be read
if (samplesRead) {
// Print samples to the serial monitor or plotter
for (int i = 0; i < samplesRead; i++) {
if(channels == 2) {
Serial.print("L:");
Serial.print(sampleBuffer);
Serial.print(" R:");
i++;
}
Serial.println(sampleBuffer);
}
// Clear the read count
samplesRead = 0;
}
}
void onPDMdata() {
// Query the number of available bytes
int bytesAvailable = PDM.available();
// Read into the sample buffer
PDM.read(sampleBuffer, bytesAvailable);
// 16-bit, 2 bytes per sample
samplesRead = bytesAvailable / 2;
}
```
### 流程图
## 效果
安静状态串口输出数据测试
噪声状态下的数据输出测试
动态显示由 **安静** 到 **噪声** 再到 **安静** 状态的数据曲线
可见噪声状态下的数据值在 10000 以上,而安静状态仅为 100,灵敏度为 100 倍,可用作环境噪声监测。
### 音频波形
将音响设备对准板载 PDM 传感器,串口输出捕获的音频数据。
从曲线的变化可以看出,当警报声响起时,波形发生明显变化。 <p>测试了一下,感觉手机播放的声音就不容易被路上,可能主频不一样,说话的声音反应就比较明显</p>
秦天qintian0303 发表于 2024-12-4 10:43
测试了一下,感觉手机播放的声音就不容易被路上,可能主频不一样,说话的声音反应就比较明显
<p><span style="font-size:18px;">我用手机播放警报声,需要开大点声,曲线变化才明显,比如下面这个波形的声音</span></p>
<p style="text-align: center;"><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">显示出来是这样</span></p>
<div style="text-align: center;"><span style="font-size:18px;"></span></div>
<p><span style="font-size:18px;">我这里没有采样数更多的串口绘图工具了,不过可以用LabVIEW或MATLAB制作个串口读取工具……</span></p>
lijinlei 发表于 2024-12-4 12:15
我用手机播放警报声,需要开大点声,曲线变化才明显,比如下面这个波形的声音
显示出来是 ...
<p>可能是频段有要求,个人感觉比说话声音大,不过波形不明显</p>
页:
[1]