134 lines
3.3 KiB
C
134 lines
3.3 KiB
C
|
#ifndef BMI088DRIVER_H
|
|||
|
#define BMI088DRIVER_H
|
|||
|
|
|||
|
#include "stdint.h"
|
|||
|
#include "main.h"
|
|||
|
|
|||
|
#define BMI088_TEMP_FACTOR 0.125f
|
|||
|
#define BMI088_TEMP_OFFSET 23.0f
|
|||
|
|
|||
|
#define BMI088_WRITE_ACCEL_REG_NUM 6
|
|||
|
#define BMI088_WRITE_GYRO_REG_NUM 6
|
|||
|
|
|||
|
#define BMI088_GYRO_DATA_READY_BIT 0
|
|||
|
#define BMI088_ACCEL_DATA_READY_BIT 1
|
|||
|
#define BMI088_ACCEL_TEMP_DATA_READY_BIT 2
|
|||
|
|
|||
|
#define BMI088_LONG_DELAY_TIME 80
|
|||
|
#define BMI088_COM_WAIT_SENSOR_TIME 150
|
|||
|
|
|||
|
#define BMI088_ACCEL_IIC_ADDRESSE (0x18 << 1)
|
|||
|
#define BMI088_GYRO_IIC_ADDRESSE (0x68 << 1)
|
|||
|
|
|||
|
#define BMI088_ACCEL_3G_SEN 0.0008974358974f
|
|||
|
#define BMI088_ACCEL_6G_SEN 0.00179443359375f
|
|||
|
#define BMI088_ACCEL_12G_SEN 0.0035888671875f
|
|||
|
#define BMI088_ACCEL_24G_SEN 0.007177734375f
|
|||
|
|
|||
|
#define BMI088_GYRO_2000_SEN 0.00106526443603169529841533860381f
|
|||
|
#define BMI088_GYRO_1000_SEN 0.00053263221801584764920766930190693f
|
|||
|
#define BMI088_GYRO_500_SEN 0.00026631610900792382460383465095346f
|
|||
|
#define BMI088_GYRO_250_SEN 0.00013315805450396191230191732547673f
|
|||
|
#define BMI088_GYRO_125_SEN 0.000066579027251980956150958662738366f
|
|||
|
|
|||
|
// <20><><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>
|
|||
|
#if INFANTRY_ID == 0
|
|||
|
#define GxOFFSET 0.00247530174f
|
|||
|
#define GyOFFSET 0.000393082853f
|
|||
|
#define GzOFFSET 0.000393082853f
|
|||
|
#define gNORM 9.69293118f
|
|||
|
#elif INFANTRY_ID == 1
|
|||
|
#define GxOFFSET 0.0007222f
|
|||
|
#define GyOFFSET -0.001786f
|
|||
|
#define GzOFFSET 0.0004346f
|
|||
|
#define gNORM 9.876785f
|
|||
|
#elif INFANTRY_ID == 2
|
|||
|
#define GxOFFSET 0.0007222f
|
|||
|
#define GyOFFSET -0.001786f
|
|||
|
#define GzOFFSET 0.0004346f
|
|||
|
#define gNORM 9.876785f
|
|||
|
#elif INFANTRY_ID == 3
|
|||
|
#define GxOFFSET 0.00270364084f
|
|||
|
#define GyOFFSET -0.000532632112f
|
|||
|
#define GzOFFSET 0.00478090625f
|
|||
|
#define gNORM 9.73574924f
|
|||
|
#elif INFANTRY_ID == 4
|
|||
|
#define GxOFFSET 0.0007222f
|
|||
|
#define GyOFFSET -0.001786f
|
|||
|
#define GzOFFSET 0.0004346f
|
|||
|
#define gNORM 9.876785f
|
|||
|
#endif
|
|||
|
|
|||
|
/* IMU数据结构体 */
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
float Accel[3];
|
|||
|
|
|||
|
float Gyro[3];
|
|||
|
|
|||
|
float TempWhenCali;
|
|||
|
float Temperature;
|
|||
|
|
|||
|
float AccelScale;
|
|||
|
float GyroOffset[3];
|
|||
|
|
|||
|
float gNorm;
|
|||
|
} IMU_Data_t;
|
|||
|
|
|||
|
/* BMI088错误码枚举 */
|
|||
|
enum
|
|||
|
{
|
|||
|
BMI088_NO_ERROR = 0x00,
|
|||
|
BMI088_ACC_PWR_CTRL_ERROR = 0x01,
|
|||
|
BMI088_ACC_PWR_CONF_ERROR = 0x02,
|
|||
|
BMI088_ACC_CONF_ERROR = 0x03,
|
|||
|
BMI088_ACC_SELF_TEST_ERROR = 0x04,
|
|||
|
BMI088_ACC_RANGE_ERROR = 0x05,
|
|||
|
BMI088_INT1_IO_CTRL_ERROR = 0x06,
|
|||
|
BMI088_INT_MAP_DATA_ERROR = 0x07,
|
|||
|
BMI088_GYRO_RANGE_ERROR = 0x08,
|
|||
|
BMI088_GYRO_BANDWIDTH_ERROR = 0x09,
|
|||
|
BMI088_GYRO_LPM1_ERROR = 0x0A,
|
|||
|
BMI088_GYRO_CTRL_ERROR = 0x0B,
|
|||
|
BMI088_GYRO_INT3_INT4_IO_CONF_ERROR = 0x0C,
|
|||
|
BMI088_GYRO_INT3_INT4_IO_MAP_ERROR = 0x0D,
|
|||
|
|
|||
|
BMI088_SELF_TEST_ACCEL_ERROR = 0x80,
|
|||
|
BMI088_SELF_TEST_GYRO_ERROR = 0x40,
|
|||
|
BMI088_NO_SENSOR = 0xFF,
|
|||
|
};
|
|||
|
|
|||
|
extern IMU_Data_t BMI088;
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 初始化BMI088,传入连接的SPI总线handle,以及是否进行在线标定
|
|||
|
*
|
|||
|
* @param bmi088_SPI handle
|
|||
|
* @param calibrate 1为进行在线标定,0使用离线数据
|
|||
|
* @return uint8_t 成功则返回BMI088_NO_ERROR
|
|||
|
*/
|
|||
|
extern uint8_t BMI088Init(SPI_HandleTypeDef *bmi088_SPI, uint8_t calibrate);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 加速计初始化
|
|||
|
*
|
|||
|
* @return uint8_t
|
|||
|
*/
|
|||
|
extern uint8_t bmi088_accel_init(void);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 陀螺仪初始化
|
|||
|
*
|
|||
|
* @return uint8_t
|
|||
|
*/
|
|||
|
extern uint8_t bmi088_gyro_init(void);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 读取一次BMI088的数据,包括gyro和accel
|
|||
|
*
|
|||
|
* @param bmi088 传入BMI088实例(结构体)
|
|||
|
*/
|
|||
|
extern void BMI088_Read(IMU_Data_t *bmi088);
|
|||
|
|
|||
|
#endif
|