读取寄存器 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 YZ 由值 0,1 和 2 定义。所以如果我打印 gyro_offset[X] 我得到值 23 对我来说这是正常的,但对于gyro_offset[Y]gyro_offset[Z] 我在 65514 附近得到了一个很大的值,对我来说这些都不好,不是吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)