AHRS
Dependencies: Eigen
Diff: BMI088.cpp
- Revision:
- 28:21dfb161c67c
- Parent:
- 27:973e495f4711
- Child:
- 29:cd963a6d31c5
--- a/BMI088.cpp Tue Jan 14 14:24:03 2020 +0000 +++ b/BMI088.cpp Mon Jan 20 12:41:13 2020 +0000 @@ -5,16 +5,21 @@ this->i2c = &i2c; devAddrAcc = BMI088_ACC_ADDRESS; devAddrGyro = BMI088_GYRO_ADDRESS; + initialize(); } void BMI088::initialize(void) { setAccScaleRange(RANGE_3G); + wait(.02); setAccOutputDataRate(ODR_100); // ODR_100 -> 40 Hz bandwith in normal mode + wait(.02); setAccPowerMode(ACC_ACTIVE); - + wait(.02); setGyroScaleRange(RANGE_500); + wait(.02); setGyroOutputDataRate(ODR_400_BW_47); + wait(.02); setGyroPowerMode(GYRO_NORMAL); } @@ -67,10 +72,10 @@ void BMI088::setAccScaleRange(acc_scale_type_t range) { - if(range == RANGE_3G) accRange = 3 * 9.81 / 32768.0f; - else if(range == RANGE_6G) accRange = 6 * 9.81 / 32768.0f; - else if(range == RANGE_12G) accRange = 12 * 9.81 / 32768.0f; - else if(range == RANGE_24G) accRange = 24 * 9.81 / 32768.0f; + if(range == RANGE_3G) accRange = 3.0f * 9.81f / 32768.0f; + else if(range == RANGE_6G) accRange = 6.0f * 9.81f / 32768.0f; + else if(range == RANGE_12G) accRange = 12.0f * 9.81f / 32768.0f; + else if(range == RANGE_24G) accRange = 24.0f * 9.81f / 32768.0f; write8(ACC, BMI088_ACC_RANGE, (uint8_t)range); } @@ -88,11 +93,11 @@ void BMI088::setGyroScaleRange(gyro_scale_type_t range) { - if(range == RANGE_2000) gyroRange = 2000 * 0.01745329 / 32768.0f; - else if(range == RANGE_1000) gyroRange = 1000 * 0.01745329f / 32768.0f; - else if(range == RANGE_500) gyroRange = 500 * 0.01745329f / 32768.0f; - else if(range == RANGE_250) gyroRange = 250 * 0.01745329f / 32768.0f; - else if(range == RANGE_125) gyroRange = 125 * 0.01745329f / 32768.0f; + if(range == RANGE_2000) gyroRange = 2000.0f * 0.01745329f / 32768.0f; + else if(range == RANGE_1000) gyroRange = 1000.0f * 0.01745329f / 32768.0f; + else if(range == RANGE_500) gyroRange = 500.0f * 0.01745329f / 32768.0f; + else if(range == RANGE_250) gyroRange = 250.0f * 0.01745329f / 32768.0f; + else if(range == RANGE_125) gyroRange = 125.0f * 0.01745329f / 32768.0f; write8(GYRO, BMI088_GYRO_RANGE, (uint8_t)range); } @@ -197,10 +202,8 @@ float value = 0; gx = read16(GYRO, BMI088_GYRO_RATE_X_LSB); - value = (int16_t)gx; - value = gyroRange * value ; - + value = gyroRange * value; return value; }