天天看點

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

本文開發環境:
  • MCU型号:STM32F103C8T6
  • IDE環境: MDK 5.27
  • 代碼生成工具:STM32CubeMx 5.6.1
  • HAL庫版本:STM32Cube_FW_F1_V1.8.0
本文内容:
  • STM32F1x HAL庫硬體 I2C 通信
  • MPU9250 使用 DMP 輸出姿态角:Roll,Pitch,Yaw
  • MPU9250 中 DMP 的移植
附件:
  • MDK5 STM32F1 示例工程
  • MPU9250 中文手冊
  • MPU9250 英文參考資料
  • DMP 官方驅動庫
  • 正點原子阿波羅開發闆 MPU9250九軸傳感器實驗 工程

注意:

① MPU9250自測不通過可能原因:

  • I2C速率問題,本文測試400KHz,資料良好,100KHz 和50Khz 會自測失敗
  • 子產品需要放置水準,z軸指向上方

② 本文将 DMP庫移植到STM32F1,若是 STM32F4 單片機,可以考慮直接使用附件中,正點原子的 MPU9250 例程,它是基于STM32F4 的。

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

mpu9250 可以測量裝置的姿态,是平衡車和四軸飛行器常用的晶片,mpu9250 輸出的原始資料為,x,y,z軸的加速度,角速度和磁通量,通常原始資料沒有太大的意義,使用者更關心的是姿态角:Pitch,Roll 和 Yaw,它們是由原始資料通過計算得出,mpu9250 内置了資料處理子產品DMP,它可以将原始資料計算出四元數,MCU 通過四元數既可以計算得出姿态角,可見,DMP 節約了MCU的運算時間,也減輕了其運算負擔,mpu9250 更多請參考附錄資料,這裡隻記錄移植 DMP 庫的過程。一般的,硬體i2c需要外部上拉,由于 本文使用的 mpu9250 子產品的 i2c 有上拉電阻,是以不需額外上拉電路。

注意,DMP 官方的庫示例為 msp430,正點原子将其移植到STM32F4平台,并添加了mpu的初始化和通過四元數擷取姿态函數,是以本文使用正點原子的 DMP 庫作為移植的源碼,減輕工作量。

一、硬體連線

STM32 Board mpu9250 子產品
3.3V VCC
GND GND
PB7 SDA
PB6 SCL
3.3V FSYNC

①注意:FSYNC 懸空可能會出現檢測不到磁力計的錯誤(手冊簡易若不使用,可接GND,不過本文接的是VCC),未用到中斷及其它IO口,是以 EDA,ECL,AD0 和 INT 是懸空的。

二、DMP 移植前準備

1. 模闆工程

mpu9250 提供了 spi 和 i2c 兩種通信模式,本文采用硬體 i2c 來驅動,MCU型号為:STM32F103C8,F103 系列幾乎是通用的,按個人了解,本文附件工程編譯的 hex 檔案亦可下載下傳到其它型号中,如 STM32F103ZExx,STM32F103RCxx 等等。

移植之前,需要一個模闆工程,它可以使 STM32 使用 i2c 進行通信,本文使用 STM32CubeMx(下稱 Mx)生成 HAL 庫工程,并使用 ST-LINK 作為調試和列印資訊工具。ST-LINK 輸出調試資訊 以及 Mx 關于 i2c 的配置方法 這裡不再贅述,詳見連結。

②注意,Mx 預設 i2c 是 10KHz ,這裡需要設定為快速模式,并把速度設定為 400K(400000),否則, mpu9250 的 DMP 将自測失敗:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

2. 測試

這一步需要測試 mpu9250 子產品和 STM32 的通信,通過手冊可知,mpu9250 的寄存器 WHOAMI(位址:0x75)預設存放一個值 0x71,它與其他寄存器的初始化無關,是以将子產品上電以後,就可以讀取改寄存器,若值正常,即 0x71 at 0x75則說明工程的 i2c 與 mpu9250 通信正常:

printf("-- Mpu9250 Project Start -- \r\n");
      uint8_t recv = 0x00;
      uint8_t i2c_err;
      i2c_err = HAL_I2C_Mem_Read(&hi2c1, (0x68<<1), 0x75, I2C_MEMADD_SIZE_8BIT, &recv, 1, 0xfff);
      if(recv == 0x71)
      {
          printf("mpu9250 ID Read: OK(0x71 at 0x75)\r\n");
      }
      else
      {
          printf("Err:%d\r\n",i2c_err);
      }
           

注意到,

HAL_I2C_Mem_Read

函數的第2個參數為位址,需要使用者自行左移1位,按個人了解,這似乎庫函數完成這個操作更為合理,這部分可能會被更新,是以如果你使用的HAL庫版本與本文不同,此處應該注意,第3個參數為寄存器位址,第3個參數是一個指針,i2c将讀到的值存放在此指針指向的記憶體中,讀取以後,将值進行對比:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

STM32 與 mpu9250 的 i2c 通信正常,它是移植的基礎,接下來DMP庫的移植。

三、DMP 源碼的移植

源碼在官方驅動檔案,

motion_driver_6.12

中,路徑:

motion_driver_6.12.zip\motion_driver_6.12\msp430\eMD-6.0\core

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

如前文所述,本文并不直接使用官方的DMP庫,而是移植正點原子的 DMP 庫,該庫檔案在阿波羅開發闆實驗34中:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

該工程可以在正點原子論壇和附錄中下載下傳。

1. 添加源碼

首先将正點原子的DMP庫檔案夾 和 MPU9250 檔案夾(這個檔案夾包含

mpu9250.c/h

主要編寫上層函數,如 i2c 接口,讀取并列印資料,初始化mpu9250等。)拷貝在工程中:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

其中,MPU9250 在 HARDWARE 檔案夾中:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

接着将檔案添加到工程中,

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

DMP庫實際分多個檔案夾,在工程邏輯裡,隻存放在DMP檔案路徑下即可。

注意還需要設定頭檔案的路徑:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

2. 置換 libmpllib.lib (M4 -> M3)

DMP\mpl 下 libmpllib.lib 靜态庫需要添加到工程中,但是由于正點原子為MCU為STM32F4,使用靜态庫對應M4核心,是以不能使用:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

在官方固件庫中可以找到 M3 對應的版本,路徑如下:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

解壓以後,置換(覆寫)工程中 DMP\mpl 的靜态庫:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

以添加源檔案的方法,添加到工的DMP庫中即可:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

至此,檔案已經添加完成,接下來是代碼的修改。

3. 添加全局宏定義

官方的庫支援多個平台,不同平台程式寫法不同,庫是通過宏定義來區分不同平台的,在這裡可以添加全局宏定義:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

本文添加宏定義:

EMPL_TARGET_STM32F4

MPU9250

EMPL

MPL_LOG_NDEBUG=1

,簡單地或,這些宏定義打開了STM32平台需要的一些程式,可以通過搜尋功能,具體了解這些宏都打開什麼具體代碼。注意不同變量用英文格式的逗号隔開:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

雖然本文使用的是STM32F1,此處添加的宏為

EMPL_TARGET_STM32F4

并無影響,因為該宏隻是用來打開與 STM32 相關的代碼,并不特定 F4 晶片。

4. DMP 庫接口函數定義(inv_mpu.c/h)

  • inv_mpu.c

    DMP 需要調用 i2c 的讀寫函數,以及系統毫秒級的延時函數,通過宏定義可以設定:

#include "mpu9250.h"
... 
#define i2c_write   MPU_Write_Len
#define i2c_read    MPU_Read_Len
#define delay_ms    HAL_Delay
           

這樣,通過将

i2c_write

i2c_read

delay_ms

換成本文工程的API函數,DMP庫既可調用i2c的讀寫以及正确延時,注意要添加

mpu9250.h

頭檔案,否則MDK無法識别

MPU_Write_Len

這些函數,通過後文對

mpu9250.h

的修改,此處将可識别 .

HAL_Delay()

#include "myiic.h"
#include "delay.h"
#include "usart.h"
           

3個頭檔案為正點相關,需要删除。

  • inv_mpu.h

    同時,

    inv_mpu.h

    中,包含頭檔案

    sys.h

    需要删除,與本文無關,另外該檔案使用到 u8 關鍵字,這是正點原子 uint8_t 的縮寫,需要類型定義:
#include "main.h"
typedef uint8_t u8;
typedef uint16_t u16;
           

清将這3代碼添加到

inv_mpu.h

中。

mpu_dmp_init()

中的

IIC_Init();

需要删除。

5. 接口函數與頭檔案(mpu9250.c)

接下來針對 mpu9250.c/h 進行移植,這2個檔案是正點原子編寫的,屬于DMP庫函數的上層應用。

正點原子使用的是模拟的i2c功能,是以工程可以看到模拟時序的代碼,這部分需要替換,将其替換成 HAL 函數即可,在mpu9250.c 檔案中:

//IIC連續寫
//addr:器件位址 
//reg:寄存器位址
//len:寫入長度
//buf:資料區
//傳回值:0,正常
//    其他,錯誤代碼
u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{
    u8 i;
    IIC_Start();
    IIC_Send_Byte((addr<<1)|0); //發送器件位址+寫指令
    if(IIC_Wait_Ack())          //等待應答
    {
        IIC_Stop();
        return 1;
    }
    IIC_Send_Byte(reg);         //寫寄存器位址
    IIC_Wait_Ack();             //等待應答
    for(i=0;i<len;i++)
    {
        IIC_Send_Byte(buf[i]);  //發送資料
        if(IIC_Wait_Ack())      //等待ACK
        {
            IIC_Stop();
            return 1;
        }
    }
    IIC_Stop();
    return 0;
} 

//IIC連續讀
//addr:器件位址
//reg:要讀取的寄存器位址
//len:要讀取的長度
//buf:讀取到的資料存儲區
//傳回值:0,正常
//    其他,錯誤代碼
u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{ 
    IIC_Start();
    IIC_Send_Byte((addr<<1)|0); //發送器件位址+寫指令
    if(IIC_Wait_Ack())          //等待應答
    {
        IIC_Stop();
        return 1;
    }
    IIC_Send_Byte(reg);         //寫寄存器位址
    IIC_Wait_Ack();             //等待應答
	IIC_Start();                
    IIC_Send_Byte((addr<<1)|1); //發送器件位址+讀指令
    IIC_Wait_Ack();             //等待應答
    while(len)
    {
        if(len==1)*buf=IIC_Read_Byte(0);//讀資料,發送nACK 
		else *buf=IIC_Read_Byte(1);		//讀資料,發送ACK  
		len--;
		buf++;  
    }
    IIC_Stop();                 //産生一個停止條件
    return 0;       
}

//IIC寫一個位元組 
//devaddr:器件IIC位址
//reg:寄存器位址
//data:資料
//傳回值:0,正常
//    其他,錯誤代碼
u8 MPU_Write_Byte(u8 addr,u8 reg,u8 data)
{
    IIC_Start();
    IIC_Send_Byte((addr<<1)|0); //發送器件位址+寫指令
    if(IIC_Wait_Ack())          //等待應答
    {
        IIC_Stop();
        return 1;
    }
    IIC_Send_Byte(reg);         //寫寄存器位址
    IIC_Wait_Ack();             //等待應答
    IIC_Send_Byte(data);        //發送資料
    if(IIC_Wait_Ack())          //等待ACK
    {
        IIC_Stop();
        return 1;
    }
    IIC_Stop();
    return 0;
}

//IIC讀一個位元組 
//reg:寄存器位址 
//傳回值:讀到的資料
u8 MPU_Read_Byte(u8 addr,u8 reg)
{
    u8 res;
    IIC_Start();
    IIC_Send_Byte((addr<<1)|0); //發送器件位址+寫指令
    IIC_Wait_Ack();             //等待應答
    IIC_Send_Byte(reg);         //寫寄存器位址
    IIC_Wait_Ack();             //等待應答
	  IIC_Start();                
    IIC_Send_Byte((addr<<1)|1); //發送器件位址+讀指令
    IIC_Wait_Ack();             //等待應答
    res=IIC_Read_Byte(0);		//讀資料,發送nACK  
    IIC_Stop();                 //産生一個停止條件
    return res;  
}
           

這4個函數分别是:i2c 讀寫一或多個位元組,需要将其替換成本文使用HAL庫函數,替換後如下:

//IIC連續寫
//addr:器件位址 
//reg:寄存器位址
//len:寫入長度
//buf:資料區
//傳回值:0,正常
//    其他,錯誤代碼
u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{
     HAL_I2C_Mem_Write(&hi2c1, (addr<<1), reg, I2C_MEMADD_SIZE_8BIT, buf, len, 0xfff);
     return 0;
} 

//IIC連續讀
//addr:器件位址
//reg:要讀取的寄存器位址
//len:要讀取的長度
//buf:讀取到的資料存儲區
//傳回值:0,正常
//    其他,錯誤代碼
u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{ 
    HAL_I2C_Mem_Read(&hi2c1, (addr<<1), reg, I2C_MEMADD_SIZE_8BIT, buf, len, 0xfff);
    return 0;       
}

//IIC寫一個位元組 
//devaddr:器件IIC位址
//reg:寄存器位址
//data:資料
//傳回值:0,正常
//    其他,錯誤代碼
u8 MPU_Write_Byte(u8 addr,u8 reg,u8 data)
{
    HAL_I2C_Mem_Write(&hi2c1, (addr<<1), reg, I2C_MEMADD_SIZE_8BIT, &data, 1, 0xfff);
    return 0;
}

//IIC讀一個位元組 
//reg:寄存器位址 
//傳回值:讀到的資料
u8 MPU_Read_Byte(u8 addr,u8 reg)
{
    u8 res;
    HAL_I2C_Mem_Read(&hi2c1, (addr<<1), reg, I2C_MEMADD_SIZE_8BIT, &res, 1, 0xfff);
    return res;  
}
           

注意到,該HAL庫版本,i2c位址需要使用者自行左移1位。

頭檔案部分:

#include "mpu9250.h"
#include "myiic.h"
#include "delay.h"
           

也需要修改為:

#include "mpu9250.h"
#include "main.h"
#include "i2c.h"                    
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h" 
#include "stdio.h"
           

mpu9250

頭檔案定義和聲明不需要改變,myiic.h 和 delay.h 是模拟 i2c 和延時部分函數,與HAL不同,需要修改。此外,本文還添加了

inv_mpu.h

inv_mpu_dmp_motion_driver.h

頭檔案,這部分正點原子main.c中,以為其 mpu9250 是寫在mian.c函數中,而本文是在 mpu9250.c 中。

最後,正點原子的

MPU9250_Init()

使用了

IIC_Init()

需要删除, 工程已經自動

main()

函數中初始化 i2c。其中

delay_ms()

需要改成

HAL_Delay()

u8 MPU9250_Init(void)
{
    u8 res=0;
    MPU_Write_Byte(MPU9250_ADDR,MPU_PWR_MGMT1_REG,0X80);//複位MPU9250
    HAL_Delay(100);  //延時100ms
    MPU_Write_Byte(MPU9250_ADDR,MPU_PWR_MGMT1_REG,0X00);//喚醒MPU9250
    MPU_Set_Gyro_Fsr(3);					        	//陀螺儀傳感器,±2000dps
	  MPU_Set_Accel_Fsr(0);					       	 	//加速度傳感器,±2g
    MPU_Set_Rate(50);						       	 	//設定采樣率50Hz
    MPU_Write_Byte(MPU9250_ADDR,MPU_INT_EN_REG,0X00);   //關閉所有中斷
	  MPU_Write_Byte(MPU9250_ADDR,MPU_USER_CTRL_REG,0X00);//I2C主模式關閉
	  MPU_Write_Byte(MPU9250_ADDR,MPU_FIFO_EN_REG,0X00);	//關閉FIFO
	  MPU_Write_Byte(MPU9250_ADDR,MPU_INTBP_CFG_REG,0X82);//INT引腳低電平有效,開啟bypass模式,可以直接讀取磁力計
    res=MPU_Read_Byte(MPU9250_ADDR,MPU_DEVICE_ID_REG);  //讀取MPU6500的ID
    if(res==MPU6500_ID) //器件ID正确
    {
        MPU_Write_Byte(MPU9250_ADDR,MPU_PWR_MGMT1_REG,0X01);  	//設定CLKSEL,PLL X軸為參考
        MPU_Write_Byte(MPU9250_ADDR,MPU_PWR_MGMT2_REG,0X00);  	//加速度與陀螺儀都工作
		    MPU_Set_Rate(50);						       	//設定采樣率為50Hz   
    }else return 1;
 
    res=MPU_Read_Byte(AK8963_ADDR,MAG_WIA);    			//讀取AK8963 ID   
    if(res==AK8963_ID)
    {
        MPU_Write_Byte(AK8963_ADDR,MAG_CNTL1,0X11);		//設定AK8963為單次測量模式
    }else return 1;

    return 0;
}
           

6. u8/u16 宏定義 與 頭檔案(mpu9250.h)

正點原子使用了u8/u16 關鍵字來表示 uint8_t 和 uint16_t,在 mpu9250 中需要添加:

typedef uint8_t u8;
typedef uint16_t u16;
           

另外 mpu9250.h 的頭檔案 :

是正點原子的特有,它提供位帶操作燈,此處不需要用到,固删除即可。為了MDK識别 uint8_t 和 uint16_t,此處需要包含

main.h 頭檔案:

7. log_stm32.c

#include "stm32f4xx.h"
#include "usart.h"
           

log 處理部分,需要STM32頭檔案和列印函數,針對本文修改為:

#include "stm32f1xx.h"
#include "stdio.h"
           

至此,完成了檔案添加和設配,

8. C99 标準 與 微庫

請確定使用 c99 标準:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

如果你使用其它編譯器,請保證它是支援c99的,我記得老版本的 MDK 也需要使用者指定使用c99标準。

本文使用的是c8t6,容量較小,如果不是用微庫,會導緻空間不夠:

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

編譯結果:0 Error(s),0 Warning(s)

MPU9250 使用 DMP 輸出姿态角:DMP 庫到 STM32 平台移植筆記一、硬體連線二、DMP 移植前準備三、DMP 源碼的移植四、附件

9. 輸出姿态角

需要使用 API 函數,來測試移植的效果:

void mpu9250_Start(void)
{
	
	float pitch,roll,yaw; 	        //歐拉角
	short aacx,aacy,aacz;	        //加速度傳感器原始資料
	short gyrox,gyroy,gyroz;        //陀螺儀原始資料 
    short temp;                     //溫度
    
    uint8_t err = mpu_dmp_init();
    while(err)         
	{   
        printf("mpu_init_err:%d\r\n",err);
        while(1);
	}
    printf("mpu9250 Ok\r\n");
    while(1)
    {
        err = mpu_mpl_get_data(&pitch,&roll,&yaw);
        if(err == 0)
        {
                temp = MPU_Get_Temperature();	                                     //得到溫度值(擴大了100倍)
                MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	                         //得到加速度傳感器資料
                MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);	                         //得到陀螺儀資料
                //mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);               //發送加速度+陀螺儀原始資料
                printf("roll = %f   pitch = %f   yaw = %f (T = %d)\r\n",roll,pitch,yaw,temp);
                
        }
    }
 }
           

注意,進入到

mpu9250_Start()

後就不斷的讀取資料,這裡必須瘋狂的讀取,加入延時可能會導緻資料不穩定,測試中,發現延時50ms資料穩定,但是仍然會出現另一個問題——角度更新速度很慢,即是,若插入延時50ms語句,将 mpu9250 立起來以後(Roll:0-> 90°),會發現列印的Roll角慢慢從0°增加到90°。

測試:

main()

函數 while(1) 調用該函數即可:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_I2C1_Init();
  while (1)
  {
      extern void mpu9250_Start(void);
      printf("-- Mpu9250 Project Start -- \r\n");
      uint8_t recv = 0x00;
      uint8_t i2c_err;
      i2c_err = HAL_I2C_Mem_Read(&hi2c1, (0x68<<1), 0x75, I2C_MEMADD_SIZE_8BIT, &recv, 1, 0xfff);
      if(recv == 0x71)
      {
          printf("mpu9250 ID Read: OK(0x71 at 0x75)\r\n");
      }
      else
      {
          printf("Err:%d\r\n",i2c_err);
      }
      mpu9250_Start();
  }
}
           

注意:上電時,子產品需要保持水準靜止,Roll 和 Pitch 有角度會導緻自測不通過。這裡 pitch 接近 90° 或 -90° 時候,Roll 角會計算出 ±180°,原因未明。

運作後列印資訊:

– Mpu9250 Project Start –

mpu9250 ID Read: OK(0x71 at 0x75)

mpu9250 Start !

[00000]roll = -0.620728 pitch = -3.342117 yaw = -0.018097 (T = 2912)

[00001]roll = -0.618210 pitch = -3.339798 yaw = -0.018082 (T = 2911)

[00002]roll = -0.617249 pitch = -3.336182 yaw = -0.018036 (T = 2913)

[00003]roll = -0.614746 pitch = -3.332611 yaw = -0.018005 (T = 2910)

[00004]roll = -0.612244 pitch = -3.329391 yaw = -0.017960 (T = 2912)

[00005]roll = -0.610107 pitch = -3.327469 yaw = -0.017944 (T = 2911)

[00006]roll = -0.609650 pitch = -3.324951 yaw = -0.017914 (T = 2911)

[00007]roll = -0.606903 pitch = -3.323837 yaw = -0.017899 (T = 2910)

[00008]roll = -0.603775 pitch = -3.325470 yaw = -30.951370 (T = 2912)

[00009]roll = -0.603867 pitch = -3.326645 yaw = -0.017944 (T = 2914)

[00010]roll = -0.600632 pitch = -3.325043 yaw = -0.017929 (T = 2913)

[00011]roll = -0.598740 pitch = -3.325958 yaw = -0.017944 (T = 2912)

[00012]roll = -0.595673 pitch = -3.323944 yaw = -0.017929 (T = 2912)

[00013]roll = -0.591949 pitch = -3.322510 yaw = -0.017914 (T = 2911)

[00014]roll = -0.591263 pitch = -3.323853 yaw = -0.017929 (T = 2911)

[00015]roll = -0.588211 pitch = -3.322418 yaw = -0.017914 (T = 2909)

[00016]roll = -0.585022 pitch = -3.320343 yaw = -0.017883 (T = 2913)

[00017]roll = -0.585098 pitch = -3.320389 yaw = -0.017883 (T = 2913)

[00018]roll = -0.583801 pitch = -3.321503 yaw = -0.017899 (T = 2912)

[00019]roll = -0.582504 pitch = -3.321640 yaw = -0.017899 (T = 2911)

[00020]roll = -0.580688 pitch = -3.319077 yaw = -0.017868 (T = 2913)

[00021]roll = -0.579758 pitch = -3.316071 yaw = -0.017838 (T = 2911)

[00022]roll = -0.573975 pitch = -3.316238 yaw = -0.017838 (T = 2912)

[00023]roll = -0.572037 pitch = -3.316574 yaw = -0.017853 (T = 2911)

[00024]roll = -0.572159 pitch = -3.318909 yaw = -0.017868 (T = 2911)

[00025]roll = -0.570068 pitch = -3.315369 yaw = -0.017838 (T = 2912)

[00026]roll = -0.568604 pitch = -3.314392 yaw = -0.017822 (T = 2911)

[00027]roll = -0.566040 pitch = -3.312424 yaw = -0.017807 (T = 2911)

[00028]roll = -0.562973 pitch = -3.309235 yaw = -0.017776 (T = 2912)

[00029]roll = -0.560150 pitch = -3.308868 yaw = -0.017776 (T = 2911)

[00030]roll = -0.561325 pitch = -3.307648 yaw = -0.017761 (T = 2911)

[00031]roll = -0.556793 pitch = -3.307846 yaw = -0.017761 (T = 2911)

[00032]roll = -0.556992 pitch = -3.304993 yaw = -0.017731 (T = 2910)

[00033]roll = -0.556549 pitch = -3.306137 yaw = -0.017746 (T = 2911)

[00034]roll = -0.553391 pitch = -3.306503 yaw = -0.017746 (T = 2911)

[00035]roll = -0.550919 pitch = -3.305664 yaw = -0.017746 (T = 2914)

[00036]roll = -0.548676 pitch = -3.308563 yaw = -0.017761 (T = 2911)

[00037]roll = -0.547714 pitch = -3.307068 yaw = -0.017761 (T = 2912)

[00038]roll = -0.544952 pitch = -3.308075 yaw = -0.017761 (T = 2911)

[00039]roll = -0.547546 pitch = -3.306259 yaw = -0.017746 (T = 2912)

[00040]roll = -0.546295 pitch = -3.303650 yaw = -0.017715 (T = 2911)

[00041]roll = -0.545883 pitch = -3.300827 yaw = -0.017700 (T = 2912)

[00042]roll = -0.545349 pitch = -3.299728 yaw = -0.017685 (T = 2908)

[00043]roll = -0.543106 pitch = -3.297882 yaw = -0.017670 (T = 2910)

[00044]roll = -0.539200 pitch = -3.295929 yaw = -0.017654 (T = 2911)

[00045]roll = -0.538452 pitch = -3.294464 yaw = -0.017639 (T = 2911)

[00046]roll = -0.535522 pitch = -3.293365 yaw = -0.017624 (T = 2912)

[00047]roll = -0.537323 pitch = -3.292068 yaw = -0.017609 (T = 2912)

[00048]roll = -0.535065 pitch = -3.291351 yaw = -0.017609 (T = 2911)

[00049]roll = -0.532852 pitch = -3.293121 yaw = -0.017624 (T = 2911)

[00050]roll = -0.530167 pitch = -3.292023 yaw = -0.017609 (T = 2911)

[00051]roll = -0.526825 pitch = -3.290344 yaw = -0.017593 (T = 2910)

[00052]roll = -0.523987 pitch = -3.291214 yaw = -0.017609 (T = 2912)

[00053]roll = -0.524521 pitch = -3.288651 yaw = -0.017578 (T = 2912)

[00054]roll = -0.522064 pitch = -3.286926 yaw = -0.017563 (T = 2911)

[00055]roll = -0.517929 pitch = -3.288925 yaw = -0.017578 (T = 2913)

[00056]roll = -0.515640 pitch = -3.288528 yaw = -0.017578 (T = 2910)

[00057]roll = -0.519424 pitch = -3.288788 yaw = -0.017578 (T = 2914)

[00058]roll = -0.516495 pitch = -3.287796 yaw = -0.017578 (T = 2912)

[00059]roll = -0.513855 pitch = -3.288116 yaw = -0.017578 (T = 2912)

[00060]roll = -0.509918 pitch = -3.286880 yaw = -0.017563 (T = 2913)

[00061]roll = -0.506516 pitch = -3.283585 yaw = -0.017532 (T = 2912)

[00062]roll = -0.504990 pitch = -3.283157 yaw = -0.017532 (T = 2914)

[00063]roll = -0.505630 pitch = -3.284363 yaw = -0.017548 (T = 2912)

[00064]roll = -0.504242 pitch = -3.285095 yaw = -0.017548 (T = 2913)

[00065]roll = -0.502899 pitch = -3.285751 yaw = -0.017548 (T = 2909)

[00066]roll = -0.501251 pitch = -3.286057 yaw = -0.017563 (T = 2914)

[00067]roll = -0.495560 pitch = -3.284348 yaw = -0.017548 (T = 2914)

[00068]roll = -0.491776 pitch = -3.282135 yaw = -0.017517 (T = 2912)

[00069]roll = -0.491333 pitch = -3.281113 yaw = -0.017517 (T = 2912)

[00070]roll = -0.490219 pitch = -3.279190 yaw = -0.017502 (T = 2913)

[00071]roll = -0.487610 pitch = -3.276489 yaw = -0.017471 (T = 2912)

[00072]roll = -0.486206 pitch = -3.275055 yaw = -0.017456 (T = 2916)

[00073]roll = -0.485947 pitch = -3.276688 yaw = -0.017471 (T = 2911)

[00074]roll = -0.483521 pitch = -3.277115 yaw = -0.017487 (T = 2914)

[00075]roll = -0.482315 pitch = -3.278290 yaw = -0.017487 (T = 2912)

[00076]roll = -0.481430 pitch = -3.278214 yaw = -0.017487 (T = 2910)

[00077]roll = -0.478714 pitch = -3.275620 yaw = -0.017471 (T = 2912)

[00078]roll = -0.477005 pitch = -3.271393 yaw = -0.017426 (T = 2912)

[00079]roll = -0.474487 pitch = -3.270004 yaw = -0.017426 (T = 2914)

[00080]roll = -0.472610 pitch = -3.270752 yaw = -0.017426 (T = 2912)

[00081]roll = -0.470825 pitch = -3.267075 yaw = -0.017395 (T = 2913)

[00082]roll = -0.469986 pitch = -3.265549 yaw = -0.017380 (T = 2914)

[00083]roll = -0.469498 pitch = -3.265610 yaw = -0.017380 (T = 2911)

[00084]roll = -0.468842 pitch = -3.265518 yaw = -0.017380 (T = 2911)

[00085]roll = -0.469193 pitch = -3.264648 yaw = -0.017380 (T = 2913)

[00086]roll = -0.467545 pitch = -3.263504 yaw = -0.017365 (T = 2913)

[00087]roll = -0.466888 pitch = -3.265549 yaw = -0.017380 (T = 2912)

[00088]roll = -0.463898 pitch = -3.261765 yaw = -0.017349 (T = 2911)

[00089]roll = -0.462585 pitch = -3.262482 yaw = -0.017365 (T = 2913)

[00090]roll = -0.462631 pitch = -3.263123 yaw = -0.017365 (T = 2910)

[00091]roll = -0.461212 pitch = -3.262390 yaw = -0.017365 (T = 2914)

[00092]roll = -0.462280 pitch = -3.262009 yaw = -0.017349 (T = 2913)

[00093]roll = -0.461288 pitch = -3.259125 yaw = -0.017334 (T = 2914)

[00094]roll = -0.461685 pitch = -3.260880 yaw = -0.017349 (T = 2911)

[00095]roll = -0.460602 pitch = -3.259750 yaw = -0.017334 (T = 2911)

[00096]roll = -0.459656 pitch = -3.260452 yaw = -0.017349 (T = 2913)

[00097]roll = -0.459702 pitch = -3.258621 yaw = -0.017334 (T = 2910)

[00098]roll = -0.458618 pitch = -3.256927 yaw = -0.017319 (T = 2913)

[00099]roll = -0.456802 pitch = -3.257385 yaw = -0.017319 (T = 2911)

[00100]roll = -0.453568 pitch = -3.257462 yaw = -0.017319 (T = 2912)

[00101]roll = -0.452698 pitch = -3.256210 yaw = -0.017303 (T = 2912)

[00102]roll = -0.454163 pitch = -3.256393 yaw = -0.017303 (T = 2912)

[00103]roll = -0.454971 pitch = -3.254883 yaw = -0.017303 (T = 2915)

[00104]roll = -0.453751 pitch = -3.254059 yaw = -0.017288 (T = 2912)

[00105]roll = -0.453171 pitch = -3.252045 yaw = -0.017273 (T = 2911)

[00106]roll = -0.452972 pitch = -3.249146 yaw = -0.017258 (T = 2911)

[00107]roll = -0.451370 pitch = -3.249268 yaw = -0.017258 (T = 2911)

[00108]roll = -0.450470 pitch = -3.245728 yaw = -0.017227 (T = 2913)

[00109]roll = -0.451111 pitch = -3.244354 yaw = -0.017212 (T = 2915)

[00110]roll = -0.448715 pitch = -3.244415 yaw = -0.017212 (T = 2914)

[00111]roll = -0.448380 pitch = -3.242584 yaw = -0.017197 (T = 2913)

[00112]roll = -0.448837 pitch = -3.240616 yaw = -0.017181 (T = 2914)

[00113]roll = -0.446960 pitch = -3.237930 yaw = -0.017166 (T = 2911)

[00114]roll = -0.446075 pitch = -3.235992 yaw = -0.017151 (T = 2911)

[00115]roll = -0.445038 pitch = -3.233490 yaw = -0.017136 (T = 2910)

[00116]roll = -0.444153 pitch = -3.232254 yaw = -0.017120 (T = 2915)

[00117]roll = -0.442154 pitch = -3.230728 yaw = -0.017105 (T = 2914)

[00118]roll = -0.441681 pitch = -3.227066 yaw = -0.017075 (T = 2914)

[00119]roll = -0.437637 pitch = -3.227921 yaw = -0.017090 (T = 2914)

[00120]roll = -0.437668 pitch = -3.230423 yaw = -0.017105 (T = 2917)

[00121]roll = -0.434158 pitch = -3.228699 yaw = -0.017090 (T = 2915)

[00122]roll = -0.431717 pitch = -3.230560 yaw = -0.017105 (T = 2913)

[00123]roll = -0.428436 pitch = -3.226288 yaw = -0.017075 (T = 2911)

[00124]roll = -0.427979 pitch = -3.224182 yaw = -0.017059 (T = 2914)

[00125]roll = -0.428040 pitch = -3.224091 yaw = -0.017059 (T = 2916)

[00126]roll = -0.427124 pitch = -3.224136 yaw = -0.017059 (T = 2912)

[00127]roll = -0.428268 pitch = -3.223160 yaw = -0.017044 (T = 2911)

[00128]roll = -0.426331 pitch = -3.221725 yaw = -0.017044 (T = 2910)

[00129]roll = -0.424591 pitch = -3.216324 yaw = -0.016998 (T = 2912)

[00130]roll = -0.423737 pitch = -3.214661 yaw = -0.016983 (T = 2915)

[00131]roll = -0.423508 pitch = -3.209976 yaw = -0.016953 (T = 2914)

[00132]roll = -0.422653 pitch = -3.208969 yaw = -0.016953 (T = 2913)

[00133]roll = -0.424591 pitch = -3.209213 yaw = -0.016953 (T = 2913)

[00134]roll = -0.423523 pitch = -3.208237 yaw = -0.016937 (T = 2913)

[00135]roll = -0.421326 pitch = -3.207291 yaw = -0.016937 (T = 2916)

[00136]roll = -0.420105 pitch = -3.206482 yaw = -0.016922 (T = 2913)

[00137]roll = -0.420395 pitch = -3.205872 yaw = -0.016922 (T = 2913)

[00138]roll = -0.421707 pitch = -3.204132 yaw = -0.016907 (T = 2912)

[00139]roll = -0.417984 pitch = -3.204468 yaw = -0.016907 (T = 2911)

[00140]roll = -0.413437 pitch = -3.201996 yaw = -0.016891 (T = 2914)

[00141]roll = -0.412781 pitch = -3.203278 yaw = -0.016907 (T = 2912)

[00142]roll = -0.413635 pitch = -3.203918 yaw = -0.016907 (T = 2914)

[00143]roll = -0.412994 pitch = -3.203247 yaw = -0.016907 (T = 2914)

[00144]roll = -0.411987 pitch = -3.200455 yaw = -0.016891 (T = 2913)

[00145]roll = -0.411331 pitch = -3.199738 yaw = -0.016876 (T = 2913)

[00146]roll = -0.411331 pitch = -3.200653 yaw = -0.016891 (T = 2914)

[00147]roll = -0.409302 pitch = -3.201096 yaw = -0.016891 (T = 2913)

[00148]roll = -0.408127 pitch = -3.198761 yaw = -0.016876 (T = 2913)

[00149]roll = -0.407974 pitch = -3.197388 yaw = -0.016861 (T = 2914)

[00150]roll = -0.407166 pitch = -3.193619 yaw = -0.016830 (T = 2912)

[00151]roll = -0.409729 pitch = -3.193939 yaw = -0.016830 (T = 2913)

[00152]roll = -0.410080 pitch = -3.189529 yaw = -0.016800 (T = 2912)

[00153]roll = -0.410263 pitch = -3.190720 yaw = -0.016815 (T = 2915)

[00154]roll = -0.407303 pitch = -3.188156 yaw = -0.016800 (T = 2913)

[00155]roll = -0.404343 pitch = -3.185654 yaw = -0.016785 (T = 2914)

[00156]roll = -0.404053 pitch = -3.185242 yaw = -0.016769 (T = 2914)

[00157]roll = -0.404129 pitch = -3.187225 yaw = -0.016785 (T = 2914)

[00158]roll = -0.403198 pitch = -3.188354 yaw = -0.016800 (T = 2912)

[00159]roll = -0.401398 pitch = -3.189056 yaw = -0.016800 (T = 2913)

[00160]roll = -0.399963 pitch = -3.188919 yaw = -0.016800 (T = 2913)

[00161]roll = -0.399002 pitch = -3.189697 yaw = -0.016800 (T = 2913)

[00162]roll = -0.396774 pitch = -3.190796 yaw = -0.016815 (T = 2915)

[00163]roll = -0.398712 pitch = -3.190826 yaw = -0.016815 (T = 2914)

[00164]roll = -0.399506 pitch = -3.190155 yaw = -0.016815 (T = 2913)

[00165]roll = -0.397888 pitch = -3.187820 yaw = -0.016800 (T = 2911)

[00166]roll = -0.395142 pitch = -3.187042 yaw = -0.016785 (T = 2915)

[00167]roll = -0.391205 pitch = -3.187881 yaw = -0.016800 (T = 2914)

[00168]roll = -0.387802 pitch = -3.190384 yaw = -0.016815 (T = 2913)

[00169]roll = -0.384247 pitch = -3.189255 yaw = -0.016800 (T = 2914)

[00170]roll = -0.382431 pitch = -3.190384 yaw = -0.016815 (T = 2913)

[00171]roll = -0.378937 pitch = -3.193314 yaw = -0.016830 (T = 2913)

[00172]roll = -0.378799 pitch = -3.192474 yaw = -0.016830 (T = 2913)

[00173]roll = -0.377670 pitch = -3.190399 yaw = -0.016815 (T = 2917)

[00174]roll = -0.376862 pitch = -3.191147 yaw = -0.016815 (T = 2914)

[00175]roll = -0.377426 pitch = -3.188538 yaw = -0.016800 (T = 2914)

[00176]roll = -0.371262 pitch = -3.187881 yaw = -0.016800 (T = 2911)

[00177]roll = -0.370651 pitch = -3.185379 yaw = -0.016785 (T = 2912)

[00178]roll = -0.369370 pitch = -3.186234 yaw = -0.016785 (T = 2914)

[00179]roll = -0.368118 pitch = -3.184357 yaw = -0.016769 (T = 2913)

[00180]roll = -0.368362 pitch = -3.185730 yaw = -0.016785 (T = 2915)

[00181]roll = -0.370468 pitch = -3.184753 yaw = -0.016769 (T = 2913)

[00182]roll = -0.369049 pitch = -3.186005 yaw = -0.016785 (T = 2913)

···

[04134]roll = -0.246155 pitch = -3.181274 yaw = -0.014923 (T = 2914)

[04135]roll = -0.245407 pitch = -3.181213 yaw = -0.014923 (T = 2915)

[04136]roll = -0.245193 pitch = -3.180496 yaw = -0.014923 (T = 2914)

[04137]roll = -0.244644 pitch = -3.182343 yaw = -0.014923 (T = 2916)

[04138]roll = -0.246246 pitch = -3.184464 yaw = -0.014938 (T = 2916)

[04139]roll = -0.246704 pitch = -3.182816 yaw = -0.014923 (T = 2916)

[04140]roll = -0.247330 pitch = -3.179962 yaw = -0.014908 (T = 2913)

[04141]roll = -0.246429 pitch = -3.180466 yaw = -0.014923 (T = 2911)

[04142]roll = -0.248047 pitch = -3.179703 yaw = -0.014908 (T = 2914)

[04143]roll = -0.249649 pitch = -3.180130 yaw = -0.014908 (T = 2913)

[04144]roll = -0.250580 pitch = -3.180145 yaw = -0.014908 (T = 2914)

[04145]roll = -0.250168 pitch = -3.181488 yaw = -0.014923 (T = 2913)

[04146]roll = -0.247589 pitch = -3.181183 yaw = -0.014923 (T = 2917)

[04147]roll = -0.249359 pitch = -3.182114 yaw = -0.014923 (T = 2915)

[04148]roll = -0.249619 pitch = -3.181213 yaw = -0.014923 (T = 2913)

[04149]roll = -0.250885 pitch = -3.179810 yaw = -0.014908 (T = 2917)

[04150]roll = -0.252472 pitch = -3.178223 yaw = -0.014908 (T = 2915)

[04151]roll = -0.251862 pitch = -3.179230 yaw = -0.014908 (T = 2915)

[04152]roll = -0.250443 pitch = -3.179642 yaw = -0.014908 (T = 2918)

[04153]roll = -0.253723 pitch = -3.180328 yaw = -0.014908 (T = 2914)

[04154]roll = -0.254288 pitch = -3.182968 yaw = -0.014923 (T = 2913)

[04155]roll = -0.254532 pitch = -3.181839 yaw = -0.014923 (T = 2914)

[04156]roll = -0.253250 pitch = -3.182373 yaw = -0.014923 (T = 2911)

[04157]roll = -0.253357 pitch = -3.183899 yaw = -0.014923 (T = 2914)

[04158]roll = -0.251617 pitch = -3.185684 yaw = -0.014938 (T = 2915)

[04159]roll = -0.252380 pitch = -3.187622 yaw = -0.014938 (T = 2915)

[04160]roll = -0.254486 pitch = -3.187500 yaw = -0.014938 (T = 2917)

[04161]roll = -0.255249 pitch = -3.188065 yaw = -0.014954 (T = 2912)

[04162]roll = -0.255997 pitch = -3.188660 yaw = -0.014954 (T = 2915)

[04163]roll = -0.256561 pitch = -3.186707 yaw = -0.014938 (T = 2913)

[04164]roll = -0.259811 pitch = -3.189560 yaw = -0.014954 (T = 2917)

[04165]roll = -0.261032 pitch = -3.190155 yaw = -0.014954 (T = 2912)

[04166]roll = -0.260406 pitch = -3.187347 yaw = -0.014938 (T = 2915)

子產品靜止狀态,資料穩定。

四、附件

mpu9250 (提取碼:1234 )

[檔案]:

  • mpu9250_DMP:本文示例工程
  • 正點原子 MPU9250 資料:正點原子工 mpu9250 參考資料
  • 實驗34 MPU9250九軸傳感器實驗 :正點原子 F4 示例工程
  • motion_driver_6.12 : 官方 DMP估計庫