03-Machine-7-i2c_mpu6050.py K230 I2C接口外接六轴加速度计MPU6050功能演示
·
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数据线 |


源代码如下:
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并连续读取加速度数据。
更多推荐



所有评论(0)