需要帮助读取陀螺仪数据
Need help for reading gyroscope data
我正在 Arduino SAMD21 Cortex M0 上使用 LSM6DSO32。所以在阅读数据表后,我对原始数据有一些疑问。所以对于陀螺仪我读
我想在 FS = ±500 dps
上使用我的陀螺仪。
为了读取原始数据,我这样做了(寄存器数据表中的第 79 页),此代码的灵感来自 st cource code here
Wire.beginTransmission(DSO_ADDRESS);
Wire.write(0x20);
Wire.endTransmission();
Wire.requestFrom(DSO_ADDRESS, 14);
static int16_t data_raw_angular_rate[3];
uint8_t buff[14];
Wire.readBytes(buff, 14);
//some codes here for temperature
//get raw data from gyro
data_raw_angular_rate[0] = (int16_t)buff[1];
data_raw_angular_rate[0] = (val[0] * 256) + (int16_t)buff[0];
data_raw_angular_rate[1] = (int16_t)buff[3];
data_raw_angular_rate[1] = (val[1] * 256) + (int16_t)buff[2];
data_raw_angular_rate[2] = (int16_t)buff[5];
data_raw_angular_rate[2] = (val[2] * 256) + (int16_t)buff[4];
//convert data 17.5 comes from the datasheet for FS = ±500 dps
float_t gyro_x = ((float_t)data_raw_angular_rate[0]) * 17.5f;
float_t gyro_y = ((float_t)data_raw_angular_rate[1]) * 17.5f;
float_t gyro_z = ((float_t)data_raw_angular_rate[2]) * 17.5f;
所以在这段代码之后,如果我已经完全理解了数据表(我不确定......),在这段代码之后,我是否得到以度为单位的值?因为我的代码的最后 objective 是使用互补滤波器或卡尔曼滤波器,并且此滤波器需要 deg/s
中的陀螺仪值
G_So 以 mdps(每秒毫度)定义。这意味着在 ±500 dps 下,值为 1 对应于每秒 0.0175 度。所以:
float_t gyro_x = ((float_t)data_raw_angular_rate[0]) * 0.0175f;
float_t gyro_y = ((float_t)data_raw_angular_rate[1]) * 0.0175f;
float_t gyro_z = ((float_t)data_raw_angular_rate[2]) * 0.0175f;
我正在 Arduino SAMD21 Cortex M0 上使用 LSM6DSO32。所以在阅读数据表后,我对原始数据有一些疑问。所以对于陀螺仪我读
我想在 FS = ±500 dps
上使用我的陀螺仪。
为了读取原始数据,我这样做了(寄存器数据表中的第 79 页),此代码的灵感来自 st cource code here
Wire.beginTransmission(DSO_ADDRESS);
Wire.write(0x20);
Wire.endTransmission();
Wire.requestFrom(DSO_ADDRESS, 14);
static int16_t data_raw_angular_rate[3];
uint8_t buff[14];
Wire.readBytes(buff, 14);
//some codes here for temperature
//get raw data from gyro
data_raw_angular_rate[0] = (int16_t)buff[1];
data_raw_angular_rate[0] = (val[0] * 256) + (int16_t)buff[0];
data_raw_angular_rate[1] = (int16_t)buff[3];
data_raw_angular_rate[1] = (val[1] * 256) + (int16_t)buff[2];
data_raw_angular_rate[2] = (int16_t)buff[5];
data_raw_angular_rate[2] = (val[2] * 256) + (int16_t)buff[4];
//convert data 17.5 comes from the datasheet for FS = ±500 dps
float_t gyro_x = ((float_t)data_raw_angular_rate[0]) * 17.5f;
float_t gyro_y = ((float_t)data_raw_angular_rate[1]) * 17.5f;
float_t gyro_z = ((float_t)data_raw_angular_rate[2]) * 17.5f;
所以在这段代码之后,如果我已经完全理解了数据表(我不确定......),在这段代码之后,我是否得到以度为单位的值?因为我的代码的最后 objective 是使用互补滤波器或卡尔曼滤波器,并且此滤波器需要 deg/s
中的陀螺仪值G_So 以 mdps(每秒毫度)定义。这意味着在 ±500 dps 下,值为 1 对应于每秒 0.0175 度。所以:
float_t gyro_x = ((float_t)data_raw_angular_rate[0]) * 0.0175f;
float_t gyro_y = ((float_t)data_raw_angular_rate[1]) * 0.0175f;
float_t gyro_z = ((float_t)data_raw_angular_rate[2]) * 0.0175f;