The friendly Operating System for the Internet of Things

Device driver interface for the MPU-9150. More...

Detailed Description

Files

file  mpu9150.h
 Device driver interface for the MPU-9150.
 
file  mpu9150-regs.h
 Register and bit definitions for the MPU-9150 9-Axis Motion Sensor.
 

Data Structures

struct  mpu9150_results_t
 MPU-9150 result vector struct. More...
 
struct  mpu9150_status_t
 Configuration struct for the MPU-9150 sensor. More...
 
struct  mpu9150_t
 Device descriptor for the MPU-9150 sensor. More...
 

Enumerations

enum  mpu9150_pwr_t { MPU9150_SENSOR_PWR_OFF = 0x00, MPU9150_SENSOR_PWR_ON = 0x01 }
 Power enum values.
 
enum  mpu9150_hw_addr_t { MPU9150_HW_ADDR_HEX_68 = 0x68, MPU9150_HW_ADDR_HEX_69 = 0x69 }
 Possible MPU-9150 hardware addresses (wiring specific)
 
enum  mpu9150_comp_addr_t { MPU9150_COMP_ADDR_HEX_0C = 0x0C, MPU9150_COMP_ADDR_HEX_0D = 0x0D, MPU9150_COMP_ADDR_HEX_0E = 0x0E, MPU9150_COMP_ADDR_HEX_0F = 0x0F }
 Possible compass addresses (wiring specific)
 
enum  mpu9150_gyro_ranges_t { MPU9150_GYRO_FSR_250DPS = 0x00, MPU9150_GYRO_FSR_500DPS = 0x01, MPU9150_GYRO_FSR_1000DPS = 0x02, MPU9150_GYRO_FSR_2000DPS = 0x03 }
 Possible full scale ranges for the gyroscope.
 
enum  mpu9150_accel_ranges_t { MPU9150_ACCEL_FSR_2G = 0x00, MPU9150_ACCEL_FSR_4G = 0x01, MPU9150_ACCEL_FSR_8G = 0x02, MPU9150_ACCEL_FSR_16G = 0x03 }
 Possible full scale ranges for the accelerometer.
 
enum  mpu9150_lpf_t {
  MPU9150_FILTER_188HZ = 0x01, MPU9150_FILTER_98HZ = 0x02, MPU9150_FILTER_42HZ = 0x03, MPU9150_FILTER_20HZ = 0x04,
  MPU9150_FILTER_10HZ = 0x05, MPU9150_FILTER_5HZ = 0x06
}
 Possible low pass filter values.
 

Functions

int mpu9150_init (mpu9150_t *dev, i2c_t i2c, mpu9150_hw_addr_t hw_addr, mpu9150_comp_addr_t comp_addr)
 Initialize the given MPU9150 device. More...
 
int mpu9150_set_accel_power (mpu9150_t *dev, mpu9150_pwr_t pwr_conf)
 Enable or disable accelerometer power. More...
 
int mpu9150_set_gyro_power (mpu9150_t *dev, mpu9150_pwr_t pwr_conf)
 Enable or disable gyroscope power. More...
 
int mpu9150_set_compass_power (mpu9150_t *dev, mpu9150_pwr_t pwr_conf)
 Enable or disable compass power. More...
 
int mpu9150_read_gyro (mpu9150_t *dev, mpu9150_results_t *output)
 Read angular speed values from the given MPU9150 device, returned in dps. More...
 
int mpu9150_read_accel (mpu9150_t *dev, mpu9150_results_t *output)
 Read acceleration values from the given MPU9150 device, returned in mG. More...
 
int mpu9150_read_compass (mpu9150_t *dev, mpu9150_results_t *output)
 Read magnetic field values from the given MPU9150 device, returned in mikroT. More...
 
int mpu9150_read_temperature (mpu9150_t *dev, int32_t *output)
 Read temperature value from the given MPU9150 device, returned in m°C. More...
 
int mpu9150_set_gyro_fsr (mpu9150_t *dev, mpu9150_gyro_ranges_t fsr)
 Set the full-scale range for raw gyroscope data. More...
 
int mpu9150_set_accel_fsr (mpu9150_t *dev, mpu9150_accel_ranges_t fsr)
 Set the full-scale range for raw accelerometer data. More...
 
int mpu9150_set_sample_rate (mpu9150_t *dev, uint16_t rate)
 Set the rate at which the gyroscope and accelerometer data is sampled. More...
 
int mpu9150_set_compass_sample_rate (mpu9150_t *dev, uint8_t rate)
 Set the rate at which the compass data is sampled. More...
 

Sample rate macro definitions

#define MPU9150_MIN_SAMPLE_RATE   (4)
 
#define MPU9150_MAX_SAMPLE_RATE   (1000)
 
#define MPU9150_DEFAULT_SAMPLE_RATE   (50)
 
#define MPU9150_MIN_COMP_SMPL_RATE   (1)
 
#define MPU9150_MAX_COMP_SMPL_RATE   (100)
 

Power Management 1 register macros

#define MPU9150_PWR_WAKEUP   (0x00)
 
#define MPU9150_PWR_PLL   (0x01)
 
#define MPU9150_PWR_RESET   (0x80)
 

Power Management 2 register macros

#define MPU9150_PWR_GYRO   (0x07)
 
#define MPU9150_PWR_ACCEL   (0x38)
 

Sleep times in microseconds

#define MPU9150_COMP_MODE_SLEEP_US   (1000)
 
#define MPU9150_BYPASS_SLEEP_US   (3000)
 
#define MPU9150_PWR_CHANGE_SLEEP_US   (50000)
 
#define MPU9150_RESET_SLEEP_US   (100000)
 

MPU-9150 compass operating modes and reg values

#define MPU9150_COMP_POWER_DOWN   (0x00)
 
#define MPU9150_COMP_SINGLE_MEASURE   (0x01)
 
#define MPU9150_COMP_SELF_TEST   (0x08)
 
#define MPU9150_COMP_FUSE_ROM   (0x0F)
 
#define MPU9150_COMP_WHOAMI_ANSWER   (0x48)
 

Function Documentation

int mpu9150_init ( mpu9150_t dev,
i2c_t  i2c,
mpu9150_hw_addr_t  hw_addr,
mpu9150_comp_addr_t  comp_addr 
)
Parameters
[out]devInitialized device descriptor of MPU9150 device
[in]i2cI2C bus the sensor is connected to
[in]hw_addrThe device's address on the I2C bus
[in]comp_addrThe compass address on the I2C bus
Returns
0 on success
-1 if given I2C is not enabled in board config
int mpu9150_read_accel ( mpu9150_t dev,
mpu9150_results_t output 
)

The raw acceleration data is read from the sensor and normalized with respect to the configured accelerometer full-scale range.

Parameters
[in]devDevice descriptor of MPU9150 device to read from
[out]outputResult vector in mG per axis
Returns
0 on success
-1 if device's I2C is not enabled in board config
-2 if accel full-scale range is configured wrong
int mpu9150_read_compass ( mpu9150_t dev,
mpu9150_results_t output 
)

The raw compass data is read from the sensor and normalized with respect to the compass full-scale range (which can not be configured).

Parameters
[in]devDevice descriptor of MPU9150 device to read from
[out]outputResult vector in mikroT per axis
Returns
0 on success
-1 if device's I2C is not enabled in board config
int mpu9150_read_gyro ( mpu9150_t dev,
mpu9150_results_t output 
)

The raw gyroscope data is read from the sensor and normalized with respect to the configured gyroscope full-scale range.

Parameters
[in]devDevice descriptor of MPU9150 device to read from
[out]outputResult vector in dps per axis
Returns
0 on success
-1 if device's I2C is not enabled in board config
-2 if gyro full-scale range is configured wrong
int mpu9150_read_temperature ( mpu9150_t dev,
int32_t *  output 
)
Note
The measured temperature is slightly higher than the real room temperature. Tests showed that the offset varied around 2-3 °C (but no warranties here).
Parameters
[in]devDevice descriptor of MPU9150 device to read from
[out]outputTemperature in m°C
Returns
0 on success
-1 if device's I2C is not enabled in board config
int mpu9150_set_accel_fsr ( mpu9150_t dev,
mpu9150_accel_ranges_t  fsr 
)
Parameters
[in]devDevice descriptor of MPU9150 device
[in]fsrTarget full-scale range
Returns
0 on success
-1 if device's I2C is not enabled in board config
-2 if given full-scale target value is not valid
int mpu9150_set_accel_power ( mpu9150_t dev,
mpu9150_pwr_t  pwr_conf 
)
Parameters
[in]devDevice descriptor of MPU9150 device
[in]pwr_confTarget power setting: PWR_ON or PWR_OFF
Returns
0 on success
-1 if given I2C is not enabled in board config
int mpu9150_set_compass_power ( mpu9150_t dev,
mpu9150_pwr_t  pwr_conf 
)
Parameters
[in]devDevice descriptor of MPU9150 device
[in]pwr_confTarget power setting: PWR_ON or PWR_OFF
Returns
0 on success
-1 if given I2C is not enabled in board config
int mpu9150_set_compass_sample_rate ( mpu9150_t dev,
uint8_t  rate 
)

Sample rate can be chosen between 1 Hz and 100 Hz but has to be a fraction of the configured accel/gyro sample rate. The actual set value might slightly differ. If necessary, check the actual set value in the device's config member afterwards.

Parameters
[in]devDevice descriptor of MPU9150 device
[in]rateTarget sample rate in Hz
Returns
0 on success
-1 if device's I2C is not enabled in board config
-2 if given target sample rate is not valid
int mpu9150_set_gyro_fsr ( mpu9150_t dev,
mpu9150_gyro_ranges_t  fsr 
)
Parameters
[in]devDevice descriptor of MPU9150 device
[in]fsrTarget full-scale range
Returns
0 on success
-1 if device's I2C is not enabled in board config
-2 if given full-scale target value is not valid
int mpu9150_set_gyro_power ( mpu9150_t dev,
mpu9150_pwr_t  pwr_conf 
)
Parameters
[in]devDevice descriptor of MPU9150 device
[in]pwr_confTarget power setting: PWR_ON or PWR_OFF
Returns
0 on success
-1 if given I2C is not enabled in board config
int mpu9150_set_sample_rate ( mpu9150_t dev,
uint16_t  rate 
)

Sample rate can be chosen between 4 Hz and 1kHz. The actual set value might slightly differ. If necessary, check the actual set value in the device's config member afterwards.

Parameters
[in]devDevice descriptor of MPU9150 device
[in]rateTarget sample rate in Hz
Returns
0 on success
-1 if device's I2C is not enabled in board config
-2 if given target sample rate is not valid