接下來,我們介紹一下利用STM32F1讀取MPU6050的加速度和角度傳感器數(shù)據(jù)(非中斷方式),需要哪些初始化步驟:
1)初始化IIC接口
MPU6050采用IIC與STM32F1通信,所以我們需要先初始化與MPU6050連接的SDA和SCL數(shù)據(jù)線。
2)復(fù)位MPU6050
這一步讓MPU6050內(nèi)部所有寄存器恢復(fù)默認值,通過對電源管理寄存器1(0X6B)的bit7寫1實現(xiàn)。復(fù)位后,電源管理寄存器1恢復(fù)默認值(0X40),然后必須設(shè)置該寄存器為0X00,以喚醒MPU6050,進入正常工作狀態(tài)。
3)設(shè)置角速度傳感器(陀螺儀)和加速度傳感器的滿量程范圍
這一步,我們設(shè)置兩個傳感器的滿量程范圍(FSR),分別通過陀螺儀配置寄存器(0X1B)和加速度傳感器配置寄存器(0X1C)設(shè)置。我們一般設(shè)置陀螺儀的滿量程范圍為±2000dps,加速度傳感器的滿量程范圍為±2g。
4)設(shè)置其他參數(shù)
這里,我們還需要配置的參數(shù)有:關(guān)閉中斷、關(guān)閉AUXIIC接口、禁止FIFO、設(shè)置陀螺儀采樣率和設(shè)置數(shù)字低通濾波器(DLPF)等。本章我們不用中斷方式讀取數(shù)據(jù),所以關(guān)閉中斷,然后也沒用到AUXIIC接口外接其他傳感器,所以也關(guān)閉這個接口。分別通過中斷使能寄存器(0X38)和用戶控制寄存器(0X6A)控制。MPU6050可以使用FIFO存儲傳感器數(shù)據(jù),不過本章我們沒有用到,所以關(guān)閉所有FIFO通道,這個通過FIFO使能寄存器
(0X23)控制,默認都是0(即禁止FIFO),所以用默認值就可以了。陀螺儀采樣率通過采
樣率分頻寄存器(0X19)控制,這個采樣率我們一般設(shè)置為50即可。數(shù)字低通濾波器(DLPF)則通過配置寄存器(0X1A)設(shè)置,一般設(shè)置DLPF為帶寬的1/2即可。
5)配置系統(tǒng)時鐘源并使能角速度傳感器和加速度傳感器
系統(tǒng)時鐘源同樣是通過電源管理寄存器1(0X1B)來設(shè)置,該寄存器的最低三位用于設(shè)置系統(tǒng)時鐘源選擇,默認值是0(內(nèi)部8MRC震蕩),不過我們一般設(shè)置為1,選擇x軸陀螺PLL作為時鐘源,以獲得更高精度的時鐘。同時,使能角速度傳感器和加速度傳感器,這兩個操作通過電源管理寄存器2(0X6C)來設(shè)置,設(shè)置對應(yīng)位為0即可開啟。
至此,MPU6050的初始化就完成了,可以正常工作了(其他未設(shè)置的寄存器全部采用默認值即可),接下來,我們就可以讀取相關(guān)寄存器,得到加速度傳感器、角速度傳感器和溫度傳感器的數(shù)據(jù)了。
首先,我們介紹電源管理寄存器1,該寄存器地址為0X6B,各位描述如圖1.1.3所示:
圖1.1.3電源管理寄存器1各位描述
其中,DEVICE_RESET位用來控制復(fù)位,設(shè)置為1,復(fù)位MPU6050,復(fù)位結(jié)束后,MPU硬件自動清零該位。SLEEEP位用于控制MPU6050的工作模式,復(fù)位后,該位為1,即進入了睡眠模式(低功耗),所以我們要清零該位,以進入正常工作模式。TEMP_DIS用于設(shè)置是否使能溫度傳感器,設(shè)置為0,則使能。最后CLKSEL[2:0]用于選擇系統(tǒng)時鐘源,選擇關(guān)系如表1.1.1所示:
表1.1.1CLKSEL選擇列表
默認是使用內(nèi)部8MRC晶振的,精度不高,所以我們一般選擇X/Y/Z軸陀螺作為參考的PLL作為時鐘源,一般設(shè)置CLKSEL=001即可。
接著,我們看陀螺儀配置寄存器,該寄存器地址為:0X1B,各位描述如圖1.1.4所示:
圖1.1.4陀螺儀配置寄存器各位描述
該寄存器我們只關(guān)心FS_SEL[1:0]這兩個位,用于設(shè)置陀螺儀的滿量程范圍:0,±250°/S;1,±500°/S;2,±1000°/S;3,±2000°/S;我們一般設(shè)置為3,即±2000°/S,因為陀螺儀的ADC為16位分辨率,所以得到靈敏度為:65536/4000=16.4LSB/(°/S)。
接下來,我們看加速度傳感器配置寄存器,寄存器地址為:0X1C,各位描述如圖1.1.5所示:
圖1.1.5加速度傳感器配置寄存器各位描述
該寄存器我們只關(guān)心AFS_SEL[1:0]這兩個位,用于設(shè)置加速度傳感器的滿量程范圍:0,±2g;1,±4g;2,±8g;3,±16g;我們一般設(shè)置為0,即±2g,因為加速度傳感器的ADC也是16位,所以得到靈敏度為:65536/4=16384LSB/g。
接下來,我看看FIFO使能寄存器,寄存器地址為:0X1C,各位描述如圖1.1.6所示:
圖1.1.6FIFO使能寄存器各位描述
該寄存器用于控制FIFO使能,在簡單讀取傳感器數(shù)據(jù)的時候,可以不用FIFO,設(shè)置對應(yīng)位為0即可禁止FIFO,設(shè)置為1,則使能FIFO。注意加速度傳感器的3個軸,全由1個位(ACCEL_FIFO_EN)控制,只要該位置1,則加速度傳感器的三個通道都開啟FIFO了。
接下來,我們看陀螺儀采樣率分頻寄存器,寄存器地址為:0X19,各位描述如圖1.1.7所示:
圖1.1.7陀螺儀采樣率分頻寄存器各位描述
該寄存器用于設(shè)置MPU6050的陀螺儀采樣頻率,計算公式為:
采樣頻率=陀螺儀輸出頻率/(1+SMPLRT_DIV)
這里陀螺儀的輸出頻率,是1Khz或者8Khz,與數(shù)字低通濾波器(DLPF)的設(shè)置有關(guān),當DLPF_CFG=0/7的時候,頻率為8Khz,其他情況是1Khz。而且DLPF濾波頻率一般設(shè)置為采樣率的一半。采樣率,我們假定設(shè)置為50Hz,那么SMPLRT_DIV=1000/50-1=19。