[原创] 实验LIS25BA骨振动传感器采集音频

cruelfox   2019-8-23 18:25 楼主

  收到的ST这个骨振动传感器带了一个FPC适配板,免了制作PCB封装的问题,方便接线测试。
acc1.jpg   不过,因为电压支持只有 1.8V, 于是蝴蝶粉手头的 Nucleo 板子都不能直接用。要不得自己画一块带 3.3V <--> 1.8V 电平转换的板子,要不就想办法把MCU电压用成1.8V 以直接连接。

  因为传感器的信号输出是 TDM 接口,STM32 的具备 SAI (Serial Audio Interface) 的型号都可以直接支持(真的不少了,SAI也算主流配置该有的)。我实验音频采集用的是 STM32L476, 借用了一块自己设计的带USB的评估板来接收TDM信号,因为没有引出空余的I/O口,只好飞线连接。

acc2.jpg

  传感器一共需要 MCLK, BCLK, WCLK 三个时钟信号,其中 MCLK 是主时钟,内部ADC转换必须用这个时钟,它决定了采样频率。在 MCLK=12.288MHz 时,对应输出 24kHz 或 16kHz, 8kHz 采样频率。假如 MCLK 变了,采样频率也会随之变化。BCLK, WCLK 是 TDM 接口传输数据需要的,WCLK 输出采样频率,BCLK 决定码流的速率。注意,WCLK 和 BCLK 必须与 MCLK 同步,必须是 MCLK 的整数分频,且 BCLK 也必须是 WCLK 整数倍频。按照手册表格中来,WCLK 就只能取 8kHz/16kHz/24kHz 三种了,对应 MCLK/WCLK 比 1536x, 768x 和 512x

tdmfig.PNG

  STM32 SAI 的引脚在 TDM 模式与传感器连接关系就是:

       SAI_FS  ----  WCLK

       SAI_SCK ---- BCLK

       SAI_SD  ----  SDOUT

  至于 MCLK, 12.288MHz 时钟的产生有多种办法,只要保证与 SAI 接口的时钟同源就可以了,比如用 MCU 的 MCO 输出,用 SAI, SPI, Timer 等等硬件输出。

  TDM是对数字音频常用的I2S接口的扩展,因为 I2S 只能传输 L/R 两个通道数据,而 TDM 支持多通道。这个传感器需要 XYZ 3个通道。按照手册中典型的 8kHz/1.024MHz 这样的 WCLK/BCLK 比例,一个采样周期可以传输 128 bits 数据,等于 8 个 slot (每个数据占16 bits)。

  SDOUT 与 WCLK 波形对应是这样的:(我的示波器只有两通道,不能同时看BCLK)

20190721004852.png   这是选择在前三个slot发送数据,SDOUT相对WCLK没有延迟。SAI 输出 TDM WCLK 高电平为16个BCLK周期(一个slot长度)。

 

  LIS25BA上电的时候是 power-down 的,TDM接口也关闭了,所以必须用 I2C 配置一下才可以用。

tdm_ctrl.PNG
此内容由EEWORLD论坛网友cruelfox原创,如需转载或用于商业用途需征得作者同意并注明出处

回复评论 (9)

SAI 的 TDM 配置方法:

MCU引脚分配,我用了两个SAI模块,其中一个仅仅用来产生 MCLK (原因后面讲)

ioconfig.png

  SAI1 Block A 工作在 TDM (master receive) 模式,并启用 DMA 传输数据。我的 SAI 时钟是 24.576MHz, FS频率(即WCLK频率)是 24kHz,那么要使用 SAI CR1寄存器 MCKDIV 位配置分频。

clkgen.PNG   这里并没有体现出来 FS 的频率,但是手册中有一句:In the SAI, the single ratio MCLK/FS = 256 is considered. 于是,图上的 MCLK_x 该为 256x24kHz = 6.144MHz, 需要 MCKDIV 进行4分频。也正是因为 SAI 的 MCLK/FS 比例与传感器需要的不一致,不能直接用 SAI 输出的 MCLK 给传感器,所以我才单独用了 SAI2 Block B 来提供 MCLK 输出。

sai.PNG   我只选择了 slot 0, slot 1两个通道的数据接收,对应到 USB audio 数据的左右声道,方便于录音。因为测试代码是在USB声卡的代码上改来的,DMA采集也保留了32-bit传输,实际有效数据只有低16位。

  这个传感器是三轴加速度计,对重力方向也是敏感的,从测试录音的直流偏移可以体现出来。

rec.PNG

  录音的效果? 因为缺乏载具,拖着一堆飞线也很不方便,我不保证它可靠采集了“骨振动”。如果手持板子,让传感器靠在脸上,录下来的声音很微弱,浑浊。后来,我干脆用手指把传感器按在皮肤上,录了下面这一段,粗略能听出来是在说话了。附件中 mp3 是用软件处理做过加了增益的。

 

点赞  2019-8-23 19:00

没有合适的配套板子,这个传感器用起来真的非常麻烦

点赞  2019-8-23 21:20

见识了,感谢分享,这种资料还是第一次接触

点赞  2019-8-29 13:46

学习了

点赞  2019-8-31 14:05

楼主是用的3.3V转1.8V,还是MCU降压到1.8V直接连接呢?

点赞  2019-9-3 17:05

我也是靠在脸上声音很浑浊,很微弱,但是当我直接用手将他按在皮肤上时有杂音,也没有其他干扰,不知道楼主有没有遇到这种情况,(我用的不是ST的芯片,但是M3内核的芯片)

点赞  2019-9-24 11:38
引用: 天眼123 发表于 2019-9-24 11:38 我也是靠在脸上声音很浑浊,很微弱,但是当我直接用手将他按在皮肤上时有杂音,也没有其他干扰,不知道楼主 ...

是的,我也发现了杂音,怀疑是电引起的。

点赞  2019-9-24 11:54

在自己DIY的时候,要是有那种接线柱的插板,用于连接电线,估计会好看许多,也不用焊接了

点赞  2019-9-24 20:10

搞个挂式耳机,把25BA的板子用胶布粘上,挂入耳就可以录音了。录的声音很沉闷是因为传感器本身带宽的问题,音色不够亮。

点赞  2019-9-30 09:23
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复