My fully self designed first stable working Quadrocopter Software.

Dependencies:   mbed

Dependents:   fluy343

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MPU6050.h Source File

MPU6050.h

00001 // based on http://mbed.org/users/garfieldsg/code/MPU6050/
00002 
00003 #ifndef MPU6050_H
00004 #define MPU6050_H
00005 
00006 #include "mbed.h"
00007 #include "I2C_Sensor.h"
00008 
00009 #define MPU6050_ADDRESS_AD0_LOW     0x68 // address pin low (GND), default for InvenSense evaluation board
00010 #define MPU6050_ADDRESS_AD0_HIGH    0x69 // address pin high (VCC)
00011 #define MPU6050_I2C_ADDRESS         0xD2 // adresses above multiplied by 2
00012 
00013 // register addresses
00014 #define MPU6050_RA_XG_OFFS_TC       0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
00015 #define MPU6050_RA_YG_OFFS_TC       0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
00016 #define MPU6050_RA_ZG_OFFS_TC       0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
00017 #define MPU6050_RA_X_FINE_GAIN      0x03 //[7:0] X_FINE_GAIN
00018 #define MPU6050_RA_Y_FINE_GAIN      0x04 //[7:0] Y_FINE_GAIN
00019 #define MPU6050_RA_Z_FINE_GAIN      0x05 //[7:0] Z_FINE_GAIN
00020 #define MPU6050_RA_XA_OFFS_H        0x06 //[15:0] XA_OFFS
00021 #define MPU6050_RA_XA_OFFS_L_TC     0x07
00022 #define MPU6050_RA_YA_OFFS_H        0x08 //[15:0] YA_OFFS
00023 #define MPU6050_RA_YA_OFFS_L_TC     0x09
00024 #define MPU6050_RA_ZA_OFFS_H        0x0A //[15:0] ZA_OFFS
00025 #define MPU6050_RA_ZA_OFFS_L_TC     0x0B
00026 #define MPU6050_RA_XG_OFFS_USRH     0x13 //[15:0] XG_OFFS_USR
00027 #define MPU6050_RA_XG_OFFS_USRL     0x14
00028 #define MPU6050_RA_YG_OFFS_USRH     0x15 //[15:0] YG_OFFS_USR
00029 #define MPU6050_RA_YG_OFFS_USRL     0x16
00030 #define MPU6050_RA_ZG_OFFS_USRH     0x17 //[15:0] ZG_OFFS_USR
00031 #define MPU6050_RA_ZG_OFFS_USRL     0x18
00032 #define MPU6050_RA_SMPLRT_DIV       0x19
00033 #define MPU6050_RA_CONFIG           0x1A
00034 #define MPU6050_RA_GYRO_CONFIG      0x1B
00035 #define MPU6050_RA_ACCEL_CONFIG     0x1C
00036 #define MPU6050_RA_FF_THR           0x1D
00037 #define MPU6050_RA_FF_DUR           0x1E
00038 #define MPU6050_RA_MOT_THR          0x1F
00039 #define MPU6050_RA_MOT_DUR          0x20
00040 #define MPU6050_RA_ZRMOT_THR        0x21
00041 #define MPU6050_RA_ZRMOT_DUR        0x22
00042 #define MPU6050_RA_FIFO_EN          0x23
00043 #define MPU6050_RA_I2C_MST_CTRL     0x24
00044 #define MPU6050_RA_I2C_SLV0_ADDR    0x25
00045 #define MPU6050_RA_I2C_SLV0_REG     0x26
00046 #define MPU6050_RA_I2C_SLV0_CTRL    0x27
00047 #define MPU6050_RA_I2C_SLV1_ADDR    0x28
00048 #define MPU6050_RA_I2C_SLV1_REG     0x29
00049 #define MPU6050_RA_I2C_SLV1_CTRL    0x2A
00050 #define MPU6050_RA_I2C_SLV2_ADDR    0x2B
00051 #define MPU6050_RA_I2C_SLV2_REG     0x2C
00052 #define MPU6050_RA_I2C_SLV2_CTRL    0x2D
00053 #define MPU6050_RA_I2C_SLV3_ADDR    0x2E
00054 #define MPU6050_RA_I2C_SLV3_REG     0x2F
00055 #define MPU6050_RA_I2C_SLV3_CTRL    0x30
00056 #define MPU6050_RA_I2C_SLV4_ADDR    0x31
00057 #define MPU6050_RA_I2C_SLV4_REG     0x32
00058 #define MPU6050_RA_I2C_SLV4_DO      0x33
00059 #define MPU6050_RA_I2C_SLV4_CTRL    0x34
00060 #define MPU6050_RA_I2C_SLV4_DI      0x35
00061 #define MPU6050_RA_I2C_MST_STATUS   0x36
00062 #define MPU6050_RA_INT_PIN_CFG      0x37
00063 #define MPU6050_RA_INT_ENABLE       0x38
00064 #define MPU6050_RA_DMP_INT_STATUS   0x39
00065 #define MPU6050_RA_INT_STATUS       0x3A
00066 #define MPU6050_RA_ACCEL_XOUT_H     0x3B
00067 #define MPU6050_RA_ACCEL_XOUT_L     0x3C
00068 #define MPU6050_RA_ACCEL_YOUT_H     0x3D
00069 #define MPU6050_RA_ACCEL_YOUT_L     0x3E
00070 #define MPU6050_RA_ACCEL_ZOUT_H     0x3F
00071 #define MPU6050_RA_ACCEL_ZOUT_L     0x40
00072 #define MPU6050_RA_TEMP_OUT_H       0x41
00073 #define MPU6050_RA_TEMP_OUT_L       0x42
00074 #define MPU6050_RA_GYRO_XOUT_H      0x43
00075 #define MPU6050_RA_GYRO_XOUT_L      0x44
00076 #define MPU6050_RA_GYRO_YOUT_H      0x45
00077 #define MPU6050_RA_GYRO_YOUT_L      0x46
00078 #define MPU6050_RA_GYRO_ZOUT_H      0x47
00079 #define MPU6050_RA_GYRO_ZOUT_L      0x48
00080 #define MPU6050_RA_EXT_SENS_DATA_00 0x49
00081 #define MPU6050_RA_EXT_SENS_DATA_01 0x4A
00082 #define MPU6050_RA_EXT_SENS_DATA_02 0x4B
00083 #define MPU6050_RA_EXT_SENS_DATA_03 0x4C
00084 #define MPU6050_RA_EXT_SENS_DATA_04 0x4D
00085 #define MPU6050_RA_EXT_SENS_DATA_05 0x4E
00086 #define MPU6050_RA_EXT_SENS_DATA_06 0x4F
00087 #define MPU6050_RA_EXT_SENS_DATA_07 0x50
00088 #define MPU6050_RA_EXT_SENS_DATA_08 0x51
00089 #define MPU6050_RA_EXT_SENS_DATA_09 0x52
00090 #define MPU6050_RA_EXT_SENS_DATA_10 0x53
00091 #define MPU6050_RA_EXT_SENS_DATA_11 0x54
00092 #define MPU6050_RA_EXT_SENS_DATA_12 0x55
00093 #define MPU6050_RA_EXT_SENS_DATA_13 0x56
00094 #define MPU6050_RA_EXT_SENS_DATA_14 0x57
00095 #define MPU6050_RA_EXT_SENS_DATA_15 0x58
00096 #define MPU6050_RA_EXT_SENS_DATA_16 0x59
00097 #define MPU6050_RA_EXT_SENS_DATA_17 0x5A
00098 #define MPU6050_RA_EXT_SENS_DATA_18 0x5B
00099 #define MPU6050_RA_EXT_SENS_DATA_19 0x5C
00100 #define MPU6050_RA_EXT_SENS_DATA_20 0x5D
00101 #define MPU6050_RA_EXT_SENS_DATA_21 0x5E
00102 #define MPU6050_RA_EXT_SENS_DATA_22 0x5F
00103 #define MPU6050_RA_EXT_SENS_DATA_23 0x60
00104 #define MPU6050_RA_MOT_DETECT_STATUS    0x61
00105 #define MPU6050_RA_I2C_SLV0_DO      0x63
00106 #define MPU6050_RA_I2C_SLV1_DO      0x64
00107 #define MPU6050_RA_I2C_SLV2_DO      0x65
00108 #define MPU6050_RA_I2C_SLV3_DO      0x66
00109 #define MPU6050_RA_I2C_MST_DELAY_CTRL   0x67
00110 #define MPU6050_RA_SIGNAL_PATH_RESET    0x68
00111 #define MPU6050_RA_MOT_DETECT_CTRL      0x69
00112 #define MPU6050_RA_USER_CTRL        0x6A
00113 #define MPU6050_RA_PWR_MGMT_1       0x6B
00114 #define MPU6050_RA_PWR_MGMT_2       0x6C
00115 #define MPU6050_RA_BANK_SEL         0x6D
00116 #define MPU6050_RA_MEM_START_ADDR   0x6E
00117 #define MPU6050_RA_MEM_R_W          0x6F
00118 #define MPU6050_RA_DMP_CFG_1        0x70
00119 #define MPU6050_RA_DMP_CFG_2        0x71
00120 #define MPU6050_RA_FIFO_COUNTH      0x72
00121 #define MPU6050_RA_FIFO_COUNTL      0x73
00122 #define MPU6050_RA_FIFO_R_W         0x74
00123 #define MPU6050_RA_WHO_AM_I         0x75
00124 
00125 class MPU6050 : public I2C_Sensor
00126 {
00127     public:            
00128         MPU6050(PinName sda, PinName scl);                  // constructor, uses I2C_Sensor class
00129         float data_gyro[3];                                 // where the measured data is saved
00130         float data_acc[3];                                  // where the measured data is saved
00131         virtual void read();                                // read all axis from register to array data
00132         float offset_gyro[3];                               // offset that's subtracted from every Gyroscope measurement
00133         float offset_acc[3];                                // offset that's subtracted from every Accelerometer measurement
00134         void calibrate(int times, float separation_time);   // calibration from 'times' measurements with 'separation_time' time between (get an offset while not moving)
00135         int readTemp();                                     // read temperature from sensor
00136         
00137         int raw_gyro[3];
00138     private:
00139         
00140         int raw_acc[3];
00141         void readraw_gyro();
00142         void readraw_acc();
00143 };
00144 
00145 #endif