一、硬件介绍
1、产品特点
Arduino Nicla Vision 搭载STM32H747AII6 双核芯片(Cortex-M7_480MHz + Cortex-M4_240MHz),板载六轴智能运动传感器、集成麦克风和距离传感器、Wi-Fi和蓝牙模块、以及一个200万的彩色摄像头; 
特性

系统框图

功率

二、数字麦克风 (MP34DT06JTR)
MP34DT06 数字MEMS全向麦克风,通过电容感测元件工作,信噪比高(64 dB),该感应元件能够检测声波,Nicla Vision 的内置高性能麦克风是MP34DT06JTR;

特性
122.5dBSPL AOP
64dB SNR
全向灵敏度
–26dBFS±1dB灵敏度
PDM输出
原理图

三、代码编写
通过板载PDM数字麦克风中实时采集音频数据,并通过串口将原始音频采样值输出;
采用 单声道 模式,采样率为 16 kHz;
#include <PDM.h>
// 默认输出通道数 (单声道)
static const char channels = 1;
// 默认 PCM 输出采样率
static const int frequency = 16000;
// 用于存储采样数据的缓冲区,每个采样为 16位
short sampleBuffer[512];
// 已读取的音频采样数量
volatile int samplesRead;
void setup() {
Serial.begin(115200);
while (!Serial);
// 配置 PDM 数据接收完成时的回调函数
PDM.onReceive(onPDMdata);
// 初始化 PDM 麦克风:
if (!PDM.begin(channels, frequency)) {
Serial.println("启动 PDM 失败!");
while (1);
}
}
void loop() {
if (samplesRead) {
for (int i = 0; i < samplesRead; i++) {
Serial.println(sampleBuffer[i]);
}
// 清空已读采样计数,等待下一批数据
samplesRead = 0;
}
}
// PDM接收完成时的回调函数
void onPDMdata() {
// 查询当前可用的字节数
int bytesAvailable = PDM.available();
// 从 PDM 接口读取数据到缓冲区
PDM.read(sampleBuffer, bytesAvailable);
// 每个采样占 2字节
samplesRead = bytesAvailable / 2;
}
我要赚赏金
