mpu9x50.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Freie Universität Berlin
3  * 2019 HAW Hamburg
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser
6  * General Public License v2.1. See the file LICENSE in the top level
7  * directory for more details.
8  */
9 
10 #pragma once
11 
28 #include "periph/i2c.h"
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
38 #define MPU9X50_MIN_SAMPLE_RATE (4)
39 #define MPU9X50_MAX_SAMPLE_RATE (1000)
40 #define MPU9X50_DEFAULT_SAMPLE_RATE (50)
41 #define MPU9X50_MIN_COMP_SMPL_RATE (1)
42 #define MPU9X50_MAX_COMP_SMPL_RATE (100)
48 typedef enum {
49  MPU9X50_SENSOR_PWR_OFF = 0x00,
50  MPU9X50_SENSOR_PWR_ON = 0x01,
52 
56 typedef enum {
57  MPU9X50_HW_ADDR_HEX_68 = 0x68,
58  MPU9X50_HW_ADDR_HEX_69 = 0x69,
60 
64 typedef enum {
65  MPU9X50_COMP_ADDR_HEX_0C = 0x0C,
66  MPU9X50_COMP_ADDR_HEX_0D = 0x0D,
67  MPU9X50_COMP_ADDR_HEX_0E = 0x0E,
68  MPU9X50_COMP_ADDR_HEX_0F = 0x0F,
70 
74 typedef enum {
75  MPU9X50_GYRO_FSR_250DPS = 0x00,
76  MPU9X50_GYRO_FSR_500DPS = 0x01,
77  MPU9X50_GYRO_FSR_1000DPS = 0x02,
78  MPU9X50_GYRO_FSR_2000DPS = 0x03,
80 
84 typedef enum {
85  MPU9X50_ACCEL_FSR_2G = 0x00,
86  MPU9X50_ACCEL_FSR_4G = 0x01,
87  MPU9X50_ACCEL_FSR_8G = 0x02,
88  MPU9X50_ACCEL_FSR_16G = 0x03,
90 
94 typedef enum {
95  MPU9X50_FILTER_188HZ = 0x01,
96  MPU9X50_FILTER_98HZ = 0x02,
97  MPU9X50_FILTER_42HZ = 0x03,
98  MPU9X50_FILTER_20HZ = 0x04,
99  MPU9X50_FILTER_10HZ = 0x05,
100  MPU9X50_FILTER_5HZ = 0x06,
101 } mpu9x50_lpf_t;
102 
106 typedef struct {
107  int16_t x_axis;
108  int16_t y_axis;
109  int16_t z_axis;
111 
115 typedef struct {
121  uint16_t sample_rate;
123  uint8_t compass_x_adj;
124  uint8_t compass_y_adj;
125  uint8_t compass_z_adj;
127 
131 typedef struct {
133  uint8_t addr;
134  uint8_t comp_addr;
135  uint16_t sample_rate;
137 
141 typedef struct {
144 } mpu9x50_t;
145 
155 int mpu9x50_init(mpu9x50_t *dev, const mpu9x50_params_t *params);
156 
167 
178 
189 
204 
219 
233 
247 int mpu9x50_read_temperature(const mpu9x50_t *dev, int32_t *output);
248 
260 
272 
287 int mpu9x50_set_sample_rate(mpu9x50_t *dev, uint16_t rate);
288 
305 
306 #ifdef __cplusplus
307 }
308 #endif
309 
int mpu9x50_read_temperature(const mpu9x50_t *dev, int32_t *output)
Read temperature value from the given MPU9X50 device, returned in m°C.
mpu9x50_lpf_t
Possible low pass filter values.
Definition: mpu9x50.h:94
int mpu9x50_set_compass_power(mpu9x50_t *dev, mpu9x50_pwr_t pwr_conf)
Enable or disable compass power.
int mpu9x50_read_compass(const mpu9x50_t *dev, mpu9x50_results_t *output)
Read magnetic field values from the given MPU9X50 device, returned in mikroT.
int mpu9x50_set_sample_rate(mpu9x50_t *dev, uint16_t rate)
Set the rate at which the gyroscope and accelerometer data is sampled.
mpu9x50_pwr_t
Power enum values.
Definition: mpu9x50.h:48
mpu9x50_comp_addr_t
Possible compass addresses (wiring specific)
Definition: mpu9x50.h:64
int mpu9x50_read_accel(const mpu9x50_t *dev, mpu9x50_results_t *output)
Read acceleration values from the given MPU9X50 device, returned in mG.
mpu9x50_hw_addr_t
Possible MPU-9X50 hardware addresses (wiring specific)
Definition: mpu9x50.h:56
int mpu9x50_set_gyro_power(mpu9x50_t *dev, mpu9x50_pwr_t pwr_conf)
Enable or disable gyroscope power.
mpu9x50_accel_ranges_t
Possible full scale ranges for the accelerometer.
Definition: mpu9x50.h:84
int mpu9x50_set_compass_sample_rate(mpu9x50_t *dev, uint8_t rate)
Set the rate at which the compass data is sampled.
int mpu9x50_set_accel_fsr(mpu9x50_t *dev, mpu9x50_accel_ranges_t fsr)
Set the full-scale range for raw accelerometer data.
int mpu9x50_init(mpu9x50_t *dev, const mpu9x50_params_t *params)
Initialize the given MPU9X50 device.
int mpu9x50_set_gyro_fsr(mpu9x50_t *dev, mpu9x50_gyro_ranges_t fsr)
Set the full-scale range for raw gyroscope data.
int mpu9x50_set_accel_power(mpu9x50_t *dev, mpu9x50_pwr_t pwr_conf)
Enable or disable accelerometer power.
mpu9x50_gyro_ranges_t
Possible full scale ranges for the gyroscope.
Definition: mpu9x50.h:74
int mpu9x50_read_gyro(const mpu9x50_t *dev, mpu9x50_results_t *output)
Read angular speed values from the given MPU9X50 device, returned in dps.
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition: i2c.h:144
Low-level I2C peripheral driver interface definition.
Device initialization parameters.
Definition: mpu9x50.h:131
i2c_t i2c
I2C device which is used.
Definition: mpu9x50.h:132
uint8_t comp_addr
Address of the MPU-9X50s compass.
Definition: mpu9x50.h:134
uint16_t sample_rate
Sample rate.
Definition: mpu9x50.h:135
uint8_t addr
Hardware address of the MPU-9X50.
Definition: mpu9x50.h:133
MPU-9X50 result vector struct.
Definition: mpu9x50.h:106
int16_t z_axis
Z-Axis measurement result.
Definition: mpu9x50.h:109
int16_t x_axis
X-Axis measurement result.
Definition: mpu9x50.h:107
int16_t y_axis
Y-Axis measurement result.
Definition: mpu9x50.h:108
Configuration struct for the MPU-9X50 sensor.
Definition: mpu9x50.h:115
uint8_t compass_x_adj
Compass X-Axis sensitivity adjustment value.
Definition: mpu9x50.h:123
mpu9x50_accel_ranges_t accel_fsr
Configured accel full-scale range.
Definition: mpu9x50.h:120
uint8_t compass_z_adj
Compass Z-Axis sensitivity adjustment value.
Definition: mpu9x50.h:125
uint16_t sample_rate
Configured sample rate for accel and gyro.
Definition: mpu9x50.h:121
uint8_t compass_y_adj
Compass Y-Axis sensitivity adjustment value.
Definition: mpu9x50.h:124
mpu9x50_gyro_ranges_t gyro_fsr
Configured gyro full-scale range.
Definition: mpu9x50.h:119
mpu9x50_pwr_t accel_pwr
Accel power status (on/off)
Definition: mpu9x50.h:116
mpu9x50_pwr_t compass_pwr
Compass power status (on/off)
Definition: mpu9x50.h:118
mpu9x50_pwr_t gyro_pwr
Gyro power status (on/off)
Definition: mpu9x50.h:117
uint8_t compass_sample_rate
Configured compass sample rate.
Definition: mpu9x50.h:122
Device descriptor for the MPU9X50 sensor.
Definition: mpu9x50.h:141
mpu9x50_params_t params
Device initialization parameters.
Definition: mpu9x50.h:142
mpu9x50_status_t conf
Device configuration.
Definition: mpu9x50.h:143