我正在 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;
所以在这段代码之后,如果我都理解了数据表(我不确定......),在这段代码之后,我是否得到了以度秒为单位的值?因为我的代码的最终目标是使用互补滤波器或卡尔曼滤波器,并且该滤波器需要以 deg/s 为单位的陀螺值
答案 0 :(得分:0)
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;