ams OSRAM AS5047P 标称可抑制 homogenous 外部杂散磁场,但机器人关节非均匀外场会导致角度平滑带偏

首发于公众号「如是有为」 · 查看原文

ams OSRAM AS5047P 标称可抑制 homogenous 外部杂散磁场,但机器人关节非均匀外场会导致角度平滑带偏

磁编码器芯片 AS5047P Datasheet 里的一个单词,决定了磁场免疫算法什么时候开始“骗”你。

AS5047P 的英文 Datasheet 里有一句话,我每次读到都觉得不对味。

This sensor suppresses the influence of any homogenous external stray magnetic field.

注意到那个词了吗?

homogenous。

它把整个磁场免疫算法的前提条件,藏在一个谁都懒得细读的定语里。

均匀外场。方向固定。大小可以变,但方向的比例关系必须稳住。

这个前提在轴向安装、远离电机端部绕组、稳态运行的时候,确实可能成立。问题是,机器人关节里很少是这种工况。

离轴装、靠近绕组、急加速急减速,外场的方向和分布,都在同步出问题。

磁场免疫算法不是被外场打垮的。它是在自己最信任的假设崩了以后,还在认真执行一个已经不成立的数学分离。

这才是最可怕的失效模式。

算法没报错,角度没跳,输出平滑——但偏了。

01 算法做了什么,以及它偷偷假设了什么

把原理用一句话说清楚:磁场免疫算法在中心传感器周围对称布置了几颗辅助传感器,利用目标磁场在对称两点方向相反、外场在两点大体一致的特点,先把外场的 Z 分量算出来,再按比例反推出 X 和 Y 分量,最后从中心传感器读数里扣掉。

用向量表示就是:

B_center = B_target(α) + B_ext(t)

算法能成立,是因为它对外场做了一个关键假设:外场的方向向量保持常数,只有幅值随时间缓慢变化。

B_ext(t)=|B_ext(t)|·B̂_ext

B̂_ext = const

这就是 homogenous 的数学含义。

它并不是简单地表示“磁场均匀”,而是意味着在整个传感器阵列的空间范围内,外场可以近似看成同一个向量场。方向保持一致,各个采样点之间几乎没有空间梯度。

换句话说,外场更像一束平行光,照在整个芯片上。对于每一个辅助传感器来说,它们看到的是同一个外场,只是位置不同而已。

正因为如此,通过多颗传感器之间的空间差分——外场在对称两点近似相等、目标磁场在对称两点符号相反——算法才能把外场当作共模量提取出来,再从中心传感器的数据中扣除。

整个数学模型,实际上都建立在这个不起眼的定语上。

02 真正的问题:机器人关节里的磁场,从来都不是 homogeneous

真正的问题在于,机器人关节里的外场并不是一束平行光。

电机绕组通断、电流快速变化、磁钢边缘漏磁、定转子相对位置变化、钢结构磁导率变化,这些因素都会让磁场在几毫米范围内就发生明显变化。

对于辅助传感器来说,每一个位置看到的外场其实都不同:

B_ext,i = B_ext(r_i,t)

这里不仅幅值不同,方向也可能不同。

于是原本成立的假设:

B_ext(r1,t) ≈ B_ext(r2,t)

开始失效。

变成了:

B_ext(r1,t) ≠ B_ext(r2,t)

一旦如此,对称两点之间就不再只有目标磁场的差异。

算法做空间差分的时候,本来希望把目标磁场留下,把外场抵消掉;结果却把外场自身的空间梯度也一起混进了计算结果。

也就是说,它算出来的已经不是纯粹的外场,而是:

B̂_ext

这个估计值里面,同时包含了真实外场和空间梯度误差。

随后算法仍然会按照既定流程继续工作:

B_target = B_center - B̂_ext

问题就在这里。

由于估计出来的 B̂_ext 本身已经带着误差,最终被扣掉的,不只是外场。

连目标磁场的一部分,也被一起扣掉了。

03 最危险的地方,不是算法崩了,而是算法还在认真工作

很多人第一次接触这种失效,会以为系统应该出现磁场报警、角度跳变或者 CRC 错误。

实际上,往往什么都不会发生。

SPI 通信正常。

状态位正常。

角度连续。

波形平滑。

没有突然跳变,没有丢码,没有异常中断。

因为算法从头到尾都没有崩溃。

它只是一直在认真执行一个已经不成立的数学模型。

对于算法来说,它相信外场仍然满足 homogeneous 假设,于是继续完成外场估计、坐标分离和误差补偿。

每一步计算都没有错。

错的是整个模型已经脱离了实际工况。

这就是工程上所说的模型误差。

它不是噪声变大,不是 ADC 精度下降,也不是数字滤波不足,而是算法赖以成立的前提条件已经不存在了。

因此,输出不会出现剧烈异常,而会表现为一种更隐蔽、更危险的失效方式。

04 为什么这种误差最难发现

对于伺服控制来说,真正麻烦的并不是偶尔跳一下。

跳变容易发现。

报警容易定位。

通信异常也容易排查。

真正难的是这种情况:

角度始终连续,速度计算完全正常,控制器没有任何报警,所有诊断信息全部通过。

但是零位开始慢慢漂移。

整个运动范围内始终带着固定偏差,可能只有零点几度,也可能随着工况不断变化。

例如静止时误差只有 0.05°,电机大电流输出后变成 0.2°,连续运行升温后又变成 0.35°。

每一次测量都十分平滑。

每一次读取都完全可信。

唯一的问题,就是它一直偏着。

对于高精度机器人关节来说,这种偏差不会立即导致设备停机,却会直接影响力矩控制、重复定位精度和多轴标定一致性。

它比一次角度跳变更加危险。

因为跳变会提醒你系统出了问题,而模型误差只会让系统在“一切正常”的假象下持续输出错误的数据。

05 Datasheet 里真正值得读懂的,不是 suppress,而是 homogenous

很多人第一次读到这句话:

This sensor suppresses the influence of any homogenous external stray magnetic field.

注意力都会放在 suppresses 上。

于是理解成:

“这个芯片具有很强的抗磁场干扰能力。”

但真正决定这句话边界条件的,其实不是 suppresses,而是 homogenous。

它告诉你的并不是算法有多强,而是算法在什么条件下才成立。

一旦外场不再是 homogeneous,一旦空间梯度开始出现,一旦机器人关节里的漏磁、电机绕组、电流变化共同作用,算法面对的就不再是 Datasheet 假设中的那个世界。

它没有停止工作。

它没有报错。

它甚至没有降低输出质量。

它只是按照一个已经失效的数学假设,继续计算一个并不存在的“外场”,然后把这个错误估计值,从真正的目标磁场里扣掉。

所以,AS5047P 的磁场免疫算法并不是被外场打垮的。

它是在自己最信任的那个假设崩塌之后,依然忠实地执行了一套已经不再适用的数学分离。

而 homogenous,正是整个模型成立的边界。

也是 Datasheet 用一个不起眼的定语,悄悄告诉你的全部前提。

应作如是观
公众号「如是有为」二维码

关注公众号「如是有为」

微信扫一扫,新文章先在公众号发出。