[传感器大派送]+KX224加速度传感器之FFT变换
前言 感谢ROHM社区提供的传感器套件,KX224是一款加速度传感器模块。
测试目标 1、测试KX224三轴加速度数据,通过串口传输出来,绘制波形曲线。 2、读加速度数据进行FFT变换,得出频域波形数据。
硬件组成与连接 1、STM32F723E-DISCO开发板 2、ROHM的传感器底板Sensor Shield 3、KX224-1053加速度传感器 由于STM32F723E-DISCO开发板有arduino接口,插上ROHM的传感器底板刚好合适,不需要额外的接线,十分方便,最后将我们的KX224-1053传感器模块插入传感器底板的I2C_1接口即可。 注意需要修改传感器供电,我这里选择的是3V,安装完成如下图:
传感器认识 了解任何一款传感器,最好的方式就是熟读它的数据手册,所以,我拿到传感器的第一时间是去ROHM下载官方资料。 AN090-Getting-Started:这个文档是一个很好的文档,能够帮助开发者快速上手KX224加速度芯片的一个手册,十分有用。 KX224-1053-Specifications-Rev-2.0:这个文档就是KX224的数据手册了。 kx224-i2c-evk-001_ug-e:这个是介绍KX224模块基于arduino开发的,这个对我用处不大,因为本次我不使用arduino。 sensorshield-evk-003_ug-e:这个是介绍传感器底板的,也是基于arduino的。 剩下的资料也是在官网下载的,一个是arduino的驱动和例程,另一个是传感器的寄存器定义文件。
通过熟悉这些资料,本次打算是使用+/-8G的范围,另外这个传感器的IIC接口支持高速、快速、标准IIC时序, “The I 2 C interface is compliantwith high-speed mode, fast mode, and standard mode I 2 C protocols.” 这个可大大的方便我这边的开发,意味着我使用STM32编写IIC的程序时,可以直接使用,不需要自己在额外的去编写代码。 寄存器的配置使用,在AN090-Getting-Started文档中也有详细的说明。
程序编写 使用STM32CubeMX软件,选择STM32F723E-DISCO开发板型号,软件会根据这板卡的GPIO口定义,生成KEIL工程。 在后面的程序中,我需要使用到printf()这个函数,所以需要先映射一下fputc(): 在单片机完成初始化之后,需要对KX224芯片初始化,初始化的方式完全按照上文手册中提到的方式。。 最后只需要在主函数中,间隔2MS的时间,循环读取加速度传感器数据即可。 需要注意的是,我设置的传感器的IIC接口为400KHZ的速度,通过逻辑分析仪的时序分析,完整的读取一次三轴加速度数据,需要0.21MS的时间,如下图所示:
分别将X、Y、Z轴数据上传到PC串口如图所示:
绿色为X轴,蓝色为Y轴,红色为Z轴。 ====================================================================== 在有的项目设计中,如计步器,需要使用FFT去判断数据和波形是否在合理的范围,需要对数据进行FFT变换。 本次FFT计算,使用STM32F723的DSP库。大致流程如下图:
将程序下载到开发板,运行波形如下图: 图中绿色为时域的Z轴数据,蓝色为频域的波形。 程序源码 |