教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

MPU6050数据分析与滤波

来源:网络收集 时间:2026-09-04
导读: MPU6050数据分析与滤波 DS-学习笔记02--MPU6050数据分析与滤波 [复制链接]论坛关于6050的帖子看了个遍也没整明白哪些东西可以用,哪些数据是干什么的。 沉寂了2天,尽可能的在网上收集资料,但是关于6050的太少了 在本论坛问题区提的问题有人看,没人回答,

MPU6050数据分析与滤波

DS-学习笔记02--MPU6050数据分析与滤波

[复制链接]论坛关于6050的帖子看了个遍也没整明白哪些东西可以用,哪些数据是干什么的。

沉寂了2天,尽可能的在网上收集资料,但是关于6050的太少了

在本论坛问题区提的问题有人看,没人回答,估计是看的人不会,会的人不会去问题区,要么就是大家对6050不熟悉或者是没用过吧。也没人来问津下我们初学者。

让我想起卜学亮一首歌:搞不懂就问人,搞得懂就答人,没有人懂还可以问神!

其实整到现在有的地方我还是不太明白,将就先贡献出来,给大家参考。

我参考的是飞思卡尔官方给出的设计参考。

1.关于6050 陀螺仪和加速度计 的角速度和角度计算。

A.陀螺仪角度计算,很多帖子中都提到了用的是积分,但是我这里还是重新讲下。 angle_n = angle_n-1 + (Gyro-C_Gyro)*R_Gyro;

angle_n 当前角度值,它的单位是度(°)

angle_n-1 上一次计算出的角度值

Gyro 陀螺仪敏感轴偏转值,也就是当前敏感轴读数

C_Gyro 陀螺仪零点偏移值,这个值的测量方法是:将陀螺仪敏感轴水平放置静止时的读数,我的零点偏移值是水平、垂直、倒置,分别取1024次,作平均值得出的,读数是-177.8865041,但是最后在程序实践中,调整到-99.90。或许还有别的办法,自己看着办吧。

R_Gyro 是陀螺仪比例。飞思卡尔的参考中提到这个值是可以计算出来的,下面我会提供下载,大家自己去看看怎么算的,但是在其论坛和调试手册中都提到,这个比例值还是实验法测量出来的比较准确。

B.加速度仪 角度计算。

加速度仪的角度计算有很多方法,论坛里就有2中。但是都用到了三角函数,数学没学好,照抄了也不行。参考了飞思卡尔的计算方法后大概是这样的。

Angle_Z = (az-C_Z)*R_Z;

angle_z 加速度计敏感轴Z轴产生倾角计算出的角度,单位度(°)

az 是加速度仪 Z轴读数

MPU6050数据分析与滤波

C_Z Z轴零点偏移量 测量方法和陀螺仪的一样。

R_Z 加速度计Z轴比例

C.反复试验,MPU6050加速度计Z轴对应的是陀螺仪的X轴。不知道是不是我的有问题,还是就这么设计的?

2.关于滤波,实验了一天,大概滤出个这么样个波形。

红色:加速度计算出的角度

橙色:陀螺仪积分出的角度

黑色:滤波后的角度

比较大的浮动是我将mpu6050 旋转大约45°的波形。后面是没放稳产生的前后晃动。

MPU6050数据分析与滤波

3.代码部分

ARDUINO 代码复制打印 1. #include "Wire.h"

2. #include "I2Cdev.h"

3. #include "MPU6050.h"

4. MPU6050 accelgyro;

5. int16_t ax, ay, az;

6. int16_t gx, gy, gz;

7.

8. float C_Z = -1343.91;//Z轴零点偏移量

9. float C_Gyro = -99.90;//陀螺仪零点偏移量

10.

11.

12.

13.

14.

15.

16. float Z_Min = -17873.76;//最小极值 float Z_Max = 15186.91;//最大极值 float T_Z = 3;//Z轴角度补偿时间常数 float R_Z = 180/(Z_Max - Z_Min);//Z轴比例 float R_Gyro = 0.081;//陀螺仪比例 unsigned long T_Now =0;//系统当前时间 unsigned long T_Last;//上次时间

17. float Angle_G,Angle_AG,Angle_GG;

18. int i;

19. float GYRO;

20.

21. void setup() {

22. Wire.begin();

23. Serial.begin(38400);

24. // initialize device

25. Serial.println("Initializing I2C

devices...");

26. accelgyro.initialize();

27. // verify connection

28. Serial.println("Testing device

connections...");

29. Serial.println(accelgyro.testConnection() ?

"MPU6050 connection successful" : "MPU6050

MPU6050数据分析与滤波

connection failed");

30. }

31.

32. void loop() {

33. accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy,

&gz); //读取6050数据

34.

35.

36.

37. if (i>20) { GYRO = GYRO/20; float Angle_Z = (az-C_Z)*R_Z;//加速度计 角度

计算 (读取值-偏移量)*比例 单位:°

38. Angle_G = -(GYRO-C_Gyro)*R_Gyro;//陀螺仪采样

(采样值-偏移量)*比例 单位:°/s

39. Angle_AG = Angle_AG +

(((Angle_Z-Angle_AG)*1/T_Z)+Angle_G)*0.005;//滤波

40. Angle_GG = Angle_GG + Angle_G*0.005;//陀螺

仪对X轴积分 得出角度。

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

代码loop段中,我使用了一个if循环,采集20次陀螺仪读数,进行平均。这样似乎影响了数据采集,但是在波形中灵敏度似乎不受影响。

知道办法笨了点,希望有高手给出简化方法。

滤波中用到的0.005是参考中给出的。本来准备用系统时间积分的,但是看滤出的波有模有 Serial.print(Angle_Z); Serial.print(","); Serial.print(Angle_GG); Serial.print(","); Serial.print(Angle_AG); Serial.print("\n"); i=0; } GYRO = GYRO + gx; i++; }

MPU6050数据分析与滤波

样的就没改了。

参考中给出了大部分的算法思想,人笨没办法,就折腾出个这么个代码。

4.如何绘制波形图

A.绘制波形图一般用excel,吧串口调试工具读出是数据导入excel,选择全部数据,单击图表向导就可以了,记住,在arduino输出数据的时候不要用“逗号”分割,打印一个table也就是把我上面的代码

ARDUINO 代码复制打印 1. Serial.print(Angle_Z);

2. Serial.print(",");

3. Serial.print(Angle_GG);

4. Serial.print(",");

5. Serial.print(Angle_AG);

6. Serial.print("\n");

换成

ARDUINO 代码复制打印 1. Serial.print(Angle_Z);

2. Serial.print("\t");

3. Serial.print(Angle_GG);

4. Serial.print("\t");

5. Serial.print(Angle_AG);

6. Serial.print("\n");

在串口调试工具得到的数据就可以粘贴到excel,直接得到一个N行3列的表格。至于多少行,看你要采样多少个数据。

B.许多串口调试工具都提供绘制波形的。

黑马给出的 /thread-676-1-1.html

还有一个是 SerialChart 也是论坛里谁找的,忘了是谁了。

我用的是SerialChart。

具体参数如下

SERIALCHART 代码复制打印

1. [_setup_]

2.

3. po …… 此处隐藏:2874字,全部文档内容请下载后查看。喜欢就下载吧 ……

MPU6050数据分析与滤波.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/266478.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)