ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

MT6701磁编码器手册拆解:替代光电方案与ABZ/I2C/UVW配置实战

MT6701磁编码器手册拆解:替代光电方案与ABZ/I2C/UVW配置实战

简介:MT6701_Rev.1.6_中文版.pdf是麦歌恩微电子MT6701磁性角度传感器芯片的官方中文数据手册,面向从事电机控制、机器人关节设计及非接触式人机交互的硬件工程师与嵌入式开发者。手册系统梳理了芯片基于差分霍尔原理的0~360°绝对角度检测方案,涵盖3.3V~5.0V工作电压、内置EEPROM烧写条件、I2C/SSI/ABZ/UVW/模拟电压/PWM及Z轴按压检测等独立输出接口,并给出最高55,000转/分钟转速、角度输出延时小于5微秒等关键指标。资源包为1个PDF文件,约1.27MB,内容包含引脚定义、功能框图、极限与电气参数、输出模式参考电路、寄存器表与EEPROM编程、机械角度方向及SOP-8与QFN3x3-16L封装信息,可帮助读者快速完成选型评估、外围电路设计与寄存器配置。目前已有852人学习下载,适合需要高精度磁感应方案与抗杂散磁场干扰设计的工程师查阅。

1. 拆开一份 37 页的磁编码器手册:MT6701 到底能替掉哪些光电方案

手上有个闭环步进项目,原来用光电编码器做位置反馈,结构怕灰、怕油、怕振动,装到关节里还得单独做遮光盘,装配公差一紧就丢脉冲。后来换成一颗 SOP-8 的磁性角度传感器,磁铁往轴上一贴,芯片对着 Z 轴磁场读角度,整机少了一堆机械件。这次拆的是 MT6701 的中文版数据手册 Rev.1.6,37 页,覆盖引脚、电气参数、ABZ/UVW/PWM/模拟/I2C/SSI 六种输出、寄存器表和 EEPROM 编程。它解决的核心问题很直接:0~360° 绝对角度检测,最高 55,000 RPM,系统延时小于 5 us,增量 ABZ 支持 1~1024 脉冲/圈任意整数可编程。适合做闭环步进、BLDC 换相、机器人关节、非接触旋钮的硬件和嵌入式工程师,也适合正在评估「磁编能不能替掉光电编」的选型人。

2. 差分霍尔与输出模式选型:为什么不是随便贴块磁铁就能读角度

2.1 差分霍尔惠斯通电桥的抗杂散磁场逻辑

MT6701 内部是两对互成 90° 放置的差分霍尔惠斯通电桥,感应芯片 X-Y 平面上旋转磁铁的 Z 轴磁场分量。注意这句话里的两个关键词:差分、Z 轴。差分意味着每对电桥输出的是两个霍尔片电压之差,外部均匀的杂散磁场同时作用在两个霍尔片上,相减后被抵消掉,这就是手册里「优异的抗杂散磁场干扰能力」的来源。Z 轴意味着磁铁是径向充磁、轴向对着芯片表面旋转的,芯片读的是垂直于自身表面的磁场分量随角度 α 的变化,输出两路正弦电压,再经放大、补偿、ADC、DSP 算出角度。

这个结构决定了安装方式:磁铁必须在芯片正上方,旋转轴与芯片感应中心对齐。手册推荐直径 6 mm、厚度 2.5 mm 的 1 对极径向充磁圆柱磁铁,芯片表面磁场分量典型 200~1000 Gauss,间隙 AG 推荐 0.5~2.0 mm,典型 1.0 mm,偏心 DISP 最大 0.3 mm。这几个数字不是随便写的,间隙太小磁铁可能撞芯片,太大磁场弱到信噪比不够,偏心超了 INL 会明显变差。我一般先把磁铁和芯片的机械定位做死,再调电气,顺序反了会白折腾。

2.2 六种输出模式怎么选:ABZ、UVW、I2C/SSI、模拟、PWM、PUSH

选输出模式本质是选「谁来解算角度」。如果 MCU 只想拿绝对角度,走 I2C 或 SSI,直接读 14 位绝对角度值,省掉自己算反正切。如果驱动器需要增量脉冲做速度环和位置环,走 ABZ,分辨率 1~1024 脉冲/圈任意整数可编程,Z 信号每圈一个,宽度可选 1/2/4/8/12/16 LSB 或 180°。如果做 BLDC 换相,走 UVW,1~16 对极可编程,互成 120°。如果只要一个模拟量或单线数字量,走模拟电压或 PWM,都是 12 位绝对角度。PUSH 引脚单独说,它指示磁铁和芯片间距的快速变化,用来做非接触按压旋钮,或者读内部磁场强度值判断 Z 轴距离变化。

输出模式分辨率典型用途引脚(SOP-8)
I2C14 位绝对角度MCU 读绝对位置6 SDA / 7 SCL
SSI14 位绝对角度上位机/驱动器读角度6 DO / 7 CLK / 8 CSN
ABZ1~1024 脉冲/圈闭环步进、速度环6 A / 7 B / 8 Z
UVW1~16 对极BLDC 换相6 U / 7 V / 8 W
模拟12 位非接触电位计3 OUT
PWM12 位单线数字角度3 OUT
PUSH开关量非接触按压5 PUSH

SOP-8 和 QFN-16 的引脚复用不一样。SOP-8 的 ABZ/UVW、I2C、SSI 共用引脚 6、7、8,模拟和 PWM 共用引脚 3。QFN-16 多出 9、11、12 三个脚,可以同时输出 ABZ 和 UVW,还支持差分 ABZ(-A/-B/-Z)。选封装时如果既要增量又要换相,QFN-16 更宽裕;只要一种输出,SOP-8 够用且好焊。

2.3 上电时序和 50 ms 黑匣子

ABZ 模式有个容易翻车的点:默认配置下芯片上电后 50 ms 以内没有任何 ABZ 输出,50 ms 以后才输出稳定正确的信号。如果寄存器配置成「上电 AB 输出当前绝对位置脉冲序列」,那 50 ms 内会先输出一串频率先快后慢的脉冲,对这串脉冲累加可以算出上电初始时刻的绝对位置。很多驱动器上电就急着采 AB,结果前 50 ms 读到的是无效电平,位置环直接飞。常见做法是上电后延时 60~80 ms 再使能位置环,或者用 I2C 先读一次绝对角度做初始对齐,再切到 ABZ 闭环。

3. 硬件落地:磁铁安装、参考电路与 EEPROM 烧写电压

3.1 磁铁安装的三个硬约束

磁铁安装决定了精度上限,电气补偿只能修一部分。第一个约束是同心度:磁体中心和芯片感应中心偏差 DISP 最大 0.3 mm,超了 INL 会从典型 ±1.0° 往最大 ±1.5° 甚至更差走。第二个约束是间隙 AG:0.5~2.0 mm,典型 1.0 mm,太小机械风险大,太大磁场弱。第三个约束是磁铁本身:推荐 1 对极径向充磁圆柱磁铁,直径 6 mm、厚 2.5 mm,钕铁硼温度系数 -0.12%/℃,钐钴 -0.035%/℃,高温场景优先钐钴。磁铁装偏心或倾斜,读出来的角度会有周期性误差,这种误差靠软件标定很难完全消掉。

提示:磁铁和芯片间隙在整机装配后要实测,不要只信图纸。我见过图纸标 1.0 mm、实际装配后 1.8 mm 的情况,磁场掉到 200 Gauss 边缘,噪声明显变大。

3.2 参考电路与去耦

手册给了 SOP-8 和 QFN-16 的 ABZ/UVW/PWM/模拟/Push 参考电路,以及 I2C 参考电路。核心就几件事:VDD 到 GND 并 0.1 uF 去耦,靠近芯片放;模拟输出脚加 TVS(6V)和 200KΩ 上拉/下拉,提高可靠性;I2C 的 SCL/SDA 各加 4.7K 上拉,是否需要取决于 MCU 端是否已有上拉,两边都加会并联成 2.35K,一般还能用,但低功耗场景要算静态电流。MODE 脚内置 200KΩ 上拉,用来选 ABZ 还是 I2C/SSI,悬空默认一种模式,具体看手册配置表。

# 硬件检查清单(上电前逐项过) # 1. VDD 对 GND 阻抗,排除短路 # 2. 0.1uF 去耦电容是否靠近 VDD 引脚 # 3. MODE 脚电平是否符合目标输出模式 # 4. I2C 上拉电阻是否与 MCU 端重复 # 5. 磁铁与芯片间隙实测值是否在 0.5~2.0mm # 6. 磁铁偏心是否小于 0.3mm

这份清单看着简单,但每次新板子我都走一遍,省下的返工时间远超这几分钟。

3.3 EEPROM 烧写:VDD 必须大于 4.5V 这条红线

MT6701 内部集成 EEPROM,用来存出厂校准参数和客户编程参数,支持反复多次擦写。但手册明确写了:烧写时 VDD 电压需要大于 4.5V。如果系统正常跑 3.3V,烧写参数时必须把 VDD 临时抬到 4.5V 以上,否则写不进去或者写坏。这是血泪经验级别的坑,很多人 3.3V 系统直接调写 EEPROM 接口,发现参数死活不生效,查半天以为是 I2C 时序问题,其实是电压不够。

/* EEPROM 写参数前的电压检查伪代码 */ #define EEPROM_WRITE_MIN_VDD_MV 4500 int mt6701_eeprom_write(uint16_t reg, uint16_t val) { uint16_t vdd_mv = adc_read_vdd_mv(); if (vdd_mv < EEPROM_WRITE_MIN_VDD_MV) { /* 电压不足,拒绝写入,避免写坏 EEPROM */ return -1; } /* 正常 I2C 写序列:起始、设备地址、寄存器、数据、停止 */ return i2c_write_reg(MT6701_ADDR, reg, val); }

这段代码的逻辑是:写 EEPROM 前先读 VDD,低于 4.5V 直接返回错误,不发起写操作。参数EEPROM_WRITE_MIN_VDD_MV就是手册那条红线,adc_read_vdd_mv用 MCU 的 ADC 采 VDD 分压。实际产线烧写时,通常单独给一个 5V 烧写工位,烧完再装到 3.3V 系统里。

4. 寄存器配置实战:ABZ 分辨率、Z 宽度、UVW 对极与 PWM 频率

4.1 ABZ 分辨率寄存器 ABZ_RES[9:0]

ABZ 输出分辨率由一个 10 位宽寄存器ABZ_RES[9:0]定义,支持 1~1024 脉冲/圈任意整数。注意单位换算:1024 脉冲/圈等于 4096 步/圈,等于 10 位分辨率。手册图-11 和图-12 把「位、步/圈、脉冲/圈」的对应关系画得很清楚,1000 脉冲/圈等于 4000 步。配置时先确定驱动器需要多少线,再反推寄存器值。

/* 设置 ABZ 分辨率为 1024 脉冲/圈 */ /* ABZ_RES 寄存器高 2 位在 ABZ_RES 寄存器的高字节,低 8 位在低字节 */ #define ABZ_RES_1024 0x400 void mt6701_set_abz_resolution(uint16_t pulses_per_rev) { if (pulses_per_rev < 1 || pulses_per_rev > 1024) { return; /* 超出范围,手册规定 1~1024 */ } uint16_t reg_val = pulses_per_rev & 0x3FF; /* 写入 EEPROM,注意 VDD > 4.5V */ mt6701_eeprom_write(REG_ABZ_RES, reg_val); }

参数说明:pulses_per_rev就是想要的脉冲/圈,范围 1~1024,函数里做了边界检查。REG_ABZ_RES是寄存器地址,具体地址查手册第 8 章寄存器表。写入后需要重新上电或触发重载才生效,具体看芯片行为。

4.2 Z 信号宽度与零点位置

Z 信号宽度由 3 位寄存器Z_PUL_WID[2:0]定义:000 对应 1 LSB,001 对应 2,010 对应 4,011 对应 8,100 对应 12,101 对应 16,110 对应 180°,111 对应 1 LSB。Z 的绝对角度位置由一个 12 位寄存器定义,对应 0~360°,存在Zero_MSB和Zero_LSB两个寄存器里。零点位置用户可编程,意味着你可以把机械零位对齐到任意角度,不用改磁铁安装。

Z_PUL_WID[2:0]Z 宽度
0001 LSB
0012 LSB
0104 LSB
0118 LSB
10012 LSB
10116 LSB
110180°
1111 LSB

配置 Z 宽度时要考虑驱动器 Z 输入的采样能力。1 LSB 在 1024 脉冲/圈下非常窄,高速时可能采不到,常见做法是选 4 LSB 或 8 LSB,兼顾宽度和精度。

4.3 UVW 对极寄存器 UVW_RES[3:0]

UVW 输出互成 120°,对极数由 4 位寄存器UVW_RES[3:0]定义,0000 对应 1 对极,0001 对应 2,依次到 1111 对应 16 对极。BLDC 换相时,UVW 的对极数必须和电机极对数匹配,否则换相时序错位,电机抖动或效率骤降。配置前先确认电机极对数,再写寄存器。

4.4 PWM 频率与模拟输出曲线

PWM 帧频率由PWM_FREQ寄存器选:0 对应 994.4 Hz,1 对应 497.2 Hz,出厂默认 994.4 Hz。PWM 一帧 4119 个最小时钟周期,开始 16 个固定高电平,结束 8 个固定低电平,中间 4095 个表示 0~360°,分辨率 12 位,一个最小单位 0.088°。模拟输出模式由Output Mode寄存器选:0 模拟电压,1 PWM。模拟输出的角度-电压曲线起点、钳位低电压(0% 或 10%)、钳位高电压(100% 或 90%)和零点位置都可编程,用A_Start、A_Stop等寄存器配置。

/* 配置 PWM 频率为 497.2Hz,输出模式为 PWM */ void mt6701_set_pwm_mode(void) { /* Output Mode 寄存器写 1 选 PWM */ mt6701_eeprom_write(REG_OUTPUT_MODE, 1); /* PWM_FREQ 寄存器写 1 选 497.2Hz */ mt6701_eeprom_write(REG_PWM_FREQ, 1); }

参数说明:REG_OUTPUT_MODE和REG_PWM_FREQ是寄存器地址,写入值 1 分别代表 PWM 模式和 497.2 Hz。改完同样需要重载生效。PWM 频率选低的抗干扰更好,选高的响应更快,按驱动器采样率权衡。

5. 避坑与排查:I2C 读不到、ABZ 丢脉冲、角度跳变的现场记录

5.1 I2C 读不到数据

现象:MCU 发 I2C 起始后没有 ACK,读回全 0 或全 1。原因常见三种:一是 MODE 脚电平不对,芯片没进 I2C 模式;二是 SCL/SDA 上拉缺失或阻值过大,上升沿太慢;三是设备地址搞错。解决:先量 MODE 脚电平,对照手册配置表确认;再量 SCL/SDA 空闲电平是否被拉到 VDD,上升时间是否在 1 us 内;最后用逻辑分析仪抓波形,确认地址字节。我一般先抓波形再改代码,避免瞎改寄存器。

5.2 ABZ 上电丢脉冲或位置飞

现象:上电后驱动器读到的初始位置和实际差很多,或者前几十毫秒脉冲乱。原因就是前面说的 50 ms 上电窗口,默认配置下前 50 ms 无有效 ABZ 输出。解决:上电延时 60~80 ms 再使能位置环,或者用 I2C 先读绝对角度做初始对齐。如果配置了「上电 AB 输出绝对位置脉冲序列」,要确保驱动器能正确累加这串先快后慢的脉冲,累加逻辑写错也会飞。

5.3 角度周期性跳变

现象:匀速转动时角度读数每隔一定角度跳一下,或 INL 明显超 ±1.5°。原因通常是磁铁偏心超 0.3 mm、间隙超 2.0 mm、磁铁不是 1 对极径向充磁,或者附近有铁磁材料干扰磁场分布。解决:先实测偏心 and 间隙,再换合格磁铁,最后检查芯片周围有没有螺丝、铁壳等导磁件。差分霍尔抗的是均匀杂散磁场,对局部铁磁材料造成的磁场畸变抵抗有限。

5.4 EEPROM 写不进去

现象:调用写接口后参数不生效,重新上电还是旧值。原因几乎都是 VDD 没到 4.5V。解决:烧写工位单独供 5V,或者系统设计时留一个升压路径。写完后读回校验,确认写入成功再断电。

5.5 高速下 UVW 换相抖动

现象:电机高速时抖动、效率低、电流大。原因可能是 UVW 对极数和电机极对数不匹配,或者 UVW 输出延时在高速下占比变大。解决:先核对极对数寄存器,再确认系统延时小于 5 us 是否满足当前转速下的换相精度。55,000 RPM 是芯片上限,实际系统要留余量。

6. 进阶验证:用 I2C 读 14 位绝对角度做在线标定与一致性检查

6.1 I2C 读角度的时序与代码

I2C 读角度是验证芯片工作状态最直接的手段。手册第 7.7 节给了 I2C 时序图和读角度、写数据的流程。典型流程是:起始、发设备地址写、发角度寄存器地址、重复起始、发设备地址读、读高字节、读低字节、停止。14 位角度值分布在两个字节里,高字节的高 6 位有效或类似格式,具体看寄存器表。

/* 通过 I2C 读取 MT6701 14 位绝对角度 */ uint16_t mt6701_read_angle(void) { uint8_t buf[2] = {0}; /* 起始 + 设备地址写 + 角度寄存器地址 + 重复起始 + 设备地址读 + 读两字节 + 停止 */ if (i2c_read_regs(MT6701_ADDR, REG_ANGLE, buf, 2) != 0) { return 0xFFFF; /* 读失败返回无效值 */ } /* 14 位角度:高字节低 6 位 + 低字节 8 位,具体位域查手册 */ uint16_t angle = ((uint16_t)(buf[0] & 0x3F) << 8) | buf[1]; return angle & 0x3FFF; }

参数说明:MT6701_ADDR是 I2C 设备地址,REG_ANGLE是角度寄存器地址,buf存两字节原始数据。返回值 0~16383 对应 0~360°,换算关系是angle_deg = raw * 360.0 / 16384.0。读失败返回 0xFFFF 便于上层判断。这段代码的关键是位域拼接,不同批次或配置下位域可能不同,以手册寄存器表为准。

6.2 用绝对角度做在线标定

有了 14 位绝对角度,可以做几件事。第一,上电初始对齐:读一次绝对角度,把驱动器电角度对齐到正确位置,再切 ABZ 闭环。第二,在线一致性检查:让电机匀速转一圈,连续读绝对角度,看单调性和 INL 是否在 ±1.5° 内,超了说明机械安装有问题。第三,零点重定义:通过写Zero_MSB/Zero_LSB把机械零位对齐到任意角度,不用拆磁铁。

验证项方法合格判据
绝对角度单调性匀速转一圈连续读角度单调递增/递减,无跳变
INL对比高精度参考编码器典型 ±1.0°,最大 ±1.5°
上电初始对齐读绝对角度 vs 实际位置偏差在机械公差内
EEPROM 写入写后读回校验读回值等于写入值

6.3 一个具体技巧:用 PUSH 做非接触按压的阈值标定

PUSH 引脚指示磁铁和芯片间距的快速变化,也可以读内部磁场强度值判断 Z 轴距离变化。做非接触按压旋钮时,阈值标定是关键。我的习惯是:先让旋钮在自然状态静置,连续读磁场强度值 100 次,取均值和标准差,把按压阈值设在均值加 3~5 倍标准差,再实测按压动作确认不误触发。这个阈值随磁铁间隙和温度变化,量产时要留温度补偿或定期自校准。从那以后我每次做非接触按压方案,都强制走一遍静置采样、阈值计算、按压实测三步,省得后期被误触发折腾。希望帮到你。

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

返回列表