分享我的MPU6050+卡尔曼+一阶互补+二阶互补滤波

2019-07-21 06:32发布

本帖最后由 wszdxmh 于 2016-8-23 15:12 编辑

不说,上图
X-Kalman.png
X-Kalman滤波
Y-Kalman.png
Y-Kalman滤波
Z-Kalman.png
Z-Kalman滤波,这个滤得不是很好。
X-Thr.png
X轴三种滤波对比图
Big.png
放大图
一阶互补跟随快,但是抗干扰也会差一点,其他两个要等几个周期才会跟随比较好,应该是要更新参数。
上代码。
STM32F103VModel.zip (409.82 KB, 下载次数: 5987) 2016-7-22 09:53 上传 点击文件名下载附件
滤波代码

匿名上位机
ANO_TC匿名科创地面站v4.06.rar (13.66 MB, 下载次数: 17406) 2016-7-22 10:17 上传 点击文件名下载附件
匿名地面站V4.0

UCOSIII移植版
STM32F103C8T6Model-UCOSIII.zip (1.65 MB, 下载次数: 7163) 2016-8-23 15:11 上传 点击文件名下载附件
UCOSIII版


现在研究PID算法,有空再更。








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
48条回答
华丽与creazy
2019-07-27 19:19
wszdxmh 发表于 2016-8-9 20:00
http://www.openedv.com/forum.php?mod=viewthread&tid=79275&page=1#pid459593
目测你是移植了一个别人 ...

我发现我的这两行代码跟你的不同,我的是
MPU6050_Real_Data.Accel_X = -(float)(MPU6050_Raw_Data.Accel_X)/8192.0;
MPU6050_Real_Data.Gyro_Y=-(float)(MPU6050_Raw_Data.Gyro_Y - gyroADC_Y_offset)/65.5;
你的是        if (Accel_x<32764) x = Accel_x / 16384;
        else              x = 1 - (Accel_x - 49152) / 16384;
        if (Gyro_y<32768) Gyro_y = -(Gyro_y / 16.4);//16.4 LSB/(deg/s)
       
        if (Gyro_y>32768) Gyro_y = +(65535 - Gyro_y) / 16.4;
是因为这两行代码的原因吗?我们除的参数不同

一周热门 更多>