|
发表于 2013-8-7 12:59:42
|
显示全部楼层
之前已调试过,accel_self_test(accel, accel_st)和gyro_self_test(gyro, gyro_st)返回值都为非零,既陀螺仪与加速度都没过自检。单步调试发现gyro_self_test中如下红色字体的函数读取的寄存器值为非零,即数组tmp非零,继续往下执行,就看不懂他的算法了,也不清楚数组tmp的含义。不知道哪位高手能解答下。
static int gyro_self_test(long *bias_regular, long *bias_st)
{
int jj, result = 0;
unsigned char tmp[3];
float st_shift, st_shift_cust, st_shift_var;
if (i2c_read(st.hw->addr, 0x0D, 3, tmp))
return 0x07;
tmp[0] &= 0x1F;
tmp[1] &= 0x1F;
tmp[2] &= 0x1F;
for (jj = 0; jj < 3; jj++) {
st_shift_cust = labs(bias_regular[jj] - bias_st[jj]) / 65536.f;
if (tmp[jj]) {
st_shift = 3275.f / test.gyro_sens;
while (--tmp[jj])
st_shift *= 1.046f;
st_shift_var = st_shift_cust / st_shift - 1.f;
if (fabs(st_shift_var) > test.max_gyro_var)
result |= 1 << jj;
} else if ((st_shift_cust < test.min_dps) ||
(st_shift_cust > test.max_dps))
result |= 1 << jj;
}
return result;
}
另外想问下各位大侠:我现在手上有mpu6050以及mpu6050c两个型号,是否有谁用过mpu6050c,他们之间有什么差异? |
|