OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7008|回复: 8

用51单片机写mpu6050的姿态角程序发现了问题 有没有人可以帮我一下

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
39
金钱
39
注册时间
2015-10-7
在线时间
3 小时
发表于 2015-10-7 22:45:07 | 显示全部楼层 |阅读模式
5金钱
#include"imu.h"
#include <math.H>
#define pi 3.14159265f                           
#define Kp 0.8f                        
#define Ki 0.001f                         
#define halfT 0.004f           
float idata q0=1,q1=0,q2=0,q3=0;   
float idata exInt=0,eyInt=0,ezInt=0;  
void dmp(float gx, float gy, float gz, float ax, float ay, float az,double *rx,double *ry,double *rz)   
{
  float idata norm;
  float idata vx, vy, vz;
  float idata ex, ey, ez;

  float idata q0q0 = q0*q0;
  float idata q0q1 = q0*q1;
  float idata q0q2 = q0*q2;
  float idata q0q3 = q0*q3;
  float idata q1q1 = q1*q1;
  float idata q1q2 = q1*q2;
  float idata q1q3 = q1*q3;
  float idata q2q2 = q2*q2;
  float idata q2q3 = q2*q3;
  float idata q3q3 = q3*q3;

  norm = sqrt(ax*ax + ay*ay + az*az);      
  ax = ax /norm;
  ay = ay / norm;
  az = az / norm;
           
  vx = 2*(q1q3 - q0q2);
  vy = 2*(q0q1 + q2q3);
  vz = q0q0 - q1q1 - q2q2 + q3q3 ;

  ex = (ay*vz - az*vy) ;                          
  ey = (az*vx - ax*vz) ;
  ez = (ax*vy - ay*vx) ;

  exInt = exInt + ex * Ki;  
  eyInt = eyInt + ey * Ki;
  ezInt = ezInt + ez * Ki;

  gx = gx + Kp*ex + exInt;  
  gy = gy + Kp*ey + eyInt;
  gz = gz + Kp*ez + ezInt;  
  
  q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
  q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;

  norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
  q0 = q0 / norm;
  q1 = q1 / norm;
  q2 = q2 / norm;
  q3 = q3 / norm;

  *rx=asin(2*(q0*q2-q1*q3 ))* 57.2957795f; // 俯仰
  *ry=asin(2*(q0*q1+q2*q3 ))* 57.2957795f; // 横滚
  *rz=atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1 -q2*q2-q3*q3) * 57.3;
}
imu(Angle_gx*0.0174533,Angle_gy*0.0174533,Angle_gz*0.0174533,Angle_ax,Angle_ay,Angle_az); 其中数据都是经过原始数据/LSB的。
然后发现了得到的数据不正常,因为得到的数据都是随着时间缓慢变化,不是跟随着芯片运动而变化的

最佳答案

查看完整内容[请看2#楼]

回复【7楼】烈酒和刀: --------------------------------- 12T的单片机,你跑浮点数没有死机就算你幸运了。用这个已经淘汰的、慢得比蜗牛还慢的不行的。你必须换速度快,特别是运算浮点数能力强的。STC15W4K48S4这个便宜,7块钱一块。最好是STM32F4。我最开始不懂,用89做,直接跪了。后来换了STC15W4K48S4系列,但是遇到了很多奇葩问题。有时候某寄存器某位写1了就直接不干活了。最后用的STM32F405RGT6.感觉非常不错,就是死贵。2 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-6-23
在线时间
15 小时
发表于 2015-10-7 22:45:08 | 显示全部楼层
回复【7楼】烈酒和刀:
---------------------------------
12T的单片机,你跑浮点数没有死机就算你幸运了。用这个已经淘汰的、慢得比蜗牛还慢的不行的。你必须换速度快,特别是运算浮点数能力强的。STC15W4K48S4这个便宜,7块钱一块。最好是STM32F4。我最开始不懂,用89做,直接跪了。后来换了STC15W4K48S4系列,但是遇到了很多奇葩问题。有时候某寄存器某位写1了就直接不干活了。最后用的STM32F405RGT6.感觉非常不错,就是死贵。22块钱涨到36块钱。
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2015-10-8 00:33:11 | 显示全部楼层
楼主的问题挺常见的,甚至我自己也遇到过.我本身使用的是DMP,所以对这段程序也一直不够理解.不过可以确定的是,数据缓慢的问题可以提高Kp的值,有人和我说这个值应该在2.0左右.你不妨试试.
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
39
金钱
39
注册时间
2015-10-7
在线时间
3 小时
 楼主| 发表于 2015-10-8 10:21:59 | 显示全部楼层
回复【2楼】弦子的弦:
---------------------------------
是不是因为我用的是51单片机的原因 速度太慢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-10-8 23:14:17 | 显示全部楼层
回复【3楼】烈酒和刀:
---------------------------------
有可能哦
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-6-23
在线时间
15 小时
发表于 2015-10-9 00:03:17 | 显示全部楼层
不知道你的51是哪个厂家的51。STC15W4K48S4系列有个开源的四轴,你可以去参考一下
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2015-10-9 01:02:34 | 显示全部楼层
回复【3楼】烈酒和刀:
---------------------------------
有可能...事实上用51单片机做四轴是比较麻烦的...
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
39
金钱
39
注册时间
2015-10-7
在线时间
3 小时
 楼主| 发表于 2015-10-9 15:04:08 | 显示全部楼层
回复【5楼】jsxh538:
---------------------------------
stc89c52....
回复

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
发表于 2016-1-13 17:00:53 | 显示全部楼层
烈酒和刀 发表于 2015-10-9 15:04
回复【5楼】jsxh538:
---------------------------------
stc89c52....

这芯片太古老了
最近爱上了stm32
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表