ms80c51 发表于 2012-1-17 17:27:02

关于5883电子罗盘水平补偿的问题

当沿着X轴倾斜的时候,罗盘角度变化很小(不补偿的时候变化大),但是沿着Y轴倾斜的时候,水平补偿似乎一点没有作用。
主程序如下:
    Init_HMC5883();
    Multiple_read_HMC5883();
    x=BUF << 8 | BUF;
    z=BUF << 8 | BUF;
    y=BUF << 8 | BUF;
    angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180;
    Init_MMA8452();                //初始化MMA8452
    Multiple_read_MMA8452();       //连续读出数据,存储在BUF中
    dis_data=(BUF<<8)|BUF;//合成数据   
    dis_data>>=4;
    xx=(float)dis_data;
    dis_data=(BUF<<8)|BUF;//合成数据   
    dis_data>>=4;
    yy=(float)dis_data;
    dis_data=(BUF<<8)|BUF;//合成数据   
    dis_data>>=4;
    zz=(float)dis_data;
    ztemp=atan(sqrt(xx*xx+yy*yy)/zz);
    ztemp=ztemp*180/3.14;
    ytemp=atan(yy/sqrt(xx*xx+zz*zz));
    ytemp=ytemp*180/3.14;
    xtemp=atan(xx/sqrt(yy*yy+zz*zz));
    xtemp=xtemp*180/3.14;
   
   ctpx=cos((float)(xtemp*3.14/180));
   stpx=sin((float)(xtemp*3.14/180));
   ctpy=cos((float)(ytemp*3.14/180));
   stpy=sin((float)(ytemp*3.14/180));

   xout=((float)x*ctpx+(float)y*stpy*stpx-(float)z*ctpy*stpx);
   yout=((float)y*ctpy+(float)z*stpy);
   anglebc= atan2(yout,xout) * (180 / 3.14159265) + 180;
   
    Delayms(100);   


因为程序写的很乱,所以就不把全部程序发上来了,需要的和我说下,我发给你。

希望高手帮我解决下这个问题,本人数学比较差   公式都是网上找的。。

renpeng009 发表于 2012-1-17 18:32:32

回复【楼主位】ms80c51
我发给你。
-----------------------------------------------------------------------
求一个

wszyjsw2 发表于 2012-1-17 19:48:11

mark

zhaiyingxin 发表于 2012-1-18 16:06:48

我也在用5883,发给我,一起研究下!

zgu489 发表于 2012-3-27 13:01:10

水平补偿的算法大家有吗,急求!

365026266 发表于 2012-4-9 16:23:27

也在做5883,对补偿还是不太懂。学习一下。。

清风阙月 发表于 2012-11-17 18:36:32

我也遇到了跟楼主一样的问题,请问楼主怎么解决的啊???

清风阙月 发表于 2012-11-17 18:44:27

哈哈刚刚稀里糊涂解决了   Y轴的角度取反就行了

Rookie_huang 发表于 2013-10-2 09:04:17

我也想做一个电子罗盘,希望大侠能经我提供一下资料。谢谢了。。。我的邮箱385898186@qq.com

陶新成 发表于 2015-12-17 13:04:55

楼主上面的问题解决了吗,我也遇到了同样的问题,不知道你是如何解决的,我使用的公式是Xr=Xcosα+Ysinαsinβ+ Zcosβsin,Yr=Ycosβ- Zsin,就是当罗盘水平时即俯仰和横滚都为零时方位角才准确
http://www.amobbs.com/thread-5639795-1-1.html

wtiechen1969 发表于 2017-2-17 19:38:58

谢谢分享,记号!
页: [1]
查看完整版本: 关于5883电子罗盘水平补偿的问题