MLX90382出厂默认关掉自校准、16个线性化点全是0:拿手册±0.5°做选型对比,第一行就错了
首发于公众号「如是有为」 · 查看原文

2024年12月6日中午12点27分05秒,一位同事在内部项目群里丢了个文件:MLX90382-Datasheet-Melexis.pdf。
39秒后,12点27分44秒,他又补了一句:
melexis进军BLDC电机领域,在轴离轴磁场免疫,16点校准,赶紧搞
39秒,也就够扫一眼手册第一页的 Features 栏。上面确实写着这几条:360° Stray Field Immunity up to 4 kA/m(360°杂散磁场抗扰度,最高4 kA/m)、Programmable Linear Transfer Characteristic with up to 16 points(可编程线性传输特性,最多16个点)、On-Chip Self-Calibration for End of Line and In-Operation(片内自校准,覆盖产线末端标定和运行中)。
一年半后,这颗芯片2026年5月在Mouser上有现货了。我把手册从头翻到尾,翻到第64页那张寄存器默认值表,愣住了。
愣住的原因很简单:这些默认值要是真的,那所有拿着 Features 栏做选型对比的表,第一行就已经错了——包括我们自己给客户的那种。
那16个校准点,出厂时全是0
手册第64、65页把16点线性化的寄存器一个个列了出来:PEQ00[7:0] 对应 0/16×360度,PEQ01[15:8] 对应 1/16×360度,一路排到 PEQ15。每个点是个8位有符号数,中间线性插值。
每一行的默认值那一列,写的都是 0。
前面还有个总开关 PEQ_GAIN[2:0],默认值也是 0。
也就是说,MLX90382焊上板子、不做任何配置,这位同事当时一眼看中的"16点校准",16个点全是零——这条曲线就是条平直线,等于没校准。
再往下翻到第66页,DE_DSP_RMM[1:0],默认值 3。
DE 就是 disable。手册解释这两个位:bit[0]置1关灵敏度自校准,bit[1]置1关正交度自校准。默认值3,二进制是 11。
两位全是1。首页 Features 栏里吹的那条 On-Chip Self-Calibration,出厂就是两路全关。
要打开它,得自己动手写一次:手册第21页原文,Self-calibration is enabled by setting DE_DSP_RMM[1:0] = 0(把 DE_DSP_RMM[1:0] 设成0才算开启)。
手册第15页那行小字,才是整份文档最重要的一句
翻到精度章节,MLX90382 在标称性能条件下的本征线性度误差是这样的:
XY模式(SENSING_MODE=0)——±0.5度。XZ / YZ模式——±1.0度。角度噪声RMS 0.025度。
开了杂散场免疫模式(用磁场梯度算角度,不用磁通密度),XY变成±0.7度。要是掉进"受限性能条件"那一档(温度飙到150度、磁场强度更低),XY变±1.0度,杂散场免疫模式下±1.4度。
一颗2025年发布的16位车规磁编码器,本征线性度±0.5度。很多人一看这数字,第一反应:这不行啊。
但这一节开头有行小字,压在表格上面:
Unless otherwise specified, all values are valid before EoL calibration.
(除非另有说明,所有数值都是产线末端标定前的有效值。)
所有这些数字,都是产线末端标定之前的裸机数。
手册第14页说得更明白:本征线性度误差假设的是理想磁场,只算IC内部的失调、灵敏度失配和正交度误差;一旦装进传感器模组,带上机械和磁路公差,整体输出的INL还会更大——然后补一句,这误差能靠I/Q失配校准加16点线性化压下去,“once properly calibrated, this error is not the critical factor in most applications”(一旦正确标定,这项误差在多数应用中就不是关键因素)。
Melexis这套逻辑挺完整:先印一个难看的裸机数,同时给你一整套压它的工具,最后告诉你压完之后这个数不是主要矛盾。
问题出在读的人身上。选型表一列写"竞品A:±0.5°",下一列写"我们:±0.01°"——一个标定前,一个标定后,放一列比,第一行就错了。

自校准的收敛单位不是毫秒,是"转了几个电周期"
我原来对这颗芯片有个印象,而且这个印象在我们内部传过一阵:MLX90382有"上电自校准",上电初始化的时候读一下磁环的谐波特征,用片内EEPROM的参数把前几帧角度修一下。
我把74页手册全文搜了一遍——没这功能。
手册里的 self-calibration 是另一回事。第21页原文:它在运动中测量并跟踪I/Q信号的相对灵敏度和正交度,跟踪值能从 RMM_AS_QQ[15:0] 和 RMM_AS_IQ[15:0] 读出来。它的定位是 In-Operation drift compensation(运行中漂移补偿)——一直在补温度、老化、机械公差带来的漂移。
关键就这一句:
The compensation of the 2nd harmonic in the angular signal converges to its optimal result after several electrical rotations. (角度信号中二次谐波的补偿,会在转过几个电周期后收敛到最优结果。)
收敛的单位不是毫秒,是电周期。
这个差别很容易被忽略。手册第11页给的 System Start-up Time 是1.6 ms——芯片1.6毫秒就起来了,数字挺漂亮。但自校准得"转几个电周期"才收敛,轴不转的时候,它一个电周期都攒不到。
所以上电之后先要读一个绝对位置、还没开始动的场合,自校准帮不上忙。它补的是你已经转起来之后的漂移,不是你上电那一刻的不确定。
顺便说一句,这也是为什么16点线性化必须单独做:手册第21页写明,角度误差曲线得在准静态旋转下测。产线上得留个低速转一圈的工位,这事儿自校准替代不了。
它压的是二次谐波,偏心那一次谐波它不管
手册第21页那句话还有后半截,比前半截更狠:
…leaving only a residual 1st harmonic. (……只留下残余的一次谐波。)
自校准收敛之后,二次谐波被压掉了,留下的是一次谐波。
而Figure 10那个例子的条件写得明明白白:轴端安装、横向位移1mm、倾斜1度、钕铁硼磁铁直径12mm高6mm。
横向位移和倾斜,产生的正是一次谐波。换句话说,自校准治的是I/Q通道自己的灵敏度失配和正交度失配,治不了你装歪了。
这个分工其实挺清楚:二次谐波来自sin/cos两路不等幅或不正交,是电路问题,芯片自己能看见、能修(这就是 arctan二次谐波误差 那条链);一次谐波来自磁铁和轴的相对位置,是装配问题,芯片只能靠16点线性化去描形状,描完了也只对那一次装配管用。
多极对方案里这事儿更要命,偏心误差会被极对数放大,见 多极对偏心误差的电角度放大。
我们自己复现过一次:±0.059°,人家宣称0.015°
2025年8月,我们买了迈来芯的7/8极对游标磁环回来,照着它公开的线性算法复现了一遍——这是它的游标磁环产品线,跟MLX90382不是同一颗芯片,但校准逻辑同源。
实测结果记在 角度校准算法实测汇总 里:
256点校准——±0.059度。512点校准(加大滤波深度和校准时间)——±0.03度。
对方对外宣称,校准完能做到0.015度。宣传材料里没说怎么校准的。
另一位同事当时在群里的原话是:“我觉得宣传最高纪录可信度不高。"
现在把手册摊开看,“没说怎么校准"这半句总算补上了:EoL标定、16点线性化,外加把默认关着的自校准打开。0.015度和±0.5度之间隔的不是芯片本身,是一条产线。
这也是我们复现出这两个数、跟对方公开算法水平基本持平的原因——我们复现的是算法,不是它的产线。
上电确实会读到不可信的角度,但根因常常不是AGC
回到开头那张对比表的逻辑——“上电就有准确角度"这话,也得拆开看才不会踩坑。这事儿本身是真的,我们手上也有硬数据,只不过根因跟自校准没关系。
某AMR客户那份 上下电跳点分析报告,样本11颗样品、26次上下电、2040个独立上电采样点:
4.5%的上电会触发跳点(91/2040)。单路增益阶跃±7~20%,正常温漂的gain变化却小于0.3%——差了一到两个数量级。
根因是斩波稳零PGA(靠斩波技术消自身零点漂移的可编程增益放大器)在上电瞬间闩锁进了chop频率的极限环振荡——示波器上看,PGA模拟输出会出现100~300mV的Vpp振荡,经模数转换平均之后,数字端表现为一个稳定的错误码。
三个细节值得单独拎出来:
跳点在0~350度全角度均匀出现,没有固定触发角度——所以你按角度去排查,永远排查不到。
它只影响单路(仅X路18次、仅Y路68次、双路5次)。共用LDO或ADC基准出问题,会让两路一起变;现在只单路变,问题就锁定在每通道独立的信号链上。
稳态仿真复现不出来,因为它是上电瞬态的概率性闩锁。
对应的改版方案是分级上电时序,见 KTM5200上下电角度跳变与PGA改版。
这里得说一句:AGC回路上电收敛要十几到几十毫秒的说法(见 自动增益控制AGC),是按一阶RC模型
做的量级估算,截止频率是假设值,我们没有对应的实测。真正拿到实测数字的是上面那条PGA闩锁的链路,两者别混一起。
顺带说,MLX90382的AGC也不是把幅度拉满:手册第18页写,它把I/Q峰值幅度控制在ADC满量程的50%~60%,总增益范围10dB到29dB,当前增益能从 AGC_GAIN[5:0] 读出来,实测幅度在 AGC_AMP[12:0],上下限报警阈值是 DIAG_AGC_THD_LO/HI。诊断口是开的——这一点值得学。
“能通信"不等于"能信位置”
我们自己的手册在这件事上有个缺口,说出来不好看,但不说以后一直吃亏。
KTH7823、KTH7801、KTH7816的手册里只有一个 Startup Time,值是1ms。KTM5800、KTM5900是23ms。除此之外,没有"上电到第一个可信角度"这个字段,没有上电时序图。
真实情况是什么样?KTM5800上电启动与首帧有效性 这份内部分析写得很清楚:
上电后23ms内,芯片还在把MTP(片内非易失的校准参数区)里的数值搬进工作寄存器,但SPI照样能读到角度——只是那个角度还没经过完整补偿。主机要是把第一帧当有效位置,错误会一路传下去,而且没有任何报警。
正确做法不是延时23ms就开干,而是轮询 TOP.SSTATE 直到读回15。23ms是典型值,不是保证的最大值,温度、VDDMTP上升沿、MTP内容量都会让它变。
能通信不等于能信位置。 反过来这句话也是对客户的交代:你告诉他"1ms启动”,他就真的会在1ms之后读第一帧。
低压场景下会更糟。锐鹰测我们KTO9512的时候发现,VB供电掉到2.1V时 MTA MTB上电延时增大,直接导致计圈错误——他们的场景是电池盒上串了个二极管,0.55V压降加上板上LDO和二极管,到电路板只剩2.1V。没有电池盒的场景,复现不出来。
客户不敢换的,从来不是那0.4度
一个做伺服电机的老板跟我说过一段话,记在 编码器客户最怕的不是精度不够 这篇里:
“Melexis的芯片贵,我知道。但我不敢随便换。"
他试过一款更便宜的方案,静态角度没问题,低速也没问题,一到三千转附近,电机开始啸叫。客户现场一句话:“是不是你们换芯片换出问题了?"
然后是那句最难回答的:“那为什么之前用Melexis的时候没这样?"
这场景里,±0.5度还是±0.01度,一个字都没被提到。
Melexis卖的不只是那颗硅片。它在手册里把"标定前"三个字写出来,把16个PEQ寄存器的默认值列出来,把 DE_DSP_RMM=3 印在表里,把自校准"要转几个电周期才收敛"写进正文——这些全是在替FAE提前回答现场的问题。
我们的差距不在那0.4度,是客户拿着我们的手册,回答不了他现场遇到的问题。
回到开头那39秒——问题不出在那位同事身上,是拿到手册之后的习惯性反应都得改。下面这五件事,是读完这74页之后,我给自己定的检查清单。
拿到任何一颗磁编码器,先做这五件事
先问那个精度数字是标定前还是标定后。 手册里搜 before EoL calibration、after calibration、calibrated。找不到这限定词的,就去问FAE要;问不出来的,按标定前理解。
别信Features栏,去读寄存器默认值表。 补偿类功能(线性化点、自校准使能、滤波配置)出厂默认往往是关的。MLX90382的 PEQ00~PEQ15 全0、DE_DSP_RMM=3 就是例子。上电后把这几个寄存器读回来核一遍,比看宣传页有用。
用状态位判断"能不能信”,别用延时。 KTM5800轮询 TOP.SSTATE 到15,MLX90382看 AGC_GAIN/AGC_AMP 是否进了 DIAG_AGC_THD_LO/HI 的窗口。延时是典型值,状态位才是判据。
自校准要转起来才收敛,产线得留工位。 16点线性化必须准静态转一圈测;In-Operation自校准要转几个电周期。上电就要读绝对位置的场合,这两件事都指望不上。
上电跳点要用统计量测,单次上电测不出来。 该AMR客户那份报告是2040个上电采样点才看出4.5%。你上电三次都正常,说明不了任何事情。

关注公众号「如是有为」
微信扫一扫,新文章先在公众号发出。