搜索
bottom↓
回复: 0

有偿帮忙解决HMC5883数据不准问题

[复制链接]

出200入429汤圆

发表于 2019-7-25 21:43:01 | 显示全部楼层 |阅读模式
各位大神!
最近小弟在做一个测量空间方位角的设备,用的是HMC5883芯片,ADXL345
目前的状况:在校准之后,水平方位的方位角还算误差不大,基本误差在5度之内,但是设备产生俯仰角和横滚角时,方位角基本就不对了
我目前用的算法就是网上可以搜索到的算法,但是不知道是哪里出问题了!



下面是我的方位角处理代码:

  1. void Read_HMC5883_data()
  2. {
  3.                uint8_t i;
  4.                short X_sum[10],Y_sum[10],Z_sum[10];
  5.                for(i=0;i<10;i++)
  6.                {
  7.                         Multiple_read_HMC5883();
  8.                         X=((BUF[0] << 8) | BUF[1]); //Combine MSB and LSB of X Data output register
  9.                         Z=((BUF[2] << 8) | BUF[3]); //Combine MSB and LSB of Z Data output register
  10.                         Y=((BUF[4] << 8) | BUF[5]); //Combine MSB and LSB of Y Data output register
  11.                          X_sum[i]=X;
  12.                          Y_sum[i]=Y;
  13.                          Z_sum[i]=Z;
  14.                  }
  15.                 X=Val_Filter(X_sum,10,2)-Xoffset;
  16.                 Y=Val_Filter(Y_sum,10,2)-Yoffset;
  17.                 Z=Val_Filter(Z_sum,10,2)-Zoffset;
  18.                  
  19.                cos_x=cos((double)((angx-900)/10.0*3.14159265/180.0));
  20.                cos_y=cos((double)(-angy/10.0*3.14159265/180.0));
  21.                sin_x=sin((double)((angx-900)/10.0*3.14159265/180.0));
  22.                sin_y=sin((double)(-angy/10.0*3.14159265/180.0));
  23.           
  24.                 atan2_x=X*cos_x+Y*sin_y*sin_x-Z*cos_y*sin_x;
  25.                atan2_y=Y*cos_y+Z*sin_y;
  26.                  
  27.                  if(atan2_x<0)
  28.                  Angle_X=180-(atan2(((double)atan2_y*K),(double)atan2_x)* (180.0 / 3.14159265));
  29.                  
  30.                  if((atan2_x>0)&&(atan2_y<0))          
  31.                  Angle_X=-(atan2(((double)atan2_y*K),(double)atan2_x)* (180.0 / 3.14159265));
  32.                  
  33.                  if((atan2_x>0)&&(atan2_y>0))          
  34.                  Angle_X=360-(atan2(((double)atan2_y*K),(double)atan2_x)* (180.0 / 3.14159265));
  35.                  
  36.                  if((atan2_x==0)&&(atan2_y<0))          
  37.                  Angle_X=90;
  38.                  
  39.                  if((atan2_x==0)&&(atan2_y>0))          
  40.                  Angle_X=270;
  41. }
复制代码


对这块熟悉的可以私信我,有偿解决,非常感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 15:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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