关键词不能为空

当前您在: 主页 > 英语 >

MPU6050数据分析与滤波

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 18:28
tags:

-

2021年2月1日发(作者:阿里扎)




DS-


学习笔记


02-- MPU6050


数据分析与滤波



[< /p>


复制链接


]


论坛关于

6050


的帖子看了个遍也没整明白哪些东西可以用,


哪些 数据是干


什么的。



沉寂了

< p>
2


天,尽可能的在网上收集资料,但是关于


605 0


的太少了



在本论坛问题区提的问题 有人看,没人回答,


估计是看的人不会,


会的人不会去问题区, 要


么就是大家对


6050


不熟悉或者是 没用过吧。也没人来问津下我们初学者。



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




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



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




1.


关于


6050


陀螺仪和加速度计



的角速度和角度计算。



< p>
A.


陀螺仪角度计算,很多帖子中都提到了用的是积分,但是我这里还是重 新讲下。



angle_n = angle_n-1 + (Gyro-C_Gyro)*R_Gyro;



angle_n


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




angle_n-1


上一次计算出的角度值




Gyro


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




C_Gyro


陀螺仪零点偏移值,


这个值的测量方法是:


将陀螺仪敏感轴水平放置静止时的读数,


我的零点偏移值是水平、


垂直、


倒置,


分别取


1024


次,

< br>作平均值得出的,


读数是


-177.8865041



但是最后在程序实践中,调整到


-99. 90


。或许还有别的办法,自己看着办吧。




R_Gyro


是陀螺仪比例。飞思 卡尔的参考中提到这个值是可以计算出来的,下面我会提供下


载,


大家自己去看看怎么算的,


但是在其论坛和调试手册中都提到,


这个比例值还是实验法


测量出来的比较准确。




B.


加速度仪



角度计算。



加速度仪的角度计算有很 多方法,论坛里就有


2


中。但是都用到了三角函数,数学没学好 ,


照抄了也不行。参考了飞思卡尔的计算方法后大概是这样的。




Angle_Z = (az-C_Z)*R_Z;



angle_z


加速度计敏感轴< /p>


Z


轴产生倾角计算出的角度,单位度(°)




az


是加速度仪


Z


轴读数






C_Z Z


轴零点偏移量



测量方法和陀螺仪的一样。




R_Z


加速度计


Z

< br>轴比例




C.


反复试验,


MPU6050


加速度计

< br>Z


轴对应的是陀螺仪的


X


轴。不 知道是不是我的有问题,还


是就这么设计的?




2.


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






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



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



黑色:滤波后的角度




比较大的浮动是我将


mpu6050


旋转大约


45


°的波形。后面是没放稳产生的前后晃动。




3.


代码部分



ARDUINO


代码复制


打印



1.



2.



3.



4.



5.



6.



7.



8.



9.



10.



11.



12.



13.



14.



15.



#include




#include




#include




MPU6050 accelgyro;


int16_t ax, ay, az;


int16_t gx, gy, gz;



float


C_Z =


-1343 .91


;


//Z


轴零点偏移量



float


C_Gyro =

< p>
-99.90


;


//


陀螺 仪零点偏移量



float


Z_Min =


-17873.76


;


//


最小极值



float


Z_Max =


151 86.91


;


//


最大极值

< p>


float


T_Z =

3


;


//Z


轴角度补偿时间常数< /p>



float


R_Z =

< p>
180


/


(


Z_Max - Z_Min


)


;


//Z

< p>
轴比例



float


R_Gyro =


0.081


;


//


陀螺仪比例



unsigned



long


T_Now =


0


;


//


系统当前时间





16.



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


(



devices...


)

< br>;


26.



accelg yro.


initialize


()


;


27.




// verify connection



28.




Serial


.


println


(



connections...


)


;


29.




Serial


.


println

< p>
(


accelgyro.


testConnect ion


()


?



:



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;


//


加速度计



角度


计算



( 读取值


-


偏移量)


*

< br>比例



单位:


°



38.



Angle_G


=


-


(


GYRO-C_Gyro


)


*R_Gyro;


//


陀螺仪采样



(采样值


-

< p>
偏移量)


*


比例



单位:


°/s



39.



Angle_AG = Angle_AG +


(((


Angle_Z-Angl e_AG


)


*


1


/T_Z


)


+Angle_G


)


*


0.005


;


/ /


滤波



40.



Angle_GG = Angle_GG + Angle_G*


0.005


;< /p>


//


陀螺


仪对


X


轴积分



得出角度。



41.





Serial


.


print

< p>
(


Angle_Z


)


;



42.



43.



44.



45.



46.



47.



48.



49.



50.



51.



Serial


.


print


(



)


;


< /p>


Serial


.


print


(


Angle_GG


)


;



Serial


.


print


(



)

< p>
;



Serial


.


print


(


Angle_AG< /p>


)


;



Serial


.


print


(



)


;


i=


0


;



}



GYRO = GYRO + gx;


i++;


}





代码


lo op


段中,我使用了一个


if


循环,采 集


20


次陀螺仪读数,进行平均。这样似乎影响


了数据采集,但是在波形中灵敏度似乎不受影响。



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




滤波中用到的


0.005

< p>
是参考中给出的。


本来准备用系统时间积分的,


但 是看滤出的波有模有


样的就没改了。



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




4.


如何绘制波形图



A.


绘制波形图一般用


excel

,吧串口调试工具读出是数据导入


excel


,选择全部数 据,单击


图表向导就可以了,


记住,



arduino


输出数据的时候不要用


“逗号”


分割,


打印一个


table< /p>


也就是把我上面的代码



ARDUINO


代码复制


打印



1.



2.



3.



4.



5.



6.



Serial


.


print

< p>
(


Angle_Z


)


;



Serial


.


print


(



)

< p>
;



Serial


.


print


(


Angle_GG< /p>


)


;



Serial


.


print


(



)


;



Serial


.


print

< br>(


Angle_AG


)


;



Serial


.


print


(



)

< p>
;



换成



ARDUINO


代码复制


打印



1.



2.



3.



4.



5.



6.



Serial


.


print

< p>
(


Angle_Z


)


;



Serial


.


print


(



)

< p>
;



Serial


.


print


(


Angle_GG< /p>


)


;



Serial


.


print


(



)


;



Serial


.


print

< br>(


Angle_AG


)


;



Serial


.


print


(



)

< p>
;


-


-


-


-


-


-


-


-



本文更新与2021-02-01 18:28,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/594431.html

MPU6050数据分析与滤波的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文