☰
差分霍尔磁性角度传感器:抗杂散磁场、14位绝对角与多接口输出
2026/11/3 14:08:03 网站建设 项目流程

简介:MT6701_Rev.1.6_中文版.pdf 是麦歌恩微电子磁性角度传感器芯片的官方中文数据手册,面向从事闭环步进、BLDC 控制、机器人关节控制及非接触旋钮设计的硬件工程师与嵌入式开发者,可帮助他们完成选型评估、外围电路设计与寄存器配置。压缩包仅含 1 个 PDF 文件,大小约 1.27MB,内容覆盖引脚定义、型号列表、功能框图、极限与电气参数、外加磁场参数等基础章节。输出模式部分逐项讲解 ABZ 正交、UVW 换相、模拟电压、PWM、I2C 与 SSI 接口的时序和参考电路,并给出寄存器表与 EEPROM 编程方法、机械角度定义,以及 SOP-8、QFN3x3-16L 两种封装尺寸图。读者可据此完成 0~360° 绝对角度检测方案设计、14 位角度读取与 1~16 对极编程配置。目前已有 867 人学习下载。

1. 差分霍尔:为什么这颗芯片能靠近电机安装

在电机旁做角度检测,难点常常是“环境里有多少不属于你的磁场”,而不只是“磁铁够不够强”。单颗霍尔片测的是那一点的总磁场,定子绕组、相邻磁钢、母线电流产生的杂散磁场都会直接叠进信号,角度随之偏移,而且这类误差随工况变化,软件标不掉。MT6701 这颗磁性角度传感器芯片的解法是放两对互成 90° 的差分霍尔惠斯通电桥,让它只对“跨过感应区的磁场梯度”响应:均匀的共模磁场同时加到差分两端,在减法里抵消。这就是它抗杂散磁场干扰的物理根源,也是 ±1° 的 INL、0.3mm 的偏心公差、200~1000 Gs 的磁场窗口这些指标的依据。

2. 从磁场到角度:两路正弦信号如何变成 14 位绝对角

2.1 惠斯通电桥输出 sin/cos 的原因

磁铁在芯片正上方旋转时,芯片表面每一点的 Z 轴磁场分量都随转角 α 做正弦变化,但相位取决于这个点在 X-Y 平面上的方位角。把四个霍尔片按方位角摆成一个环,取对角两两相减,得到的差分输出幅度翻倍、共模偏置被抵消;再把这样一组桥在版图上整体转 90°,就得到第二路相位差 90° 的信号。

于是模拟前端拿到的是一对干净的Vx = A·sin(α)、Vy = A·cos(α)。这两路信号经过放大、模数转换后进入 DSP,做一次反正切就能还原 α。用 sin/cos 而不是直接输出某个“角度电压”的原因:单路信号无法区分象限,也无法在磁场强度变化时保持线性。sin/cos 这一对量里,幅度 A 只影响模长不影响角度,atan2(Vy, Vx)对 A 完全不敏感——磁铁温度漂移导致磁场变弱(钕铁硼约 -0.12%/℃),角度读数不会跟着漂。这是差分结构之外的第二层“自带补偿”。

注意:DSP 内部还有一层校准,用 EEPROM 里存的出厂系数补偿两路桥之间的增益失配、正交误差和零点偏置。差分结构保证的是“抗外界干扰”,校准保证的是“两路自己有多对称”,两者缺一不可。

2.2 反正切、14 位和 5us 延时

14 位绝对角意味着 360°/16384 = 0.02197°/LSB。把几个数字放在一起看会发现一个整齐的关系:12 位网格恰好是 14 位的四分之一,即 0.0879°/格。芯片内部用 14 位算角度,但对外暴露给 PWM、DAC、Z 位置、迟滞窗口的全部是 12 位网格——后面几章会反复用到这个 0.0879°。

系统延时标称小于 5us。这个数字要放到转速里才有意义:55,000 RPM 折算成 916.7 转/秒,5us 内机械角已经转过去 1.65°。也就是说在最高转速下,延时要精确到 1.65° 量级,而不是十几个 LSB;真正的瓶颈是延时,而不是分辨率。

ANGLE_LSB = 360.0 / 16384 # 14 位:0.02197°/LSB COARSE_LSB = 360.0 / 4096 # 12 位网格:0.0879°/格 def raw_to_deg(raw14): """把 I2C/SSI 读到的原始值转成机械角(度)""" return (raw14 & 0x3FFF) * ANGLE_LSB # 高 2 位是状态位,必须掩掉 def rpm_from_pair(d1, d2, dt_us): """两次采样差分估算转速,注意处理 0/360 跨越""" delta = (d2 - d1) % 360.0 # 取模自动吃掉过零点 return delta / 360.0 / (dt_us * 1e-6) * 60.0

raw_to_deg里的掩码是必须的:14 位有效角度塞在 16 位传输里,高位可能被用作状态或保留,不掩会读出一个超过 360° 的数。

rpm_from_pair的取模有个副作用:它只能测转速大小,测不出方向。要判向得比较两次相邻采样的符号差,或者干脆用 ABZ 的相位关系——这也是为什么增量接口在闭环系统里依然有生命力。

再看角度分辨率与速度的关系:如果控制环按 20kHz 跑(50us 一个周期),一个周期内机械角已经转过约 16.5°,此时纠结 0.022° 的分辨率意义不大,真正该关心的是采样时刻和计算完成时刻之间的对齐。这也是为什么这类芯片把“延时”单独列成一项规格,而不是混在精度里。

2.3 INL、DNL、瞬态噪声:把 1° 和 0.022° 分开看

很多人第一次看到这颗芯片时会被两个数字搞晕:分辨率 0.022°,积分非线性却有 ±1.0°(典型)到 ±1.5°(最大),差了两个数量级。这不是矛盾,是两类不同的规格。

分辨率回答“能分辨多小的变化”,INL 回答“读出来的值离真值有多远”。INL 是系统误差,可以标定、可以建模,但不会因为分辨率高就变小。血泪经验是:有人拿 14 位去算 0.01° 的重复定位精度,装好之后发现怎么调都差 1°,最后才发现是 INL 在拖着,不是噪声也不是分辨率。

DNL 是 ±0.02°,衡量的是相邻码之间的步长是否均匀。这个指标对 ABZ 增量输出特别关键——如果某一段的步长忽大忽小,四倍频计数就会在这里多计或者漏计一格,跑几千圈之后误差累积起来就是位置丢失。DNL 这么小,说明增量输出基本不会“跳格”。

瞬态噪声 0.01° rms,比 14 位的 1 LSB(0.022°)还小。这个关系很重要:如果噪声大于 1 LSB,那 14 位就是“数字好看”,低位全是抖的;现在噪声在一半 LSB 以下,14 位才是有意义的。

还有一项容易被忽略:迟滞窗口 0.088°,不多不少正好是 12 位网格的一格。它的作用是防止角度在某个码边界附近微抖时,ABZ 输出反复跳变、计出 ±1 的毛刺。用一格而不是半格,是因为半格挡不住“噪声 + 量化”叠加后的抖动。

关于 INL 的测试条件也要看清楚:典型值是在 25℃、磁铁和芯片无偏心条件下测的;最大值是在 -40~125℃ 全温区、最大允许间隙、最大允许偏心下测的。换句话说,装配精度直接决定你落在 ±1.0° 还是 ±1.5° 那一档——这是选型时必须算进去的隐藏成本。

3. 输出接口矩阵:如何同时满足六种下游接口

3.1 引脚复用与 MODE:SOP-8 和 QFN-16 的差别不止封装

同一个角度内核要对接六种下游:I2C、SSI、ABZ、UVW、模拟、PWM。引脚不够用,只能复用。SOP-8 把引脚 6/7/8 同时分给了 A/U、B/V、Z/W,意味着 ABZ 和 UVW 二选一,不能同时输出;QFN-16 把 A/B/Z 放在 6/7/8、U/V/W 放在 11/12/9,两套增量信号可以并存,而且还多出 -A/-B/-Z 三根差分线。

功能SOP-8 引脚QFN-16 引脚备注
I2C6=SDA, 7=SCL6=SDA, 7=SCL需外部上拉
SSI6=DO, 7=CLK, 8=CSN6=DO, 7=CLK, 8=CSN主机提供时钟
ABZ6=A, 7=B, 8=Z6=A, 7=B, 8=ZQFN 另有 9/11/12 差分
UVW6=U, 7=V, 8=W11=U, 12=V, 9=WSOP-8 与 ABZ 互斥
模拟/PWM315由寄存器切换
PUSH55推挽输出

这张表直接决定了选型逻辑:做闭环步进或者 BLDC 控制,既要 ABZ 做位置环、又要 UVW 做换相,就必须上 QFN-16;只做非接触旋钮、读个绝对角,SOP-8 足够而且便宜。差分 ABZ 的存在意义是把增量信号送到几米外的驱动器,单端在长线上容易被电机 PWM 干扰打翻。

还有个不写在电气参数里、但量产时会咬人的差别:SOP-8 是湿敏 3 级(MSL-3),QFN-16 是湿敏 1 级(MSL-1)。MSL-3 意味着拆封后要在限定时间内用完,超时得烘烤,回流焊曲线也更讲究;MSL-1 基本不用管。小批量试产感觉不到,上了产线就是工艺成本。

MODE 引脚内部带 200kΩ 上拉,用来选 ABZ 还是 I2C/SSI。上拉的存在意味着引脚悬空时芯片会进入某个默认模式,设计时不能靠“不接”来碰运气,必须明确拉高或拉低。具体哪个电平对应哪个模式,要照引脚表核对,不要凭经验猜——这类极性搞反的 bug 通常要到联调阶段才暴露。

3.2 ABZ:正交相位、Z 脉冲宽度与上电回放绝对位置

ABZ 是替代光电编码器的那条路。俯视看磁铁逆时针转时,B 的上升沿领先 A 的上升沿 1/4 周期;顺时针转则反过来。方向判断就靠这 1/4 周期的相位关系,四倍频之后每圈步数是脉冲数的 4 倍。

分辨率 1~1024 脉冲/圈可编程,对应 4~4096 步/圈。1024 脉冲就是 4096 步,正好 12 位,和前面那个 12 位网格对上了。寄存器 ABZ_RES[9:0] 是 10 位宽,要覆盖 1~1024 这 1024 个取值,常见的实现思路是寄存器值等于脉冲数减一——这样 0 表示 1 脉冲/圈,1023 表示 1024 脉冲/圈。烧写前建议先按这个假设验证一遍,别直接把想要的脉冲数写进去。

Z 脉冲每圈只出一个,宽度可选 1、2、4、8、12、16 个 LSB 或者 180°。零点位置由 12 位的 ZERO[11:0] 定义,按 360/4096 = 0.0879° 的网格定位。这就是为什么 Z 宽度用“LSB”而不是“度”来描述——它指的始终是 12 位网格的那一格,跟 ABZ_RES 设成多少无关。设成 1 脉冲/圈的时候如果 Z 宽度按 ABZ 的 LSB 算,那 Z 会占掉大半个圆周,显然是荒谬的。

上电行为有两种模式,这也是这颗芯片比较有意思的地方。默认配置下,上电后 50ms 内没有任何 ABZ 输出,50ms 之后才输出稳定正确的脉冲序列——此时 MCU 只知道“从现在开始转了多少”,不知道绝对位置,得等第一个 Z 来重新对齐。另一种配置是上电后先输出一串频率先快后慢的脉冲,把这串脉冲累加起来,就得到上电时刻相对于芯片零点的绝对位置。

第二种模式的存在,本质上是“增量接口 + 绝对内核”的折中:ABZ 是增量协议,但芯片内部明明知道绝对角,于是用一个编码过的脉冲串把绝对信息塞进增量通道里。代价是这 50ms 内不能有外部转动,否则累加出来的初值就错了。

/* 四倍频计数:A、B 双沿中断,用状态转移表判向并滤掉抖动 */ volatile int32_t pos_step; /* 单位:step,每圈 4 * 脉冲数 */ static uint8_t last_ab; static const int8_t Q[16] = { /* last\cur 00 01 10 11 */ /* 00 */ 0, +1, -1, 0, /* 01 */ -1, 0, 0, +1, /* 10 */ +1, 0, 0, -1, /* 11 */ 0, -1, +1, 0 }; void EXTI_AB_Handler(void) { uint8_t ab = (uint8_t)((READ_A() << 1) | READ_B()); int8_t d = Q[(last_ab << 2) | ab]; /* 非法跳变(00->11)返回 0 */ if (d) pos_step += d; last_ab = ab; }

查表法比if (A) ... else ...稳的地方在于:机械振动或者线上干扰会让 A、B 同时跳变(00 直接到 11),任何基于“当前电平”的判断都会误计,而状态转移表里这类跳变对应 0,直接丢弃。pos_step用有符号 32 位,1024 脉冲/圈下能记 50 多万圈才溢出。

3.3 UVW 与 PWM/模拟:换相、单线传输与比例式输出

UVW 是给 BLDC 换相用的三路互成 120° 的信号,对极数 1~16 可编程。这里的对极数必须和电机极对数一致:设成 7 就表示每机械圈输出 7 个电气周期,驱动器按这 6 个状态去开关桥臂。设错了不会报错,表现为启动时偶尔反转、电流偏大、效率上不去——这类问题排查起来很费时间,因为波形看上去“是方的、也在跳”。

PWM 输出的帧结构设计得比较讲究。一整帧是 4119 个最小时钟周期:开头 16 个周期的固定高电平,结尾 8 个周期的固定低电平,中间 4095 个周期表示 0~360°,高电平个数与角度线性相关。16 + 4095 + 8 = 4119,这个等式是解帧的钥匙。

帧头帧尾的意义在于自同步:接收端不需要知道波特率,只要测出一个完整帧的长度,除以 4119 就得到时钟周期,再用高电平时间除以它、减掉 16,就是角度码。整个过程只依赖一根线和一个定时器,隔离传输时只要一个光耦或者数字隔离器,成本比 I2C 低得多。

/* 单线 PWM 解码:先测帧长定时钟,再测高电平时间取角度 */ float pwm_decode_deg(uint32_t t_high_ns, uint32_t t_frame_ns) { float clk = t_frame_ns / 4119.0f; /* 994.4Hz -> 约 244ns */ float code = t_high_ns / clk - 16.0f; /* 减掉 16 拍帧头 */ if (code < 0) code = 0; if (code > 4095) code = 4095; return code * (360.0f / 4095.0f); /* 1 码 = 0.0879° */ }

帧频率有 994.4Hz 和 497.2Hz 两档。选低频那档时最小时钟周期从 244ns 变成 488ns,脉宽翻倍——这不是为了省电,是给慢速光耦或者长线留余量。244ns 的脉冲在普通光耦上会被削得面目全非。

模拟输出走的是另一条路:内部 12 位 DAC 做轨到轨电压输出,与绝对角成线性。关键在于它是比例式的——输出电压和 VDD 成比例,规格里那条“比例误差 ±0.3%”说的就是这件事。好处是只要 ADC 用同一路 VDD 做参考,电源上的纹波和温漂在比值里自动抵消,不需要精密基准。

曲线还能编程:钳位高电压可以设 100% 或 90%,钳位低电压设 0% 或 10%,起点 A_Start 和终点 A_Stop 可调。这就允许你把机械行程的中间一段映射到满量程——替代电位器时,把无效的死区钳掉,有效行程的分辨率立刻提高。输出阻抗典型 15Ω、最大 30Ω,负载电容不超过 1nF,参考电路里还串了 10k 上拉/下拉并在输出脚并了 6V TVS。TVS 不是可选项:输出脚通常直接引到面板或者连接器上,人体 ESD 打进来第一个坏的就是它。

3.4 I2C 与 SSI:14 位绝对角的读取方式

I2C 是标准两线,SCL 是纯输入,SDA 双向开漏,外部要 4.7k 上拉。参考电路里 SCL/SDA 各串了 4.7k 上拉并配 6V TVS,这个组合在板级联调时能省很多事。

SSI 走的是 DO/CLK/CSN 三线,主机给时钟、从机在时钟沿把数据移出来。它比 I2C 简单的地方在于没有地址、没有仲裁、没有时钟拉伸,点对点、单向,长线和强干扰环境下更容易做隔离。代价是每多一个从机就多一组线。

两条路共用引脚 6/7/8,靠 MODE 选。读出来的是 14 位绝对角,另外还能读内部磁场强度值——这个值就是按压检测的原始依据,下一章会用到。

import smbus2 BUS = smbus2.SMBus(1) REG_ANGLE = REG_ANGLE_ADDR # 具体地址以寄存器表为准,不要照抄示例 def read_angle_deg(addr7): hi, lo = BUS.read_i2c_block_data(addr7, REG_ANGLE, 2) raw = ((hi << 8) | lo) & 0x3FFF # 只取低 14 位 return raw * (360.0 / 16384.0)

read_i2c_block_data的第一个参数是 7 位地址,第二个是要写入的寄存器指针——这颗芯片的读时序是“先写寄存器地址、再重复起始读数据”,用这个方法刚好对上。掩码0x3FFF不能省,16 位传输里高 2 位不是角度。

4. 寄存器与 EEPROM:出厂校准与客户配置的共存

4.1 位域解剖:每个寄存器位宽的设计依据

把几个可编程项排在一起看,位宽不是随手定的:

寄存器位宽取值含义折算分辨率
ZERO[11:0]12 bitZ 脉冲的绝对角度位置0.0879°/格
Z_PUL_WID[2:0]3 bit1/2/4/8/12/16 LSB 或 180°8 档
ABZ_RES[9:0]10 bit1~1024 脉冲/圈整数脉冲
UVW_RES[3:0]4 bit1~16 对极/圈整数对极
PWM_FREQ1 bit994.4Hz / 497.2Hz2 档
Output Mode1 bit模拟电压 / PWM2 档

规律很清楚:凡是“用户必须连续可调”的量(ABZ 分辨率、Z 零点),位宽给足;凡是“离散枚举”的量(PWM 频率、输出模式),1 位就够;Z 脉冲宽度有 7 个有意义的值,3 位刚好。EEPROM 在标准 CMOS 里占的面积不算小,多一位就是多一片存储单元,所以位宽卡得很紧。

这些寄存器实际存在 EEPROM 里,上电时被搬到影子寄存器参与运算。改影子寄存器立即生效但掉电即失,只有烧进 EEPROM 才是永久的——这就是为什么文档把“寄存器表”和“EEPROM 编程”分成两节。

4.2 烧写要求 VDD > 4.5V 的原因

规格里写着工作电压 3.0~5.5V、典型 3.3~5.0V,同时又写“烧写时需要保证 VDD > 4.5V”。这两个数字不矛盾,说的是两件事:读可以在 3.3V,写不行。

机制在于 EEPROM 的写入靠片内电荷泵把电压抬到十几伏,去隧穿氧化层注入电荷。3.3V 输入时泵的级数和裕量都不够,编程窗口变窄,写进去的位可能处于“半高”状态——读出来时好时坏,或者擦不干净。表现出来就是“烧了参数,上电有时生效有时不生效”,这种偶发问题最难查。

实操上有两种做法:产线用 5V 治具烧写,烧完立即回读校验,校验通过再降到 3.3V 跑;或者出厂前统一烧好,现场只读不写。第二种更稳,也省掉了设备端做 5V 升压的麻烦。

还有一点文档没给具体数字但必须注意:擦写次数。规格只说“支持参数反复多次

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询