匿名四轴里关于零偏数据的一点问题想请教一下
本帖最后由 宁采儿 于 2013-11-10 23:06 编辑/**************************实现函数********************************************
//将iic读取到得数据分拆,放入相应寄存器
*******************************************************************************/
void MPU6050_Dataanl(void)
{
MPU6050_ACC_LAST.X=((((int16_t)mpu6050_buffer) << 8) | mpu6050_buffer) - ACC_OFFSET.X;
MPU6050_ACC_LAST.Y=((((int16_t)mpu6050_buffer) << 8) | mpu6050_buffer) - ACC_OFFSET.Y;
MPU6050_ACC_LAST.Z=((((int16_t)mpu6050_buffer) << 8) | mpu6050_buffer) - ACC_OFFSET.Z;
//跳过温度ADC
MPU6050_GYRO_LAST.X=((((int16_t)mpu6050_buffer) << 8) | mpu6050_buffer) - GYRO_OFFSET.X;
MPU6050_GYRO_LAST.Y=((((int16_t)mpu6050_buffer) << 8) | mpu6050_buffer) - GYRO_OFFSET.Y;
MPU6050_GYRO_LAST.Z=((((int16_t)mpu6050_buffer) << 8) | mpu6050_buffer) - GYRO_OFFSET.Z;
if(!GYRO_OFFSET_OK) //上位机发出矫正命令后才会运行一次的
{
static int32_t tempgx=0,tempgy=0,tempgz=0;
static uint8_t cnt_g=0;
if(cnt_g==0)
{
GYRO_OFFSET.X=0;
GYRO_OFFSET.Y=0;
GYRO_OFFSET.Z=0;
tempgx = 0;
tempgy = 0;
tempgz = 0;
cnt_g = 1;
return;
}
tempgx+= MPU6050_GYRO_LAST.X;
tempgy+= MPU6050_GYRO_LAST.Y;
tempgz+= MPU6050_GYRO_LAST.Z;
if(cnt_g==200)
{
GYRO_OFFSET.X=tempgx/cnt_g;
GYRO_OFFSET.Y=tempgy/cnt_g;
GYRO_OFFSET.Z=tempgz/cnt_g;
cnt_g = 0;
GYRO_OFFSET_OK = 1;
// EE_SAVE_GYRO_OFFSET();//保存数据
return;
}
cnt_g++;
}
看到这里我就郁闷了,请问什么是零偏数据?为什么零偏数据是由读出的陀螺数据累加后取平均值得来的?还请大神指点一二。
还有一点:上位机里面有个数据校准,那么校准数据是怎么校准的 呵呵你懂的 四轴飞行器 发表于 2013-11-10 23:05 static/image/common/back.gif
呵呵你懂的
这么快就有人回复了,谢谢。不过我真不懂 {:lol:} 简单解答一下吧。陀螺仪,加速度计,根据安装偏差和温度等环境因素,静态输出不是0.这样直接用的话,算出来的数据就有问题。
所以要减去静止时的数度。静止时读回一些数据做平均,效果会更好。 qwe2231695 发表于 2013-11-10 23:46 static/image/common/back.gif
简单解答一下吧。陀螺仪,加速度计,根据安装偏差和温度等环境因素,静态输出不是0.这样直接用的话 ...
意思明白些了,那校准是怎么回事啊,零偏数据指静止时陀螺仪读出的的数据么 宁采儿 发表于 2013-11-11 00:20 static/image/common/back.gif
意思明白些了,那校准是怎么回事啊,零偏数据指静止时陀螺仪读出的的数据么 ...
灰常感谢
页:
[1]