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

一、数字麦克风通信方式

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

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

信号时序图如下:

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

例子1:INMP441

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

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

例子2:MP45DT02

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

二、采样时钟配置

如果用此类麦克风的单声道应用,就需要考虑数据采集在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,实际上单麦克风系统中有效采样时间只有一半,相当于一个采集周期内采集一半休息一半,其声音特性被这样采一半截取一半会有什么变化呢,需要试验验证。

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

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

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

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

麦克风输出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配置的分辨率的二倍。

参考文档:

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

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

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

数字麦克风PDM信号采集与STM32 I2S接口应用的更多相关文章

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

    在使用STM32的数字麦克风I2S接口时,计算采样率让人头疼,芯片手册上没有明确的说法,而手册上的计算方法经过测试确和实验不符.借助搜索引擎,大部分资料都是来自于开发板卖家或开发板论坛,主要是咪头采集 ...

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

    数字麦克风采用MEMS技术,将声波信号转换为数字采样信号,由单芯片实现采样量化编码,一般而言数字麦克风的输出有PDM麦克风和PCM麦克风,由于PDM麦克风结构.工艺简单而大量应用,在使用中要注意这二者 ...

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

    本文是数字麦克风笔记文章的单片机程序.一些朋友私信我,调试出问题. 我就把源码贴出来吧,可能主要问题是DMA的配置. 尤其双DMA时候,需要手动启动I2S的接收DMA,HAL库没有这个接口,不看dat ...

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

    本文是数字麦克风笔记文章的数据处理篇. 读取数字麦克风的信号,需要嵌入式驱动和PC应用的结合,驱动负责信号采集,应用代码负责声音分析. 一般而言,在完成特征分析和实验之后,把优化过的代码固化到嵌入式端 ...

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

    数字麦克风PDM脉冲到PCM信号需要一个二次采样,ST 提过了PDM2PCM的软件包,可以完成上面的工作.软件包源码没有开源,使用手册也简洁的让人抓狂,我觉得可能是因为ST更高级的MCU直接带了硬解码 ...

  6. ADI高速信号采集芯片与JESD204B接口简介

    ADI高速信号采集芯片与JESD204B接口简介 JESD204B接口 介绍: JEDEC Standard No. 204B (JESD204B)—A standardized serial int ...

  7. 4~20mA信号采集

    4-20mA信号采集 4-20mA信号采集可选卓岚ZLAN6802(485)/ZLAN6842(以太网)/ZLAN6844(无线wifi)他们不仅可以可采集4~20mA还可以采集 /0~5V/0~10 ...

  8. ESP8266 软件实现 Delta-sigma(ΔΣ)调制器 并通过I2S接口输出编码流

    一.关于Delta-sigma(ΔΣ)调制器 Delta-sigma(ΔΣ)调制器是Delta-sigma转换器的核心部件.如下所示为一个简单的一阶Delta-sigma调制器,该调制器产生一个1bi ...

  9. I2S接口介绍

    I2S接口介绍一.I2S协议介绍 I2S协议作为音频数据传输协议,由Philips制定.该协议由三条数据线组成:1.SCLK:串行时钟,频率= 2 * 采样频率 * 采样位数.2.WS:字段(声道)选 ...

随机推荐

  1. tar命令压缩和解压

    https://www.cnblogs.com/jyaray/archive/2011/04/30/2033362.html tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向 ...

  2. 设计模式-访问者模式(Visitor)

    访问者模式是行为模式的一种.访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的.比较稳定的对象结构,这些对象的类都拥有一个accept方法用来接受访问者的访问.访问者是一个接口,它拥有一个vi ...

  3. 设计模式-状态模式(State)

    状态模式是行为模式的一种,状态模式允许改变对象内部状态来改变对象的行为. 角色和职责: 1.上下文(Context)-Order:    拥有内部的状态 2.状态接口(Status)-State: 一 ...

  4. HDU 4057:Rescue the Rabbit(AC自动机+状压DP)***

    http://acm.hdu.edu.cn/showproblem.php?pid=4057 题意:给出n个子串,串只包含‘A’,'C','G','T'四种字符,你现在需要构造出一个长度为l的串,如果 ...

  5. 花5分钟时间来了解一下高性能网关Kong会有意外收获

    前言 前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营真的非常需要拥抱开源,应该敞开心扉 ...

  6. 02(a)多元无约束优化问题

    2.1 基本优化问题 $\operatorname{minimize}\text{    }f(x)\text{       for   }x\in {{R}^{n}}$ 解决无约束优化问题的一般步骤 ...

  7. Linux 操作系统及其组成,shell命令

    Linux 操作系统及其组成 操作系统的作用 操作系统(OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控制 ...

  8. spring springMVC Struts2 区别

    Spring: Spring是IOC和AOP的容器框架,Spring是一个通用解决方案, 最大的用处就是通过Ioc/AOP解耦, 降低软件复杂性, 所以Spring可以结合SpringMVC等很多其他 ...

  9. 淺談Coach思考模式

    我現在是個窮屌,沒錯.我清楚的知道這一點,但是我也知道,我能改變. 之前幹了7年的評估行業,中間換了3家公司,第一家公司待的時間最長,待了5年.2018年開始,我就在思考轉行.之前在第一家企業接觸過一 ...

  10. Node热部署插件

    一.supervisor 首先需要使用 npm 安装 supervisor(这里需要注意一点,supervisor必须安装到全局) $ npm install -g supervisor Linux ...