[PIC®/AVR®/dsPIC®产品] MPU6050操作方法

[复制链接]
 楼主| huahuagg 发表于 2025-2-21 18:31 | 显示全部楼层 |阅读模式
  1. #include <Wire.h>
  2. #include <Adafruit_MPU6050.h>
  3. #include <Adafruit_Sensor.h>

  4. Adafruit_MPU6050 mpu;

  5. void setup() {
  6.   Serial.begin(9600);
  7.   while (!Serial) delay(10);

  8.   if (!mpu.begin()) {
  9.     Serial.println("MPU6050初始化失败!");
  10.     while (1);
  11.   }
  12.   
  13.   // 传感器参数配置
  14.   mpu.setAccelerometerRange(MPU6050_RANGE_8_G);   // 加速度计量程 ±8G
  15.   mpu.setGyroRange(MPU6050_RANGE_500_DEG);        // 陀螺仪量程 ±500°/s
  16.   mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);     // 滤波器带宽 21Hz
  17. }

  18. void loop() {
  19.   sensors_event_t a, g, temp;
  20.   mpu.getEvent(&a, &g, &temp);  // 获取传感器事件

  21.   // 通过加速度计计算角度(静态精度高)
  22.   float roll = atan2(a.acceleration.y, a.acceleration.z) * 180/M_PI;
  23.   float pitch = atan2(-a.acceleration.x, sqrt(pow(a.acceleration.y, 2) + pow(a.acceleration.z, 2))) * 180/M_PI;

  24.   Serial.print("Roll: ");
  25.   Serial.print(roll);
  26.   Serial.print("°\tPitch: ");
  27.   Serial.print(pitch);
  28.   Serial.println("°");
  29.   delay(200);
  30. }
‌卡尔曼滤波‌ - 融合加速度计和陀螺仪数据
‌动态补偿‌ - 运动状态下优先使用陀螺仪积分
‌零偏校准‌ - 上电时静止3秒自动校准零偏

见问题
若出现I2C通信失败:
检查接线是否接触不良
尝试添加Wire.setClock(400000)提高I2C速率
数据抖动较大时:
降低采样频率至50Hz
在代码中添加移动平均滤波
倾斜角度超过90°时:
使用四元数解算替代欧拉角
启用MPU6050内置的DMP功能


  1. // 添加卡尔曼滤波库(需额外安装)
  2. #include <SimpleKalmanFilter.h>
  3. SimpleKalmanFilter kalmanX(0.5, 0.5, 0.01);
  4. SimpleKalmanFilter kalmanY(0.5, 0.5, 0.01);

  5. // 在loop()中替换原始数据
  6. float filtered_roll = kalmanX.updateEstimate(roll);
  7. float filtered_pitch = kalmanY.updateEstimate(pitch);
此方案在静止环境下精度可达±0.5°,动态环境下建议结合陀螺仪积分进行数据融合。建议通过串口绘图仪实时观察数据波形(Ctrl+Shift+L 打开Arduino IDE绘图工具)。

598330983 发表于 2025-2-21 19:30 | 显示全部楼层
我也想试试,这个库函数是不是很好用。
玛尼玛尼哄 发表于 2025-2-22 12:44 | 显示全部楼层
如果用普通单片机该如何做,有没有官方的驱动程序。
jiekou001 发表于 2025-2-26 16:21 | 显示全部楼层
用这种库函数是比较方便
wanduzi 发表于 2025-2-26 18:51 | 显示全部楼层
如何使用官方的库呢?我记得官方有个库。
xixi2017 发表于 2025-2-28 14:37 | 显示全部楼层
这一类元件搞清楚就可以很容易开发飞机,机器人之类的,需要测量平衡。
gejigeji521 发表于 2025-2-28 14:51 | 显示全部楼层
这种操作掩盖了很多内容,不如用纯C。
波尔街道的松柏 发表于 2025-7-17 11:54 | 显示全部楼层
初始化:I2C 通信,写 PWR_MGMT_1 唤醒;
数据读取:读加速度 / 陀螺仪寄存器;
姿态解算:互补滤波或卡尔曼融合数据。

734774645 发表于 2025-7-29 10:15 | 显示全部楼层
如果用纯C如何做
您需要登录后才可以回帖 登录 | 注册

本版积分规则

159

主题

1408

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部