需要帮助读取陀螺仪数据

时间:2021-03-30 17:41:18

标签: c arduino gyroscope

我正在 Arduino SAMD21 Cortex M0 上使用 LSM6DSO32。因此,在阅读数据表后,我对原始数据进行了一些询问。所以对于陀螺仪我读了

enter image description here

我想通过 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 为单位的陀螺值

1 个答案:

答案 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;