MPU6050讀取數據步驟:
1,檢查MCU(主機)與MPU6050(姿態傳感器)是否通信成功
2,設置MPU6050為復位狀態,並且100ms延時,確保復位完成
3,喚醒MPU6050,選擇PLL為時鍾源
4,配置6軸數據全部輸出(3軸加速度與3軸陀螺儀)
5,禁止所有中斷(避免傳感器讀取到一個數據就中斷,而耽誤系統進程)
6,設置MPU6050的內部采樣頻率以及低通濾波器(小的飛行器一一般設施在20~30Hz即可)
7,設置陀螺儀與加速度計的滿量程范圍
8,主處理芯片可以直接訪問MPU6050輔助I2C
下面來一步一步配置:
1,檢查MCU(主機)與MPU6050(姿態傳感器)是否通信成功
我們選用的讀取MPU6050儲存ID的寄存器即0x75,如果讀出來ID是默認值0x68,那么是不是可以證明通信成功了
2,設置MPU6050為復位狀態,並且100ms延時,確保復位完成
看到電源管理寄存器1(0x6B)
我們只需要將第7位寄存器置1即可復位,別的寄存器不做配置,就都置0。
那么將0x6B配置為0x80即可
3,喚醒MPU6050,選擇PLL為時鍾源
還是對0x6B進行配置,看到[2:0]寄存器,這里我們配置為0x01。
自動選擇最好的時鍾源
4,配置6軸數據全部輸出(3軸加速度與3軸陀螺儀)
看到電源管理2寄存器(0x6C)
我們看到[0:5]為加速度與陀螺儀是否待機的配置,[6:7]為低功耗模式的設置。
在這里我們不需要待機與低功耗,說話以直接每一位都置為0即可,0x6C置0x00
5,禁止所有中斷(避免傳感器讀取到一個數據就中斷,而耽誤系統進程)
看控制中斷使能的寄存器(0x38)
我們不讓中斷產生,所以還是將寄存器配置為0x00
6,設置MPU6050的內部采樣頻率以及低通濾波器
配置SMPLRT_DIV的值就可以進行分頻,DLPF為數字低通濾波器,后面我們為了使數據更加穩定是要進行配置的,那么陀螺儀的輸出頻率=1kHz,這時候我們假設SMPLRT_DIV置1,那么陀螺儀的輸出頻率為500Hz,這時候要考慮飛機姿態結算的頻率,假設高於500Hz,那么意味着可能兩次姿態結算用的都是同一組陀螺儀數據。這樣不利於提升精度。所以我們這里SMPLRT_DIV置0。保持1000Hz,即0x19置為0x00
0x1A寄存器是對DLPF(數字低通濾波)進行配置,一般將他們的DLPF都設為20Hz
即配置寄存器0x1A為0x04
7,設置陀螺儀與加速度計的滿量程范圍
我們不進行自檢,所以只看[3:4]位,我們將角度設置大一些,2000度/s,
將寄存器0x1B配置為0x18
同樣的,加速度計我們也不進行自檢,所以所以只看[3:4]位,我們將角度配置為+-4g
將寄存器0x1C配置為0x08
8,主處理芯片可以直接訪問MPU6050輔助I2C
看到最后Bit1的I2C_BYPASS_EN的配置說明:
輔助I2C可以用來外接磁力計或其他傳感器。 有兩種工作模式: I2C Master Mode, 此時 MPU-60X0作為主設備與外接傳感器通信; Pass-Through Mode, 此時僅用作連接, 允許 MPU 和外接傳感器同時和芯片通信
我們直接將寄存器0x37配置為0x02即可