前言
STM32提供了丰富的音频应用外设,并得益于灵活高效的内部架构,可以支持广泛的音频应用。本文中,在简单介绍音频采集的背景知识后,从应用需求出发,确定麦克风的选用。然后,描述了STM32内部DFSDM (Digital Filter for Sigma-Delta Modulator)在PDM麦克风采集中应用。最后逐步介绍如何利用STM32CubeMX进行DFSDM设计开发,实现PDM麦克风声音采集。
一 背景知识
声音通过声学传感器获取模拟信号,经过模数转换器,转换成二进制码0和1,这些0和1便构成了音频数字信号。PDM麦克风能够实现上述的模拟信号获取,并输出PDM信号。PDM(Pulse Density Modulation)脉冲密度调制,利用脉冲密度表示模拟信号强度。
从PDM位流中获取数据,还需要经过如下图环节才能获得模拟信号幅度对应的数字量。
a. DFSDM通道选择
根据X-NUCLEO- CCA02M1板原理图,可知在将其处理成支持DFSDM采集的两路麦克风时,麦克风总线引脚与STM32L476RG连接情况如下。
在STM32CubeMX中,选择Channel1中“ PDM/SPI Input from ch2 and internal clock ”和Channel2中“ PDM/SPI Input from ch2 and internal clock ”,并选择“CKOUT”,如下图所示,PC2、PB14自动对应与DFSDM的Clock out和Data In功能脚。
b. 配置通道
切换至“Configuration” 标签页,点击“Control\DFSDM”打开DFSDM配置界面。由于选择了通道1和通道2,这里可以对这两个通道进行配置。配置情况如下图。
Type:配置数据读取时刻。SPI with rising edge在时钟的上升沿读取数据;SPI with falling edge在时钟下降沿读取数据。
Spi clock:总线时钟源。Internal SPI clock利用内部时钟,对应为CKOUT时钟。
Offset:数据偏移量补偿。
Right Bit Shift : 右移位。右移位的确定,涉及到获取有效数据的位数,如“分辨率”小节中图所示。需要结合滤波器和积分器配置及分辨率需求进行确定。本文中,经过滤波器和积分器处理后输出数据分辨率为29-bit,所以将右移位设置为5,从而在24位数据寄存器中获得有效的24-bit数据。
Analog watchdog parameters : DFSDM中模拟看门狗参数设置。应用例中没涉及到此功能,参数保持默认。