Library containing Crazyflie 2.0 sensors drivers: - LPS25H (barometer) - MPU9250 (IMU) - PMW3901 (optical flow) - VL53L0X (range)

Dependents:   Drones-Controlador controladoatitude_cteste Drone_Controlador_Atitude optical_test

Committer:
fbob
Date:
Thu Apr 19 19:41:02 2018 +0000
Revision:
3:2f2b8e863991
Parent:
2:3d5f4b1c7bdb
Child:
5:1ef8b91a0318
Included barometer class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fbob 2:3d5f4b1c7bdb 1 #ifndef MPU9250_h
fbob 2:3d5f4b1c7bdb 2 #define MPU9250_h
fbob 2:3d5f4b1c7bdb 3
fbob 2:3d5f4b1c7bdb 4 #include "mbed.h"
fbob 2:3d5f4b1c7bdb 5
fbob 2:3d5f4b1c7bdb 6 // Physical constants
fbob 2:3d5f4b1c7bdb 7 #define GRAVITY 9.80665
fbob 2:3d5f4b1c7bdb 8 #define PI 3.14159
fbob 2:3d5f4b1c7bdb 9
fbob 2:3d5f4b1c7bdb 10 // MPU9250 I2C address
fbob 3:2f2b8e863991 11 #define MPU9250_ADDRESS 0b1101001 << 1 // Shift 1 bit left because mbed utilizes 8-bit addresses and not 7-bit
fbob 2:3d5f4b1c7bdb 12
fbob 2:3d5f4b1c7bdb 13 // Accelerometer configuration registers addresses
fbob 2:3d5f4b1c7bdb 14 #define ACCEL_CONFIG_1 0x1C
fbob 2:3d5f4b1c7bdb 15 #define ACCEL_CONFIG_2 0x1D
fbob 2:3d5f4b1c7bdb 16 // Accelerometer output register addresses
fbob 2:3d5f4b1c7bdb 17 #define ACCEL_XOUT_H 0x3B
fbob 2:3d5f4b1c7bdb 18 #define ACCEL_XOUT_L 0x3C
fbob 2:3d5f4b1c7bdb 19 #define ACCEL_YOUT_H 0x3D
fbob 2:3d5f4b1c7bdb 20 #define ACCEL_YOUT_L 0x3E
fbob 2:3d5f4b1c7bdb 21 #define ACCEL_ZOUT_H 0x3F
fbob 2:3d5f4b1c7bdb 22 #define ACCEL_ZOUT_L 0x40
fbob 2:3d5f4b1c7bdb 23
fbob 2:3d5f4b1c7bdb 24 // Gyroscope configuration registers addresses
fbob 2:3d5f4b1c7bdb 25 #define GYRO_CONFIG 0x1B
fbob 2:3d5f4b1c7bdb 26 // Accelerometer output register addresses
fbob 2:3d5f4b1c7bdb 27 #define GYRO_XOUT_H 0x43
fbob 2:3d5f4b1c7bdb 28 #define GYRO_XOUT_L 0x44
fbob 2:3d5f4b1c7bdb 29 #define GYRO_YOUT_H 0x45
fbob 2:3d5f4b1c7bdb 30 #define GYRO_YOUT_L 0x46
fbob 2:3d5f4b1c7bdb 31 #define GYRO_ZOUT_H 0x47
fbob 2:3d5f4b1c7bdb 32 #define GYRO_ZOUT_L 0x48
fbob 2:3d5f4b1c7bdb 33
fbob 3:2f2b8e863991 34 // Auxiliary I2C configuration registers addresses
fbob 3:2f2b8e863991 35 #define INT_PIN_CFG 0x37
fbob 3:2f2b8e863991 36
fbob 3:2f2b8e863991 37 // Accelerometer full-scale ranges
fbob 3:2f2b8e863991 38 enum accel_scale
fbob 2:3d5f4b1c7bdb 39 {
fbob 3:2f2b8e863991 40 ACCEL_SCALE_2G = 0b00,
fbob 3:2f2b8e863991 41 ACCEL_SCALE_4G = 0b01,
fbob 3:2f2b8e863991 42 ACCEL_SCALE_8G = 0b10,
fbob 3:2f2b8e863991 43 ACCEL_SCALE_16G = 0b11
fbob 3:2f2b8e863991 44 };
fbob 3:2f2b8e863991 45
fbob 3:2f2b8e863991 46 // Gyroscope full-scale ranges
fbob 3:2f2b8e863991 47 enum gyro_scale
fbob 3:2f2b8e863991 48 {
fbob 3:2f2b8e863991 49 GYRO_SCALE_250DPS = 0b00,
fbob 3:2f2b8e863991 50 GYRO_SCALE_500DPS = 0b01,
fbob 3:2f2b8e863991 51 GYRO_SCALE_1000DPS = 0b10,
fbob 3:2f2b8e863991 52 GYRO_SCALE_2000DPS = 0b11
fbob 2:3d5f4b1c7bdb 53 };
fbob 2:3d5f4b1c7bdb 54
fbob 2:3d5f4b1c7bdb 55
fbob 3:2f2b8e863991 56 /** MPU9250 (IMU sensor) class
fbob 2:3d5f4b1c7bdb 57 *
fbob 3:2f2b8e863991 58 * Example code (print accelerometer and gyroscope data on serial port every 1 second):
fbob 2:3d5f4b1c7bdb 59 * @code
fbob 2:3d5f4b1c7bdb 60 * #include "mbed.h"
fbob 2:3d5f4b1c7bdb 61 * #include "USBSerial.h"
fbob 2:3d5f4b1c7bdb 62 * #include "MPU9250.h"
fbob 2:3d5f4b1c7bdb 63 *
fbob 2:3d5f4b1c7bdb 64 * USBSerial pc;
fbob 2:3d5f4b1c7bdb 65 * MPU9250 imu(PC_9,PA_8);
fbob 2:3d5f4b1c7bdb 66 *
fbob 2:3d5f4b1c7bdb 67 * int main()
fbob 2:3d5f4b1c7bdb 68 * {
fbob 3:2f2b8e863991 69 * imu.init();
fbob 2:3d5f4b1c7bdb 70 * while(1)
fbob 2:3d5f4b1c7bdb 71 * {
fbob 2:3d5f4b1c7bdb 72 * imu.read();
fbob 3:2f2b8e863991 73 * pc.printf("Accel [m/s^2]: %6.2f %6.2f %6.2f \n", imu.ax, imu.ay, imu.az);
fbob 3:2f2b8e863991 74 * pc.printf("Gyro [rad/s]: %6.2f %6.2f %6.2f \n\n", imu.gx, imu.gy, imu.gz);
fbob 2:3d5f4b1c7bdb 75 * wait(1);
fbob 2:3d5f4b1c7bdb 76 * }
fbob 2:3d5f4b1c7bdb 77 * }
fbob 2:3d5f4b1c7bdb 78 * @endcode
fbob 3:2f2b8e863991 79 * (Need to target to NUCLEO-F401RE board platform)
fbob 2:3d5f4b1c7bdb 80 */
fbob 2:3d5f4b1c7bdb 81 class MPU9250
fbob 2:3d5f4b1c7bdb 82 {
fbob 2:3d5f4b1c7bdb 83 public:
fbob 3:2f2b8e863991 84 /** Class constructor */
fbob 2:3d5f4b1c7bdb 85 MPU9250(PinName sda, PinName scl);
fbob 3:2f2b8e863991 86
fbob 3:2f2b8e863991 87 /** Initialize accelerometer and gyroscope */
fbob 3:2f2b8e863991 88 void init();
fbob 3:2f2b8e863991 89 /** Read accelerometer and gyroscope */
fbob 3:2f2b8e863991 90 void read();
fbob 3:2f2b8e863991 91
fbob 3:2f2b8e863991 92 /** Accelerometer data in x-axis [m/s^2]*/
fbob 3:2f2b8e863991 93 float ax;
fbob 3:2f2b8e863991 94 /** Accelerometer data in y-axis [m/s^2]*/
fbob 3:2f2b8e863991 95 float ay;
fbob 3:2f2b8e863991 96 /** Accelerometer data in z-axis [m/s^2]*/
fbob 3:2f2b8e863991 97 float az;
fbob 3:2f2b8e863991 98 /** Gyroscope data in x-axis [rad/s]*/
fbob 3:2f2b8e863991 99 float gx;
fbob 3:2f2b8e863991 100 /** Gyroscope data in y-axis [rad/s]*/
fbob 3:2f2b8e863991 101 float gy;
fbob 3:2f2b8e863991 102 /** Gyroscope data in z-axis [rad/s]*/
fbob 3:2f2b8e863991 103 float gz;
fbob 3:2f2b8e863991 104 private:
fbob 3:2f2b8e863991 105 /** I2C bus */
fbob 3:2f2b8e863991 106 I2C i2c;
fbob 3:2f2b8e863991 107
fbob 3:2f2b8e863991 108 /** Setup auxiliary I2C */
fbob 3:2f2b8e863991 109 void setup_aux_i2c();
fbob 3:2f2b8e863991 110
fbob 3:2f2b8e863991 111 /** Setup accelerometer with given output data rate and full-scale range*/
fbob 2:3d5f4b1c7bdb 112 void setup_accel(accel_scale a_scale = ACCEL_SCALE_16G);
fbob 3:2f2b8e863991 113 /** Setup gyroscope with given output data rate and full-scale range*/
fbob 2:3d5f4b1c7bdb 114 void setup_gyro(gyro_scale g_scale = GYRO_SCALE_500DPS);
fbob 3:2f2b8e863991 115 /** Read accelerometer output data */
fbob 2:3d5f4b1c7bdb 116 void read_accel();
fbob 3:2f2b8e863991 117 /** Read accelerometer output data */
fbob 2:3d5f4b1c7bdb 118 void read_gyro();
fbob 3:2f2b8e863991 119
fbob 3:2f2b8e863991 120 /** Accelerometer resolution [m/s^2 / bit]*/
fbob 3:2f2b8e863991 121 float a_res;
fbob 3:2f2b8e863991 122 /** Gyroscope resolution [rad/s / bit]*/
fbob 3:2f2b8e863991 123 float g_res;
fbob 2:3d5f4b1c7bdb 124 };
fbob 2:3d5f4b1c7bdb 125
fbob 2:3d5f4b1c7bdb 126 #endif