Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MPU9250_SPI by
MPU9250.h
00001 /*CODED by Qiyong Mu on 21/06/2014 00002 kylongmu@msn.com 00003 */ 00004 00005 00006 #ifndef mpu9250_h 00007 #define mpu9250_h 00008 #include "mbed.h" 00009 00010 00011 class mpu9250_spi 00012 { 00013 SPI& spi; 00014 DigitalOut cs; 00015 00016 public: 00017 mpu9250_spi(SPI& _spi, PinName _cs); 00018 unsigned int WriteReg( uint8_t WriteAddr, uint8_t WriteData ); 00019 unsigned int ReadReg( uint8_t WriteAddr, uint8_t WriteData ); 00020 void ReadRegs( uint8_t ReadAddr, uint8_t *ReadBuf, unsigned int Bytes ); 00021 00022 bool init(int sample_rate_div,int low_pass_filter); 00023 void read_temp(); 00024 void read_acc(); 00025 void read_rot(); 00026 unsigned int set_gyro_scale(int scale); 00027 unsigned int set_acc_scale(int scale); 00028 void calib_acc(); 00029 void AK8963_calib_Magnetometer(); 00030 void select(); 00031 void deselect(); 00032 unsigned int whoami(); 00033 uint8_t AK8963_whoami(); 00034 void AK8963_read_Magnetometer(); 00035 void read_all(); 00036 00037 00038 00039 float acc_divider; 00040 float gyro_divider; 00041 00042 int calib_data[3]; 00043 float Magnetometer_ASA[3]; 00044 00045 float accelerometer_data[3]; 00046 float Temperature; 00047 float gyroscope_data[3]; 00048 float Magnetometer[3]; 00049 00050 private: 00051 PinName _CS_pin; 00052 PinName _SO_pin; 00053 PinName _SCK_pin; 00054 float _error; 00055 }; 00056 00057 #endif 00058 00059 00060 00061 // mpu9250 registers 00062 #define MPUREG_XG_OFFS_TC 0x00 00063 #define MPUREG_YG_OFFS_TC 0x01 00064 #define MPUREG_ZG_OFFS_TC 0x02 00065 #define MPUREG_X_FINE_GAIN 0x03 00066 #define MPUREG_Y_FINE_GAIN 0x04 00067 #define MPUREG_Z_FINE_GAIN 0x05 00068 #define MPUREG_XA_OFFS_H 0x06 00069 #define MPUREG_XA_OFFS_L 0x07 00070 #define MPUREG_YA_OFFS_H 0x08 00071 #define MPUREG_YA_OFFS_L 0x09 00072 #define MPUREG_ZA_OFFS_H 0x0A 00073 #define MPUREG_ZA_OFFS_L 0x0B 00074 #define MPUREG_PRODUCT_ID 0x0C 00075 #define MPUREG_SELF_TEST_X 0x0D 00076 #define MPUREG_SELF_TEST_Y 0x0E 00077 #define MPUREG_SELF_TEST_Z 0x0F 00078 #define MPUREG_SELF_TEST_A 0x10 00079 #define MPUREG_XG_OFFS_USRH 0x13 00080 #define MPUREG_XG_OFFS_USRL 0x14 00081 #define MPUREG_YG_OFFS_USRH 0x15 00082 #define MPUREG_YG_OFFS_USRL 0x16 00083 #define MPUREG_ZG_OFFS_USRH 0x17 00084 #define MPUREG_ZG_OFFS_USRL 0x18 00085 #define MPUREG_SMPLRT_DIV 0x19 00086 #define MPUREG_CONFIG 0x1A 00087 #define MPUREG_GYRO_CONFIG 0x1B 00088 #define MPUREG_ACCEL_CONFIG 0x1C 00089 #define MPUREG_ACCEL_CONFIG_2 0x1D 00090 #define MPUREG_LP_ACCEL_ODR 0x1E 00091 #define MPUREG_MOT_THR 0x1F 00092 #define MPUREG_FIFO_EN 0x23 00093 #define MPUREG_I2C_MST_CTRL 0x24 00094 #define MPUREG_I2C_SLV0_ADDR 0x25 00095 #define MPUREG_I2C_SLV0_REG 0x26 00096 #define MPUREG_I2C_SLV0_CTRL 0x27 00097 #define MPUREG_I2C_SLV1_ADDR 0x28 00098 #define MPUREG_I2C_SLV1_REG 0x29 00099 #define MPUREG_I2C_SLV1_CTRL 0x2A 00100 #define MPUREG_I2C_SLV2_ADDR 0x2B 00101 #define MPUREG_I2C_SLV2_REG 0x2C 00102 #define MPUREG_I2C_SLV2_CTRL 0x2D 00103 #define MPUREG_I2C_SLV3_ADDR 0x2E 00104 #define MPUREG_I2C_SLV3_REG 0x2F 00105 #define MPUREG_I2C_SLV3_CTRL 0x30 00106 #define MPUREG_I2C_SLV4_ADDR 0x31 00107 #define MPUREG_I2C_SLV4_REG 0x32 00108 #define MPUREG_I2C_SLV4_DO 0x33 00109 #define MPUREG_I2C_SLV4_CTRL 0x34 00110 #define MPUREG_I2C_SLV4_DI 0x35 00111 #define MPUREG_I2C_MST_STATUS 0x36 00112 #define MPUREG_INT_PIN_CFG 0x37 00113 #define MPUREG_INT_ENABLE 0x38 00114 #define MPUREG_ACCEL_XOUT_H 0x3B 00115 #define MPUREG_ACCEL_XOUT_L 0x3C 00116 #define MPUREG_ACCEL_YOUT_H 0x3D 00117 #define MPUREG_ACCEL_YOUT_L 0x3E 00118 #define MPUREG_ACCEL_ZOUT_H 0x3F 00119 #define MPUREG_ACCEL_ZOUT_L 0x40 00120 #define MPUREG_TEMP_OUT_H 0x41 00121 #define MPUREG_TEMP_OUT_L 0x42 00122 #define MPUREG_GYRO_XOUT_H 0x43 00123 #define MPUREG_GYRO_XOUT_L 0x44 00124 #define MPUREG_GYRO_YOUT_H 0x45 00125 #define MPUREG_GYRO_YOUT_L 0x46 00126 #define MPUREG_GYRO_ZOUT_H 0x47 00127 #define MPUREG_GYRO_ZOUT_L 0x48 00128 #define MPUREG_EXT_SENS_DATA_00 0x49 00129 #define MPUREG_EXT_SENS_DATA_01 0x4A 00130 #define MPUREG_EXT_SENS_DATA_02 0x4B 00131 #define MPUREG_EXT_SENS_DATA_03 0x4C 00132 #define MPUREG_EXT_SENS_DATA_04 0x4D 00133 #define MPUREG_EXT_SENS_DATA_05 0x4E 00134 #define MPUREG_EXT_SENS_DATA_06 0x4F 00135 #define MPUREG_EXT_SENS_DATA_07 0x50 00136 #define MPUREG_EXT_SENS_DATA_08 0x51 00137 #define MPUREG_EXT_SENS_DATA_09 0x52 00138 #define MPUREG_EXT_SENS_DATA_10 0x53 00139 #define MPUREG_EXT_SENS_DATA_11 0x54 00140 #define MPUREG_EXT_SENS_DATA_12 0x55 00141 #define MPUREG_EXT_SENS_DATA_13 0x56 00142 #define MPUREG_EXT_SENS_DATA_14 0x57 00143 #define MPUREG_EXT_SENS_DATA_15 0x58 00144 #define MPUREG_EXT_SENS_DATA_16 0x59 00145 #define MPUREG_EXT_SENS_DATA_17 0x5A 00146 #define MPUREG_EXT_SENS_DATA_18 0x5B 00147 #define MPUREG_EXT_SENS_DATA_19 0x5C 00148 #define MPUREG_EXT_SENS_DATA_20 0x5D 00149 #define MPUREG_EXT_SENS_DATA_21 0x5E 00150 #define MPUREG_EXT_SENS_DATA_22 0x5F 00151 #define MPUREG_EXT_SENS_DATA_23 0x60 00152 #define MPUREG_I2C_SLV0_DO 0x63 00153 #define MPUREG_I2C_SLV1_DO 0x64 00154 #define MPUREG_I2C_SLV2_DO 0x65 00155 #define MPUREG_I2C_SLV3_DO 0x66 00156 #define MPUREG_I2C_MST_DELAY_CTRL 0x67 00157 #define MPUREG_SIGNAL_PATH_RESET 0x68 00158 #define MPUREG_MOT_DETECT_CTRL 0x69 00159 #define MPUREG_USER_CTRL 0x6A 00160 #define MPUREG_PWR_MGMT_1 0x6B 00161 #define MPUREG_PWR_MGMT_2 0x6C 00162 #define MPUREG_BANK_SEL 0x6D 00163 #define MPUREG_MEM_START_ADDR 0x6E 00164 #define MPUREG_MEM_R_W 0x6F 00165 #define MPUREG_DMP_CFG_1 0x70 00166 #define MPUREG_DMP_CFG_2 0x71 00167 #define MPUREG_FIFO_COUNTH 0x72 00168 #define MPUREG_FIFO_COUNTL 0x73 00169 #define MPUREG_FIFO_R_W 0x74 00170 #define MPUREG_WHOAMI 0x75 00171 #define MPUREG_XA_OFFSET_H 0x77 00172 #define MPUREG_XA_OFFSET_L 0x78 00173 #define MPUREG_YA_OFFSET_H 0x7A 00174 #define MPUREG_YA_OFFSET_L 0x7B 00175 #define MPUREG_ZA_OFFSET_H 0x7D 00176 #define MPUREG_ZA_OFFSET_L 0x7E 00177 /* ---- AK8963 Reg In MPU9250 ----------------------------------------------- */ 00178 00179 #define AK8963_I2C_ADDR 0x0c//0x18 00180 #define AK8963_Device_ID 0x48 00181 00182 // Read-only Reg 00183 #define AK8963_WIA 0x00 00184 #define AK8963_INFO 0x01 00185 #define AK8963_ST1 0x02 00186 #define AK8963_HXL 0x03 00187 #define AK8963_HXH 0x04 00188 #define AK8963_HYL 0x05 00189 #define AK8963_HYH 0x06 00190 #define AK8963_HZL 0x07 00191 #define AK8963_HZH 0x08 00192 #define AK8963_ST2 0x09 00193 // Write/Read Reg 00194 #define AK8963_CNTL1 0x0A 00195 #define AK8963_CNTL2 0x0B 00196 #define AK8963_ASTC 0x0C 00197 #define AK8963_TS1 0x0D 00198 #define AK8963_TS2 0x0E 00199 #define AK8963_I2CDIS 0x0F 00200 // Read-only Reg ( ROM ) 00201 #define AK8963_ASAX 0x10 00202 #define AK8963_ASAY 0x11 00203 #define AK8963_ASAZ 0x12 00204 00205 // Configuration bits mpu9250 00206 #define BIT_SLEEP 0x40 00207 #define BIT_H_RESET 0x80 00208 #define BITS_CLKSEL 0x07 00209 #define MPU_CLK_SEL_PLLGYROX 0x01 00210 #define MPU_CLK_SEL_PLLGYROZ 0x03 00211 #define MPU_EXT_SYNC_GYROX 0x02 00212 #define BITS_FS_250DPS 0x00 00213 #define BITS_FS_500DPS 0x08 00214 #define BITS_FS_1000DPS 0x10 00215 #define BITS_FS_2000DPS 0x18 00216 #define BITS_FS_2G 0x00 00217 #define BITS_FS_4G 0x08 00218 #define BITS_FS_8G 0x10 00219 #define BITS_FS_16G 0x18 00220 #define BITS_FS_MASK 0x18 00221 #define BITS_DLPF_CFG_256HZ_NOLPF2 0x00 00222 #define BITS_DLPF_CFG_188HZ 0x01 00223 #define BITS_DLPF_CFG_98HZ 0x02 00224 #define BITS_DLPF_CFG_42HZ 0x03 00225 #define BITS_DLPF_CFG_20HZ 0x04 00226 #define BITS_DLPF_CFG_10HZ 0x05 00227 #define BITS_DLPF_CFG_5HZ 0x06 00228 #define BITS_DLPF_CFG_2100HZ_NOLPF 0x07 00229 #define BITS_DLPF_CFG_MASK 0x07 00230 #define BIT_INT_ANYRD_2CLEAR 0x10 00231 #define BIT_RAW_RDY_EN 0x01 00232 #define BIT_I2C_IF_DIS 0x10 00233 00234 #define READ_FLAG 0x80 00235 00236 /* ---- Sensitivity --------------------------------------------------------- */ 00237 00238 #define MPU9250A_2g ((float)0.000061035156f) // 0.000061035156 g/LSB 00239 #define MPU9250A_4g ((float)0.000122070312f) // 0.000122070312 g/LSB 00240 #define MPU9250A_8g ((float)0.000244140625f) // 0.000244140625 g/LSB 00241 #define MPU9250A_16g ((float)0.000488281250f) // 0.000488281250 g/LSB 00242 00243 #define MPU9250G_250dps ((float)0.007633587786f) // 0.007633587786 dps/LSB 00244 #define MPU9250G_500dps ((float)0.015267175572f) // 0.015267175572 dps/LSB 00245 #define MPU9250G_1000dps ((float)0.030487804878f) // 0.030487804878 dps/LSB 00246 #define MPU9250G_2000dps ((float)0.060975609756f) // 0.060975609756 dps/LSB 00247 00248 #define MPU9250M_4800uT ((float)0.6f) // 0.6 uT/LSB 00249 00250 #define MPU9250T_85degC ((float)0.002995177763f) // 0.002995177763 degC/LSB 00251 00252 #define Magnetometer_Sensitivity_Scale_Factor ((float)0.15f)
Generated on Wed Jul 13 2022 22:00:57 by
1.7.2
