数字麦克风PDM信号采集与STM32 I2S接口应用(一)

摘要:
以上描述了STM32芯片上I2S麦克风的数据读取定时。当LR=0时,在WS周期中只有低电平输出信号,并且左声道信号和右声道信号分别以CLK的低电平和高电平输出。因此,如果信号以WS的低电平半周期输出,则信号以CLK的低电平半周期输出,信号以CLK的高电平半周期,并且信号在CLK的半时间输出。PDM调制器将缓冲的模拟信号转换为串行脉冲密度调制信号。时钟输入(CLK)用于控制PDM调制器。

     数字麦克风采用MEMS技术,将声波信号转换为数字采样信号,由单芯片实现采样量化编码,一般而言数字麦克风的输出有PDM麦克风和PCM麦克风,由于PDM麦克风结构、工艺简单而大量应用,在使用中要注意这二者的区别,尤其是STM32 MCU的文档在I2S接口章节,对此区别含糊不清,比如采样率配置,WS管脚的用法,单声道双声道的配置,很多地方无法从文档中得到准确信息,需要一边摸索一边研究文档。本文就是对这些问题的一个研究笔记。

一、数字麦克风通信方式

数字麦克风管教很简单,如下面的图示。

    数字麦克风PDM信号采集与STM32 I2S接口应用(一)第1张

     电源和地,时钟脚CLK,左右声道选择L/R,信号管教SD或DOUT。区别是WS管教,这个管教对数据采集和分辨率配置有很大影响。STM32芯片手册这样描述对应的这三个管教:

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第2张

信号时序图如下:

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第3张

   上面描述了STM32芯片关于I2S的麦克风的数据读取时序,而麦克风厂家如何处理输出信号,有自己的方式,这里就是I2S接口应用的第一个需要主要的点。

例子1:INMP441

INMP441是具有WS管脚的数字麦克风,它的时序图如下,立体声模式下,WS=0时输出左声道,WS=1时输出右声道。

数字麦克风PDM信号采集与STM32 I2S接口应用(一)第4张

单声道模式下,LR=0时一个WS周期内只有低电平输出信号,另外一半周期输出为高组,LR=1时输出时序相反。

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第5张

例子2:MP45DT02

MP45DT02是没有WS管脚的数字麦克风,它的时序图如下,该器件根据LR电平,分别在CLK的低电平和高电平时间输出左右声道信号,实现信号的分时复用。

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第6张

二、采样时钟配置

   如果用此类麦克风的单声道应用,就需要考虑数据采集在WS另外半休眠周期的影响。下面就是此麦克风的一个STM32F407芯片下的配置。

/* I2S2 init function */
void MX_I2S2_Init(void)
{
 hi2s2.Instance = SPI2;
 hi2s2.Init.Mode = I2S_MODE_MASTER_RX;
 hi2s2.Init.Standard = I2S_STANDARD_MSB;
 hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B;
 hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;
 hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_16K;
 hi2s2.Init.CPOL = I2S_CPOL_LOW;
 hi2s2.Init.ClockSource = I2S_CLOCK_PLL;
 hi2s2.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE;
 if (HAL_I2S_Init(&hi2s2) != HAL_OK)
 {
   Error_Handler();
 }
}

     该模式下,麦克风的输出信号图如下。由于LR=0,所以在WS低电平半周期输出信号,高电平半周期内无数据。可以发现CLK时钟为512khz,我们配置的是16bit数据模式,16khz采样,为什么CLK输出为512khz呢?原因是左右声道各自占用半个周期,当WS信号为16khz时,时钟频率是16bit*16khz*2=512khz,实际上单麦克风系统中有效采样时间只有一半,相当于一个采集周期内采集一半休息一半,其声音特性被这样采一半截取一半会有什么变化呢,需要试验验证。

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第7张

    上面的问题是由WS管脚引起的,若选用无WS管脚的其他信号,比如MP34DT04,则是另一种时序,芯片手册时序图如下。

    如果LR管脚接地,则在CLK的低电平半周期输出信号,如果LR接VCC,则在CLK的高电平半周期输出信号,在一个数据线上实现双声道采集。

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第8张

这种麦克风对于单声道应用,会在CLK一半时间内输出信号,另一半高组。在立体声应用中,使用一根数据线传输左右声道,分时复用传输信号。

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第9张

    麦克风芯片要求的时钟频率范围一般是1—3Mhz,把上面代码的采样率设置为32Khz,则采集信号如下图。CLK时钟频率为1Mhz,为什么会出现这种情况呢?

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第10张

     麦克风输出PDM信号,PDM调制器将缓冲模拟信号转换为串行脉冲密度调制信号。时钟输入( CLK)用于控制PDM调制器。常见的数字麦克风的时钟频率范围在1 MHz至3.25 MHz之间。该频率将定义生成离散时间表示( PDM比特流)的放大器模拟输出信号采样频率。同样的分析方法,ST芯片是按照双声道WS区分左右声道配置的芯片,那么WS低电平是左声道,高电平是右声道,因此软件配置一个16it采样的信号,一个周期需要2*16bit=32个时钟脉冲,而配置的采样率为32khz,这就使得CLK输出达到了32bit*32khz=1024khz,所以下面测量到clk为1.024Mhz。WS信号的频率为32Khz,就是采样率信号的频率。这里是数字麦克风计算PDM采样率的另一个易错点,上面的计算方法是对于有SW管脚的麦克风传感器而言的,对于没有SW管脚的麦克风芯片,则实际PDM采样率为STM32 MCU配置的分辨率的二倍。

 数字麦克风PDM信号采集与STM32 I2S接口应用(一)第11张

参考文档:

1、如何将PDM数字麦克风连接到STM32单片机

AN5027 使用STM32 32位Arm® Cortex® MCU连接PDM数字麦克风


数字麦克风PDM信号采集与STM32 I2S接口应用--笔记目录:

数字麦克风PDM信号采集与STM32 I2S接口应用(一)

https://www.cnblogs.com/pingwen/p/11298675.html

数字麦克风PDM信号采集与STM32 I2S接口应用(二)

https://www.cnblogs.com/pingwen/p/11301935.html

数字麦克风PDM信号采集与STM32 I2S接口应用(三)

https://www.cnblogs.com/pingwen/p/11794081.html

数字麦克风PDM转PCM与STM32 I2S接口应用----重要文档列表

https://www.cnblogs.com/pingwen/p/11302452.html

数字麦克风PDM信号采集与STM32 I2S接口应用(四)--单片机源码

https://www.cnblogs.com/pingwen/p/13371144.html

尊重原创技术文章,转载请注明。

https://www.cnblogs.com/pingwen/p/11298675.html

免责声明:文章转载自《数字麦克风PDM信号采集与STM32 I2S接口应用(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇十六、源码部署EFK之快乐没有了javascript 获取当前页面的URL下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 汉字转拼音

   --0 select fn_getpy('测试',0) from dual ceshi  --1 select fn_getpy('测试',1) from dual CESHI  --2 select fn_getpy('测试',1) from dual CeShi  --3 select fn_getpy('测试',3) from dual cs...

HideProcess

1 #ifndef CXX_HIDEPROCESS_H 2 # include "HideProcess.h" 3 #endif 4 5 6 7 #ifdef _WIN64 8 #define ActiveProcessLinksOffset_EPROCESS 0x188 9 #define ImageFileName...

jwt 认证规则

目录 jwt 认证规则: 介绍: 内容: 核心算法: 签发算法: 校验算法: 刷新算法: django-rest-framework-jwt 自定义配置: 模块的使用: _check_payload 方法 : _check_user 方法: jwt 认证规则: 介绍: jwt: json web token 优点:...

c# ffmpeg常用参数

c#  ffmpeg常用参数   转换文件格式的同时抓缩微图: ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 对已有flv抓图: ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test....

大疆Phantom 4 RTK 通过4G SIM卡来控制飞机

一直设想无人机能够飞得更远、更稳,能不能通过4g信号来实现,现在大疆帮我们实现了,不愧是家伟大的公司: 特点: 用途:测绘、农业、巡检、植保、建筑测量 精度:GPS/北斗/GLONASS 3系统6频点RTK为飞行器提供2厘米级定位 支持4G网络 一控多机(5台飞行器) 在基站网络信号差的时候,支持连接入自有网络 支持中断点保存功能,可对超大面积的地形进行...

mysql集群搭建 (PXC)

一、PXC介绍 1.1 关于PXC PXC(Percona XtraDB Cluster)是MySQL数据库的一种高可用集群策略,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节...