# ESP32 I2C&mpu6050六軸感測器 ## mpu6050六軸感測器介紹 #### mpu6050六軸感測器,其內部包含陀螺儀、加速度計、溫度感測器及DMP,使用者可利用MCU及其他I2C Master晶片,經由I2C通訊對MPU6050進行寄存器配置,及初始化,配置完成後,可由內部Sensor register讀取其3軸角速度、3軸加速度及溫度的數據。 #### MPU6050,6軸感測器,其內部陀螺儀可以配置感測範圍,由16bit(65536)數值來表示。 #### 陀螺儀可以感測+-250。/sec、+-500。/sec、+-1000。/sec、+-2000。/sec的範圍。 #### 陀螺儀可以感測+-2g、+-4g、+-8g、+-16g的範圍。 #### 因為感測器資料皆由16bit來表示上述範圍,所以範圍越小,其精確度越高,反之,範圍越大精確度越小。 #### 在I2C中,mpu6050在Slave模式時,位址為0x68或0x69  :::info :::   #### 根據上圖所示,mpu6050內部包含,x、y、z軸加速度及陀螺儀感測器,經由ADC將感測器所蒐集到的類比信號轉換成數位信號(16bit),儲存到Sensor Register中,其他設備可由I2C來讀取內部Sensor Register內部感測器資料。 ## **MPU6050六軸感測器內部寄存器** #### mpu6050包含許多寄存器,每個寄存器皆可儲存8bit資料,由此8bit資料,可以配置mpu6050的運作模式,以下將討論幾個重要的配置寄存器。 * ### **0x68 - Power Management**  :::info #### mpu6050 0x68為電源管理寄存器,透過設置該寄存器,可以Reset mpu6050內部寄存器資料、開啟睡眠模式、關閉溫度感測器,以及決定mpu6050時脈訊號來源。 #### 時脈來源配置模式如下圖所示:  #### EX. 寫入00000001(0x01)配置x軸陀螺儀PLL為時脈來源。 ::: * ### **0x1A - Configuration**  :::info #### 此寄存器將著重於Bit[0:2]的配置資料,藉由Bit[0:2]可以配置mpu6050內部數位低通濾波器的工作模式,mpu6050提供了7種低通濾波器供使用者選擇。 #### 當Bit[0:2]寫入0時,Gyroscope Fs(kHz)為8kHz,其餘1kHz。  ::: * ### **0x19 - Sample Rate Divider  :::info #### 此寄存器藉由寫入Bit[0:7]來設置mpu6050感測器、FIFO以及DMP數據的採樣頻率,依賴於Gyroscope Fs(kHz)所提供的時脈頻率,其公式如下:  ::: * ### **0x1B-Gyroscope Configuration**  :::info #### 此寄存器著重於Bit[3:4],由2個bit,可配置mpu6050內部陀螺儀的感測範圍, #### +-250。/sec、+-500。/sec、+-1000。/sec、+-2000。/sec,其範圍越大,精確度越小。 #### 假設Bit[3:4]寫入3,則寫入0x18到slave 0x68 or 0x69寄存器0x1b即可完成配置,範圍為+-2000。/sec。  ::: * ### **0x1C-Accelerometer Configuration**  :::info #### 此寄存器著重於Bit[3:4],由2個bit,可配置mpu6050內部加速度計的感測範圍,+-2g、+-4g、+-8g、+-16g,其範圍越大,精確度越小。 #### 假設Bit[3:4]寫入0,則寫入0x00到slave 0x68 or 0x69寄存器0x1c即可完成配置,範圍為+-2g。  ::: ## ESP32 I2C配置mpu6050感測器寄存器 * ### **0x3B~0x40 -Accelerometer Measurements**  :::info #### 在0x3B寄存器至0x40寄存器中,分別表示x、y、z軸方向的加速度數值,每個軸的加速度各由2個寄存器(16bit)來表示,如上圖所示,0x3B、0x3C分別儲存著ACCEL_X軸感測數值的高8位元ACCEL_XOUT[15:8]和低8位元ACCEL_XOUT[7:0],通過此16bit資料,可表示-32678~+32677的值,再進行單位轉換後可得真實數據。 #### ACCEL_XOUT[15:8] << 8 | ACCEL_XOUT[7:0]可得此16bit資料 #### Ex. #### 假設加速度感測範圍配置為+-2g,則表示此-32678~+32677的值代表+-2g的量值,所以我們會以 #### ACCEL_XOUT[15:8] << 8 | ACCEL_XOUT[7:0]的值 * 4 / 65536得到範圍為+-2g的數據。 ::: * ### **0x41~0x42 -Temperature Measurement**  :::info #### 可藉由此2個寄存器資料,得到16bit的float溫度數值,藉由此數值再進行校正後可得到當下溫度數據。  ::: * ### **0x43~0x48 -Accelerometer Measurements**  :::info #### 在0x43寄存器至0x48寄存器中,分別表示x、y、z軸方向的陀螺儀角速度數值,每個軸的角速度各由2個寄存器(16bit)來表示,如上圖所示,0x43、0x44分別儲存著GYRO_X軸感測數值的高8位元GYRO_XOUT[15:8]和低8位元GYRO_XOUT[7:0],通過此16bit資料,可表示-32678~+32677的值,再進行單位轉換後可得真實數據。 #### GYRO_XOUT[15:8] << 8 | GYRO_XOUT[7:0]可得此16bit資料 #### Ex. #### 假設加速度感測範圍配置為+-2000。/sec,則表示此-32678~+32677的值代表+-2000。/sec的量值,所以我們會以GYRO_XOUT[15:8] << 8 | GYRO_XOUT[7:0]的值 * 4000 / 65536得到範圍為+-2000。/sec的數據。 ::: --- ## 下一章節將會介紹esp32如何使用mpu6050,將會介紹以下程式範例,也會提供影片給大家參考。 * ## ESP32 I2C讀取溫度感測器資料 * ## ESP32 I2C讀取6感測器資料 * ## ESP32 讀取mpu6050程式範例 --- ## 教學影片 * ### **Mpu6050六軸感測器實作教學影片**  * [https://www.youtube.com/watch?v=ZGw88J1PExE](https://www.youtube.com/watch?v=ZGw88J1PExE)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up