如何解决读取寄存器 LSM6DSO32 Arduino
我想从 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 举报,一经查实,本站将立刻删除。