基于NUCLEO-767ZI的LIS25BA骨振动传感器数据采集
[复制链接]
本帖最后由 sylar^z 于 2019-9-9 08:06 编辑
活动的ST骨振动传感器板子,先上个图。板子直接焊接一个2.54的双排针就可以连线了。
LIS25BA这个传感的工作电压是1.8V(1.71V-1.99V)的,手头的板子是3.3V的。要连上传感器就需要一块3.3V-1.8V电平转换板。于是在某宝上买了一块TXS0108的转换板,解决这个问题。
另外,手头上的板子要不是没有SAI接口,要不就是难以引出接口。还好EE可以借用开发板,就想讲管管接了一块NUCLEO-767ZI板子。感谢管管@ nmg。硬件搞定后,就是下面这张图了。
LIS25BA控制通讯是I2C协议,最高可支持400K速率。传感器上寄存器不多,只需配置2个寄存器就可完成LIS25BA的设置。
TMD控制传感器。使能TMD功能、设定采样率等。
LIS25BA控制传感器。将PD设置为0,使能传感器
LIS25BA的数据采集是TMD接口,且需要主控提供采样时钟。信号线分别是传感器上的MCLK、WCLK、BCLK、SD。其中MCLK为传感器数据采样时钟,。WCLK为数据采样频率,可取8KHz、16KHz、24KHz。BCLK为码流速率,LIS25BA数据包含8个slot, 16bit数据。根据手册上对以上三个时钟的要求,MCLK固定为12.288MHz,BCLK和WCLK必须能被MCLK整除,同时BCLK也必须是WCLK的整数倍。这样可以保证采样数据及时序的严格吻合。
当MCLK不是标准的12.288MHz,只要保证三个时钟的整数倍关系,就可以稳定采集数据,只是数据对应采样频率(比如16KKHz)出现相对应的变化。
在这种要求下,在8KHz、16KHz、24KHz下,MCLK的频率分别需设置为WCLK的1536倍、768倍和512倍。从F7手册中发现MCLK的频率与WCLK频率为固定的256倍。这就需要额外提供一个同步的时钟来做为MCLK。我启用了另外一路SAI的MCLK来获得12.288NHz的时钟输出。
程序配置使用了STM32CubeMX,分别配置了SAI1、SAI2、I2C1以及对应DMA功能。SAI1用于采集LIS25BA的数据,16KHz,8SLOT。开启DMA传输。
时钟上SAI1采用32MHz的PLLSAI时钟,SAI2采用了96MHz的PLLI2S时钟,实现SAI2的MCLK频率为SAI1频率的3倍即768倍于SAI1的MCLK。
下面是程序运行采集到的LIS25BA数据,只需提取8个SLOT数据中的前三个即是传感器的XYZ三轴数据。
|