BMI088性能测试

早就听闻BMI088传感器性能好,抗震性强,精度高的大名了,各种商业飞控都在用它,为了探究它到底有没有这么厉害,还是徒有虚名,本文决定用BMI088传感器进行震动性能测试并和其它牌子的传感器进行对比分析。
在这里插入图片描述

由于市面上买不到成品的bmi088模块,所以我自己画了一个,原理图如下所示:在这里插入图片描述
这是个7轴的imu模块,集成了一个bmi088,和一个气压计spl06001,相当的简陋,连个稳压的没有。
bmi088模块pcb
由于芯片封装很小,不太好焊接,于是我把芯片寄给嘉立创smt。
在这里插入图片描述
做好了以后,在四旋翼实验平台上进行飞行测试,震源来自四个电机,记录下飞行时传感器输出的数据,并对比其它品牌的imu的数据。
z轴角速度数据对比z轴角速度数据对比
y轴角速度数据对比y轴角速度数据对比
x轴角速度数据对比x轴角速度数据对比

x轴加速度数据对比x轴加速度数据对比

y轴加速度数据对比
y轴加速度数据对比
z轴加速度数据对比z轴加速度数据对比

我选了几款淘宝上比较热门的传感器,分别是icm20948,icm42605,进行对比分析。在以电机旋翼为震动来源的情况下,采集得到的传感器原始数据如上图所示,由图中可知,bmi088传感器的加速度计噪声较低仅有0.05g~0.1g左右的噪声,抗震性良好,其它传感器噪声在0.2到0.5g左右,但是bmi088的陀螺仪就没看出什么优势,感觉差不多。

无人机旋翼噪声确实是一个比较棘手的问题,光靠传感器或减震板难以处理这个问题,还需要靠算法滤波处理,以后需要多多研究这方面的解决办法

另外如果有朋友对这个模块感兴趣,我已经在主页上传了其pcb文件以及驱动代码,有兴趣的可以下载。如下是部分代码实例:

void BMI088_Init()
{
	BMI088_SPI_Activation();  
	delay_ms(50);	
	BMI088_ReadID();
	
	BMI088_acc_write(0x7e, 0xb6); //复位
	delay_ms(20);				  //100
	BMI088_SPI_Activation();
	delay_ms(20);
	BMI088_acc_write(0x7d, 0x04); //打开加速度计
	delay_ms(20);
	//(0x02,0x0b)加速度计ODR 800hz,无重采样;  (0x00,0x0c) ODR 1600hz,4重采样
	BMI088_acc_write(0x40, ((1 << 7) | (0x00 << 4) | (0x0b << 0)));
	delay_ms(20);
	BMI088_acc_write(0x41, 0x02); //0x03:加速度计量程24g 0x02:加速度计量程12g
	delay_ms(20);
	BMI088_acc_write(0x7c, 0x00); //进入Active模式
	delay_ms(20);

	BMI088_gyro_write(0x14, 0xb6); //复位
	delay_ms(20);
	BMI088_gyro_write(0x0f, 0x01); //GYRO_RANGE(0x0f): 0x00 :2000deg/s  0x01 :1000deg/s 
	delay_ms(20);
	//0x01: ODR=2000hz bandwidth=230hz, 0x00 ODR=2000hz bandwidth=532hz,0x02: ODR=1000hz bandwidth=116hz
	BMI088_gyro_write(0x10, 0x01); //0x01
	delay_ms(20);
	BMI088_gyro_write(0x11, 0x00); //GYRO_LPM1(0x11): normal mode
	delay_ms(20);


}

 /这里读7个数据是因为第一个数据是无效的,取后面6个
void BMI088_ReadAcc()
{
	BMI088_acc_read_bytes(ACC_data,7,BMI088_data_Buf);
	BMI088_Acc.X = BMI088_data_Buf[2]<<8 | BMI088_data_Buf[1];
	BMI088_Acc.Y = BMI088_data_Buf[4]<<8 | BMI088_data_Buf[3];
	BMI088_Acc.Z = BMI088_data_Buf[6]<<8 | BMI088_data_Buf[5];

	my_sensor.accel_raw.x  =  BMI088_Acc.X   ;
	my_sensor.accel_raw.y  =  BMI088_Acc.Y   ;
	my_sensor.accel_raw.z  =  BMI088_Acc.Z   ;
	
}

void BMI088_ReadGyro()
{
	BMI088_gyro_read_bytes(GYR_data,6,BMI088_data_Buf);
	BMI088_Gyr.X = BMI088_data_Buf[1]<<8 | BMI088_data_Buf[0];
	BMI088_Gyr.Y = BMI088_data_Buf[3]<<8 | BMI088_data_Buf[2];
	BMI088_Gyr.Z = BMI088_data_Buf[5]<<8 | BMI088_data_Buf[4];
																		
	my_sensor.gyro_raw.x   =  BMI088_Gyr.X   ;
	my_sensor.gyro_raw.y   =  BMI088_Gyr.Y   ;
	my_sensor.gyro_raw.z   =  BMI088_Gyr.Z   ;
}

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值