4、磁力计原理:地磁场与航向角、磁力计工作原理(霍尔效应、磁阻效应)、硬磁与软磁干扰、磁力计在飞控中的作用(磁航向校准、辅助导航)

各位同学,欢迎来到磁力计这一章。

说实话,在飞控传感器里,磁力计是最容易被忽视,但也是最容易让人翻车的一个。我见过不少飞手,飞机在天上突然画圈,最后查出来是磁力计没校准好。嗯,咱们今天就把这个“小东西”彻底讲透。

4.1 地磁场与航向角

先说说地磁场。说白了,地球就是一个大磁铁。它的磁感线从南极附近出来,进入北极附近。我们平时用的指南针,就是顺着这个磁场线指北的。

但这里有个坑——地磁北极和地理北极不是同一个点。地理北极是地球自转轴穿过的点,而地磁北极在加拿大附近,离地理北极大概有1000多公里。这个偏差叫“磁偏角”。

我在做第一版飞控时,直接拿磁力计读数当真北用,结果飞机总是偏航。后来一查,当地磁偏角有6度多,难怪飞不直。

航向角计算核心:

磁力计输出的是X、Y、Z三个轴上的磁场分量。水平放置时,航向角ψ = atan2(Y, X)。但实际飞行中,飞机有俯仰和横滚,所以要先做倾斜补偿。

倾斜补偿的公式其实不复杂:

// 假设已经得到经过校准的磁力计数据 mx, my, mz
// 以及IMU解算出的俯仰角θ和横滚角φ

// 第一步:将磁力计数据旋转到水平坐标系
float mx_h = mx * cos(θ) + my * sin(φ) * sin(θ) - mz * cos(φ) * sin(θ);
float my_h = my * cos(φ) + mz * sin(φ);

// 第二步:计算航向角
float heading = atan2(my_h, mx_h);

// 第三步:加上磁偏角(根据当地经纬度查表)
heading += declination;

你想想看,如果不做倾斜补偿,飞机一倾斜,航向角就乱跳。我遇到过有人把磁力计直接贴在机臂上,一推油门电机磁场干扰,航向直接漂了30度。嗯,这是典型的硬磁干扰,后面会细说。

4.2 磁力计工作原理

磁力计怎么测磁场的?市面上主流的有两种原理:霍尔效应和磁阻效应。

4.2.1 霍尔效应

霍尔效应很简单:一块半导体通上电流,再外加一个垂直磁场,载流子就会偏转,在半导体两侧产生电压。这个电压大小正比于磁场强度。

霍尔传感器便宜、耐用,但灵敏度一般。我早期做玩具飞控时用过,勉强能用,但精度不够,尤其在高纬度地区,地磁场本来就弱,霍尔传感器输出信号小得可怜。

4.2.2 磁阻效应

磁阻效应就高级多了。某些材料(比如坡莫合金)的电阻会随外加磁场方向变化。你想想看,磁场方向一变,电阻就变,测电阻就能反推磁场。

现在飞控里用的主流磁力计,比如HMC5883L、IST8310、AK8963,都是基于磁阻效应的。它们的灵敏度比霍尔传感器高一个数量级,功耗也低。

我个人习惯:选磁力计先看分辨率。地磁场强度大约在0.25-0.65高斯之间,你需要至少能分辨0.01高斯的传感器。HMC5883L能做到0.005高斯,够用。IST8310更好,0.003高斯,但贵一些。

4.3 硬磁与软磁干扰

这是磁力计最头疼的问题。我敢说,90%的磁力计故障都是干扰没处理好。

4.3.1 硬磁干扰

硬磁干扰来自永磁体。比如扬声器、电机磁钢、甚至螺丝刀。这些干扰是固定的,不会随飞机姿态变化而变化(但会随飞机位置变化)。

怎么处理?校准!

硬磁干扰在磁力计输出上表现为一个固定的偏移量。你让飞机在空中转几圈,采集所有方向的磁力计数据,这些数据会落在一个球面上。球心偏离原点的距离,就是硬磁干扰。

// 硬磁校准的简化思路
// 采集N组数据,求每个轴的平均值
float offset_x = sum(mx) / N;
float offset_y = sum(my) / N;
float offset_z = sum(mz) / N;

// 校准后的数据
float mx_cal = mx - offset_x;
float my_cal = my - offset_y;
float mz_cal = mz - offset_z;

我曾经踩过的坑:有一次校准完磁力计,发现航向还是不准。查了半天,发现是机架上有一颗螺丝被磁化了。那颗螺丝离磁力计只有3厘米,产生的干扰比地磁场还大。后来我把所有螺丝都换成无磁不锈钢的,问题解决。

4.3.2 软磁干扰

软磁干扰就复杂了。它来自铁磁性材料(比如钢、铁),这些材料本身不是永磁体,但会被地磁场磁化,然后反过来影响磁力计。

软磁干扰的特点是:它会改变磁力计输出的比例关系。比如本来X轴和Y轴的灵敏度是一样的,但软磁干扰会让一个轴变“胖”,一个轴变“瘦”。

校准软磁干扰需要做椭球拟合。采集的数据点不再落在一个球面上,而是一个椭球。你需要解算出椭球的三个轴长,然后做缩放补偿。

避坑指南:

  • 硬磁干扰:做偏移校准(球心拟合)
  • 软磁干扰:做比例校准(椭球拟合)
  • 两者同时存在:先做硬磁校准,再做软磁校准
  • 校准环境:远离大型金属物体,最好在室外空旷处

4.4 磁力计在飞控中的作用

磁力计在飞控里主要有两个作用:磁航向校准和辅助导航。

4.4.1 磁航向校准

飞控里的航向角通常来自IMU的陀螺仪积分。但陀螺仪有零偏,积分久了会漂。磁力计就像一把“尺子”,每隔一段时间把陀螺仪的航向拉回来。

具体做法是:用磁力计算出一个绝对航向,然后用卡尔曼滤波或互补滤波,把这个绝对航向和陀螺仪的积分航向融合起来。

// 互补滤波的简化实现
float heading_mag = atan2(my_h, mx_h);  // 磁力计航向
float heading_gyro = heading_prev + gyro_z * dt;  // 陀螺仪积分航向

// 融合
float heading_fused = 0.98 * heading_gyro + 0.02 * heading_mag;

这个0.98和0.02的比例是我调试出来的经验值。比例太大,陀螺仪漂移压不住;比例太小,磁力计的噪声会引入航向抖动。你想想看,磁力计在室内受钢筋干扰,噪声能到5度以上,所以比例不能太大。

4.4.2 辅助导航

磁力计还能辅助导航?是的,但仅限于特定场景。

比如在GPS信号弱的地方(隧道、室内),磁力计可以提供航向信息,配合光流或气压计,实现短时间的自主导航。虽然精度不高,但至少不会让飞机乱飞。

我做过一个项目,在室内用磁力计做航向参考,配合超声波定高,飞机能在走廊里飞个来回。当然,前提是走廊里没有大铁门——有一次飞机经过消防门,磁力计直接跳了20度,差点撞墙。

我的建议:磁力计辅助导航只能作为“备胎”。真正可靠的导航还是靠GPS+IMU融合。磁力计的作用是:在GPS失效的瞬间,提供一个相对稳定的航向参考,给飞控争取几秒钟的应急时间。

好了,磁力计的原理和选型就讲到这里。记住一句话:磁力计是个好工具,但也是个“娇气”的传感器。校准做不好,一切白搭。下次你看到飞机在天上画圈,先问问自己:磁力计校准了吗?


公众号:蓝海资料掘金营,微信deep3321