问题描述
我想从 LSM6DSO32 捕获器读取一些寄存器。但是我有一个问题,我得到的值很奇怪。我使用 Atmel SAMD21 Cortex M0 和 i2C 与捕获者进行通信。首先,我将捕获器设置为 8g 和 500°,用于陀螺仪
#define DSO_ADDRESS 0x6A
void setup() {
SerialUSB.begin(115200);
while(!SerialUSB);
Wire.begin();
//gyro 500°
Wire.beginTransmission(DSO_ADDRESS);
Wire.write(0x11);
Wire.write(0x44);
Wire.endTransmission();
//accel 8g
Wire.beginTransmission(DSO_ADDRESS);
Wire.write(0x10);
Wire.write(0x48);
Wire.endTransmission();
}
对我来说这是有效的,因为如果我在获得 0x48 值后读取 0x10,并且如果我尝试读取我的注册人,我会得到很好的值 0x6C。
之后我尝试读取寄存器值,我的 readSensor 函数
//gloabl variables to store values
int temperature;
int gyro_raw[3] = {0,0};
int acc_raw[3] = {0,0};
void readSensor(){
Wire.beginTransmission(DSO_ADDRESS);
Wire.write(0x20);
Wire.endTransmission();
Wire.requestFrom(DSO_ADDRESS,14);
uint8_t buff[14];
Wire.readBytes(buff,14);
temperature = buff[1] << 8 | buff[0];
gyro_raw[X] = buff[3] << 8 | buff[2];
gyro_raw[Y] = buff[5] << 8 | buff[4];
gyro_raw[Z] = buff[7] << 8 | buff[6];
acc_raw[X] = buff[9] << 8 | buff[8];
acc_raw[Y] = buff[11] << 8 | buff[10];
acc_raw[Z] = buff[13] << 8 | buff[12];
}
所以如果我调用这个函数 2000 次来获取偏移量,我会得到非常奇怪的值
long gyro_offset[3] = {0,0};
int max_samples = 500;
for (int i = 0; i < max_samples; i++) {
readSensor();
gyro_offset[X] += gyro_raw[X];
gyro_offset[Y] += gyro_raw[Y];
gyro_offset[Z] += gyro_raw[Z];
delay(50);
}
gyro_offset[X] /= max_samples;
gyro_offset[Y] /= max_samples;
gyro_offset[Z] /= max_samples;
X
Y
和 Z
由值 0,1 和 2 定义。所以如果我打印 gyro_offset[X]
我得到值 23 对我来说这是正常的,但对于gyro_offset[Y]
和 gyro_offset[Z]
我在 65514 附近得到了一个很大的值,对我来说这些都不好,不是吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)