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:
Fri May 04 23:03:00 2018 +0000
Revision:
5:1ef8b91a0318
Parent:
3:2f2b8e863991
Started building PMW3901 library

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 5:1ef8b91a0318 7 #define GRAVITY 9.80665f
fbob 5:1ef8b91a0318 8 #define PI 3.14159f
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 3:2f2b8e863991 55 /** MPU9250 (IMU sensor) class
fbob 2:3d5f4b1c7bdb 56 *
fbob 3:2f2b8e863991 57 * Example code (print accelerometer and gyroscope data on serial port every 1 second):
fbob 2:3d5f4b1c7bdb 58 * @code
fbob 2:3d5f4b1c7bdb 59 * #include "mbed.h"
fbob 2:3d5f4b1c7bdb 60 * #include "USBSerial.h"
fbob 2:3d5f4b1c7bdb 61 * #include "MPU9250.h"
fbob 2:3d5f4b1c7bdb 62 *
fbob 2:3d5f4b1c7bdb 63 * USBSerial pc;
fbob 2:3d5f4b1c7bdb 64 * MPU9250 imu(PC_9,PA_8);
fbob 2:3d5f4b1c7bdb 65 *
fbob 2:3d5f4b1c7bdb 66 * int main()
fbob 2:3d5f4b1c7bdb 67 * {
fbob 3:2f2b8e863991 68 * imu.init();
fbob 2:3d5f4b1c7bdb 69 * while(1)
fbob 2:3d5f4b1c7bdb 70 * {
fbob 2:3d5f4b1c7bdb 71 * imu.read();
fbob 3:2f2b8e863991 72 * pc.printf("Accel [m/s^2]: %6.2f %6.2f %6.2f \n", imu.ax, imu.ay, imu.az);
fbob 3:2f2b8e863991 73 * pc.printf("Gyro [rad/s]: %6.2f %6.2f %6.2f \n\n", imu.gx, imu.gy, imu.gz);
fbob 2:3d5f4b1c7bdb 74 * wait(1);
fbob 2:3d5f4b1c7bdb 75 * }
fbob 2:3d5f4b1c7bdb 76 * }
fbob 2:3d5f4b1c7bdb 77 * @endcode
fbob 3:2f2b8e863991 78 * (Need to target to NUCLEO-F401RE board platform)
fbob 2:3d5f4b1c7bdb 79 */
fbob 2:3d5f4b1c7bdb 80 class MPU9250
fbob 2:3d5f4b1c7bdb 81 {
fbob 2:3d5f4b1c7bdb 82 public:
fbob 3:2f2b8e863991 83 /** Class constructor */
fbob 2:3d5f4b1c7bdb 84 MPU9250(PinName sda, PinName scl);
fbob 3:2f2b8e863991 85
fbob 3:2f2b8e863991 86 /** Initialize accelerometer and gyroscope */
fbob 3:2f2b8e863991 87 void init();
fbob 3:2f2b8e863991 88 /** Read accelerometer and gyroscope */
fbob 3:2f2b8e863991 89 void read();
fbob 3:2f2b8e863991 90
fbob 3:2f2b8e863991 91 /** Accelerometer data in x-axis [m/s^2]*/
fbob 3:2f2b8e863991 92 float ax;
fbob 3:2f2b8e863991 93 /** Accelerometer data in y-axis [m/s^2]*/
fbob 3:2f2b8e863991 94 float ay;
fbob 3:2f2b8e863991 95 /** Accelerometer data in z-axis [m/s^2]*/
fbob 3:2f2b8e863991 96 float az;
fbob 3:2f2b8e863991 97 /** Gyroscope data in x-axis [rad/s]*/
fbob 3:2f2b8e863991 98 float gx;
fbob 3:2f2b8e863991 99 /** Gyroscope data in y-axis [rad/s]*/
fbob 3:2f2b8e863991 100 float gy;
fbob 3:2f2b8e863991 101 /** Gyroscope data in z-axis [rad/s]*/
fbob 3:2f2b8e863991 102 float gz;
fbob 3:2f2b8e863991 103 private:
fbob 3:2f2b8e863991 104 /** I2C bus */
fbob 3:2f2b8e863991 105 I2C i2c;
fbob 3:2f2b8e863991 106
fbob 3:2f2b8e863991 107 /** Setup auxiliary I2C */
fbob 3:2f2b8e863991 108 void setup_aux_i2c();
fbob 3:2f2b8e863991 109
fbob 3:2f2b8e863991 110 /** Setup accelerometer with given output data rate and full-scale range*/
fbob 2:3d5f4b1c7bdb 111 void setup_accel(accel_scale a_scale = ACCEL_SCALE_16G);
fbob 3:2f2b8e863991 112 /** Setup gyroscope with given output data rate and full-scale range*/
fbob 2:3d5f4b1c7bdb 113 void setup_gyro(gyro_scale g_scale = GYRO_SCALE_500DPS);
fbob 3:2f2b8e863991 114 /** Read accelerometer output data */
fbob 2:3d5f4b1c7bdb 115 void read_accel();
fbob 3:2f2b8e863991 116 /** Read accelerometer output data */
fbob 2:3d5f4b1c7bdb 117 void read_gyro();
fbob 3:2f2b8e863991 118
fbob 3:2f2b8e863991 119 /** Accelerometer resolution [m/s^2 / bit]*/
fbob 3:2f2b8e863991 120 float a_res;
fbob 3:2f2b8e863991 121 /** Gyroscope resolution [rad/s / bit]*/
fbob 3:2f2b8e863991 122 float g_res;
fbob 2:3d5f4b1c7bdb 123 };
fbob 2:3d5f4b1c7bdb 124
fbob 2:3d5f4b1c7bdb 125 #endif