关于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);
因为程序写的很乱,所以就不把全部程序发上来了,需要的和我说下,我发给你。
希望高手帮我解决下这个问题,本人数学比较差 公式都是网上找的。。 回复【楼主位】ms80c51
我发给你。
-----------------------------------------------------------------------
求一个 mark 我也在用5883,发给我,一起研究下! 水平补偿的算法大家有吗,急求! 也在做5883,对补偿还是不太懂。学习一下。。 我也遇到了跟楼主一样的问题,请问楼主怎么解决的啊??? 哈哈刚刚稀里糊涂解决了 Y轴的角度取反就行了 我也想做一个电子罗盘,希望大侠能经我提供一下资料。谢谢了。。。我的邮箱385898186@qq.com 楼主上面的问题解决了吗,我也遇到了同样的问题,不知道你是如何解决的,我使用的公式是Xr=Xcosα+Ysinαsinβ+ Zcosβsin,Yr=Ycosβ- Zsin,就是当罗盘水平时即俯仰和横滚都为零时方位角才准确
http://www.amobbs.com/thread-5639795-1-1.html 谢谢分享,记号!
页:
[1]