Testsetup BMI088 (SEED), gyro ok, Acc Problem T:\T-IMS-IndNav\01_Technisches\70_Hardwareentwicklung\20190828_083342.jpg
Dependencies: mbed
BMI088.h@0:577a6606809f, 2019-08-28 (annotated)
- Committer:
- altb2
- Date:
- Wed Aug 28 08:32:22 2019 +0000
- Revision:
- 0:577a6606809f
First implement, ; acc does not work (it worked once!)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
altb2 | 0:577a6606809f | 1 | /* |
altb2 | 0:577a6606809f | 2 | * A library for Grove - 6-Axis Accelerometer&Gyroscope(BMI088) |
altb2 | 0:577a6606809f | 3 | * |
altb2 | 0:577a6606809f | 4 | * Copyright (c) 2018 seeed technology co., ltd. |
altb2 | 0:577a6606809f | 5 | * Author : Wayen Weng |
altb2 | 0:577a6606809f | 6 | * Create Time : June 2018 |
altb2 | 0:577a6606809f | 7 | * Change Log : |
altb2 | 0:577a6606809f | 8 | * |
altb2 | 0:577a6606809f | 9 | * The MIT License (MIT) |
altb2 | 0:577a6606809f | 10 | * |
altb2 | 0:577a6606809f | 11 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
altb2 | 0:577a6606809f | 12 | * of this software and associated documentation files (the "Software"), to deal |
altb2 | 0:577a6606809f | 13 | * in the Software without restriction, including without limitation the rights |
altb2 | 0:577a6606809f | 14 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
altb2 | 0:577a6606809f | 15 | * copies of the Software, and to permit persons to whom the Software is |
altb2 | 0:577a6606809f | 16 | * furnished to do so, subject to the following conditions: |
altb2 | 0:577a6606809f | 17 | * |
altb2 | 0:577a6606809f | 18 | * The above copyright notice and this permission notice shall be included in |
altb2 | 0:577a6606809f | 19 | * all copies or substantial portions of the Software. |
altb2 | 0:577a6606809f | 20 | * |
altb2 | 0:577a6606809f | 21 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
altb2 | 0:577a6606809f | 22 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
altb2 | 0:577a6606809f | 23 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
altb2 | 0:577a6606809f | 24 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
altb2 | 0:577a6606809f | 25 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
altb2 | 0:577a6606809f | 26 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
altb2 | 0:577a6606809f | 27 | * THE SOFTWARE. |
altb2 | 0:577a6606809f | 28 | */ |
altb2 | 0:577a6606809f | 29 | #include "mbed.h" |
altb2 | 0:577a6606809f | 30 | |
altb2 | 0:577a6606809f | 31 | #ifndef __BOSCH_BMI088_H__ |
altb2 | 0:577a6606809f | 32 | #define __BOSCH_BMI088_H__ |
altb2 | 0:577a6606809f | 33 | |
altb2 | 0:577a6606809f | 34 | #define BMI088_ACC_ADDRESS 0x19<<1 //0x19<<1 |
altb2 | 0:577a6606809f | 35 | |
altb2 | 0:577a6606809f | 36 | #define BMI088_ACC_CHIP_ID 0x00 // Default value 0x1E |
altb2 | 0:577a6606809f | 37 | #define BMI088_ACC_ERR_REG 0x02 |
altb2 | 0:577a6606809f | 38 | #define BMI088_ACC_STATUS 0x03 |
altb2 | 0:577a6606809f | 39 | |
altb2 | 0:577a6606809f | 40 | #define BMI088_ACC_X_LSB 0x12 |
altb2 | 0:577a6606809f | 41 | #define BMI088_ACC_X_MSB 0x13 |
altb2 | 0:577a6606809f | 42 | #define BMI088_ACC_Y_LSB 0x14 |
altb2 | 0:577a6606809f | 43 | #define BMI088_ACC_Y_MSB 0x15 |
altb2 | 0:577a6606809f | 44 | #define BMI088_ACC_Z_LSB 0x16 |
altb2 | 0:577a6606809f | 45 | #define BMI088_ACC_Z_MSB 0x17 |
altb2 | 0:577a6606809f | 46 | |
altb2 | 0:577a6606809f | 47 | #define BMI088_ACC_SENSOR_TIME_0 0x18 |
altb2 | 0:577a6606809f | 48 | #define BMI088_ACC_SENSOR_TIME_1 0x19 |
altb2 | 0:577a6606809f | 49 | #define BMI088_ACC_SENSOR_TIME_2 0x1A |
altb2 | 0:577a6606809f | 50 | |
altb2 | 0:577a6606809f | 51 | #define BMI088_ACC_INT_STAT_1 0x1D |
altb2 | 0:577a6606809f | 52 | |
altb2 | 0:577a6606809f | 53 | #define BMI088_ACC_TEMP_MSB 0x22 |
altb2 | 0:577a6606809f | 54 | #define BMI088_ACC_TEMP_LSB 0x23 |
altb2 | 0:577a6606809f | 55 | |
altb2 | 0:577a6606809f | 56 | #define BMI088_ACC_CONF 0x40 |
altb2 | 0:577a6606809f | 57 | #define BMI088_ACC_RANGE 0x41 |
altb2 | 0:577a6606809f | 58 | |
altb2 | 0:577a6606809f | 59 | #define BMI088_ACC_INT1_IO_CTRL 0x53 |
altb2 | 0:577a6606809f | 60 | #define BMI088_ACC_INT2_IO_CTRL 0x54 |
altb2 | 0:577a6606809f | 61 | #define BMI088_ACC_INT_MAP_DATA 0x58 |
altb2 | 0:577a6606809f | 62 | |
altb2 | 0:577a6606809f | 63 | #define BMI088_ACC_SELF_TEST 0x6D |
altb2 | 0:577a6606809f | 64 | |
altb2 | 0:577a6606809f | 65 | #define BMI088_ACC_PWR_CONF 0x7C |
altb2 | 0:577a6606809f | 66 | #define BMI088_ACC_PWR_CTRl 0x7D |
altb2 | 0:577a6606809f | 67 | |
altb2 | 0:577a6606809f | 68 | #define BMI088_ACC_SOFT_RESET 0x7E |
altb2 | 0:577a6606809f | 69 | |
altb2 | 0:577a6606809f | 70 | #define BMI088_GYRO_ADDRESS 0x69<<1//0xD2 //0x69<<1 |
altb2 | 0:577a6606809f | 71 | |
altb2 | 0:577a6606809f | 72 | #define BMI088_GYRO_CHIP_ID 0x00 // Default value 0x0F |
altb2 | 0:577a6606809f | 73 | |
altb2 | 0:577a6606809f | 74 | #define BMI088_GYRO_RATE_X_LSB 0x02 |
altb2 | 0:577a6606809f | 75 | #define BMI088_GYRO_RATE_X_MSB 0x03 |
altb2 | 0:577a6606809f | 76 | #define BMI088_GYRO_RATE_Y_LSB 0x04 |
altb2 | 0:577a6606809f | 77 | #define BMI088_GYRO_RATE_Y_MSB 0x05 |
altb2 | 0:577a6606809f | 78 | #define BMI088_GYRO_RATE_Z_LSB 0x06 |
altb2 | 0:577a6606809f | 79 | #define BMI088_GYRO_RATE_Z_MSB 0x07 |
altb2 | 0:577a6606809f | 80 | |
altb2 | 0:577a6606809f | 81 | #define BMI088_GYRO_INT_STAT_1 0x0A |
altb2 | 0:577a6606809f | 82 | |
altb2 | 0:577a6606809f | 83 | #define BMI088_GYRO_RANGE 0x0F |
altb2 | 0:577a6606809f | 84 | #define BMI088_GYRO_BAND_WIDTH 0x10 |
altb2 | 0:577a6606809f | 85 | |
altb2 | 0:577a6606809f | 86 | #define BMI088_GYRO_LPM_1 0x11 |
altb2 | 0:577a6606809f | 87 | |
altb2 | 0:577a6606809f | 88 | #define BMI088_GYRO_SOFT_RESET 0x14 |
altb2 | 0:577a6606809f | 89 | |
altb2 | 0:577a6606809f | 90 | #define BMI088_GYRO_INT_CTRL 0x15 |
altb2 | 0:577a6606809f | 91 | #define BMI088_GYRO_INT3_INT4_IO_CONF 0x16 |
altb2 | 0:577a6606809f | 92 | #define BMI088_GYRO_INT3_INT4_IO_MAP 0x18 |
altb2 | 0:577a6606809f | 93 | |
altb2 | 0:577a6606809f | 94 | #define BMI088_GYRO_SELF_TEST 0x3C |
altb2 | 0:577a6606809f | 95 | |
altb2 | 0:577a6606809f | 96 | enum device_type_t // device type |
altb2 | 0:577a6606809f | 97 | { |
altb2 | 0:577a6606809f | 98 | ACC = 0x00, // |
altb2 | 0:577a6606809f | 99 | GYRO = 0x01, // |
altb2 | 0:577a6606809f | 100 | }; |
altb2 | 0:577a6606809f | 101 | |
altb2 | 0:577a6606809f | 102 | enum acc_scale_type_t // measurement rage |
altb2 | 0:577a6606809f | 103 | { |
altb2 | 0:577a6606809f | 104 | RANGE_3G = 0x00, // |
altb2 | 0:577a6606809f | 105 | RANGE_6G = 0x01, // |
altb2 | 0:577a6606809f | 106 | RANGE_12G = 0x02, // |
altb2 | 0:577a6606809f | 107 | RANGE_24G = 0x03, // |
altb2 | 0:577a6606809f | 108 | }; |
altb2 | 0:577a6606809f | 109 | |
altb2 | 0:577a6606809f | 110 | enum acc_odr_type_t // output data rate |
altb2 | 0:577a6606809f | 111 | { |
altb2 | 0:577a6606809f | 112 | ODR_12 = 0x05, // |
altb2 | 0:577a6606809f | 113 | ODR_25 = 0x06, // |
altb2 | 0:577a6606809f | 114 | ODR_50 = 0x07, // |
altb2 | 0:577a6606809f | 115 | ODR_100 = 0x08, // |
altb2 | 0:577a6606809f | 116 | ODR_200 = 0x09, // |
altb2 | 0:577a6606809f | 117 | ODR_400 = 0x0A, // |
altb2 | 0:577a6606809f | 118 | ODR_800 = 0x0B, // |
altb2 | 0:577a6606809f | 119 | ODR_1600 = 0x0C, // |
altb2 | 0:577a6606809f | 120 | }; |
altb2 | 0:577a6606809f | 121 | |
altb2 | 0:577a6606809f | 122 | enum acc_power_type_t // power mode |
altb2 | 0:577a6606809f | 123 | { |
altb2 | 0:577a6606809f | 124 | ACC_ACTIVE = 0x00, // |
altb2 | 0:577a6606809f | 125 | ACC_SUSPEND = 0x03, // |
altb2 | 0:577a6606809f | 126 | }; |
altb2 | 0:577a6606809f | 127 | |
altb2 | 0:577a6606809f | 128 | enum gyro_scale_type_t // measurement rage |
altb2 | 0:577a6606809f | 129 | { |
altb2 | 0:577a6606809f | 130 | RANGE_2000 = 0x00, // |
altb2 | 0:577a6606809f | 131 | RANGE_1000 = 0x01, // |
altb2 | 0:577a6606809f | 132 | RANGE_500 = 0x02, // |
altb2 | 0:577a6606809f | 133 | RANGE_250 = 0x03, // |
altb2 | 0:577a6606809f | 134 | RANGE_125 = 0x04, // |
altb2 | 0:577a6606809f | 135 | }; |
altb2 | 0:577a6606809f | 136 | |
altb2 | 0:577a6606809f | 137 | enum gyro_odr_type_t // output data rate |
altb2 | 0:577a6606809f | 138 | { |
altb2 | 0:577a6606809f | 139 | ODR_2000_BW_532 = 0x00, // |
altb2 | 0:577a6606809f | 140 | ODR_2000_BW_230 = 0x01, // |
altb2 | 0:577a6606809f | 141 | ODR_1000_BW_116 = 0x02, // |
altb2 | 0:577a6606809f | 142 | ODR_400_BW_47 = 0x03, // |
altb2 | 0:577a6606809f | 143 | ODR_200_BW_23 = 0x04, // |
altb2 | 0:577a6606809f | 144 | ODR_100_BW_12 = 0x05, // |
altb2 | 0:577a6606809f | 145 | ODR_200_BW_64 = 0x06, // |
altb2 | 0:577a6606809f | 146 | ODR_100_BW_32 = 0x07, // |
altb2 | 0:577a6606809f | 147 | }; |
altb2 | 0:577a6606809f | 148 | |
altb2 | 0:577a6606809f | 149 | enum gyro_power_type_t // power mode |
altb2 | 0:577a6606809f | 150 | { |
altb2 | 0:577a6606809f | 151 | GYRO_NORMAL = 0x00, // |
altb2 | 0:577a6606809f | 152 | GYRO_SUSPEND = 0x80, // |
altb2 | 0:577a6606809f | 153 | GYRO_DEEP_SUSPEND = 0x20, // |
altb2 | 0:577a6606809f | 154 | }; |
altb2 | 0:577a6606809f | 155 | |
altb2 | 0:577a6606809f | 156 | class BMI088 |
altb2 | 0:577a6606809f | 157 | { |
altb2 | 0:577a6606809f | 158 | public: |
altb2 | 0:577a6606809f | 159 | |
altb2 | 0:577a6606809f | 160 | BMI088(void); |
altb2 | 0:577a6606809f | 161 | |
altb2 | 0:577a6606809f | 162 | bool isConnection(void); |
altb2 | 0:577a6606809f | 163 | |
altb2 | 0:577a6606809f | 164 | void initialize(void); |
altb2 | 0:577a6606809f | 165 | |
altb2 | 0:577a6606809f | 166 | void setAccPoweMode(acc_power_type_t mode); |
altb2 | 0:577a6606809f | 167 | void setGyroPoweMode(gyro_power_type_t mode); |
altb2 | 0:577a6606809f | 168 | |
altb2 | 0:577a6606809f | 169 | void setAccScaleRange(acc_scale_type_t range); |
altb2 | 0:577a6606809f | 170 | void setAccOutputDataRate(acc_odr_type_t odr); |
altb2 | 0:577a6606809f | 171 | |
altb2 | 0:577a6606809f | 172 | void setGyroScaleRange(gyro_scale_type_t range); |
altb2 | 0:577a6606809f | 173 | void setGyroOutputDataRate(gyro_odr_type_t odr); |
altb2 | 0:577a6606809f | 174 | |
altb2 | 0:577a6606809f | 175 | void getAcceleration(float* x, float* y, float* z); |
altb2 | 0:577a6606809f | 176 | float getAccelerationX(void); |
altb2 | 0:577a6606809f | 177 | float getAccelerationY(void); |
altb2 | 0:577a6606809f | 178 | float getAccelerationZ(void); |
altb2 | 0:577a6606809f | 179 | |
altb2 | 0:577a6606809f | 180 | void getGyroscope(float* x, float* y, float* z); |
altb2 | 0:577a6606809f | 181 | float getGyroscopeX(void); |
altb2 | 0:577a6606809f | 182 | float getGyroscopeY(void); |
altb2 | 0:577a6606809f | 183 | float getGyroscopeZ(void); |
altb2 | 0:577a6606809f | 184 | |
altb2 | 0:577a6606809f | 185 | uint16_t getTemperature(void); |
altb2 | 0:577a6606809f | 186 | |
altb2 | 0:577a6606809f | 187 | uint8_t getAccID(void); |
altb2 | 0:577a6606809f | 188 | uint8_t getGyroID(void); |
altb2 | 0:577a6606809f | 189 | |
altb2 | 0:577a6606809f | 190 | void resetAcc(void); |
altb2 | 0:577a6606809f | 191 | void resetGyro(void); |
altb2 | 0:577a6606809f | 192 | |
altb2 | 0:577a6606809f | 193 | private: |
altb2 | 0:577a6606809f | 194 | |
altb2 | 0:577a6606809f | 195 | void write8(device_type_t dev, char reg, uint8_t val); |
altb2 | 0:577a6606809f | 196 | char read8(device_type_t dev, char reg); |
altb2 | 0:577a6606809f | 197 | uint16_t read16(device_type_t dev, char reg); |
altb2 | 0:577a6606809f | 198 | uint16_t read16Be(device_type_t dev, char reg); |
altb2 | 0:577a6606809f | 199 | uint32_t read24(device_type_t dev, char reg); |
altb2 | 0:577a6606809f | 200 | void read(device_type_t dev, char reg, char *, uint16_t len); |
altb2 | 0:577a6606809f | 201 | |
altb2 | 0:577a6606809f | 202 | float accRange; |
altb2 | 0:577a6606809f | 203 | float gyroRange; |
altb2 | 0:577a6606809f | 204 | uint8_t devAddrAcc; |
altb2 | 0:577a6606809f | 205 | uint8_t devAddrGyro; |
altb2 | 0:577a6606809f | 206 | protected: |
altb2 | 0:577a6606809f | 207 | I2C i2c; |
altb2 | 0:577a6606809f | 208 | }; |
altb2 | 0:577a6606809f | 209 | |
altb2 | 0:577a6606809f | 210 | extern BMI088 bmi088; |
altb2 | 0:577a6606809f | 211 | |
altb2 | 0:577a6606809f | 212 | #endif |