2024-07-17 09:13:48 +02:00
2024-07-17 09:13:48 +02:00
2024-07-05 09:28:37 +00:00
2024-07-03 15:05:19 +00:00

driver-BMI088

Driver for the BMI088 inertial measurement unit and gyroscope. As a note: The BMI088 is pretty much two separate chips forced onto one bus. They both have unique chip selects and completely separate registers. Take this into consideration when using this driver. Pretty much everything needs to be done twice.

Usage

Initialize the accelerometer by using init().

This also wakes up the gyroscope and accelerometer. By default this driver initializes the gyroscope with a +-1000 degrees per second precision and a bandwidth of 64Hz at ODR 1000Hz. The accelerometer is initialized with a +-24G precision and "normal bandwidth" at ODR 100Hz.

Setting precision

Range

To set the precision of the accelerometer or gyroscope you may use setAccelerometerRange(...)/setGyroscopeRange(...). This only works if the accelerometer or gyroscope are in standby. Use setAccelerometerMode(...) / setGyroscopeMode(...) to switch between the different modes (AccelMode::OFF,AccelMode::ON,GyroMode::NORMAL_AWAKE,GyroMode::SUSPEND,GyroMode::DEEP_SUSPEND).

Options for +-range include AccelRange::_3G, AccelRange::_6G, AccelRange::_12G, AccelRange::_24G and GyroRange::_2000,GyroRange::_1000,GyroRange::_500,GyroRange::_250,GyroRange::_125 .

Bandwidth

Users also have the option to apply a filter, using setAccelerometerBandwidth(...)/setGyroscopeBandwidth(...). For the options, please consult the datasheet. Accelerometer bandwidth uses AccelBandwidth::OSRXorAccelBandwidth::NORMAL_BANDWIDTH. Gyroscope bandwidth uses _odr_filterbandwidth format.

Full example:


//... (SPI initialization)

  

//init

sensor =  new  sta::BMI088(gyro_device,  accel_device);

if(sensor->init()) STA_DEBUG_PRINTLN("BMI088 init success");
else STA_DEBUG_PRINTLN("BMI088 init failure");

  

//setting precision, bandwidth, odr (chip needs to be OFF!)
sensor->setAccelerometerMode(sta::BMI088::AccelMode::OFF);

sensor->setAccelerometerRange(sta::BMI088::AccelRange::_24G);
sensor->setAccelerometerBandwidth(sta::BMI088::AccelBandwidth::OSR4,  sta::BMI088::AccelODR::_1600);

sensor->setAccelerometerMode(sta::BMI088::AccelMode::ON);

  

sensor->setGyroscopeMode(sta::BMI088::GyroMode::DEEP_SUSPEND);

sensor->setGyroscopeRange(sta::BMI088::GyroRange::_2000);
sensor->setGyroscopeBandwidth(sta::BMI088::GyroBandwidth::_2000_532);

sensor->setGyroscopeMode(sta::BMI088::GyroMode::NORMAL_AWAKE);

  

//...

  

//getting data
float  ax,  ay,  az,  rx,  ry,  rz;
sensor->getRotation(&rx,  &ry,  &rz);
sensor->getAcceleration(&ax,  &ay,  &az);

//...

Description
No description provided
Readme GPL-3.0 64 KiB
Languages
C++ 100%