国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標題: STM32 MPU6050驅動程序的詳細講解及DMP庫的移植 [打印本頁]

作者: 路漫漫    時間: 2020-6-4 17:57
標題: STM32 MPU6050驅動程序的詳細講解及DMP庫的移植
提供給MPU6050驅動的講解注釋(本人親測),以及DMP庫移植的說明,提供一切必須文件,直接移植即可使用輸出歐拉角。
完整源碼: MPU6050.rar (47.44 KB, 售價: 3 E幣)

提供完整的附加函數,方便移植使用:



提供完整的驅動以及移植好的DMP庫:



MPU6050模塊:輸出原始數據通過內置DMP進行數據處理,獲取姿態信息:角度、角速度,多用于PID控制。
IIC接口引腳配置
3.3V供電
SDA:PB11
SCL:PB10
AD0:PB2
//INT:PB5 中斷,暫時用不到

通信協議層:mpu_iic.c/mpu_iic.h
軟件模擬IIC,是STM32與MPU6050通信的基本框架

驅動層:mpu6050.c/mpu6050.h
建立在IIC通信機制上的,向DMP庫提供對MPU6050寄存器的讀寫操作,以及完成對MPU6050初始化的任務。

應用層:
移植的庫:inv_mpu.c/inv_mpu_dmp_motion_driver.c(及所包含的頭文件)
移植的DMP庫,對原始數據進行處理,
調用時,在inv_mpu.c中添加如下代碼即可(實際上是讓DMP庫和我們寫的驅動層建立聯系)
#define i2c_write   MPU_Write_Continue
#define i2c_read    MPU_Read_Continue
#define delay_ms    delay_ms
#define get_ms      mget_ms

附加的函數:延時、串口打印,這些到時候可以統一

具體使用例子如下:
  1. #include "stm32f10x.h"   
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "mpu6050.h"
  5. #include "inv_mpu.h"
  6. #include "inv_mpu_dmp_motion_driver.h"

  7. int main(void)
  8. {
  9.     uint8_t x=0;
  10.     float pitch,roll,yaw;         //歐拉角
  11.     short aacx,aacy,aacz;        //加速度傳感器原始數據
  12.     short gyrox,gyroy,gyroz;    //陀螺儀原始數據
  13.     short temp;                    //溫度
  14.    
  15.     NVIC_PriorityGroupConfig( 2 );
  16.     delay_init();
  17.     USART1_Init(115200);   
  18.     printf("程序開始\n");
  19.    
  20.     if( MPU_Init()!=0 )
  21.     {
  22.         printf("MPU6050初始化錯誤!\n");
  23.         return 0;
  24.     }
  25.         
  26.     if( mpu_dmp_init() )
  27.     {
  28.         printf("DMP初始化錯誤!\n");
  29.         return 0;
  30.     }
  31.     while(1)
  32.     {
  33.         if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0) //獲取DMP處理后的姿態信息(歐拉角)
  34.         {
  35.             temp=MPU_Get_Temperature();    //得到溫度值
  36.             MPU_Get_Accelerometer(&aacx,&aacy,&aacz);    //獲取加速度傳感器原始數據
  37.             MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);    //獲取陀螺儀原始數據
  38.         }
  39.         delay_ms(100);
  40.         printf("pitch:%02f  roll:%02f  yaw:%02f\n",pitch,roll,yaw);
  41.     }
  42.    
  43.             
  44. }
復制代碼





歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0