1、STWINKT1B上有2个可用于运行检测的传感器IIS2DH和ISM330DHCX。IIS2DH是一款三轴低功耗加速度计,广泛用于需要低功耗和高精度的消费电子、工业和医疗设备中。支持 ±2g, ±4g, ±8g, ±16g 的测量范围;内置温度传感器:可用于温度补偿,提高测量精度。
32级FIFO缓冲区,减轻了主处理器的负担,能够在低功耗模式下实现数据采集数据。数据读取支持SPI/I²C接口。
ISM330DHCX 是一款高性能的 6 轴惯性测量单元 (IMU)。集成了三轴加速度计和三轴陀螺仪。三轴加速度计测量范围可配置为 ±2g, ±4g, ±8g, ±16g;三轴陀螺仪测量范围可配置为 ±125/±250/±500/±1000/±2000/±4000 dps。数据读取也支持SPI/I²C。
2、下面的测试使用IIS2DH进行运动检测。IIS2DH和ISM330DHCX都使用SPI3 进行通信。
初始化IIS2DH
BSP_MOTION_SENSOR_Init(IIS2DH_0, MOTION_ACCELERO);
BSP_MOTION_SENSOR_SetOutputDataRate(IIS2DH_0, MOTION_ACCELERO, IIS2DH_ACC_ODR);
BSP_MOTION_SENSOR_SetFullScale(IIS2DH_0, MOTION_ACCELERO, IIS2DH_ACC_FS);
读取数据
if ( BSP_MOTION_SENSOR_GetAxes( IIS2DH_0, MOTION_ACCELERO, &mptr->acc ) == BSP_ERROR_COMPONENT_FAILURE )
{
mptr->acc.x = 0;
mptr->acc.y = 0;
mptr->acc.z = 0;
ret = BSP_ERROR_COMPONENT_FAILURE;
}
将数据传输到PC上的串口
size = sprintf(data_s, "Acc_X: %d, Acc_Y: %d, Acc_Z :%d,Acc_All:%d\r\n", (int)rptr->acc.x, (int)rptr->acc.y, (int)rptr->acc.z,ABS((int)rptr->acc.x)+ABS((int)rptr->acc.y)+ABS((int)rptr->acc.z));
osPoolFree(sensorPool_id, rptr); // free memory allocated for message
BSP_LED_Toggle(LED1);
CDC_Transmit_FS(( uint8_t * )data_s, size);
数据如下
读出来的数据包括xyz的加速度,还有简单对3个轴进行取绝对值累加的值。通过晃动开发板模拟运动,将输出的数据绘图如下。
可以看到开始和最后静止的情况下,xyz的数据保持不变,晃动开发板3个轴的数据开始变化。
Acceleration Difference 的值通过简单的计算,将3个轴的变化累加,这个数据越大表示运动越剧烈。
静止的时候Acceleration Difference靠近0轴附近。
|