0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用于驱动外部数字麦克风的时钟配置

STM32单片机 来源:STM32单片机 作者:STM32单片机 2022-06-23 16:15 次阅读

1.引言

DFSDM 全称为 Digital filter for sigma delta modulators。顾名思义,其作用主要是对外部 Σ∆调制的数字信号进行滤波。STM32L462xx 系列支持最多 4 个外部串行通道,2 个数字滤波器,最大可达到 24bit 的 ADC 分辨率。并且支持 SPI 接口和曼切斯特编码 1-wire接口。

2.问题分析

客户使用 STM32L462xx 的 DFSDM 连接数字麦克风,将麦克风的 PDM 信号转化为 PCM 信号,并采集数据。使用的参数为 16KHz 采样,2M 左右的时钟驱动数字麦克风,能够正常读取麦克风数据。了解到他们所使用的数字麦克风可以使用 768K 时钟驱动,从而达到更低功耗的状态,但是客户无法配置出合适的时钟,即使勉强配置到了768K 附近,通过 DFSDM 采集到的数据也是混乱的,完全无法解析。

了解到基本需求后,我们需要对 DFSDM 的时钟有一定了解。从 RM0394 参考手册中可以找到如下内容:

71298bde-f224-11ec-ba43-dac502259ad0.png

DFSDM 可以提供一个时钟用于驱动外部 sigma delta 调制器,并且时钟来源可以是DFSDM 时钟或者 Audio 时钟,其中 Audio 时钟就是 SAI1 的时钟。

在处理和时钟相关的配置问题时,强烈建议使用 CubeMX 的时钟配置界面进行配置。我们先来看下客户用于驱动外部数字麦克风的时钟配置。

7146747e-f224-11ec-ba43-dac502259ad0.png

从图中可以看出,DFSDM 的时钟为 36MHz,来自 PCLK2。SAI1 的时钟约为 34.29MHz来自 PLLSAI1P。

717bfc70-f224-11ec-ba43-dac502259ad0.png

这是关于 DFSDM 输出时钟的代码片段,可以看到使用了 AUDIO 的时钟作为输出,并且使用 17 分频,那么最终驱动数字麦克风的时钟为 34.29/17≈2.02MHz。

再来看看滤波器部分参数的设计:

71937562-f224-11ec-ba43-dac502259ad0.png

其中,使用了 4 阶 SINC 滤波,过采样参数为 128,那么 2.02MHz/128≈16KHz。也就是说这种配置参数下,可以接近 16KHz 的采样率来对音频数据采样。

客户想要将麦克风驱动时钟重新配置为 768K,但只考虑修改 Divider 和 Oversampling 参数是配置不出来的。

3.问题解决

我们可以反过来推,要想获得 16KHz 采样率,768KHz 的时钟,首先需要满足以下公式:768K/ Oversampling = 16K, 那么 Oversampling=48。Oversampling 这个参数是比较好确定的,而 768K 来自于 CLK_SAI1/Divider, 这两个参数目前无法确定,其中 CLK_SAI1 又来自于 PLLSAI1P,它由 PLLSAI1_N, PLLSAI1_P 两个系数决定。也就是说要想获得 768K 的时钟,需要把这些参数都配置为合适的值。到这一步,实际上没有直接的公式可以求下去了,只能自己测试并调整,建议可以先将 Divider 定好,然后通过 CLK_SAI1/Divider=768K 就可以求出CLK_SAI1 的值,将这个值手动输入到 Cubemx 的时钟配置界面可以自动求出合适的

PLLSAI1_N, PLLSAI1_P 系数,这样可以大大减少调整时间。如果无法求出合适的值,CubeMX也会进行提示,那么只能重新换 Divider 来测试了。

最终调试下来的值如下图所示:

71a08ec8-f224-11ec-ba43-dac502259ad0.png

我选择的 Divider=50,那么可以算出CLK_SAI1=50*768K=38.4MHz,输入到上图界面中可以得到 PLLSAI1_N=12, PLLSAI1_P=5。

至此,已经可以正确得到 768KHz 的时钟驱动麦克风了,但是目前仍然无法获取到准确的音频数据。

由于前面修改了 Oversampling,该参数会影响采样值。在参考手册中可以找到下表:

71adb71a-f224-11ec-ba43-dac502259ad0.png

从表中可以看到,之前是 FOSR=128,Sinc4,对应的数值为+/-268435456,但是DFSDM 的数据寄存器只有 24bit,2^23<268435456 的,也就是说需要进行移位,只能以损失精度为代价进行转换。客户代码中有以下配置:

71c44a48-f224-11ec-ba43-dac502259ad0.png

数据需要右移 5 位保存到数据寄存器,那么现在我们的 FOSR 修改为了 48,对应上表可以看到数值是比较小的,不需要移位处理,所以改为:

71d08786-f224-11ec-ba43-dac502259ad0.png

到这里,我们需要修改的内容就全部结束了。将这些修改内容通知客户,让其进行测试,测试结果也比较满意。

小结

DFSDM 在数字音频应用中比较常见,主要用于将数字麦克风的 PDM 信号转换为PCM 信号,如果没有DFSDM 外设,就只能使用软件库进行转化,效率比较低。当然,也可以用于一些模拟信号的采集,需要外部 Sigma Delta 调制器调制好之后再进行滤波,这样得到的 ADC 精度要比通用的 ADC 精度更高,在要求高精度 ADC 的场合,不失为一种较好的方案。

原文标题:工程师笔记|DFSDM 时钟配置问题

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 麦克风
    +关注

    关注

    14

    文章

    596

    浏览量

    54195
  • 数字滤波器
    +关注

    关注

    4

    文章

    249

    浏览量

    46747
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • 调制器
    +关注

    关注

    3

    文章

    784

    浏览量

    44715

原文标题:工程师笔记|DFSDM 时钟配置问题

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TDA2822麦克风驱动

    本帖最后由 eehome 于 2013-1-5 09:49 编辑 TDA2822麦克风驱动
    发表于 02-15 09:09

    怎么连接麦克风

    连接麦克风的时候把正负极接反了,会不会把麦克风给烧坏掉,急急急;该怎么检测,请指教。
    发表于 08-01 09:16

    数字麦克风测试指南-相当全面哦

    {:4_95:}基于TrustSystem!顺便加一句:有需要数字麦克风解码板的可以Q我:807295506(双数字麦克风
    发表于 02-18 16:17

    ICS‐41350 数字麦克风

    麦克风阵列(Microphone Array)技术能够实现远场拾音,人声定位、回音消除和打断等效果,麦克风阵列方案非常适合使用在视频会议摄像头定位、安防摄像头定位、机器人定位等场合,以及家庭管家
    发表于 02-11 12:01

    麦克风阵列 仅有两个麦克风,会不会不够用?

    麦克风阵列的麦克风只有2个,带来的直接优势是成本低很多。同时,它小巧的构型决定它的应用也更为灵活。双麦克风阵列,顾名思义在录音系统上只使用了2个麦克风。那么在这个以
    发表于 08-08 18:44

    了解麦克风灵敏度

    ,模拟麦克风完全可以拥有 20 dBV 的灵敏度,其中用于基准电平输入信号的输出信号为 10 V。只要放大器、转换器和其他电路能支持所需的信号电平,完全可以实现这一水平的灵敏度。数字麦克风
    发表于 10-22 16:57

    麦克风技术规格解析

    其应用方式却比较陌生。本应用笔记解释 MEMS 麦克风数据手册中出现的技术规格和术语,以便帮助设计人员将麦克风正确集成到系统之中。灵敏度麦克风的灵敏度是指其输出端对于给定标准声学输入的电气响应。
    发表于 11-01 11:26

    MEMS与ECM:比较麦克风技术

    数据线和时钟进行通信。另外,由于数据的单比特编码,在接收器处解码数字信号变得更容易。图2:左图:模拟MEMS麦克风的应用原理图。右图:数字MEMS
    发表于 02-23 14:05

    麦克风灵敏度探讨

    作者: Jerad Lewis灵敏度, 即模拟输出电压或数字输出值与输入压力之比,对任何麦克风来说都是一项关键指标。在输入已知的情况下,从声域单元到电域单元的映射决定麦克风输出信号的幅度。 本文将
    发表于 07-23 07:51

    模拟和数字MEMS麦克风有什么不同?

      模拟和数字麦克风输出信号在设计中显然有不同的考虑因素。本文要讨论将模拟和数字MEMS麦克风集成进系统设计时的差别和需要考虑的因素。 
    发表于 08-20 07:40

    MEMS麦克风设计方法及关键特性

    的前端是麦克风,它检测语音和其他环境噪声。因此,改善音频捕捉可以提高信号链整体的性能并降低功耗。麦克风是把声学信号转换为电信号以供助听器音频信号链处理的传感器。有许多技术可用于这种声电转换,但电容
    发表于 11-05 08:00

    用于FAN3850A麦克风前置放大器的典型应用立体声麦克风电路

    用于FAN3850A麦克风前置放大器的典型应用立体声麦克风电路,带数字输出。 FAN3850A集成了前置放大器,LDO和ADC,可将驻极体电容式麦克
    发表于 06-19 10:45

    rk3308如何配置内核做麦克风

    rk3308如何配置内核做麦克风?如何验证麦克风功能是否工作正常?
    发表于 03-09 06:26

    驻极体麦克风电路

    三pin的驻极体麦克风和两pin的驻极体麦克风可以共用电路吗,就如下图,是2pin的麦克风假差分电路,那如果是三pin的麦克风,应用于这个电
    发表于 04-14 11:21

    请问NUC505是否支持数字麦克风?

    是,NUC505内部音讯编译码器( Audio CODEC )有支持数字麦克风功能,但只能同时支持一组麦克风,左右声道数据相同。通过PA2 (Digital MIC clock in)及PA3
    发表于 06-20 08:15