一. 引言
現在智能手機的功能已經非常強大,除了基礎的通信功能外,測位測速,空間角度等資料的測量也非常友善,這線上路導航,地圖,體感遊戲等應用中十分重要。不知你是否想過,智能裝置是如何擷取到其所在的空間狀态與加速度等資料的呢?MPU6050就是提供這類資料測量的一種傳感器子產品。
首先,通過樹莓派來讀取MPU6050傳感器子產品的資料并不複雜,MPU60X0是一款擴充性極強的數字運動處理器,我們本次實驗使用的是封裝好的功能子產品,如下圖所示:
MPU6050晶片本身有24個引腳,每邊有6個引腳,功能較多,引腳功能與定位如下圖所示:
關于MPU6050的進階用法,可以通過檢視晶片手冊擷取,本篇部落格我們着重與在樹莓派上對其進行應用。我們隻需要關注所使用的子產品的8個引腳即可。
二. 連線與準備工作
本次實驗我們使用的子產品有8個引腳,隻需要使用其中4個引腳即可實作功能。對于樹莓派I2C協定總線的應用,本系列部落格之前已經有非常多的實驗有過應用。首先連接配接傳感器子產品與樹莓派如下表:
傳感器子產品 樹莓派
VCC +5V
GND GND
SCL SCL
SDA SDA
開始使用I2C總線前,莫忘了開啟樹莓派的I2C功能,對I2C總線用法如果不太了解,可以閱讀以下部落格:
https://my.oschina.net/u/2340880/blog/5142788連線完成後,在樹莓派的終端輸入如下指令可以檢視已經連接配接的I2C裝置:
sudo i2cdetect -y 1
如果連接配接無誤,終端輸出結果将如下圖所示:
可以看到,圖中顯示的68即為我們所連接配接的傳感器的位址。
下面,是時候了解下MPU6050傳感器該如何使用了,我們知道,通過I2C總線,我們可以友善的讀取裝置中某個寄存器的資料,也可以向裝置的某個寄存器寫入資料,是以,使用MPU6050傳感器的核心是了解其中寄存器的使用方法。我們将以使用到的幾個寄存器為例做介紹,完整的寄存器用法可以從晶片手冊上得到。
1. 電源管理寄存器
電源管理寄存器的位址為107,對應十六進制數0x6b,它是一個8位的寄存器,其中第4位為保留位不能使用,功能如下:
DECIVE_RESET: 這一位的作用是重置傳感器,将傳感器内部所有寄存器複位為初始狀态,複位完成後,這一位會清零。
SLEEP: 睡眠控制位,當此位為1時,傳感器将處于睡眠模式。需要注意,傳感器啟動時預設是睡眠模式,我們需要手動将其喚醒。
CYCLE:當裝置設定為非睡眠模式時,即SLEEP位不為1,此為如果設定為1,傳感器将處于循環模式,會按照寄存器108設定的速度進行資料循環采樣。
TEMP_DIS:是否禁用溫度傳感器,設定為1時,禁用溫度傳感器。
CLKSEL:3位無符号數值,用來指令時鐘源。
對于CLKSEL選項,其設定方式如下:
CLKSEL值 意義
0 使用内部的8MHz的振蕩器
1 使用陀螺儀X軸的頻率
2 使用陀螺儀Y軸的頻率
3 使用陀螺儀X軸的頻率
4 使用外部的32.768kHz頻率
5 使用外部19.2MHz頻率
6 保留值
7 停止時鐘并使振蕩器保持複位狀态
2. 陀螺儀資料寄存器
陀螺儀資料寄存器的位址為67到72,共48個二進制位,如下:
這些寄存器都是隻讀的,不能寫入。
67和68寄存器存儲16位資料,為陀螺儀X軸的測量資料。其中68寄存器存儲低8位,67寄存器存儲高8位。
69和70寄存器存儲16位資料,為陀螺儀Y軸的測量資料。其中70寄存器存儲低8位,69寄存器存儲高8位。
71和72寄存器存儲16位資料,為陀螺儀Z軸的測量資料。其中72寄存器存儲低8位,71寄存器存儲高8位。
需要注意,從這些寄存器取出的資料都是原始資料,要得到真正的陀螺儀測量的旋轉角度,需要進行轉換,其轉換的機關與總量程有關,量程在寄存器27進行配置。
3. 陀螺儀配置寄存器
陀螺儀配置寄存器的位址為27,是一個可讀可寫的寄存器,如下:
XG_ST,YG_ST與ZG_ST這3位用來設定陀螺儀執行自檢。FS_SEL用來設定陀螺儀的量程範圍,低3位為保留位,無需使用。FS_SEL可設定的量程範圍如下:
FS_SEL 量程範圍 靈敏度參數
0 ±250 °/s 131
1 ±500 °/s 65.5
2 ±1000 °/s 32.8
3 ±2000 °/s 16.4
對于不同的量程範圍,我們擷取到原始資料後,需要除以對應的靈敏度參數才能得到最終的陀螺儀資料。