Files
motor/Common/spi/InertialSensor_Invensensev2.h
T
2024-09-26 22:32:20 +08:00

79 lines
1.9 KiB
C

#ifndef __INERTIALSENSOR_INVENSENSE2_H__
#define __INERTIALSENSOR_INVENSENSE2_H__
#include "SPIDevice.h"
#include <stdint.h>
enum Invensensev2_Type {
Invensensev2_ICM20948 = 0,
Invensensev2_ICM20648,
Invensensev2_ICM20649
};
typedef struct {
float accel[3];
float gyro[3];
uint8_t accel_count;
uint8_t gyro_count;
} ACCUM2_t;
typedef struct {
int16_t _raw_temp;
float temp_sensitivity; // degC/LSB
float temp_zero; // degC
float _temp_filtered;
float _accel_scale;
float _fifo_accel_scale;
float _fifo_gyro_scale;
GPIO_TypeDef* _drdy;
uint16_t _drdy_Pin;
SPI_DEV_t* _dev;
const char* name;
bool success;
// which sensor type this is
enum Invensensev2_Type _inv2_type;
// are we doing more than 1kHz sampling?
bool _fast_sampling;
// what downsampling rate are we using from the FIFO for gyros?
uint8_t _gyro_fifo_downsample_rate;
// what downsampling rate are we using from the FIFO for accels?
uint8_t _accel_fifo_downsample_rate;
// what rate are we generating samples into the backend for gyros?
uint16_t _gyro_backend_rate_hz;
// what rate are we generating samples into the backend for accels?
uint16_t _accel_backend_rate_hz;
// Last status from register user control
uint8_t _last_stat_user_ctrl;
// buffer for fifo read
uint8_t *_fifo_buffer;
uint8_t _current_bank;
float _clip_limit;
/*
accumulators for sensor_rate sampling
See description in _accumulate_sensor_rate_sampling()
*/
ACCUM2_t _accum;
} InertialSensor_Invensensev2_t;
bool InertialSensor_Invensensev2_init(InertialSensor_Invensensev2_t *imu, const char *name, SPI_DEV_t* dev, GPIO_TypeDef* drdy, uint16_t drdy_Pin);
void InertialSensor_Invensensev2_update(InertialSensor_Invensensev2_t *imu);
#endif /* __INERTIALSENSOR_INVENSENSE2_H__ */