AHRS
Dependencies: Eigen
BMI088.h@27:973e495f4711, 2020-01-14 (annotated)
- Committer:
- pmic
- Date:
- Tue Jan 14 14:24:03 2020 +0000
- Revision:
- 27:973e495f4711
- Parent:
- 25:fe14dbcef82d
- Child:
- 29:cd963a6d31c5
Change settings for BMI55 & BMI88.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
altb2 | 25:fe14dbcef82d | 1 | #ifndef BMI088_H |
altb2 | 25:fe14dbcef82d | 2 | #define BMI088_H |
altb2 | 25:fe14dbcef82d | 3 | |
altb2 | 25:fe14dbcef82d | 4 | #include <stdint.h> |
altb2 | 25:fe14dbcef82d | 5 | #include "mbed.h" |
altb2 | 25:fe14dbcef82d | 6 | |
altb2 | 25:fe14dbcef82d | 7 | #define BMI088_ACC_ADDRESS 0x18 |
altb2 | 25:fe14dbcef82d | 8 | |
altb2 | 25:fe14dbcef82d | 9 | #define BMI088_ACC_CHIP_ID 0x00 // Default value 0x1E |
altb2 | 25:fe14dbcef82d | 10 | #define BMI088_ACC_ERR_REG 0x02 |
altb2 | 25:fe14dbcef82d | 11 | #define BMI088_ACC_STATUS 0x03 |
altb2 | 25:fe14dbcef82d | 12 | |
altb2 | 25:fe14dbcef82d | 13 | #define BMI088_ACC_X_LSB 0x12 |
altb2 | 25:fe14dbcef82d | 14 | #define BMI088_ACC_X_MSB 0x13 |
altb2 | 25:fe14dbcef82d | 15 | #define BMI088_ACC_Y_LSB 0x14 |
altb2 | 25:fe14dbcef82d | 16 | #define BMI088_ACC_Y_MSB 0x15 |
altb2 | 25:fe14dbcef82d | 17 | #define BMI088_ACC_Z_LSB 0x16 |
altb2 | 25:fe14dbcef82d | 18 | #define BMI088_ACC_Z_MSB 0x17 |
altb2 | 25:fe14dbcef82d | 19 | |
altb2 | 25:fe14dbcef82d | 20 | #define BMI088_ACC_SENSOR_TIME_0 0x18 |
altb2 | 25:fe14dbcef82d | 21 | #define BMI088_ACC_SENSOR_TIME_1 0x19 |
altb2 | 25:fe14dbcef82d | 22 | #define BMI088_ACC_SENSOR_TIME_2 0x1A |
altb2 | 25:fe14dbcef82d | 23 | |
altb2 | 25:fe14dbcef82d | 24 | |
altb2 | 25:fe14dbcef82d | 25 | #define BMI088_ACC_INT_STAT_1 0x1D |
altb2 | 25:fe14dbcef82d | 26 | |
altb2 | 25:fe14dbcef82d | 27 | #define BMI088_ACC_TEMP_MSB 0x22 |
altb2 | 25:fe14dbcef82d | 28 | #define BMI088_ACC_TEMP_LSB 0x23 |
altb2 | 25:fe14dbcef82d | 29 | |
altb2 | 25:fe14dbcef82d | 30 | #define BMI088_ACC_CONF 0x40 |
altb2 | 25:fe14dbcef82d | 31 | #define BMI088_ACC_RANGE 0x41 |
altb2 | 25:fe14dbcef82d | 32 | |
altb2 | 25:fe14dbcef82d | 33 | #define BMI088_ACC_INT1_IO_CTRL 0x53 |
altb2 | 25:fe14dbcef82d | 34 | #define BMI088_ACC_INT2_IO_CTRL 0x54 |
altb2 | 25:fe14dbcef82d | 35 | #define BMI088_ACC_INT_MAP_DATA 0x58 |
altb2 | 25:fe14dbcef82d | 36 | |
altb2 | 25:fe14dbcef82d | 37 | #define BMI088_ACC_SELF_TEST 0x6D |
altb2 | 25:fe14dbcef82d | 38 | |
altb2 | 25:fe14dbcef82d | 39 | #define BMI088_ACC_PWR_CONF 0x7C |
altb2 | 25:fe14dbcef82d | 40 | #define BMI088_ACC_PWR_CTRl 0x7D |
altb2 | 25:fe14dbcef82d | 41 | |
altb2 | 25:fe14dbcef82d | 42 | #define BMI088_ACC_SOFT_RESET 0x7E |
altb2 | 25:fe14dbcef82d | 43 | |
altb2 | 25:fe14dbcef82d | 44 | #define BMI088_GYRO_ADDRESS 0x68 |
altb2 | 25:fe14dbcef82d | 45 | |
altb2 | 25:fe14dbcef82d | 46 | #define BMI088_GYRO_CHIP_ID 0x00 // Default value 0x0F |
altb2 | 25:fe14dbcef82d | 47 | |
altb2 | 25:fe14dbcef82d | 48 | #define BMI088_GYRO_RATE_X_LSB 0x02 |
altb2 | 25:fe14dbcef82d | 49 | #define BMI088_GYRO_RATE_X_MSB 0x03 |
altb2 | 25:fe14dbcef82d | 50 | #define BMI088_GYRO_RATE_Y_LSB 0x04 |
altb2 | 25:fe14dbcef82d | 51 | #define BMI088_GYRO_RATE_Y_MSB 0x05 |
altb2 | 25:fe14dbcef82d | 52 | #define BMI088_GYRO_RATE_Z_LSB 0x06 |
altb2 | 25:fe14dbcef82d | 53 | #define BMI088_GYRO_RATE_Z_MSB 0x07 |
altb2 | 25:fe14dbcef82d | 54 | |
altb2 | 25:fe14dbcef82d | 55 | #define BMI088_GYRO_INT_STAT_1 0x0A |
altb2 | 25:fe14dbcef82d | 56 | |
altb2 | 25:fe14dbcef82d | 57 | #define BMI088_GYRO_RANGE 0x0F |
altb2 | 25:fe14dbcef82d | 58 | #define BMI088_GYRO_BAND_WIDTH 0x10 |
altb2 | 25:fe14dbcef82d | 59 | |
altb2 | 25:fe14dbcef82d | 60 | #define BMI088_GYRO_LPM_1 0x11 |
altb2 | 25:fe14dbcef82d | 61 | |
altb2 | 25:fe14dbcef82d | 62 | #define BMI088_GYRO_SOFT_RESET 0x14 |
altb2 | 25:fe14dbcef82d | 63 | |
altb2 | 25:fe14dbcef82d | 64 | #define BMI088_GYRO_INT_CTRL 0x15 |
altb2 | 25:fe14dbcef82d | 65 | #define BMI088_GYRO_INT3_INT4_IO_CONF 0x16 |
altb2 | 25:fe14dbcef82d | 66 | #define BMI088_GYRO_INT3_INT4_IO_MAP 0x18 |
altb2 | 25:fe14dbcef82d | 67 | |
altb2 | 25:fe14dbcef82d | 68 | #define BMI088_GYRO_SELF_TEST 0x3C |
altb2 | 25:fe14dbcef82d | 69 | |
altb2 | 25:fe14dbcef82d | 70 | |
altb2 | 25:fe14dbcef82d | 71 | enum device_type_t { // device type |
altb2 | 25:fe14dbcef82d | 72 | ACC = 0x00, // |
altb2 | 25:fe14dbcef82d | 73 | GYRO = 0x01, // |
altb2 | 25:fe14dbcef82d | 74 | }; |
altb2 | 25:fe14dbcef82d | 75 | |
altb2 | 25:fe14dbcef82d | 76 | enum acc_scale_type_t { // measurement rage |
altb2 | 25:fe14dbcef82d | 77 | RANGE_3G = 0x00, // |
altb2 | 25:fe14dbcef82d | 78 | RANGE_6G = 0x01, // |
altb2 | 25:fe14dbcef82d | 79 | RANGE_12G = 0x02, // |
altb2 | 25:fe14dbcef82d | 80 | RANGE_24G = 0x03, // |
altb2 | 25:fe14dbcef82d | 81 | }; |
altb2 | 25:fe14dbcef82d | 82 | |
altb2 | 25:fe14dbcef82d | 83 | enum acc_odr_type_t { // output data rate |
altb2 | 25:fe14dbcef82d | 84 | ODR_12 = 0x05, // |
altb2 | 25:fe14dbcef82d | 85 | ODR_25 = 0x06, // |
altb2 | 25:fe14dbcef82d | 86 | ODR_50 = 0x07, // |
altb2 | 25:fe14dbcef82d | 87 | ODR_100 = 0x08, // |
altb2 | 25:fe14dbcef82d | 88 | ODR_200 = 0x09, // |
altb2 | 25:fe14dbcef82d | 89 | ODR_400 = 0x0A, // |
altb2 | 25:fe14dbcef82d | 90 | ODR_800 = 0x0B, // |
altb2 | 25:fe14dbcef82d | 91 | ODR_1600 = 0x0C, // |
altb2 | 25:fe14dbcef82d | 92 | }; |
altb2 | 25:fe14dbcef82d | 93 | |
altb2 | 25:fe14dbcef82d | 94 | enum acc_power_type_t { // power mode |
altb2 | 25:fe14dbcef82d | 95 | ACC_ACTIVE = 0x00, // |
altb2 | 25:fe14dbcef82d | 96 | ACC_SUSPEND = 0x03, // |
altb2 | 25:fe14dbcef82d | 97 | }; |
altb2 | 25:fe14dbcef82d | 98 | |
altb2 | 25:fe14dbcef82d | 99 | enum gyro_scale_type_t { // measurement rage |
altb2 | 25:fe14dbcef82d | 100 | RANGE_2000 = 0x00, // |
altb2 | 25:fe14dbcef82d | 101 | RANGE_1000 = 0x01, // |
altb2 | 25:fe14dbcef82d | 102 | RANGE_500 = 0x02, // |
altb2 | 25:fe14dbcef82d | 103 | RANGE_250 = 0x03, // |
altb2 | 25:fe14dbcef82d | 104 | RANGE_125 = 0x04, // |
altb2 | 25:fe14dbcef82d | 105 | }; |
altb2 | 25:fe14dbcef82d | 106 | |
altb2 | 25:fe14dbcef82d | 107 | enum gyro_odr_type_t { // output data rate |
altb2 | 25:fe14dbcef82d | 108 | ODR_2000_BW_532 = 0x00, // |
altb2 | 25:fe14dbcef82d | 109 | ODR_2000_BW_230 = 0x01, // |
altb2 | 25:fe14dbcef82d | 110 | ODR_1000_BW_116 = 0x02, // |
altb2 | 25:fe14dbcef82d | 111 | ODR_400_BW_47 = 0x03, // |
altb2 | 25:fe14dbcef82d | 112 | ODR_200_BW_23 = 0x04, // |
altb2 | 25:fe14dbcef82d | 113 | ODR_100_BW_12 = 0x05, // |
altb2 | 25:fe14dbcef82d | 114 | ODR_200_BW_64 = 0x06, // |
altb2 | 25:fe14dbcef82d | 115 | ODR_100_BW_32 = 0x07, // |
altb2 | 25:fe14dbcef82d | 116 | }; |
altb2 | 25:fe14dbcef82d | 117 | |
altb2 | 25:fe14dbcef82d | 118 | enum gyro_power_type_t { // power mode |
altb2 | 25:fe14dbcef82d | 119 | GYRO_NORMAL = 0x00, // |
altb2 | 25:fe14dbcef82d | 120 | GYRO_SUSPEND = 0x80, // |
altb2 | 25:fe14dbcef82d | 121 | GYRO_DEEP_SUSPEND = 0x20, // |
altb2 | 25:fe14dbcef82d | 122 | }; |
altb2 | 25:fe14dbcef82d | 123 | |
altb2 | 25:fe14dbcef82d | 124 | class BMI088 |
altb2 | 25:fe14dbcef82d | 125 | { |
altb2 | 25:fe14dbcef82d | 126 | public: |
altb2 | 25:fe14dbcef82d | 127 | |
altb2 | 25:fe14dbcef82d | 128 | // Constructor |
altb2 | 25:fe14dbcef82d | 129 | BMI088(I2C& i2c); |
altb2 | 25:fe14dbcef82d | 130 | |
altb2 | 25:fe14dbcef82d | 131 | // Deconstructor |
altb2 | 25:fe14dbcef82d | 132 | //virtual ~BMI088(); |
altb2 | 25:fe14dbcef82d | 133 | |
altb2 | 25:fe14dbcef82d | 134 | // Methods |
altb2 | 25:fe14dbcef82d | 135 | bool isConnection(void); |
altb2 | 25:fe14dbcef82d | 136 | |
altb2 | 25:fe14dbcef82d | 137 | void initialize(void); |
altb2 | 25:fe14dbcef82d | 138 | |
altb2 | 25:fe14dbcef82d | 139 | |
altb2 | 25:fe14dbcef82d | 140 | void setAccPowerMode(acc_power_type_t mode); |
altb2 | 25:fe14dbcef82d | 141 | void setGyroPowerMode(gyro_power_type_t mode); |
altb2 | 25:fe14dbcef82d | 142 | |
altb2 | 25:fe14dbcef82d | 143 | void setAccScaleRange(acc_scale_type_t range); |
altb2 | 25:fe14dbcef82d | 144 | void setAccOutputDataRate(acc_odr_type_t odr); |
altb2 | 25:fe14dbcef82d | 145 | |
altb2 | 25:fe14dbcef82d | 146 | void setGyroScaleRange(gyro_scale_type_t range); |
altb2 | 25:fe14dbcef82d | 147 | void setGyroOutputDataRate(gyro_odr_type_t odr); |
altb2 | 25:fe14dbcef82d | 148 | |
altb2 | 25:fe14dbcef82d | 149 | void getAcceleration(float* x, float* y, float* z); |
altb2 | 25:fe14dbcef82d | 150 | float getAccelerationX(void); |
altb2 | 25:fe14dbcef82d | 151 | float getAccelerationY(void); |
altb2 | 25:fe14dbcef82d | 152 | float getAccelerationZ(void); |
altb2 | 25:fe14dbcef82d | 153 | |
altb2 | 25:fe14dbcef82d | 154 | void getGyroscope(float* x, float* y, float* z); |
altb2 | 25:fe14dbcef82d | 155 | float getGyroscopeX(void); |
altb2 | 25:fe14dbcef82d | 156 | float getGyroscopeY(void); |
altb2 | 25:fe14dbcef82d | 157 | float getGyroscopeZ(void); |
altb2 | 25:fe14dbcef82d | 158 | |
altb2 | 25:fe14dbcef82d | 159 | int16_t getTemperature(void); |
altb2 | 25:fe14dbcef82d | 160 | |
altb2 | 25:fe14dbcef82d | 161 | uint8_t getAccID(void); |
altb2 | 25:fe14dbcef82d | 162 | uint8_t getGyroID(void); |
altb2 | 25:fe14dbcef82d | 163 | |
altb2 | 25:fe14dbcef82d | 164 | void resetAcc(void); |
altb2 | 25:fe14dbcef82d | 165 | void resetGyro(void); |
altb2 | 25:fe14dbcef82d | 166 | |
altb2 | 25:fe14dbcef82d | 167 | void readAccel(void); |
altb2 | 25:fe14dbcef82d | 168 | void readGyro(void); |
altb2 | 25:fe14dbcef82d | 169 | float gyroX, gyroY, gyroZ; // x, y, and z axis readings of the gyroscope (float value) |
pmic | 27:973e495f4711 | 170 | float accX, accY, accZ; // x, y, and z axis readings of the accelerometer (float value) |
altb2 | 25:fe14dbcef82d | 171 | |
altb2 | 25:fe14dbcef82d | 172 | private: |
altb2 | 25:fe14dbcef82d | 173 | |
altb2 | 25:fe14dbcef82d | 174 | // Methods |
altb2 | 25:fe14dbcef82d | 175 | void write8(device_type_t dev, uint8_t reg, uint8_t val); |
altb2 | 25:fe14dbcef82d | 176 | uint8_t read8(device_type_t dev, uint8_t reg); |
altb2 | 25:fe14dbcef82d | 177 | uint16_t read16(device_type_t dev, uint8_t reg); |
altb2 | 25:fe14dbcef82d | 178 | uint16_t read16Be(device_type_t dev, uint8_t reg); |
altb2 | 25:fe14dbcef82d | 179 | uint32_t read24(device_type_t dev, uint8_t reg); |
altb2 | 25:fe14dbcef82d | 180 | void read(device_type_t dev, uint8_t reg, uint8_t *buf, uint16_t len); |
altb2 | 25:fe14dbcef82d | 181 | |
altb2 | 25:fe14dbcef82d | 182 | // Class Variables |
altb2 | 25:fe14dbcef82d | 183 | I2C *i2c; |
altb2 | 25:fe14dbcef82d | 184 | uint16_t begin(); |
altb2 | 25:fe14dbcef82d | 185 | |
altb2 | 25:fe14dbcef82d | 186 | float accRange; |
altb2 | 25:fe14dbcef82d | 187 | float gyroRange; |
altb2 | 25:fe14dbcef82d | 188 | uint8_t devAddrAcc; |
altb2 | 25:fe14dbcef82d | 189 | uint8_t devAddrGyro; |
altb2 | 25:fe14dbcef82d | 190 | }; |
altb2 | 25:fe14dbcef82d | 191 | |
altb2 | 25:fe14dbcef82d | 192 | //extern BMI088 bmi088; |
altb2 | 25:fe14dbcef82d | 193 | |
altb2 | 25:fe14dbcef82d | 194 | #endif |