搜索
bottom↓
回复: 30

HMC5883L 校正

[复制链接]

出0入0汤圆

发表于 2012-6-29 03:51:53 | 显示全部楼层 |阅读模式
本帖最后由 christec 于 2012-6-29 03:54 编辑

HMC5883L读取到的值不正确,

计算出来的角度和指南针的角度有偏差.   而且模块从0°转到180°后读取到的值才143°.(角度是从0~360度).  图中模块是水平放置的

水平的时候Z的值也不为0, 模块要斜到45°左右Z的值才是0.

请问这个怎么解决, 是模块硬伤, 还是通过校准来弄好?  校正的话要怎么做?

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2012-6-29 09:00:25 | 显示全部楼层
远离铁和镍之类磁性东西,检查工作台下,去掉手表...,再试试校准。

我在N34.E109附近,也是45°左右Z值为0,还没有想明白。你所处的经纬度多少?

出0入0汤圆

发表于 2012-6-29 09:56:10 | 显示全部楼层
利用地磁测量角度,必须先对磁数据校正的,关于校正的方法有很多研究的文章,但是算法都较复杂,你可以直接用霍尼韦尔公司的的磁校正的技术文档上的方法校正,简单

出0入0汤圆

发表于 2012-6-29 11:47:53 | 显示全部楼层
你的角度是怎么算出来的?

出0入0汤圆

发表于 2012-6-29 11:49:13 | 显示全部楼层
水平的时候Z的值也不为0, 模块要斜到45°左右Z的值才是0.

那是因为有磁倾角,我这里也有44度。

出0入0汤圆

 楼主| 发表于 2012-6-29 14:02:34 | 显示全部楼层
wjhhh 发表于 2012-6-29 09:00
远离铁和镍之类磁性东西,检查工作台下,去掉手表...,再试试校准。

我在N34.E109附近,也是45°左右Z值为 ...

N31.18°, E121.46°

出0入0汤圆

 楼主| 发表于 2012-6-29 14:54:25 | 显示全部楼层
wjhhh 发表于 2012-6-29 09:00
远离铁和镍之类磁性东西,检查工作台下,去掉手表...,再试试校准。

我在N34.E109附近,也是45°左右Z值为 ...

我的经纬度是 N31.18°, E121.46°

工作台是木头的钉子都少有, 手上什么也没带手表, 戒子都没带.

还是那种情况

模块转 了180度, 计数才增加143度, 分布不均匀, 这样的话 就不能使用了, 误差太大了

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2012-6-29 15:03:29 | 显示全部楼层
js200300953 发表于 2012-6-29 11:49
那是因为有磁倾角,我这里也有44度。

角度是arctan(y, x)算出来的


如果模块水平放置, 磁倾角会不会对算出来的角度产生影响?

出0入0汤圆

 楼主| 发表于 2012-6-29 15:17:26 | 显示全部楼层
caopeng32 发表于 2012-6-29 09:56
利用地磁测量角度,必须先对磁数据校正的,关于校正的方法有很多研究的文章,但是算法都较复杂,你可以直接 ...

请问下怎么教正, 我在文档上只看到"比例因数校准   SCALE FACTOR CALIBRATION" 请问是这个吗? 但这个说得不清不楚

出0入0汤圆

发表于 2012-6-29 20:20:34 | 显示全部楼层
很可能是x和y轴的偏移和比例不同,的确要校正。
这是针对我的芯片测出的校正系数,每个芯片都不同,可以参考一下。
  1. /*
  2. * 校正系数,把磁场强度校正到单位向量。 */
  3. /*
  4. * 比例系数,(1单位地磁场强度)/LSB。 */
  5. #define HMC5883L_GAIN_X 0.00175987
  6. #define HMC5883L_GAIN_Y 0.00176828
  7. #define HMC5883L_GAIN_Z 0.00209918

  8. /*
  9. * 漂移系数。单位:1单位地磁场强度。 */
  10. #define HMC5883L_OFFSET_X -0.639547
  11. #define HMC5883L_OFFSET_Y 0.138972
  12. #define HMC5883L_OFFSET_Z -0.908184
复制代码
我校正的方法是http://www.amobbs.com/thread-5482090-1-1.html
也可以试试这个简单的方法:
  • 旋转芯片,找出x和y的最大最小值x_max、x_min、y_max 、y_min。
  • 于是,x的偏移 = (x_max + x_min) / 2;
  • x的比例取1
  • y的偏移 = (y_max + y_min) / 2;
  • y的比例 = (x_max - x_min) / (y_max - y_min);
校正的时候先加“偏移”,再乘“比例”。
如果仅仅需要方向的话。也可以扩展到z轴。

出0入0汤圆

发表于 2012-6-29 21:43:25 | 显示全部楼层
我用的简单方法,阿莫论坛里介绍了许多,好几个公式都不一样,10楼的第一第四理解了,其他的昏昏然。反复试验,计算出的在角度x方向基本正确可用 (绕x轴俯仰<180度,指向正确,>180度也就是翻过来时指向错乱;试了一个高级一点的移动电话的指南针也是翻过来时胡乱指); 绕y 轴左右横滚则有约正负七、八度的误差 (那个移动电话左右横滚则依然正确)。 是否要加入计算不同地方"磁倾角"?

出0入0汤圆

 楼主| 发表于 2012-6-30 10:42:07 | 显示全部楼层
js200300953 发表于 2012-6-29 20:20
很可能是x和y轴的偏移和比例不同,的确要校正。
这是针对我的芯片测出的校正系数,每个芯片都不同,可以参 ...

你好 已经按你的旋转法校正了, 还是不行, 和原来变化不大

我是水平旋转2周采样, 分别得到x, y, z最大值然后按你的计算出得到

#define HMC5883L_OFFSET_X  -49.5f
#define HMC5883L_OFFSET_Y  -106.5f

#define HMC5883L_GAIN_X 1f
#define HMC5883L_GAIN_Y 1.048120301f

下面是我校正后的采样, Direction后面第一个数字是未校正算出来的, 第二上数字是校正后的角度.

-362        23        -346           Direction: 356.364624        12.006744
-359        21        -358           Direction: 356.652313        12.373138
-370        -4        -355           Direction: 0.619324                15.433929
-370        -7        -346           Direction: 1.083786                15.832199
-369        1        -349           Direction: 359.844788        14.800476
-364        12        -351           Direction: 358.111877        13.470428
-368        2        -345           Direction: 359.688660        14.699875
-372        4        -346           Direction: 359.384003        14.299088
-370        5        -346           Direction: 359.225830        14.230026
-368        10        -347           Direction: 358.443481        13.618057
-362        22        -343           Direction: 356.522278        12.146286
-356        41        -345           Direction: 353.430328        9.609100
-328        80        -349           Direction: 346.293091        4.207993
-298        122        -349           Direction: 337.736053        357.323395
-288        137        -341           Direction: 334.559875        354.589203
-270        148        -338           Direction: 331.270782        352.247437
-247        165        -339           Direction: 326.256470        348.316223
-226        177        -338           Direction: 321.932495        344.985992
-202        191        -337           Direction: 316.603333        340.600250
-158        205        -344           Direction: 307.622620        333.547791
-103        216        -348           Direction: 295.494263        323.035492
-98        216        -347           Direction: 294.404022        322.113708
-57        219        -348           Direction: 284.588959        312.088531
82        189        -354           Direction: 246.545807        249.401123
159        140        -365           Direction: 221.364029        197.778854
115        167        -364           Direction: 235.447845        224.071747
188        112        -371           Direction: 210.784149        182.383392
197        99        -374           Direction: 206.681274        176.949356
239        46        -368           Direction: 190.894424        161.498505
258        24        -363           Direction: 185.314545        157.475037
247        30        -357           Direction: 186.925079        157.903778
248        39        -357           Direction: 188.937042        160.383224
248        37        -355           Direction: 188.485580        159.848160
248        38        -358           Direction: 188.711441        160.115250
252        29        -358           Direction: 186.564682        158.142670
260        11        -359           Direction: 182.422607        154.568298
261        6        -364           Direction: 181.316910        153.524719
289        -83        -374           Direction: 163.976074        140.330872
291        -123        -372           Direction: 157.087158        135.113663
283        -161        -382           Direction: 150.364243        129.788239
283        -173        -384           Direction: 148.562241        128.557114
281        -175        -384           Direction: 148.086334        128.118561
271        -209        -396           Direction: 142.359940        123.815262
276        -202        -399           Direction: 143.800186        125.010834
270        -199        -394           Direction: 143.608398        124.552460
270        -203        -392           Direction: 143.062241        124.205124
270        -202        -393           Direction: 143.198059        124.291382
270        -203        -393           Direction: 143.062241        124.205124
273        -201        -394           Direction: 143.637115        124.739731
274        -210        -397           Direction: 142.532593        124.088356
282        -147        -392           Direction: 152.468018        131.187592
280        -172        -397           Direction: 148.438171        128.296371
275        -217        -389           Direction: 141.723328        123.626289
254        -260        -393           Direction: 134.331192        118.029182
226        -301        -397           Direction: 126.900322        112.452515
212        -319        -394           Direction: 123.607071        110.020203
156        -372        -400           Direction: 112.750954        101.988762
102        -402        -402           Direction: 104.237251        95.625732
48        -417        -402           Direction: 96.566269        89.843338
21        -422        -404           Direction: 92.848831        87.054672
-11        -430        -402           Direction: 88.534584        83.859100
-150        -424        -386           Direction: 70.517525        70.262230
-185        -398        -394           Direction: 65.069817        66.083801
-239        -375        -388           Direction: 57.489235        60.245049
-295        -312        -385           Direction: 46.604187        51.854401
-386        -135        -359           Direction: 19.276764        30.165939
-389        -27        -345           Direction: 3.970398                17.697678
-387        0        -339           Direction: 360.000061        14.344589
-359        -3        -357           Direction: 0.478729                15.692795
-367        0        -342           Direction: 360.000061        15.003021
-367        8        -344           Direction: 358.751312        13.921524
-372        -31        -354           Direction: 4.763580                18.876190
-412        -53        -313           Direction: 7.330261                19.912506
-355        33        -350           Direction: 354.689240        10.782761
-346        56        -344           Direction: 350.806458        7.622589
-334        78        -343           Direction: 346.855194        4.453812
-327        88        -338           Direction: 344.937866        2.948135
-316        106        -342           Direction: 341.456390        0.082092
-299        119        -337           Direction: 338.297852        357.847107
-299        118        -339           Direction: 338.463440        358.019196
-299        116        -349           Direction: 338.795807        358.363464
-292        110        -352           Direction: 339.358032        359.384613
-291        109        -356           Direction: 339.465576        359.559143
-294        108        -356           Direction: 339.829407        359.737823


校正以后分布不均匀的情况更加严重了, 我先把模块放到0度, 然后放置180度后计数才108度.

是不是我的模块有问题?

出0入0汤圆

 楼主| 发表于 2012-6-30 10:44:54 | 显示全部楼层
caopeng32 发表于 2012-6-29 09:56
利用地磁测量角度,必须先对磁数据校正的,关于校正的方法有很多研究的文章,但是算法都较复杂,你可以直接 ...

请问这个文档在哪儿下载?

出0入0汤圆

发表于 2012-6-30 11:35:07 | 显示全部楼层
christec 发表于 2012-6-30 10:42
你好 已经按你的旋转法校正了, 还是不行, 和原来变化不大

我是水平旋转2周采样, 分别得到x, y, z最大值 ...

哈~
我讲错了,不好意思。应该这样:
  • x的偏移 = - (x_max + x_min) / 2;
  • y的偏移 = - (y_max + y_min) / 2;
偏移要取相反数(这样才能抵消偏移嘛)。

出0入0汤圆

发表于 2012-6-30 16:52:19 | 显示全部楼层
我也正在玩,初步实验Y轴输出总是负数,会变化。把Y轴向上,用X轴和Z轴水平配合,没用上述校正,能获得基本正确的角度读数,0到360。
有少量误差,若用上述校正算法,应该有提升,稍后再试。
最想弄明白,为何Y轴这么反常,有没有坛友碰到过类似情况,或帮助分析一下,谢谢!

出0入0汤圆

 楼主| 发表于 2012-7-2 22:57:21 | 显示全部楼层
换了个模块,   校正X,Y轴后使用正常, 还是有大约5°~10°的偏差, 这个没办法了, 校正设备限制, 下次去买个水平台, 好好校正下.

接下来要用加速度传感器做修正了.

出0入0汤圆

 楼主| 发表于 2012-7-2 22:59:57 | 显示全部楼层
js200300953 发表于 2012-6-29 20:20
很可能是x和y轴的偏移和比例不同,的确要校正。
这是针对我的芯片测出的校正系数,每个芯片都不同,可以参 ...


请问z轴怎么校正, 让z轴在南北极线, 和铅垂线的平面内旋转然后采样取最大最小值吗?

出0入0汤圆

发表于 2012-7-3 09:20:13 | 显示全部楼层
本帖最后由 js200300953 于 2012-7-3 09:24 编辑
christec 发表于 2012-7-2 22:59
请问z轴怎么校正, 让z轴在南北极线, 和铅垂线的平面内旋转然后采样取最大最小值吗? ...

依我理解,用地磁场校正罗盘的实质是这样的:
  • 在不同方向测量地磁场,得到多组[x y z]。
  • 理想情况下,这些[x y z]应该在半径为|地磁场强度|的球面上。
  • 但由于偏移和比例误差,实际贴近的是一个椭球面。
  • 我们要做的就是确定校正系数,把这个椭球弄成圆球。

简单的校正的过程就是:
  • 在空间上旋转,找出最大最小的x、y、z。这些点可以认为是椭球面与坐标轴的交点。
  • 所以可以用-(max+min)/2计算各轴的偏移(注意负号)。相当于原点相对于椭球心的偏移。加上这个,就校正了偏移。
  • 因为只需要方向,可以令x轴的比例系数x_gain为1。
  • 然后y的比例系数y_gain = x_gain * (y_max-y_min)/(x_max-x_min);
  • z的比例系数类似,z_gain = x_gain * (z_max-z_min)/(x_max-x_min);
当然,通过x_gain的取值,可以把[x y z]的单位校正为1、T或高斯。

出0入0汤圆

发表于 2012-7-4 13:49:46 | 显示全部楼层
christec 发表于 2012-6-30 10:44
请问这个文档在哪儿下载?

详细的问题,可以参看这个网页http://www.sensorsmag.com/sensor ... t-iron-effects-6475

出0入0汤圆

发表于 2013-3-6 09:50:05 | 显示全部楼层
基础讲解的不错啊

出0入0汤圆

发表于 2013-3-6 18:21:49 | 显示全部楼层
christec 发表于 2012-6-29 14:54
我的经纬度是 N31.18°, E121.46°

工作台是木头的钉子都少有, 手上什么也没带手表, 戒子都没带.

  这个原因是因为磁力计如果平放读回的两个轴的数据组成的点画出来是一个椭圆,而且中心不在原点,这时你用atan函数算出的角度当然不准,如果想用atan函数需要把这个偏移的椭圆校正成中心在原点的圆。最简单的方法就是减去偏移量(最大值加最小值除以二),然后一个轴的最大值除以另一个轴的最大值得到一个系数,把这个系数乘到前面那个轴上,就校正成圆了。我之前是把数据读回来用matlab拟合的。
  这是二维平面的情况,推广到三维空间就是要把一个偏移的椭球校正成中心在原点的球体。

出0入0汤圆

发表于 2013-5-3 14:00:27 | 显示全部楼层
js200300953 发表于 2012-6-29 20:20
很可能是x和y轴的偏移和比例不同,的确要校正。
这是针对我的芯片测出的校正系数,每个芯片都不同,可以参 ...

请问Z轴校准时是水平旋转还是翻滚校准?

出0入0汤圆

发表于 2013-5-3 14:45:11 | 显示全部楼层
js200300953 发表于 2012-7-3 09:20
依我理解,用地磁场校正罗盘的实质是这样的:
  • 在不同方向测量地磁场,得到多组[x y z]。

  • 您好,请问HMC5883L的Z轴校准也是在水平旋转吗?还是说饶铅垂线校准?

    出0入0汤圆

    发表于 2013-5-3 16:02:27 | 显示全部楼层
    蕾蕾 发表于 2013-5-3 14:45
    您好,请问HMC5883L的Z轴校准也是在水平旋转吗?还是说饶铅垂线校准?

    水平是重力的概念,跟罗盘没关系。
    某点的磁场是一个空间向量,要校正X轴,就把磁场向量指向X轴的正负方向,校正Z轴,就把磁场向量指向Z轴的正负方向。

    出0入0汤圆

    发表于 2013-8-21 18:12:58 | 显示全部楼层
    js200300953 发表于 2012-7-3 09:20
    依我理解,用地磁场校正罗盘的实质是这样的:
  • 在不同方向测量地磁场,得到多组[x y z]。

  • 怎么得到X Y Z的最大最小值啊?

    出0入0汤圆

    发表于 2014-3-30 17:01:27 | 显示全部楼层
    christec 发表于 2012-6-30 10:44
    请问这个文档在哪儿下载?

    去官网搜,这里就是
    http://memsense.com/support

    出0入0汤圆

    发表于 2014-9-30 23:30:23 | 显示全部楼层
    学习一下~想搞一下这款芯片!

    出0入0汤圆

    发表于 2014-10-7 12:16:33 | 显示全部楼层
    这个芯片能做什么?

    出0入0汤圆

    发表于 2015-5-10 20:09:00 | 显示全部楼层
    mark一个

    出10入113汤圆

    发表于 2016-3-14 19:24:12 | 显示全部楼层
    标记一下

    出0入0汤圆

    发表于 2016-3-17 16:58:13 | 显示全部楼层
    自己草稿纸上画一下,一个椭圆或者一个椭球如何校正成一个圆或者一个球,就知道了。
    用matlab校准,直接生成X Y Z 偏移量和轴长
    拿着磁力计做8字绕,得到几百组数据,最后用软件拟合椭圆。知道了椭圆的各轴长度,就能算出比例值,也知道椭圆圆心,就能算出偏移量。

    本帖子中包含更多资源

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

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

    本版积分规则

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

    GMT+8, 2024-4-25 19:07

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

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