【Follow me第二季第4期】任务三:学习并调试PDM麦克风,通过串口打印收音数据和音频
[复制链接]
本帖最后由 mingzhe123 于 2024-12-6 23:05 编辑
1、麦克风简介
自19世纪末现代麦克风引入以来,由于其在消费、医疗和汽车应用中的广泛和不断发展的应用,麦克风取得了巨大的进步。
Johann Philipp Reis 和 Alexander Graham Bell 被认为是第一批麦克风的发明者。这些早期原型产生的电信号幅度低,频率范围有限。因此,声音质量很低,设备几乎无法重现清晰的语音。功能性麦克风的发展归功于 Thomas Edison、Emile Berliner 和 David Edward Hughes。他们的碳麦克风后来主导了市场。Edison 和 Berliner 分别宣布了他们的发明(当时称为发射器),并在美国争夺专利权。在英国,Hughes 向伦敦皇家学会展示了类似的设备,并创造了“麦克风”一词,尽管他没有申请专利。电信行业迅速认识到麦克风在其系统中的潜力,并推动了技术创新。碳麦克风的各种变体在20世纪20年代到80年代的电话中被广泛使用。随着电信和音乐产业的快速发展,其他形式的转换机制不断被开发和应用于电信系统。电容麦克风于1916年引入,目前在市场上占主导地位。最新的种类是基于光学和自旋电子的麦克风。
麦克风中使用了多种转换机制来将声波转换为电信号,如电磁(电动)、压阻、压电、光学、自旋电子和电容。
第一种机制是电磁麦克风。它由一个在固定磁场中移动的线圈组成,产生交流电,即电输出。线圈连接到根据声学输入振动的薄膜片。碳麦克风和带状麦克风是这种类型的变体。电磁麦克风由于重的膜片和线圈的缓慢振动速度而存在灵敏度问题。
第二种机制称为压阻麦克风。它的工作原理如下:在声学膜片上有四个电阻连接在惠斯登电桥中。当声波引起的压力作用于膜片时,膜片发生偏转。相应地,四个电阻的应力相关值也发生变化。惠斯登电桥根据这些电阻值之间的差异产生输出电压。压阻麦克风的缺点是动态范围和灵敏度相对较低,但仍然被用于许多应用中。
第三种机制称为压电麦克风。它利用压电原理将声波的机械振动转换为电信号。为此,研究人员通常使用氮化铝和氧化锌作为制造薄膜片的压电材料。由于这种材料的刚性,这种麦克风最初用于放大乐器的接触振动。由于其先进性能,它具有更多样化的应用。
第四种机制是光学或光纤麦克风,它使用光源照射薄膜片。光检测器用于检测光的强度和波长。当声波使膜片振动时,记录并进一步转换为电信号的原始光源和反射光源之间的差异。光学麦克风的主要优点是不受电噪声和电磁干扰的影响。缺点是检测系统的复杂性,导致成本较高。它在医疗应用和高保真录音中有着利基市场。
第五种机制是自旋电子麦克风,基于磁阻转换。它旨在解决困扰压阻麦克风的低灵敏度问题。自旋应变计传感器(SGS)取代了声学膜片顶部的电阻。这种自旋SGS基于磁隧道结效应,具有很高的灵敏度。
第六种机制称为电容麦克风,它通过可移动和固定板之间的电容变化来工作。薄膜片代表可移动板。声波使其振动,从而成比例地改变电容值。需要一个电压源来将板偏置到固定电压。驻极体麦克风是一种特殊类型的电容麦克风,通过驻极材料在其板之间保持永久偏置。由于其良好的性能、低成本和易于制造,驻极体麦克风成为最具商业制造的麦克风类型,在其生产高峰期每年生产超过十亿个单位。
麦克风制造中的主要技术进步是微机电系统(MEMS)电容麦克风的引入。MEMS麦克风的关键部分是一个微型硅芯片,它结合了声学传感器和处理电子设备。MEMS麦克风的优点包括尺寸小、成本低、性能高、制造工艺成熟、环境耐受性好等。因此,它们已成为智能手机、平板电脑、智能手表、助听器、可穿戴设备和物联网(IoT)设备的理想选择。
2、MEMS麦克风
MEMS麦克风的核心是一个微型电容器,由一个可移动的振膜和一个固定的背板组成。振膜对声波产生的压力敏感,并且在声波的作用下发生振动。背板通常具有多个小孔,以允许空气通过并减少气流对振膜的阻力。当振膜振动时,振膜与背板之间的距离变化,从而导致电容值的变化。这种电容变化被转换为电信号,并通过电子电路进行处理和放大。下图显示了典型MEMS电容麦克风的结构示意图。
具体来说,MEMS电容麦克风通常包含以下几个主要部分:
振膜:通常由硅、氮化硅或聚合物材料制成,具有良好的机械强度和灵敏度。
背板:通常是一个带有孔洞的刚性结构,允许声波通过,并且通常由硅或金属材料制成。
腔室:提供振膜和背板之间的空气间隙,影响麦克风的频率响应和灵敏度。
偏置电压:施加在振膜和背板之间,用于检测电容变化。
那么MEMS 麦克风如何工作?
其实,模拟与数字麦克风输出。所有麦克风都以模拟音频信号开始,并使用前置放大器(有时称为缓冲器)将音频提升到可用但仍然很低的水平。
对于模拟输出的MEMS麦克风,将增强信号直接发送到输出。有两种输出类型——单端和差分。差分系统有两个输出,彼此相位差 180 度。模拟麦克风有三个或四个引脚:电源、公共(接地)和一个或两个输出,具体取决于输出是单端还是差分。
电源始终由单个正电源提供。这会在输出端产生直流偏移,该偏移应由电容器去耦,如下图所示。
电源电压通常在 1.8 和 3.5 V 之间,典型的直流偏移在 0.8 到 1.5 V 之间。
而对于数字输出MEMS麦克风。MEMS 麦克风执行模数 (A/D) 转换,将放大的模拟音频信号转换为数字信号。大多数使用delta-sigma 转换来产生 PDM(脉冲密度调制)输出,如图 3下图所示。
脉冲密度调制。当音频信号较高时,高脉冲(蓝色)具有较高的密度。
脉冲密度(即逻辑高脉冲的百分比)与电压成正比。这不是你通常认为的数字,因为没有创建数字词,只是脉冲。尽管通常使用微处理器程序或音频 CODEC(编码器/解码器),但只需将脉冲流通过低通滤波器即可对其进行解码。
大多数数字输出 MEMS 麦克风有五个引脚,如图 4下图所示:
-
电源
-
共同点)
-
输出
-
时钟输入
-
L/R(左/右)选择
L/R 选择如何工作?如果连接为高电平(左),则 A/D 输出在时钟变高后发送。如果低,则数据跟随低时钟转换。这样,左右输出可以通过同一条数据线发送。
一些麦克风使用最初由飞利浦半导体(现为恩智浦半导体)创建的I2S(Inter-IC Sound)标准。与 PDM 一样,它有一个时钟和 L/R 选择输入,但输出是数字字,而不是调制脉冲。同样,与 PDM 一样,它可以通过微处理器软件或 I2S CODEC 解码。此外,它不能被低通滤波器解码。
那么什么是I2S标准?什么是PDM标准?
I2S——Inter-IC Sound,Integrated Interchip Sound,又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。采用了独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真。
1. I2S总线构成和连接方式
支持全双工和半双工模式;支持主、从模式;
I2S总线一般由1根系统时钟线和3根信号线组成:
MCLK:称为主时钟,也叫系统时钟(Sys Clock),一般为了使系统间能够更好地同步时增加MCLK。
SCLK(BCLK):串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1一个脉冲。
LRCK:帧时钟LRCK,也称(WS),用于切换左右声道的数据。
SDATA(SD):就是用二进制补码表示的音频数据。最高位拥有固定的位置,而最低位的位置则是依赖于数据的有效位。
2. 采样率,LRCK、BCLK、MCLK频率对应关系
I2S的比特率即确定了在I2S数据线上的数据流和I2S的时钟信号频率。
I2S比特率 = 每个声道的比特数 × 声道数目 × 音频采样频率
采样:
就是间隔一定得时间对模拟信号做一个取样。比如间隔0.001秒采一个样,这样采样频率(Fs)就是:
Fs = 1 / 0.001 = 1KHz
要多大采样率才可以还原一个模拟信号,这个涉及到数字信号处理原理(奈奎斯特定理)。采样频率Fs大于信号中最高频率fmax 的2倍时(Fs > 2fmax ),采样之后的数字信号完整地保留了原始信号中的信息。
人耳听到的音频范围是20Hz~20KHz,如果对人耳听力范围内的音频数字化,fmax = 20KHz,Fs > 40KHz的采样率44.1KHz就是高保真了。它能覆盖人耳听到的所有声音。
MLCK:
主时钟(独立映射),在I2S配置为主模式,寄存器SPI_I2SPR的MCKOE位为“1”时,作为输出额外的时钟信号引脚使用。输出时钟信号的频率预先设置为256 × Fs,其中Fs是音频信号的采样频率。
MCLK的频率 = 128或者256或者512 * 采样频率
SCLK:
SCLK的频率 = 声道数 * 采样频率 * 采样位数
LRCK:
LRCK的频率 = 采样频率
3. I2S、左对齐、右对齐的含义
随着技术的发展,在统一的I2S硬件接口下,出现了多种不同的I2S数据格式,可分为:
①I2S Philips标准 ②左对齐(MSB)标准 ③右对齐(LSB,也叫日本格式、普通格式)标准
PDM(Pulse Density Modulation)
特点:
PDM是一种脉冲密度调制技术,通过高频脉冲表示音频信号的密度,常用于低功耗、低成本的音频设备,如MEMS麦克风。PDM信号在接收端需要通过滤波和解码才能转换为标准的PCM格式音频数据。
信号线说明:
PDM是一种最常见的数字麦克风接口。这种接口允许两个麦克风共享一个公共的时钟与数据线
时钟线(CLK):
提供用于调制和解调的基准时钟,PDM数据是同步于这个时钟进行传输的。
作用:保证PDM信号的时序同步。例如,在智能手机中,时钟线驱动麦克风和音频处理器的同步工作,确保音频数据的准确传输。
数据线(DATA):
传输密度调制的脉冲信号,表示音频信号的高低频成分。
作用:传输实际的PDM音频数据。例如,在便携式录音设备中,数据线传输从麦克风采集到的高频脉冲信号,代表音频信号的瞬时值。
应用举例:
智能手机:PDM接口用于连接低功耗MEMS麦克风,音频信号通过时钟线和数据线传输到音频处理器,进行语音识别和通话,适合长时间待机的智能手机应用。
3、MP34DT06JTR
在Arduino® Nano RP2040 Connect中使用的麦克风型号为MP34DT06JTR。MP34DT06J MEMS麦克风是一款超紧凑、低功耗、全向、数字化的MEMS音频传感器,采用电容传感元件和IC接口。这种低失真数字麦克风提供64dB信噪比(SNR)和-26dBFS±1dB灵敏度。该麦克风的电容感测元件能够检测声波,并使用专门的硅微加工工艺制造。MP34DT06J麦克风的特点是采用CMOS工艺制造的IC接口,允许并提供PDM格式的外部数字信号。
MP34DT06J麦克风工作在-40°C至85°C的扩展工作温度范围内,顶部端口,smd兼容,emi屏蔽HCLGA封装。典型的应用包括移动终端、笔记本电脑、便携式媒体播放器、VoIP、语音识别、A/V电子学习设备、游戏/虚拟现实输入设备、数字静止/视频摄像机和防盗系统。
在RP2040开发板中,其硬件连接如下图所示:
4、驱动程序
代码的核心功能:
-
static const char channels = 1;
- 设置输出通道的数量。
-
static const int frequency = 20000;
- 将采样频率设置为 20 KHz。
-
short sampleBuffer[512]
- 缓冲区读取样本,每个样本为 16 位。
-
while (!Serial)
- 在打开串行监视器之前阻止程序运行。
-
PDM.begin(channels, frequency)
- 初始化 PDM 库。
-
Serial.print(sampleBuffer[i])
- 将样本打印到串行监视器/绘图仪。
#include <PDM.h>
static const char channels = 1;
static const int frequency = 20000;
short sampleBuffer[512];
volatile int samplesRead;
void setup() {
Serial.begin(115200);
while (!Serial);
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1);
}
}
void loop() {
if (samplesRead) {
for (int i = 0; i < samplesRead; i++) {
if (channels == 2) {
Serial.print("L:");
Serial.print(sampleBuffer[i]);
Serial.print(" R:");
i++;
}
Serial.println(sampleBuffer);
}
samplesRead = 0;
}
}
void onPDMdata() {
int bytesAvailable = PDM.available();
PDM.read(sampleBuffer, bytesAvailable);
samplesRead = bytesAvailable / 2;
}
查看串口打印的波形数据
- 将代码下载到 Arduino Nano RP2040 Connect。
- 打开 串口监视器,设置波特率为 115200。
使用 Arduino IDE 串口绘图器(Serial Plotter),观察音频数据的波形变化,如下图所示,下图为1KHz正弦波声音产生的波形数据。
5、总结
Arundio自带的函数库,大大降低了开发难度,我们只需要调用相应的API函数即可配置麦克风的采样频率,配合开发板的多种数据传输功能,可以实现很多有意思的功能。
6、演示视频 9385031bb80d43c000904ae8fb9f8c22
|