我们在上一章已经实现了实时数据的读取,这一章节对其进行一下系统的测试,我们将从硬件方面到,软件测试看一下具体的变化情况。
基本连接如下:
我们先来看一下本次测试的数据类型,我们这里主要读取的运动数据包括ACC/GYRO/MAG。
板子上的传感器原理图如下:
一、ACC
ACC(Accelerometer,加速度计):测量设备在三个正交轴上的线性加速度,包括重力加速度。可用于判断设备姿态(如俯仰、翻滚)、检测运动状态(如静止、加速、自由落体)等 ,也就是说这个传感器测量的主要是动态数据加速度数据,静止和匀速应该是没有变化的,开发板中包括一个三轴(IIS2DH)和六轴(ISM330DHCX)都支持ACC的输出,在来到工程里面,我们可以看到ACC数据来自于三轴:
- #ifdef USE_IIS2DH
-
- 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;
- }
复制代码
我们在串口看一下不同状态的输出:
- 静止状态:
- Acc_X: -46, Acc_Y: -15, Acc_Z :1078
- 加速运动状态:
- Acc_X: -93, Acc_Y: 203, Acc_Z :812
复制代码
二、GYRO
GYRO(Gyroscope,陀螺仪):陀螺仪用于测量物体的角速度,即绕X、Y、Z三轴的旋转速率,单位为弧度/秒(radians/second)。其原理基于角动量守恒或科里奥利力效应,通过检测内部振动元件的位移变化换算角速度。这里的数据从开发板上来看来源于六轴(ISM330DHCX),从源码中可以看到:
- if ( BSP_MOTION_SENSOR_GetAxes(ISM330DHCX_0, MOTION_GYRO, &mptr->gyro ) == BSP_ERROR_COMPONENT_FAILURE )
- {
- mptr->gyro.x = 0;
- mptr->gyro.y = 0;
- mptr->gyro.z = 0;
- ret = BSP_ERROR_COMPONENT_FAILURE;
- }
复制代码
我们简单测试一下,主要通过移动和旋转看一下串口的输出差异:
- 平放桌面:
- Gyro_X:140, Gyro_Y:-560, Gyro_Z:-140
- 平面水平移动:
- Gyro_X:-770, Gyro_Y:-140, Gyro_Z:7000
- 平面水平转动:
- Gyro_X:59570, Gyro_Y:10220, Gyro_Z:-2450
- 平面垂直转动:
- Gyro_X:6720, Gyro_Y:112280, Gyro_Z:7280
复制代码
有上面的测试输出数去可以看出来,不同的动作会影响GYRO的输出。
三、MAG
MAG(Magnetometer,磁力计):测量环境磁场强度,通常用于确定设备相对于地磁北极的方向(即航向角 Yaw),相当于电子罗盘 。也就是对于地球这个大磁场的角度。这里用到的磁力计是U13IIS2MDC,源码中采集代码如下:
- if ( BSP_MOTION_SENSOR_GetAxes(IIS2MDC_0, MOTION_MAGNETO, &mptr->mag ) == BSP_ERROR_COMPONENT_FAILURE )
- {
- mptr->mag.x = 0;
- mptr->mag.y = 0;
- mptr->mag.z = 0;
- ret = BSP_ERROR_COMPONENT_FAILURE;
- }
复制代码
我们测试一下:
- 水平放置:
- Magn_X:-202, Magn_Y:82, Magn_Z:-300
- 水平90°:
- Magn_X:-196, Magn_Y:615, Magn_Z:34
- 垂直90°:
- Magn_X:79, Magn_Y:100, Magn_Z:271
复制代码
因为我家的朝向不是正南正北的,不过也可以看出来基本变化。
|