收到的ST这个骨振动传感器带了一个FPC适配板,免了制作PCB封装的问题,方便接线测试。
不过,因为电压支持只有 1.8V, 于是蝴蝶粉手头的 Nucleo 板子都不能直接用。要不得自己画一块带 3.3V <--> 1.8V 电平转换的板子,要不就想办法把MCU电压用成1.8V 以直接连接。
因为传感器的信号输出是 TDM 接口,STM32 的具备 SAI (Serial Audio Interface) 的型号都可以直接支持(真的不少了,SAI也算主流配置该有的)。我实验音频采集用的是 STM32L476, 借用了一块自己设计的带USB的评估板来接收TDM信号,因为没有引出空余的I/O口,只好飞线连接。
传感器一共需要 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
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)
这是选择在前三个slot发送数据,SDOUT相对WCLK没有延迟。SAI 输出 TDM WCLK 高电平为16个BCLK周期(一个slot长度)。
LIS25BA上电的时候是 power-down 的,TDM接口也关闭了,所以必须用 I2C 配置一下才可以用。
此内容由EEWORLD论坛网友cruelfox原创,如需转载或用于商业用途需征得作者同意并注明出处