嵌入式技术论坛
直播中

chumowei

8年用户 703经验值
擅长:电源/新能源
私信 关注
[问答]

为什么用BMI160软件包读出来的加速度传感器值是异常的呢

我用rtthread的sensor框架,添加rtt的BMI160软件包,发现读出来的加速度传感器值异常。

当板子平放在桌面上,静止不动,打印的log是

当板子垫一个U盘,使他倾斜一个角度,静止不动,打印的log是

感觉像是陀螺仪的数据而不是加速度的。

代码如下

int bmx160_port(void)

{

struct rt_sensor_config cfg;

cfg.intf.dev_name = “i2c3”;

cfg.intf.user_data = (void *)0x68;

cfg.irq_pin.pin = RT_PIN_NONE;

cfg.irq_pin.mode = PIN_MODE_INPUT_PULLDOWN;

rt_hw_bmx160_init(“bmi160”, &cfg);

return 0;

}

static void sensor_show_data(rt_size_t num, rt_sensor_t sensor, struct rt_sensor_data *sensor_data)

{

switch (sensor->info.type)

{

case RT_SENSOR_CLASS_ACCE:

rt_kprintf(“num:%3d, x:%5d, y:%5d, z:%5d, timestamp:%5d\n”, num, sensor_data->data.acce.x, sensor_data->data.acce.y, sensor_data->data.acce.z, sensor_data->timestamp);

break;

case RT_SENSOR_CLASS_GYRO:

rt_kprintf(“num:%3d, x:%8d, y:%8d, z:%8d, timestamp:%5d\n”, num, sensor_data->data.gyro.x, sensor_data->data.gyro.y, sensor_data->data.gyro.z, sensor_data->timestamp);

break;

case RT_SENSOR_CLASS_MAG:

rt_kprintf(“num:%3d, x:%5d, y:%5d, z:%5d, timestamp:%5d\n”, num, sensor_data->data.mag.x, sensor_data->data.mag.y, sensor_data->data.mag.z, sensor_data->timestamp);

break;

case RT_SENSOR_CLASS_HUMI:

rt_kprintf(“num:%3d, humi:%3d.%d%%, timestamp:%5d\n”, num, sensor_data->data.humi / 10, sensor_data->data.humi % 10, sensor_data->timestamp);

break;

case RT_SENSOR_CLASS_TEMP:

rt_kprintf(“num:%3d, temp:%3d.%dC, timestamp:%5d\n”, num, sensor_data->data.temp / 10, sensor_data->data.temp % 10, sensor_data->timestamp);

break;

case RT_SENSOR_CLASS_BARO:

rt_kprintf(“num:%3d, press:%5d, timestamp:%5d\n”, num, sensor_data->data.baro, sensor_data->timestamp);

break;

case RT_SENSOR_CLASS_STEP:

rt_kprintf(“num:%3d, step:%5d, timestamp:%5d\n”, num, sensor_data->data.step, sensor_data->timestamp);

break;

default:

break;

}

}

int main(void)

{

rt_device_t dev = RT_NULL;

rt_size_t res, i=0;

struct rt_sensor_data data;

rt_thread_mdelay(1000);

bmx160_port();

/* 查找系统中的传感器设备 */

dev = rt_device_find(“acce_bmi”);

if (dev == RT_NULL){

rt_kprintf(“Can’t find device\n”);

return 0;

}

/* 以轮询模式打开传感器设备 */

if (rt_device_open(dev, RT_DEVICE_FLAG_RDONLY) != RT_EOK){

rt_kprintf("open device failed!");

return 0;

}

while (1){

rt_thread_mdelay(1000);

/* 从传感器读取一个数据 */

res = rt_device_read(dev, 0, &data, 1);

if (res != 1){

rt_kprintf("read data failed!size is %d\r\n", res);

}

else{

    sensor_show_data(i, (rt_sensor_t)dev, &data);

}

}

}

回帖(2)

李俊

2022-8-9 09:56:04
看起来数据是没问题的,加速度计的值确实z轴要比xy轴大得多,倾斜之后xy的值也有变化,这里检查下输出数据的单位,然后换算成m/s/s看看是多少
陀螺仪的值看起来也是正常的,陀螺仪静止时候输出应该是接近0的,且与倾斜角度无关
举报

李鑫

2022-8-9 09:56:13
这个应该是陀螺仪的值的,加速度计在静止前提下应该只有地心加速度值
举报

更多回帖

发帖
×
20
完善资料,
赚取积分