
前言 STM32F413/423系列微控制器在DFSDM(Sigma-Delta调制器的数字滤波器)的顶层实现了专门的机制,可支持以下功能: • 同步两个DFSDM滤波器 • 脉冲跳频 脉冲跳频是指器件可以动态调整每个麦克风的PDM(脉冲密度调制)延迟,而不必增加任何外部延迟线。使用脉冲跳频功能的音频应用包括波束成形和声源定位。 本应用笔记的目的是描述如何在STM32F413/423系列器件上同步DFSDM滤波器以及如何编程脉冲跳频。 本应用笔记详细描述: • 如何配置脉冲跳频机制来将音频时钟和数据注入DFSDM输入 • 如何配置TIM3和TIM4定时器来生成请求的脉冲以延迟一个或多个PDM流 • 如何构建一个序列来同步两个DFSDM滤波器 • 如何构建一个序列来生成脉冲 本应用笔记假设读者熟悉STM32 MCU的DFSDM和TIMER,如意法半导体的网站www.st.com提供的STM32F413/423基于ARM®的高级32位MCU参考手册(RM0430)中所述。 相关固件 • 用于STM32F4系列产品的STM32CubeF4嵌入式软件 1 在DFSDM顶层实现的STM32F413/423系列机制概述 图 1显示了在DFSDM顶层实现的机制可以同步两个DFSDM滤波器和脉冲跳频用例。 如图 1所示,MCHDLY(多通道延迟)模块既是DFSDM滤波器同步的一部分,也是脉冲跳频用例的一部分。对于脉冲跳频用例,TIM3和TIM4定时器也是实现机制的一部分。 ![]() 2 DFSDM滤波器同步配置 2.1 DFSDM滤波器同步的一般性描述 STM32F413/423系列器件有两个DFSDM: • DFSDM1:包括四个通道和两个滤波器 • DFSDM2:包括八个通道和四个滤波器。 每个DFSDM都可以与第一个DFSDM滤波器(DFSDM_FLT0)同步开始转换,但有些情况需要同步DFSDM1和DFSDM2滤波器。 为同步DFSDM1和DFSDM2滤波器,用户必须遵循以下步骤: 1. 使用外部时钟源和DFSDM音频源作为输入时钟 2. 禁用DFSDM2时钟输出(dfsdm2_ckout) 3. 对每个DFSDM进行编程 4. 开始滤波器转换 5. 启用DFSDM2时钟输出(dfsdm2_ckout) 通过执行上述步骤,可以同步开始两个DFSDM滤波器的转换。 2.2 DFSDM滤波器同步的编程序列 要遵循的序列主要取决于MCHDLY模块,如下所示: 1. 禁用DFSDM2时钟输出(dfsdm2_ckout)信号(SYSCFG_MCHDLYCR.BSCKSEL设置为- 0 M27) 2. 启用外部DFSDM输出时钟 3. 配置DFSDM以选择外部CKINx作为输入时钟 4. 配置DFSDM以从相同通道的引脚获取通道数据 5. 输出DFSDM2外部输出时钟(dfsdm2_ckout)至DFSDMx CKOUT焊盘(可选): SYSCFG_MCHDLYCR.DFSDM1CKOSEL(M1)和SYSCFG_MCHDLYCR.DFSDM2CKOSEL(M2)设置为1 6. 设置DFSDM2时钟输出(dfsdm2_ckout)路径为CKINx,具体取决于以下使用的DATINx: a) 配置以下DMx开关 – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK02SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0(DM2) – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK02SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN2(DM2) – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK13SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN1(DM1) – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK13SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN3(DM1) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK04SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0(DM6) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK04SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN4(DM6) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK15SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN1(DM5) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK15SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN5(DM5) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK26SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN2(DM4) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK26SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN6(DM4) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK37SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN3(DM3) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK37SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN7(DM3) b) 配置以下Mx开关 – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1CFG设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0CKIN1、CKIN2和CKIN3(M3、M4、M5、M6) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2CFG设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0CKIN1、CKIN2、CKIN3、CKIN4、CKIN5、CKIN6和CKIN7(M9、M10、M11、M12、M13、M14、M15、M16) 7. 开始转换所有使用的DFSDM1和DFSDM2滤波器 8. 释放DFSDM2时钟输出(dfsdm2_ckout)信号(SYSCFG_MCHDLYCR.BSCKSEL设置为- 1 M27) 请注意,对于DFSDM1,DFSDM2时钟输出(dfsdm2_ckout)可以注入: • CKIN0或CKIN2 • CKIN1或CKIN3 对于DFSDM2,DFSDM2时钟输出(dfsdm2_ckout)可以注入: • CKIN0或CKIN4 • CKIN1或CKIN5 • CKIN2或CKIN6 • CKIN3或CKIN7DocID030025 Rev 1 [English Rev 1] 9/23 3 脉冲跳频配置 3.1 脉冲跳频的一般性描述 脉冲跳频的目的在于实现指定输入通道的延迟线等特性。脉冲跳频使输入串行数据流(仅串行流)中指定数量的样品在进入滤波器前被丢弃。该数据丢弃通过跳过指定数量的采样输入时钟脉冲(指定的串行数据样品未被滤波器采样)来执行。 采样时钟由脉冲跳频功能门控,以获得指定数量的时钟脉冲。指定数量的时钟脉冲被跳过时,输入数据的滤波会继续。与未跳过的数据流相比,该操作导致来自滤波器的最终输出样品(及下一个样品)从后面的输入数据计算得出。 由于是从较新的输入样品而不是“未跳过”样品计算得出,因此,最终的样品看起来是向前移动的。最终的“跳过样品”将在稍后转换,因为跳过的输入数据样品必须由随后的输入数据样品替换。 由于两个数据缓冲区都相移了,因此,最终的数据缓冲区特性(跳过和未跳过的输出数据缓冲区比较)就好像未跳过的数据流由于某种原因被延迟了。 时钟跳过的实现基于MCHDLY、TIM3和TIM4模块。MCHDLY模块由MCHDLYCR寄存器控制,所有MCHDLY控制位都如此。 如图 1所示,通过使用MCHDLY模块,DFSDM可用于多达六个数字麦克风的音频应用。数字麦克风(或Sigma-Delta调制器)的时钟由DFSDM2时钟输出(dfsdm2_ckout信号)提供。然后,该时钟输出信号被分配给: • OR门,以通过时钟屏蔽或门控实现脉冲跳过 • TIM4和TIM3定时器的ETR(外部触发)输入,以定义必须跳过的脉冲数量,并用于同步 • 通过M1和M2多路复用器的DFSDM1_CKOUT和DFSDM2_CKOUT引脚输出,以在DFSDMx引脚上生成输出时钟信号 OR门用于跳过为DFSDM提供的输入串行时钟脉冲,以便在相应的输入通道上产生延迟。该时钟门控由两个定时器控制(TIM4和TIM3)。定时器以单触发模式编程,以产生具有限定长度的屏蔽脉冲,从而门控所需的时钟脉冲数。 图 2显示了在DFSDM2的输入通道3或7(取决于所选择的输入通道)上产生一个DFSDM时钟周期延迟的情况。它还显示了在DFSDM1的输入通道0或2(取决于所选择的输入通道)上产生的两个DFSDM时钟周期另一个延迟。 ![]() 3.2 脉冲跳频的编程序列 本节介绍在指定的输入通道上生成脉冲跳频应遵循的序列。 配置MCDLY模块(如果使用的输入通道位于两个不同的DFSDM上,也可以同步DFSDM滤波器) 1. 禁用DFSDM2时钟输出(dfsdm2_ckout)信号(SYSCFG_MCHDLYCR.BSCKSEL设置为- 0 M27) 2. 启用外部DFSDM输出时钟 3. 配置DFSDM以选择外部CKINx作为输入时钟 4. 配置DFSDM以从相同通道的引脚获取通道数据 5. 输出DFSDM2外部输出时钟(dfsdm2_ckout)至DFSDMx CKOUT焊盘: SYSCFG_MCHDLYCR.DFSDM1CKOSEL(M1)和SYSCFG_MCHDLYCR.DFSDM2CKOSEL(M2)设置为1请注意:在图 1中,MIC1通过可以从DFSDM2或DFSDM1 CKOUT信号提供时钟输出的另一个时钟输出引脚(DFSDM1_CKOUT引脚)接收其串行时钟。此配置仅可用于一个麦克风(MIC1)的低功耗用例,同时禁用DFSDM2_CKOUT并启用DFSDM1_CKOUT(如用于语音检测),并将MIC1重新用于波束成形用例(启用DFSDM2_CKOUT时)。 6. 设置DFSDM2时钟输出(dfsdm2_ckout)路径为CKINx,具体取决于以下使用的DATINx通道: a) 配置以下DMx开关 – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK02SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0(DM2) – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK02SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN2(DM2) – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK13SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN1(DM1) – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1_CK13SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN3(DM1) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK04SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0(DM6) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK04SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN4(DM6) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK15SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN1(DM5) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK15SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN5(DM5) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK26SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN2(DM4) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK26SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN6(DM4) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK37SEL设置为0以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN3(DM3) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2_CK37SEL设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN7(DM3) b) 配置以下Mx开关 – DFSDM1:SYSCFG_MCHDLYCR. DFSDM1CFG设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0、CKIN1、CKIN2和CKIN3(M3、M4、M5、M6) – DFSDM2:SYSCFG_MCHDLYCR. DFSDM2CFG设置为1以注入DFSDM2时钟输出(dfsdm2_ckout)至CKIN0、CKIN1、CKIN2、CKIN3、CKIN4、CKIN5、CKIN6和CKIN7(M9、M10、M11、M12、M13、M14、M15、M16) 7. 开始转换所有使用的DFSDM1和DFSDM2滤波器 8. 释放DFSDM2时钟输出(dfsdm2_ckout)信号(SYSCFG_MCHDLYCR.BSCKSEL设置为- 1 M27) 配置TIM3和TIM4,以便在指定的输入通道上生成脉冲跳频 1. 不需要门控时,连接到DFSDM1 CKIN的OR门上的TIM4输出(OC[2:1])和连接到DFSDM2 CKIN的OR门上的TIM3输出(OC[4:1])必须处于非活动模式下的低电平 2. 配置OPM(单脉冲模式)中的定时器。在该模式下,定时器可以启动计数器以响应于ETR输入的上升沿,并产生具有可编程长度的脉冲。该脉冲用于由DFSDM2产生比特流时钟时。 注: 定时器使用的时钟参考可以是APB时钟或APB时钟乘以2或4。该频率越高越好。 使用TIM3和TIM4门控dfsdm2_ckout音频时钟时,定时器参考时钟频率必须至少为DFSDM2音频时钟频率的12倍(假设比特流时钟占空比为50%)。 注: 由于TIM2 OC1已连接到M27以备份DFSDM2时钟输出(dfsdm2_ckout)信号,因此,其不可使用。 启用DFSDM1和DFSDM2的时钟门控 1. 启用DFSDM1的时钟门控:SYSCFG_MCHDLYCR. MCHDLY1EN设置为1(G1和G2),使TIM4产生的脉冲注入相应的DFSDM1 CKINx 2. 启用DFSDM2的时钟门控:SYSCFG_MCHDLYCR. MCHDLY2EN设置为1(G3、G4、G5和G6),使TIM3产生的脉冲注入相应的DFSDM2 CKINx 必须发出脉冲跳频时,相应OR门的TIM3或TIM4 OC通道上的应用程序产生所需长度的脉冲。 一次只能产生一个脉冲,因此,该应用必须等当前产生的脉冲结束才能发出下一个(如需要)。 3.3 波束成形用例中的脉冲跳频 图 3显示了波束成形用例的完整视图,以及在该用例中脉冲跳频何时适用。 在编程的PCM(脉冲编码调制)采样率设置为16 Khz的情况下,为避免CPU处理,麦克风距离必须设置为21 mm,这相当于两个麦克风之间有1 PCM的延迟。 脉冲跳频功能可以释放两个麦克风之间的距离限制,并虚拟设置两个麦克风之间的一个或多个PCM延迟的距离。 在图 3中,PmodTM板包含五个与DFSDM连接的麦克风。麦克风之间的距离(M1-M2、M1-M3、M1-M4、M1-M5)小于21 mm。 波束成形用例的GUI(图形用户界面)可以让用户选择应用波束成形的方向(四个可能的方向)。前面的操作定义了要使用的两个MIC(例如MIC1和MIC2)。 由于选择的两个麦克风之间的距离小于21 mm,因此,脉冲跳频模块用于虚拟地增加该距离。此操作可以达到21 mm的距离,这相当于运行该用例所需的MIC1和MIC2之间的1 PCM延迟(见图 3)。 ![]() 如要计算使用的脉冲跳频周期,必须使用以下公式: NB_BITSTREAM_CLOCK_PERIOD = (Dpcm-Dm12) / (T x c) 其中: • Dpcm =相当于1 PCM延迟的两个麦克风之间的预期虚拟距离(PCM采样率设置为 16KHz的距离为21mm) • Dm12 =两个麦克风之间的实际距离 • T = DFSDM2音频时钟周期(例如0.5.10E-6 s,假设麦克风频率= 2.048 MHz) • c =声速340 m/s 图 4显示了将两个麦克风的距离设置为1 PCM延迟所需的距离。 例如: • PCM采样率设置为16 KHz:Dpcm = 21mm(1 PCM延迟) • Dm12 = 5 mm(M1和M2之间的实际距离) • PDM(脉冲密度调制)采样率设置为2.048Mhz ==> T = 0.510E-6s NB_BITSTREAM_CLOCK_PERIOD = (21-5).10E-5 / (340x0,510E-6) = 94 如图 2所示,该数字相当于进行门控(TIM OC脉冲持续时间)的dfsdm时钟周期。 ![]() 完整版请查看:附件 |
DM00343623_ZHV1.pdf
下载445.57 KB, 下载次数: 1