MPU-9250 with Kalman Filter

Dependencies:   ADXL362-helloworld MPU9250_SPI mbed

Fork of ADXL362-helloworld by Analog Devices

Committer:
mfurukawa
Date:
Fri Jun 17 06:07:57 2016 +0000
Revision:
9:e700b2d586d6
Parent:
8:03f9b5289083
Child:
10:f2ef74678956
Gyro & Acc Stable;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfurukawa 3:07aa20aa678d 1 /**
mfurukawa 3:07aa20aa678d 2 * Masahiro FURUKAWA - m.furukawa@ist.osaka-u.ac.jp
mfurukawa 8:03f9b5289083 3 *
mfurukawa 6:ea0804dc7cae 4 * June 17, 2016
mfurukawa 3:07aa20aa678d 5 *
mfurukawa 6:ea0804dc7cae 6 * MPU9250 9DoF Sensor (Extended to Ch1 ~ Ch2)
mfurukawa 3:07aa20aa678d 7 *
mfurukawa 3:07aa20aa678d 8 **/
mfurukawa 3:07aa20aa678d 9
mfurukawa 1:f1e4ee4fc335 10
adisuciu 0:83fda1bfaffe 11 #include "mbed.h"
mfurukawa 6:ea0804dc7cae 12 #include "MPU9250.h"
mfurukawa 8:03f9b5289083 13
mfurukawa 1:f1e4ee4fc335 14 /*
mfurukawa 1:f1e4ee4fc335 15 MOSI (Master Out Slave In) p5
mfurukawa 1:f1e4ee4fc335 16 MISO (Master In Slave Out p6
mfurukawa 1:f1e4ee4fc335 17 SCK (Serial Clock) p7
mfurukawa 6:ea0804dc7cae 18 ~CS (Chip Select) p8
mfurukawa 1:f1e4ee4fc335 19 */
adisuciu 0:83fda1bfaffe 20
mfurukawa 6:ea0804dc7cae 21 // https://developer.mbed.org/users/kylongmu/code/MPU9250_SPI_Test/file/5839d1b118bc/main.cpp
mfurukawa 4:5a9aa5ae928a 22
mfurukawa 8:03f9b5289083 23 int main()
mfurukawa 8:03f9b5289083 24 {
mfurukawa 6:ea0804dc7cae 25
mfurukawa 6:ea0804dc7cae 26 Serial pc(USBTX, USBRX);
mfurukawa 2:9ef7a594159c 27 pc.baud(115200);
mfurukawa 8:03f9b5289083 28
mfurukawa 6:ea0804dc7cae 29 SPI spi(p5, p6, p7);
mfurukawa 6:ea0804dc7cae 30
mfurukawa 6:ea0804dc7cae 31 //define the mpu9250 object
mfurukawa 6:ea0804dc7cae 32 mpu9250_spi *imu[2];
mfurukawa 8:03f9b5289083 33
mfurukawa 6:ea0804dc7cae 34 imu[0] = new mpu9250_spi(spi, p8);
mfurukawa 6:ea0804dc7cae 35 imu[1] = new mpu9250_spi(spi, p9);
mfurukawa 8:03f9b5289083 36
mfurukawa 8:03f9b5289083 37 for(int i=0; i<2; i++) {
mfurukawa 8:03f9b5289083 38
mfurukawa 7:758a94e02aa7 39 imu[0]->deselect();
mfurukawa 7:758a94e02aa7 40 imu[1]->deselect();
mfurukawa 7:758a94e02aa7 41 imu[i]->select();
mfurukawa 8:03f9b5289083 42
mfurukawa 8:03f9b5289083 43 if(imu[i]->init(1,BITS_DLPF_CFG_188HZ)) { //INIT the mpu9250
mfurukawa 6:ea0804dc7cae 44 printf("\nCouldn't initialize MPU9250 via SPI!");
mfurukawa 8:03f9b5289083 45 }
mfurukawa 6:ea0804dc7cae 46 printf("\nWHOAMI=0x%2x\n",imu[i]->whoami()); //output the I2C address to know if SPI is working, it should be 104
mfurukawa 8:03f9b5289083 47 wait(1);
mfurukawa 6:ea0804dc7cae 48 printf("Gyro_scale=%u\n",imu[i]->set_gyro_scale(BITS_FS_2000DPS)); //Set full scale range for gyros
mfurukawa 8:03f9b5289083 49 wait(1);
mfurukawa 6:ea0804dc7cae 50 printf("Acc_scale=%u\n",imu[i]->set_acc_scale(BITS_FS_16G)); //Set full scale range for accs
mfurukawa 6:ea0804dc7cae 51 wait(1);
mfurukawa 6:ea0804dc7cae 52 printf("AK8963 WHIAM=0x%2x\n",imu[i]->AK8963_whoami());
mfurukawa 8:03f9b5289083 53 wait(0.1);
mfurukawa 6:ea0804dc7cae 54 imu[i]->AK8963_calib_Magnetometer();
mfurukawa 8:03f9b5289083 55 wait(0.1);
mfurukawa 7:758a94e02aa7 56 }
mfurukawa 7:758a94e02aa7 57 imu[0]->select();
mfurukawa 7:758a94e02aa7 58 imu[1]->deselect();
mfurukawa 7:758a94e02aa7 59 while(1) {
mfurukawa 8:03f9b5289083 60
mfurukawa 7:758a94e02aa7 61 //myled = 1;
mfurukawa 8:03f9b5289083 62
mfurukawa 9:e700b2d586d6 63 //wait_us(1);
mfurukawa 8:03f9b5289083 64
mfurukawa 8:03f9b5289083 65 for(int i=0; i<2; i++) {
mfurukawa 8:03f9b5289083 66
mfurukawa 7:758a94e02aa7 67 imu[0]->deselect();
mfurukawa 7:758a94e02aa7 68 imu[1]->deselect();
mfurukawa 8:03f9b5289083 69
mfurukawa 7:758a94e02aa7 70 imu[i]->select();
mfurukawa 9:e700b2d586d6 71 imu[i]->read_acc();
mfurukawa 9:e700b2d586d6 72 imu[i]->read_rot();
mfurukawa 9:e700b2d586d6 73
mfurukawa 9:e700b2d586d6 74 printf("%10.3f,%10.3f,%10.3f %10.3f,%10.3f,%10.3f ",
mfurukawa 9:e700b2d586d6 75 imu[i]->gyroscope_data[0],
mfurukawa 9:e700b2d586d6 76 imu[i]->gyroscope_data[1],
mfurukawa 9:e700b2d586d6 77 imu[i]->gyroscope_data[2],
mfurukawa 9:e700b2d586d6 78 imu[i]->accelerometer_data[0],
mfurukawa 9:e700b2d586d6 79 imu[i]->accelerometer_data[1],
mfurukawa 9:e700b2d586d6 80 imu[i]->accelerometer_data[2]
mfurukawa 9:e700b2d586d6 81 );
mfurukawa 9:e700b2d586d6 82 /*
mfurukawa 6:ea0804dc7cae 83 imu[i]->read_all();
mfurukawa 8:03f9b5289083 84 printf("%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f ",
mfurukawa 8:03f9b5289083 85 imu[i]->Temperature,
mfurukawa 8:03f9b5289083 86 imu[i]->gyroscope_data[0],
mfurukawa 8:03f9b5289083 87 imu[i]->gyroscope_data[1],
mfurukawa 8:03f9b5289083 88 imu[i]->gyroscope_data[2],
mfurukawa 8:03f9b5289083 89 imu[i]->accelerometer_data[0],
mfurukawa 8:03f9b5289083 90 imu[i]->accelerometer_data[1],
mfurukawa 8:03f9b5289083 91 imu[i]->accelerometer_data[2],
mfurukawa 8:03f9b5289083 92 imu[i]->Magnetometer[0],
mfurukawa 8:03f9b5289083 93 imu[i]->Magnetometer[1],
mfurukawa 8:03f9b5289083 94 imu[i]->Magnetometer[2]
mfurukawa 9:e700b2d586d6 95 );*/
mfurukawa 8:03f9b5289083 96 //myled = 0;
mfurukawa 8:03f9b5289083 97 //wait(0.5);
mfurukawa 6:ea0804dc7cae 98 }
mfurukawa 8:03f9b5289083 99 printf("\n");
adisuciu 0:83fda1bfaffe 100 }
adisuciu 0:83fda1bfaffe 101 }