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

发布时间:2026/10/26 6:13:30
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.637 页覆盖引脚、电气参数、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 换相走 UVW1~16 对极可编程互成 120°。如果只要一个模拟量或单线数字量走模拟电压或 PWM都是 12 位绝对角度。PUSH 引脚单独说它指示磁铁和芯片间距的快速变化用来做非接触按压旋钮或者读内部磁场强度值判断 Z 轴距离变化。输出模式分辨率典型用途引脚SOP-8I2C14 位绝对角度MCU 读绝对位置6 SDA / 7 SCLSSI14 位绝对角度上位机/驱动器读角度6 DO / 7 CLK / 8 CSNABZ1~1024 脉冲/圈闭环步进、速度环6 A / 7 B / 8 ZUVW1~16 对极BLDC 换相6 U / 7 V / 8 W模拟12 位非接触电位计3 OUTPWM12 位单线数字角度3 OUTPUSH开关量非接触按压5 PUSHSOP-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° 甚至更差走。第二个约束是间隙 AG0.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 去耦靠近芯片放模拟输出脚加 TVS6V和 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 LSB001 对应 2010 对应 4011 对应 8100 对应 12101 对应 16110 对应 180°111 对应 1 LSB。Z 的绝对角度位置由一个 12 位寄存器定义对应 0~360°存在Zero_MSB和Zero_LSB两个寄存器里。零点位置用户可编程意味着你可以把机械零位对齐到任意角度不用改磁铁安装。Z_PUL_WID[2:0]Z 宽度0001 LSB0012 LSB0104 LSB0118 LSB10012 LSB10116 LSB110180°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 Hz1 对应 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 倍标准差再实测按压动作确认不误触发。这个阈值随磁铁间隙和温度变化量产时要留温度补偿或定期自校准。从那以后我每次做非接触按压方案都强制走一遍静置采样、阈值计算、按压实测三步省得后期被误触发折腾。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询