Skip to content

TMR3109 磁编码器:9 台量程异常,和一颗装错方向的磁铁 ​

同样的夹爪结构,同样的 80° 开合行程,传感器所在转轴预期转过约 40°。但这一批 9 台机器,读数量程只有 2.6° 到 25.1°,最大接近最小的十倍;同一侧机器,读数方向还可能相反。

最初怀疑装配偏心,模型也能拟合。最后查到的是另一件事:磁铁的充磁方向装错了。这里记录的是这批故障,不是所有磁编码器异常的通用结论。

九台机器,差在哪里? ​

柱形只表示故障批次的原始读数量程,约 40° 是机构预期,不是第十台测量值。

机号123456789
量程(°)25.113.911.711.211.08.04.53.82.6

数据通路并非完全没查:MCU 串口、共享内存、HTTP、网页的数值一致;一次 60 秒记录得到 3012 帧,未观察到丢帧、毛刺或明显位错误特征。但这些现象不能替代 CRC/error 校验,后者不能据此宣称已验证。

模型解释得通,为什么还不算找到原因? ​

横向偏心的磁偶极子模型能拟合量程缩小,得到约 1–2mm 的偏心估计,超过原厂给出的 0.5mm 上限。问题是:这是模型反推的参数,不是实测装配尺寸。

同一组角度数据可能对应不同的磁场条件。结构与原厂确认了实物磁钢为轴向充磁,而要求是径向对半充磁;更换后量程恢复到约 40°。这个实物检查与更换结果,比“拟合得很好”更有说服力。

圆盘一样,磁极可以完全不同 ​

TMR3109 测的是磁场方向,不是直接看机械零件转了多少。所需的“径向对半充磁”,是 N、S 沿圆盘直径分在两边;轴向充磁则是上下两个圆面分别为 N、S。

两种充磁方向对比

轴向磁钢位于芯片轴线上时,面内旋转磁场分量很弱,偏心、晃动等残余影响反而可能占主导。这能解释本批的量程小、台间差大,但不能靠读数形状判定充磁方式;来料应按规格确认,必要时请供应商检测。

转一整周与夹爪全行程是两回事:正确安装的绝对角度编码器在完整旋转时应覆盖一周角度(在 0°/360° 处回绕);本机构的约 40° 仅指传感器转轴在夹爪全行程内的转角。

换磁铁之后,标定还能做什么? ​

先让磁场与安装满足要求,再处理可重复的残余非线性。两点标定只把全闭、全开连成直线;九点标定用治具的 0/5/…/40° 采样点,逐段线性插值。它不能救掉线、无磁钢或不稳定的读数,也不能把“显示成 40°”当成真实量程恢复。

九点分段标定示意

上图用于说明插值,不是这 9 台机器的逐台标定数据。网页操作是:放到治具卡位 → 采 2 秒均值 → 九点齐备且单调后确认;重复采同一点会覆盖旧值。两套数据都保留,mode 决定使用哪一套:确认九点启用分段,标定全闭/全开启用两点,也可显式切回九点。

读数实际含义
芯片原始角度raw/8388608×360°,与标定无关
标定角度当前映射得到的治具角度,通常 0–40°
开合百分比当前映射得到的开合比例,供算法使用
量程端点之差:span_raw 或 span_deg,仍是芯片口径

曾经把治具角度写进 closed_deg/open_deg/span_deg,导致网页量程看起来固定为 40°。这些字段后来统一回芯片角度;这是修显示口径,不是修传感器。

附录:安装规格、SPI 提取与排查口径
安装项产品规格书 v1.0.1 §3.6
磁钢Ø9 × 2.5mm,钕铁硼 N35SH,径向对半充磁
气隙1–10mm,典型 3mm
芯片表面场强100–1000Gs;官网产品页另写 200–800Gs,应向原厂确认
中心偏差 / 倾斜≤0.5mm / ≤±3°

SPI Mode 1,MSB 优先,以 4 字节传输承载 28-bit 返回数据:d[27:5] 为 23-bit 角度,d[4:1] 为 CRC(多项式 x⁴+x³+x²+1,初值 0011),d[0] 为 error。下面只演示角度提取,没有实现 CRC/error 校验。

c
rt_uint8_t tx[4] = {0x60, 0x00, 0x00, 0x00}, rx[4] = {0};
spi_xfer(s, tx, rx, 4);
uint32_t v = ((uint32_t)rx[0] << 24) | ((uint32_t)rx[1] << 16)
           | ((uint32_t)rx[2] << 8) | rx[3];
uint32_t raw = (v >> 5) & 0x7FFFFF;
float angle = raw / 8388608.0f * 360.0f;

本次抓到 MISO 有 4 个时钟的流水线延迟;最初位对齐错误使读数落在 337.5°–360°。上面的 >>5 是按此次实际接收字节排列提取,移植时要对照抓到的帧,而不是盲抄。

现象先检查什么
恒为 0x7FFFFF(359.99996°)供电、J57 连接、MISO 是否全 1;不能仅凭接近 360° 就判掉线
几毫秒内跨数百度乱跳磁钢是否在位、磁场与装配是否符合要求
标定后百分比异常大两端是否采在同一位置;项目有 2000 raw 的退化量程保护
静止噪声大健康整机曾测 std ≈0.001°(约 18 LSB);超过 0.5° 时查机械与磁场。按采集时间戳去重,别用重复 HTTP 样本低估噪声
MSH 单跑 tmr3109 断言先 angle_init 初始化 SPI

接口沿用 /api/v1/angle/calib(GET/POST),并有采点、确认、重置、模式切换与回归验证操作。项目实现位于 MCU 的 angle_sensor.c、sensor_acq.c,以及 AP 的 angle_calib.go、angle_calib_http.go;这些是项目内文件名,不是公开代码下载链接。

协议与安装依据:多维科技 TMR3109 产品规格书 v1.0.1(§3.6、§4.1、§8)。本文保留 2026 年 9 月夹爪项目的实测记录;替换磁铁后的约 40° 是已记录结果,未提供九台逐台复测精度表。

这篇里有不清楚的地方,或者想聊类似的东西?私信我 →