那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于CW32的MPU6050姿態傳感器的應用

CW32生態社區 ? 來源: CW32生態社區 ? 作者: CW32生態社區 ? 2023-10-10 16:42 ? 次閱讀

一、簡介

1.MPU6050是一種常用的六軸姿態傳感器模塊,結合了三軸陀螺儀和三軸加速度計,以及一個可擴展的數字運動處理器DMP(Digital Motion Processor),可用I2C接口連接一個第三方的數字傳感器,比如磁力計。MPU6050 對陀螺儀和加速度計分別用了三個16 位的ADC(0~65535),將其測量的模擬量轉化為可輸出的數字量。為了精確跟蹤快速和慢速的運動,傳感器的測量范圍都是用戶可控的,陀螺儀可測范圍為±250,±500,±1000,±2000°/秒(dps),加速度計可測范圍為±2,±4,±8,±16g。并有可編程的低通濾波器。MPU6050模塊的應用場景非常廣泛,包括但不限于以下幾個領域:

(1)姿態感知與控制:通過讀取陀螺儀和加速度計的數據,可以實時獲取物體的姿態信息,如傾斜角度、旋轉角度等。這在飛行器、機器人、無人車等項目中非常常見,用于實現姿態感知和控制。

(2)運動跟蹤與手勢識別:MPU6050可以用于捕捉人體運動軌跡,如手部的姿態和手勢,從而實現運動跟蹤、手勢識別、虛擬現實交互等應用。

(3)震動檢測與防抖:結合加速度計,MPU6050可以檢測到物體的震動和沖擊,用于防抖技術、硬盤保護、運動檢測等。

(4)步態分析與健康監測:MPU6050可以用于分析人體的步態特征和動作,用于健康監測、運動分析、姿勢校正等。

二、所需物料+寄存器說明

.本實驗使用到了CW32F030C8小藍板、GY-521模塊、0.96寸OLED顯示屏Keil5開發環境
圖片16.png

CW32F030C8小藍板
image.png

GY-521模塊

圖片

實物展示

【GY-521模塊與單片機連線】:VCC<-->+3.3V

GND<-->GND

SCL<-->PB5

SDA<-->PB4

【OLED顯示屏與單片機連線】:VCC<-->+3.3V

GND<-->GND

SCL<-->PA1

SDA<-->PA2

注:SCL和 SDA是連接MCU的 IIC接口,MCU通過這個IIC 接口來控制MPU6050,另外還有一個 IIC 接口: XCL和XDA ,這個接口可用來連外部從設備比如磁力計,這樣就可以組成一個九軸傳感器。AD0是MPU6050的地址控制引腳,該引腳控制的是IIC 地址的最低位。MPU6050的默認IIC地址是:0X68,如果AD0接VDD,則是0X69。需要注意的是:這里的地址0x68(110 1000)和0x69(110 1001)是不包含最低位的7位數據,通常最低位用于表示IIC主機的讀取數據/寫數據模式。如默認情況下對MPU6050進行寫操作,則發送地址0xD0(1101 0000),讀操作則發送地址0xD1(1101 0001)。

寄存器說明:

圖片

該寄存器是配置陀螺儀輸出速率的分頻器,用于為MPU-6050生成采樣速率。這里有個公式:采樣頻率=陀螺儀輸出頻率/(1+采樣分頻數)。當 DLPF(數字低通濾波器,見寄存器Configuration)禁用時,陀螺儀輸出頻率為8kHz;當 DLPF 使能,陀螺儀輸出頻率=1KHz。

圖片

該寄存器為陀螺儀和加速度計配置外部幀同步(FSYNC) 管腳的采樣和數字低通濾波(DLPF)設置。其中,數字低通濾波器DLPF由DLPF_CFG配置。根據下表所示的DLPF_CFG值對加速度計和陀螺儀進行濾波。

圖片

FS為陀螺儀輸出頻率。SMPLRT_DIV由預設定的采樣頻率根據上述的公式計算得出。一般情況下,DPLF濾波頻率為采樣頻率的一半,如設定采樣頻率為50Hz,由表可知當FS為1kHz,SMPLRT_DIV的值為1000/50-1=19。

圖片

該寄存器是用來觸發陀螺儀自檢和配置陀螺儀的滿量程范圍。其中,XG_ST、YG_ST、ZG_ST分別用來設置陀螺儀X軸、Y軸、Z軸自檢,置0則不觸發自檢。FS_SEL[1:0]用于設置陀螺儀的滿量程,如下表:

圖片

我們一般設置為3,即滿量程為±2000°/s

圖片

該寄存器是用來觸發加速度計自檢和配置加速度計的滿量程范圍。同時這個寄存器也可以用于配置數字高通濾波器(DHPF)。其中,XA_ST、YA_ST、ZA_ST分別用來設置加速度計X軸、Y軸、Z軸自檢,置0則不觸發自檢。AFS_SEL[1:0]用于選擇加速度計的滿量程范圍,如下表:

圖片

我們一般設置為0,即滿量程為±2g

圖片

ACCEL_XOUT : 由 2部分組成的 16位數值存儲最近X 軸加速度計的測量值。 ACCEL_YOUT : 由 2部分組成的 16位數值存儲最近Y 軸加速度計的測量值。 ACCEL_ZOUT : 由 2部分組成的 16位數值存儲最近Z 軸加速度計的測量值。

以ACCEL_XOUT為例,若倍率設定為2g,則意味著ACC_X取最小值-32768時,當前加速度為沿X軸正方向2倍的重力加速度;若設定為4g,取-32768時表示沿X軸正方向4倍的重力加速度,以此類推。顯然,倍率越低精度越好,倍率越高表示的范圍越大,這要根據具體的應用來設定。以ACC_X為例,若當前設定的加速度倍率為4g,那么將ACC_X讀數換算為加速度的公式為:

圖片

g可取當地重力加速度。

圖片

該寄存器存儲最近加陀螺儀的測量值,構成與加速度計測量值寄存器相同,不做贅述。

以GYR_X為例,若倍率設定為250度/秒,則意味著GYR取正最大值32768時,當前角速度為順時針250度/秒;若設定為500度/秒,取32768時表示當前角速度為順時針500度/秒。顯然,倍率越低精度越好,倍率越高表示的范圍越大。以GYR_X為例,若當前設定的角速度倍率為1000度/秒,那么將GRY_X讀數換算為角速度(順時針)的公式為:

圖片

圖片

該寄存器允許用戶配置電源模式和時鐘源,還提供了復位整個設備和禁用溫度傳感器的位。當置SLEEP位為1時,MPU-60X0 可以進入低功耗睡眠模式。該寄存器的最低三位用于設置系統的時鐘源選擇,默認值是0(內部8M RC振蕩),不過一般設置為1,即選擇x軸陀螺儀PLL作為時鐘源,以獲得更高精度的時鐘。DEVICE_RESET該位置 1,重啟內部寄存器到默認值。復位完成后該位自動清0。TEMP_DIS該位置 1,禁用溫度傳感器。

三、核心代碼

main.c:
#include "main.h"
#include "OLED.h"
#include "GY_521.h"
#include "MYI2C.h"
#include "Delay.h"


typedef struct{
  int16_t AX;
  int16_t AY;
  int16_t AZ;  
}MPU6050_Adata;  //MPU6050加速度計三軸數據


typedef struct{
  int16_t GX;
  int16_t GY;
  int16_t GZ;  
}MPU6050_Gdata;  //MPU6050陀螺儀三軸數據


MPU6050_Adata Adata;  //結構體變量
MPU6050_Gdata Gdata;


void GY_521_Init(void)  //GY-521初始化
{
  GY521_GPIO_Init();  //GPIO初始化
  //解除睡眠,失能溫度傳感器,選擇X軸的陀螺儀時鐘
  WriteData(GY521_ADDR, MPU6050_PWR_MGMT_1, 0x09); 
  WriteData(GY521_ADDR, MPU6050_CONFIG, 0x06); //低通濾波
  WriteData(GY521_ADDR, MPU6050_SMPRT_DIV, 0x09); //1KHz十分頻為100Hz
  WriteData(GY521_ADDR, MPU6050_GYRO_CONFIG, 0x18);//陀螺儀最大量程
  WriteData(GY521_ADDR, MPU6050_ACCEL_CONFIG, 0x18);//加速度計最大量程
}


void MPU6050_GetData()  //獲取MPU6050六軸數據
{
  uint8_t MPU6050_Raw_Data[14]={0};
  //以MPU6050_ACCEL_XOUT_H為起始地址,連續讀取14字節的數據
  ReadData(GY521_ADDR,MPU6050_ACCEL_XOUT_H,MPU6050_Raw_Data,14);
  //數據處理
  Adata.AX=(MPU6050_Raw_Data[0]< 8)|MPU6050_Raw_Data[1];
  Adata.AY=(MPU6050_Raw_Data[2]< 8)|MPU6050_Raw_Data[3];
  Adata.AZ=(MPU6050_Raw_Data[4]< 8)|MPU6050_Raw_Data[5];
  Gdata.GX=(MPU6050_Raw_Data[8]< 8)|MPU6050_Raw_Data[9];
  Gdata.GY=(MPU6050_Raw_Data[10]< 8)|MPU6050_Raw_Data[11];
  Gdata.GZ=(MPU6050_Raw_Data[12]< 8)|MPU6050_Raw_Data[13];
}


int main()
{
  OLED_Init();   //OLED初始化
  GY_521_Init(); //GY-521初始化
  OLED_ShowString(1,1,"A:      G:");//提示:左列顯示加速度計數據;右列顯示陀螺儀數據
  while(1)
  {
    MPU6050_GetData(); //獲取六軸數據
    OLED_ShowSignedNum(2,1,Adata.AX,5);
    OLED_ShowSignedNum(3,1,Adata.AY,5);
    OLED_ShowSignedNum(4,1,Adata.AZ,5);

    OLED_ShowSignedNum(2,9,Gdata.GX,5);
    OLED_ShowSignedNum(3,9,Gdata.GY,5);
    OLED_ShowSignedNum(4,9,Gdata.GZ,5);
    Delay_ms(100); //延時刷新
  }
}

四、效果演示
圖片1.png

平放

圖片2.png

向下傾斜

圖片3.png

左傾斜向

圖片4.png

直立

讀到的原始數據還不能直接使用,要轉化成四元數,歐拉角后,獲得器件的姿態角才有用,而 MPU6050 自帶了數字運動處理器,即 DMP,并且,InvenSense 提供了一個 MPU6050 的嵌入式運動驅動庫,結合 MPU6050 的 DMP,可以將我們的原始數據,直接轉換成四元數輸出,而得到四元數之后,就可以很方便的計算出歐拉角,從而得到yaw、roll和pitch。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2553

    文章

    51406

    瀏覽量

    756624
  • CW32
    +關注

    關注

    1

    文章

    218

    瀏覽量

    736
收藏 人收藏

    評論

    相關推薦

    STM32單片機+MPU6050設計一個電子水平儀

    本項目基于STM32F103C8T6單片機設計一款電子水平儀。STM32F103C8T6作為一種性能強大的微控制,具有較高的計算能力和豐富的外設接口,能夠滿足項目對實時數據處理和顯示控制的需求。該單片機將與MPU6050傳感器
    的頭像 發表于 01-09 11:14 ?910次閱讀
    STM32單片機+<b class='flag-5'>MPU6050</b>設計一個電子水平儀

    MPU6050讀取數據有問題

    在調試MPU6050時讀取原始數據只有X軸在變化,Y軸和Z軸的數據一直沒有變化,已經調試兩天了,這個是讀取的數據
    發表于 12-09 10:40

    CW32模塊使用】雨滴傳感器

    雨滴傳感器主要是用來檢測是否下雨及雨量的大小。主要用于汽車智能燈光(AFS)系統、汽車自動雨刷系統、智能車窗系統。 該雨滴傳感器基本上是一塊板,上面以線形形式涂覆鎳。雨滴傳感器常見的工作原理是通過
    的頭像 發表于 11-28 11:23 ?2273次閱讀
    【<b class='flag-5'>CW32</b>模塊使用】雨滴<b class='flag-5'>傳感器</b>

    CW32模塊使用 MPU6050六軸傳感器

    MPU6050 是 InvenSense 公司推出的整合性 6 軸運動處理組件,其內部整合了 3 軸陀螺儀和 3 軸加速度傳感器,并且含有一個IIC 接口, 可用于連接外部磁力傳感器,并利用自帶
    的頭像 發表于 11-14 17:54 ?330次閱讀
    <b class='flag-5'>CW32</b>模塊使用 <b class='flag-5'>MPU6050</b>六軸<b class='flag-5'>傳感器</b>

    硬件i2c讀寫MPU6050

    本資料為MPU6050
    發表于 07-15 11:45 ?4次下載

    【項目展示】基于CW32的遙控循跡小車

    CW32循跡小車.zip_免費高速下載|百度網盤-分享無限制? 一、概述 CW32循跡、遙控小車具有循跡和遙控兩種功能,小車的硬件模塊由CW32F030C8T6小藍板、智能小車控制底板、BT04-E
    的頭像 發表于 05-31 17:33 ?1416次閱讀
    【項目展示】基于<b class='flag-5'>CW32</b>的遙控循跡小車

    求助求助,MPU6050模塊用DMP時的自檢問題

    我在mpu6050的DMP自檢始終不通過,我通過debug發現里面的兩個值st_shift_cust,st_shift_var不對,讀出來數值很大。st_shift_var讀出來5.幾
    發表于 05-18 17:27

    請問MPU6050可以做振動探測器使用嗎?

    MPU6050可以做振動探測器使用嗎?
    發表于 05-08 07:54

    mpu6050芯片的INT中斷信號引腳和單片機之間需要接電阻嗎?

    mpu6050芯片的INT中斷信號引腳和單片機之間需要接電阻嗎? 我見有的電路圖里面沒有接,有的卻說需要接,到底是怎樣的?
    發表于 05-07 07:21

    MPU6050休眠后如何配置重力加速度喚醒MPU6050

    MPU6050休眠后如何配置重力加速度喚醒MPU6050自己?
    發表于 05-07 06:19

    MPU6050 dmp庫定時查詢讀取偶爾獲取失敗的原因?

    在玩mpu6050 dmp庫的時候遇到了一些問題,dmp設置fifo頻率20Hz,每50ms程序中讀取一次,但是偶爾會有都不到數據的情況,mpu_read_fifo_stream讀取失敗。主程序
    發表于 04-30 06:37

    CW32量產燒錄工具

    本節主要介紹CW32微控制的燒錄CW-Writer,以及與之配合的軟件CW-Programmer的使用方法。燒錄
    的頭像 發表于 04-25 15:22 ?1503次閱讀
    <b class='flag-5'>CW32</b>量產燒錄工具

    CW32快速開發入門

    CW32快速開發入門
    的頭像 發表于 04-24 18:56 ?2135次閱讀
    <b class='flag-5'>CW32</b>快速開發入門

    MPU6050勻速轉動一段時間后,偏航角不變怎么解決?

    使用MPU6050 檢測機器人的偏航角度。當機器人原地連續旋轉時(朝一個方向),DMP 輸出的偏航角開始正常,之后會出現輸出的偏航角不變,此時機器人速度只要發生一下變化,DMP輸出的偏航角就會開始
    發表于 04-09 08:24

    什么是姿態傳感器MPU6050

     MPU6050是6軸運動處理傳感器,它集成了3軸MEMS陀螺儀,3軸MEMS加速度計,以及一個可擴展的數字運動處理DMP。使用它就是為了得到待測物體(如四軸飛行、平衡小車)x、y
    發表于 02-15 10:53 ?3917次閱讀
    什么是<b class='flag-5'>姿態</b><b class='flag-5'>傳感器</b><b class='flag-5'>MPU6050</b>
    澳门百家乐官网才能| 大发888 m摩卡游戏| 百家乐官网在线娱乐网| 大发888假冒网站| 网上百家乐官网合法吗| 老钱庄百家乐的玩法技巧和规则 | 西平县| 百家乐百乐发破解版| 百家乐官网怎么推算| 威尼斯人娱乐城上不了| 百家乐官网娱乐礼金| 百家乐官网路单下注| 威尼斯人娱乐场开户| 百家乐官网赌博娱乐| 百家乐在线游戏| 足球注册网站| 大发888中期| 希尔顿百家乐试玩| 澳门百家乐下注最低| 温州市百家乐官网ktv招聘| 百家乐官网园千术大全| 德州扑克 规则| 太阳城现金| 百家乐视频软件下载| 免费百家乐官网奥| 网上百家乐官网辅助软件| 夏津县| 大发888棋牌游戏下载| 百家乐高手论坛| 免费百家乐娱乐城| 發中發百家乐官网的玩法技巧和规则| 百家乐官网2珠路投注法| 临朐县| 棋牌游戏赚钱| 大发888hanpa| 在线百家乐作| 百家乐大转轮| 棋牌百家乐程序破解| 百家乐隔一数打投注法| 免费百家乐官网计划工具| 百家乐官网送1000|