i2c_mpu6050.py K230 I2C接口外接六軸加速度計MPU6050功能演示。

MPU6050模塊介紹

MPU6050 是全球首款整合 3軸MEMS陀螺儀 和 3軸MEMS加速度計 的6軸運動處理傳感器。其核心亮點包括:
  • 高精度測量:陀螺儀量程可配置(±250°/s至±2000°/s),加速度計量程(±2g至±16g),16位ADC確保數據精度。
  • 內置DMP引擎:數字運動處理器(DMP)可直接輸出融合後的姿態數據(四元數、歐拉角等),減輕主控計算負擔。
  • 低功耗設計:支持多種省電模式,加速度計最低功耗僅40μA@10Hz。
  • 擴展性強:支持通過I2C接口外接磁力計,實現9軸數據融合。
模塊化優勢:MPU6050芯片封裝極小(4×4×0.9mm),直接焊接難度高,因此通常使用模塊化設計。模塊集成了:
  • 電平轉換電路(兼容3.3V/5V系統)
  • 濾波電容和穩壓電路
  • 清晰的引腳標識(如SCL、SDA、INT等)

MPU6050模塊引腳

k230引腳

功能説明

VCC

3.3V/5V

電源正極

GND

GND

電源地

SCL

IO11-FPIOA.IIC2_SCL

I2C時鐘線

SDA

IO12-FPIOA.IIC2_SDA

I2C數據線

mpu6050_#k230

mpu6050_#智能硬件_02

源代碼如下:
 

import machine
import time
import ustruct

def test_mpu6050():
    fpioa = machine.FPIOA()

    fpioa.set_function(11, machine.FPIOA.IIC2_SCL)
    fpioa.set_function(12, machine.FPIOA.IIC2_SDA)

    i2c = machine.I2C(2, freq=100000)
    print("I2C devices:", [hex(x) for x in i2c.scan()])

    # Initialize MPU6050
    i2c.writeto_mem(0x68, 0x6B, b'\x00')  # Wake up
    time.sleep_ms(200)

    # Verify registers
    whoami = i2c.readfrom_mem(0x68, 0x75, 1)
    print(f"WHO_AM_I: {hex(whoami[0])}")

    # Read loop
    while True:
        try:
            accel = i2c.readfrom_mem(0x68, 0x3B, 6)
            ax = ustruct.unpack('>h', accel[0:2])[0]
            ay = ustruct.unpack('>h', accel[2:4])[0]
            az = ustruct.unpack('>h', accel[4:6])[0]
            print(f"Accel: {ax} {ay} {az}")

            #time.sleep_ms(10)
        except Exception as e:
            print(f"Error: {e}")
            break

test_mpu6050()

關鍵程序説明:

i2c.writeto_mem(0x68, 0x6B, b'\x00') #向MPU6050的電源管理寄存器(0x6B)寫入0,喚醒設備

whoami = i2c.readfrom_mem(0x68, 0x75, 1)#讀取WHO_AM_I寄存器(0x75)的值 print(f"WHO_AM_I: {hex(whoami[0])}")#正常應該返回0x68,用於確認設備連接正確

accel = i2c.readfrom_mem(0x68, 0x3B, 6)#從加速度數據寄存器(0x3B)連續讀取6個字節,這6個字節包含X、Y、Z三軸的加速度數據(每個軸2字節)

  • ustruct.unpack('>h', data):將2字節數據轉換為有符號整數 ,分別解析X、Y、Z軸的數據
  • >:大端字節序(高位在前)
  • h:16位有符號整數

輸出數據説明

  • 輸出的ax、ay、az是原始數據
  • 需要根據傳感器的量程設置進行轉換才能得到實際的加速度值(g或m/s²)
  • 默認量程為±2g時,靈敏度為16384 LSB/g

程序完整展示瞭如何初始化MPU6050並連續讀取加速度數據。