找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11619|回复: 23
收起左侧

stm32+hmc5883电子罗盘数据采集+磁偏角校正代码,小白一个,不懂请见谅

  [复制链接]
ID:198530 发表于 2018-4-22 22:51 | 显示全部楼层 |阅读模式
捕获.PNG 0.jpg

stm32的hmc5883校正代码分享:

  1. void calibrateMag(int * offsetX,int * offsetY,int * offsetZ,float * y_gain)  
  2. {  
  3.   short int x,y,z,i; //三轴数据
  4.   int xMax, xMin, yMax, yMin, zMax, zMin;  
  5.   //初始化  
  6.         Get_mag_ADC(&x,&y,&z);   
  7.   xMax=xMin=x;  
  8.   yMax=yMin=y;  
  9.   zMax=zMin=z;  
  10.   * offsetX =0;
  11.         * offsetY =0;
  12.         * offsetZ =0;  
  13.      
  14.   for( i=0;i<250;i++)  
  15.   {  
  16.          Get_mag_ADC(&x,&y,&z);
  17.     // 计算最大值与最小值  
  18.     // 计算传感器绕X,Y,Z轴旋转时的磁场强度最大值和最小值  
  19.     if (x > xMax)  
  20.       xMax = x;  
  21.     if (x < xMin )  
  22.       xMin = x;  
  23.     if(y > yMax )  
  24.       yMax = y;  
  25.     if(y < yMin )  
  26.       yMin = y;  
  27.     if(z > zMax )  
  28.       zMax = z;  
  29.     if(z < zMin )  
  30.       zMin = z;  
  31.    
  32.     delay_ms(100);  
  33.    
  34.     if(i%20 == 0)  
  35.     {  
  36.       printf("\n xMax = %d ",xMax);  
  37.                         printf("xMin = %d --",xMin);
  38.       printf(" yMax = %d ",yMax);  
  39.                         printf("yMin = %d \n",yMin);                        
  40.     }  
  41.   }
复制代码
主函数:
  1. int main(void)
  2. {         
  3.         //double angle;
  4.         delay_init();                     //延时函数初始化         
  5.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  6.         uart_init(115200);                 //串口初始化为115200
  7.          IIC_Init();
  8.         Init_HMC5883();
  9.         delay_ms(500);
  10.         calibrateMag(& offsetX,& offsetY,& offsetZ,& Y_Gain);
  11. //        usmart_init(72);
  12.         while(1)
  13.         {
  14. ///////////////////////////////////////////////////////////////////////////////

  15. //        a++;//a 溢出 : 32766,32767,-32768,-32767,-32766....
  16. //        a--;//a : 2,1,0,-1,-2,....
  17. //        short int :-32768<a<32767 占内存16位
  18. //        int : 占内存32位

  19. ///////////////////////////输出方式0////////////////////////////////////
  20.                 Get_mag_ADC(&x,&y,&z);
  21.                 angle=atan2((double)(y-offsetY)*Y_Gain,(double)(x-offsetX))*(180 / 3.14159265)+180;               
  22.                         //磁偏角矫正
  23.                         angle = angle - MagnetcDeclination + 180;
  24.                   if(angle < 0) angle += 360;
  25.                         else if(angle >360) angle -= 360;
  26.                                 
  27.                 printf("\n x  = %d y  = %d z  = %d   ",x,y,z);
  28.                 printf("水平角度= %.2f 增益 = %f.3\n",angle,Y_Gain);
  29.                 delay_ms(300);
  30. /////////////////////输出方式一/////////////////////////
  31. //                angle=  Get_Compass_Angle();
  32. //                delay_ms(300);
  33. //                x = BUF[0] << 8 | BUF[1];
  34. //                y = BUF[2] << 8 | BUF[3];
  35. //                z = BUF[4] << 8 | BUF[5];         
  36. //                        printf("\n x  = %d y  = %d z  = %d ",x,y,z);        
  37. //                        printf("角度1= %f \n",angle);        
  38. ////////////////////输出方式二/////////////////////////
  39. //                HMC5883_ReadXYZ(&x,&y,&z);
  40. //                angle=atan2((double)y,(double)x)*(180 / 3.14159265)+180;
  41. //                delay_ms(300);
  42. //                printf("\n x1 = %d y1 = %d z1 = %d ",x,y,z);                                       
  43. //                printf("角度2= %f \n",angle);
  44. //
  45. ///////////////////////////////////////////////////////
  46.         }
  47. }
复制代码

全部资料51hei下载地址:
HMC5883数据罗盘矫正.rar (363.06 KB, 下载次数: 256)


评分

参与人数 4黑币 +70 收起 理由
132456798 + 5
Sherlock007 + 5 赞一个!
的花朵 + 10 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:248705 发表于 2018-4-26 15:11 | 显示全部楼层
帮了大忙
回复

使用道具 举报

ID:319398 发表于 2018-4-30 15:31 | 显示全部楼层
赞啊,正好需要
回复

使用道具 举报

ID:451633 发表于 2018-12-30 12:57 | 显示全部楼层
为什么打印出来的值没有变化呢,还有其他小细节要注意的吗?
回复

使用道具 举报

ID:356713 发表于 2019-1-19 20:19 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:198530 发表于 2019-3-8 11:34 | 显示全部楼层
wind@ 发表于 2018-12-30 12:57
为什么打印出来的值没有变化呢,还有其他小细节要注意的吗?

上电后,传感器水平旋转360°采集数据,如果传感器不懂得话数据也不会有变化,就不能校正
回复

使用道具 举报

ID:364366 发表于 2019-4-7 16:56 | 显示全部楼层
为什么我打印出来的是乱码
回复

使用道具 举报

ID:198530 发表于 2019-4-11 09:59 | 显示全部楼层
呆瓜哟 发表于 2019-4-7 16:56
为什么我打印出来的是乱码

波特率115200看你设对没
回复

使用道具 举报

ID:364366 发表于 2019-4-24 20:48 | 显示全部楼层
king_zxt 发表于 2019-4-11 09:59
波特率115200看你设对没

可以了,老哥有没有用过集成6轴三维电子罗盘模块?
回复

使用道具 举报

ID:198530 发表于 2019-5-5 19:51 | 显示全部楼层
呆瓜哟 发表于 2019-4-24 20:48
可以了,老哥有没有用过集成6轴三维电子罗盘模块?

就是陀螺仪加电子罗盘咯,接触过,但是没用过,有些自带姿态结算库的,直接调用就可以得到角度和加速度了
回复

使用道具 举报

ID:182535 发表于 2019-5-5 23:53 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:549841 发表于 2019-5-29 07:54 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:455076 发表于 2019-6-17 19:05 | 显示全部楼层
串口是哪两个角
回复

使用道具 举报

ID:198530 发表于 2019-6-20 16:52 | 显示全部楼层

PA9,PA10
回复

使用道具 举报

ID:86777 发表于 2019-7-15 13:10 | 显示全部楼层
下载看看嘛
回复

使用道具 举报

ID:692114 发表于 2020-2-13 17:12 | 显示全部楼层
啊我输出的都是-1,角度是45度是咋回事啊哥
回复

使用道具 举报

ID:683358 发表于 2020-4-5 15:21 | 显示全部楼层

x  = -1 y  = -1 z  = -1   水平角度= nan 增益 = nan.3

x  = -1 y  = -1 z  = -1   水平角度= nan 增益 = nan.3

x  = -1 y  = -1 z  = -1   水平角度= nan 增益 = nan.3

x  = -1 y  = -1 z  = -1   水平角度= nan 增益 = nan.3

x  = -1 y  = -1 z  = -1   水平角度= nan 增益 = nan.3
请问这是什么情况?
回复

使用道具 举报

ID:700604 发表于 2020-4-7 16:08 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:700604 发表于 2020-4-7 16:08 | 显示全部楼层
谢谢分享正需要。
回复

使用道具 举报

ID:102688 发表于 2020-4-9 20:47 | 显示全部楼层
感谢分享,学习后、测试一下
回复

使用道具 举报

ID:366134 发表于 2020-4-27 21:44 | 显示全部楼层
绽放中的青春 发表于 2020-4-5 15:21
x  = -1 y  = -1 z  = -1   水平角度= nan 增益 = nan.3

x  = -1 y  = -1 z  = -1   水平角度= nan  ...

我也是这种情况,请问你解决了么?
回复

使用道具 举报

ID:198530 发表于 2021-5-8 16:36 | 显示全部楼层
liudechuan 发表于 2020-2-13 17:12
啊我输出的都是-1,角度是45度是咋回事啊哥

代码下载进去基本就能用,输出这个说明传感器数据没有正确读取,可能是你的接线或者传感器问题,仔细查找一下
回复

使用道具 举报

ID:198530 发表于 2021-5-8 16:37 | 显示全部楼层
绽放中的青春 发表于 2020-4-5 15:21
x  = -1 y  = -1 z  = -1   水平角度= nan 增益 = nan.3

x  = -1 y  = -1 z  = -1   水平角度= nan  ...

代码下载进去基本就能用,输出这个说明传感器数据没有正确读取,可能是你的接线或者传感器问题,仔细查找一下
回复

使用道具 举报

ID:198530 发表于 2021-5-8 16:38 | 显示全部楼层
pwlpwlpwl 发表于 2020-4-27 21:44
我也是这种情况,请问你解决了么?

代码下载进去基本就能用,输出这个说明传感器数据没有正确读取,可能是你的接线或者传感器问题,仔细查找一下
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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