NOT FINISHED YET!!! My first try to get a self built fully working Quadrocopter based on an mbed, a self built frame and some other more or less cheap parts.
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 0xD0 // 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 private: 00138 int raw_gyro[3]; 00139 int raw_acc[3]; 00140 void readraw_gyro(); 00141 void readraw_acc(); 00142 }; 00143 00144 #endif
Generated on Tue Jul 12 2022 20:54:01 by 1.7.2