MPU6050六軸傳感器模塊初始化教程_第1頁
MPU6050六軸傳感器模塊初始化教程_第2頁
MPU6050六軸傳感器模塊初始化教程_第3頁
MPU6050六軸傳感器模塊初始化教程_第4頁
MPU6050六軸傳感器模塊初始化教程_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第第頁MPU6050六軸傳感器模塊初始化教程

本期介紹的是六軸(傳感器)6050,之前在網(wǎng)上CSDN上看了許多關(guān)于MPU6050的介紹,感覺許多都是空話,真正實(shí)用的東西并不多,下面該模塊的程序我是先看的正點(diǎn)原子(stm32)(單片機(jī))的例程之后一點(diǎn)一點(diǎn)移植到(FPGA)中的。這里只移植了初始化和讀?。ㄍ勇輧x)原始數(shù)據(jù)部分的程序,關(guān)于DMP嘛,因?yàn)閭€人能力不夠移植不了。

01六軸傳感器

本期介紹的ATK-MPU6050是一款高性能三軸加速度加三軸陀螺儀的六軸傳感器模塊,該模塊采用(InvenSense)公司的MPU6050(芯片)作為核心,該芯片內(nèi)部整合了3軸陀螺儀和3軸加速度傳感器,并可利用自帶的數(shù)字運(yùn)動(處理器)DMP(硬件)加速引擎,該模塊與外界的(通信)方式為I(IC)協(xié)議,向應(yīng)用后臺輸出姿態(tài)解算后的數(shù)據(jù)。

ATK-MPU6050模塊自帶DMP,通信協(xié)議為IIC、通信速率為400KHz、兼容3.3V和5V系統(tǒng)、陀螺儀和加速度測量維度均為3維。

02器件初始化

在使用MPU6050獲取數(shù)據(jù)之前首先需要對MPU6050進(jìn)行初始化。MPU6050與(控制器)之間的通信方式為IIC通信,所以也需要先例化IIC協(xié)議。

對于IIC協(xié)議的幾個狀態(tài),此處我事先定義了幾個參數(shù),wr寫狀態(tài),sta起始狀態(tài),rd讀狀態(tài),sto停止?fàn)顟B(tài),(ac)k有應(yīng)答,nack無應(yīng)答。

然后便開始編寫初始化MPU6050的時序,程序如下圖所示,最上面那幾行是復(fù)位后全部清零,en是一個計(jì)數(shù)器的使能端,en為0時停止計(jì)數(shù),為1時開始計(jì)數(shù)。tx_data為IIC將要發(fā)送的數(shù)據(jù)(寄存器)。go為IIC通信的啟動端。cmd為當(dāng)前IIC狀態(tài)的選擇端,因?yàn)橛袝rIIC通信中需要起始位或結(jié)束位有時不需要,這里的cmd便可以作為選擇這些的(端口)。en_ms為毫秒計(jì)數(shù)的使能端。

首先要做的便是復(fù)位IIC,需要發(fā)送的數(shù)據(jù)有三部分,首先是發(fā)送器件ID和寫命令,然后就是發(fā)送復(fù)位地址,最后便是發(fā)送復(fù)位數(shù)據(jù)。

下圖為IIC寫入第一個數(shù)據(jù),器件ID和寫命令,該模塊的器件ID為0x68(在5V系統(tǒng)中),將其器件ID左移一位后與0進(jìn)行按位與運(yùn)算,0x68的二進(jìn)制值為0110_1000,左移一位后便是1101_0000,與0進(jìn)行按位與運(yùn)算后還是自己本身,這便是IIC需要寫入MPU6050的器件地址與寫狀態(tài)的值。

寫入數(shù)據(jù)之前,首先設(shè)置狀態(tài)cmd為起始(信號)sta和寫狀態(tài)wr,將sta與wr進(jìn)行按位或便是選擇執(zhí)行這兩項(xiàng),sta與wr進(jìn)行按位或后cmd的值便為6'b000_011。然后go賦值為1啟動IIC,tx_data寫入當(dāng)前要傳輸?shù)臄?shù)據(jù)8'b1101_0000,然后跳轉(zhuǎn)到下一個狀態(tài)。

等tx_data寄存器內(nèi)寫入數(shù)據(jù)后便可以關(guān)閉go,將go端口置0。然后等待IIC一個字節(jié)發(fā)送成功的標(biāo)志信號,當(dāng)trans_done置1后表示IIC一個字節(jié)發(fā)送完成。

接著便開始發(fā)送下一個數(shù)據(jù),寫入復(fù)位地址,cmd選擇寫狀態(tài),此處不需要起始信號所以直接將wr的值賦給cmd,然后開啟go將其置1,tx_data寫入復(fù)位的地址,該地址為0x6B,在此處寫為8'h6B,h表示十六進(jìn)制,地址賦給tx_data寄存器成功后便可以關(guān)閉go將其置0,然后等待IIC一個字節(jié)發(fā)送成功,同樣trans_done為1是IIC一個字節(jié)發(fā)送完成,這時便跳轉(zhuǎn)置下一個狀態(tài)。

復(fù)位地址發(fā)送完成之后便發(fā)送復(fù)位數(shù)據(jù),同樣的道理,先給cmd寫入需要的狀態(tài),此處需要寫狀態(tài)wr和停止信號sto,將wr與sto進(jìn)行按位或,cmd的值便為6'b001_001,復(fù)位數(shù)據(jù)為0x80,此處寫為8'h80。

然后延時100ms。將en置1使能計(jì)數(shù)器,cnt_full為1時表示100ms計(jì)數(shù)值滿,然后關(guān)閉en停止計(jì)數(shù)。

此部分便是100ms計(jì)數(shù)器的寫法。

100ms延時之后復(fù)位MPU6050便結(jié)束了,然后便開始喚醒MPU6050。和上面一樣,首先發(fā)送器件地址和寫命令,即二進(jìn)制的1101_0000。然后等待一次發(fā)送結(jié)束后便開始下一次發(fā)送,器件ID發(fā)送之后便是發(fā)送喚醒地址,該地址為8'h6B,喚醒地址發(fā)送完成之后便是發(fā)送喚醒數(shù)據(jù)0x00,這里我寫的是8'h00。

詳細(xì)步驟已經(jīng)在第一部分詳細(xì)闡述了,后面幾乎都大同小異,首先是對cmd的狀態(tài)進(jìn)行選擇,即有無起始信號或結(jié)束信號、是寫命令還是讀命令。然后便是需要寫入的數(shù)據(jù)tx_data,一次數(shù)據(jù)寫入完成之后標(biāo)志信號trans_done置1后便可以跳轉(zhuǎn)到下一次數(shù)據(jù)的發(fā)送或讀取。

此處為陀螺儀量程設(shè)置,首先是發(fā)送器件地址和寫命令,然后便是發(fā)送陀螺儀地址,該地址為8'h1B,然后設(shè)置的陀螺儀量程,這里量程設(shè)置為±2000dps所以需要發(fā)送的數(shù)據(jù)為八位的0001_1000。

接下來便是加速度計(jì)的量程設(shè)置,首先還是發(fā)送器件地址和寫命令。然后便是發(fā)送加速度計(jì)的地址,該地址為8'h1C,地址數(shù)據(jù)發(fā)送完成之后便是發(fā)送設(shè)置加速度計(jì)量程的數(shù)據(jù),這里加速度的量程設(shè)置為±2g,所以需要發(fā)送的數(shù)據(jù)為0x00。

然后便是配置數(shù)字低通(濾波器)的采樣率,首先發(fā)送器件地址和寫命令,然后寫入采樣頻率分頻器地址0x19。因?yàn)檫@里配置的是數(shù)字低通濾波器的采樣率為50HZ,所以發(fā)送的數(shù)據(jù)便為1000/50-1=19,最后發(fā)送設(shè)置采樣率的參數(shù)為十進(jìn)制的19。

設(shè)置完采樣率后還需配置數(shù)字低通濾波頻率,此處我們設(shè)置為采樣率的一半,即25HZ,首先還是先發(fā)送器件地址和寫命令,然后發(fā)送配置寄存器地址0x1A,最后是配置數(shù)字低通濾波頻率的數(shù)據(jù)即發(fā)送十進(jìn)制數(shù)據(jù)4。

然后是關(guān)閉使能中斷,首先還是發(fā)送器件地址和寫命令,然后發(fā)送使能中斷地址8'h38,最后發(fā)送關(guān)閉使能數(shù)據(jù)8'h00。

關(guān)閉使能中斷后便是設(shè)置IIC主模式,首先發(fā)送器件地址和寫命令,然后發(fā)送控制寄存器地址8'h6A,最后發(fā)送關(guān)閉IIC主模式命令8'h00。

關(guān)閉FIFO,首先也是發(fā)送器件地址和寫命令,然后發(fā)送FIFO使能寄存器地址8'h23,最后發(fā)送關(guān)閉FIFO命令8'h00。

然后便是配置INT端口,此處INT需為低電平有效,首先還是先發(fā)送器件地址和寫命令,然后寫中斷/旁路設(shè)置寄存器地址8'h37,最后發(fā)送數(shù)據(jù)8'h80對INT進(jìn)行設(shè)置。

接下來便需要讀取器件ID,用來(檢測)上訴配置是否正確以及MPU6050是否初始化成功。首先還是先發(fā)送器件地址以及寫命令二進(jìn)制數(shù)據(jù)1101_0000,然后寫入器件ID寄存器地址0x75,然后便需要配置讀命令了,器件ID0x68左移一位之后與1進(jìn)行按位與運(yùn)算,運(yùn)算結(jié)果為8'h1101_0001,該值變?yōu)槠骷刂泛妥x命令,然后cmd配置為rd|sto,讀取狀態(tài)與停止信號按位或運(yùn)算,cmd的值為6'b001_100,IIC通信的(SD)A數(shù)據(jù)端便開始讀取IIC傳輸過來的數(shù)據(jù),讀取結(jié)束之后IIC產(chǎn)生一個結(jié)束位,此次讀取便結(jié)束了。然后便開始驗(yàn)證讀取到的器件ID是否正確,若讀取的器件ID正確則開始進(jìn)行下一步。

讀取的數(shù)據(jù)ID存儲在rx_data這個8位的寄存器中,讀取結(jié)束后便判斷讀取的對不對,若讀取的ID正確便可以進(jìn)行下一步配置,初始化即配置完成。

首先是設(shè)置CLKSEL、PLL的X軸為參考,先發(fā)送器件地址和寫命令,然后便發(fā)送設(shè)置管理寄存器的地址8'h6B,最后便是發(fā)送配置的數(shù)據(jù)8'h01。

然后便是配置加速度與陀螺儀都工作,首先還是先發(fā)器件地址與寫命令,然后發(fā)送管理地址8'h6C,最后發(fā)送配置數(shù)據(jù)8'h00。

這里需要再次設(shè)置一下數(shù)字低通濾波器的采樣率與濾波頻率。設(shè)置方式與參數(shù)和上面一模一樣。采樣率為50Hz,濾波頻率為采樣率的一半。

03數(shù)據(jù)的讀取

然后便可以開始讀數(shù)據(jù)了,這里我讀的是三軸陀螺儀的數(shù)據(jù),三軸加速度的數(shù)據(jù)讀取和這個是一樣的。

這里我在初始化成功后延時了400ms,然后發(fā)送了器件地址和寫命令,然后寫入讀取陀螺儀值的地址8'h43,然后便是寫入器件地址和讀數(shù)據(jù),即器件地址左移一位后與1進(jìn)行按位或運(yùn)算,運(yùn)算得到的值為8'b1101_0001。接下來便可以開始讀取數(shù)據(jù)了。

此處讀取數(shù)據(jù)一共有6組,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論