ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

磁编码器如何取代霍尔?MT6816在伺服系统中的应用解析

磁编码器如何取代霍尔?MT6816在伺服系统中的应用解析 1. 伺服系统里的位置反馈之争磁编码器为什么越来越吃香做伺服驱动这几年我最大的感触就是位置反馈环节的选型直接决定了整个系统的性格。你选光电编码器系统就是精密但娇贵你选旋变就是皮实但贵你选霍尔传感器就是便宜但粗糙。而磁编码器恰好站在了一个很有意思的中间位置——精度够用、抗污抗振、成本可控这几年代替我手里的光电方案越来越多。先说个现象。很多工程师一提到磁编码器第一反应就是不就是个霍尔传感器嘛。这个误解太普遍了以至于我在技术交流时经常要花很长时间解释MT6816这种基于磁阻效应的芯片和传统霍尔开关或者线性霍尔根本是两个物种。霍尔传感器测的是磁场垂直分量的绝对值用ADC采样后换算角度而MT6816这类磁阻编码器芯片内部是惠斯通电桥加信号调理直接输出正余弦或者绝对角度值原理上就走了一条完全不同的路。那为什么伺服系统特别需要磁编码器核心痛点有三个第一伺服电机内部环境其实挺恶劣的绕组发热、轴承磨损产生的金属粉尘、装配时的油污光电编码器的码盘和光源一旦被污染轻则丢步重则直接报警停机第二很多应用场景有振动和冲击光电码盘的机械安装精度要求太高稍微变形就出问题第三伺服系统要的是绝对角度不是简单判断一下磁场有没有超阈值霍尔传感器给不了你12位甚至14位的绝对角度精度。这篇文章的定位很明确给正在做伺服系统选型的工程师、做机器人关节模组的朋友、以及想搞懂磁编码器底层的硬件爱好者提供一份基于实际项目经验的避坑参考。我不会念芯片手册而是把MT6816和霍尔传感器的原理差异、选型对照、电路设计要点、标定方法、实际踩过的坑都摊开讲希望能让你少走几个月的弯路。2. MT6816与霍尔传感器的底层差异一个测绝对值一个测开关量2.1 霍尔传感器的测量逻辑与天花板霍尔传感器的工作原理很多教科书都写过载流导体在磁场中会产生霍尔电势电势大小正比于磁感应强度。放在电机里常规用法是测转子磁极的位置——转子转过一圈磁场方向变化360度霍尔输出也就跟着变化。但这里有个关键问题霍尔传感器的输出是什么呢分两类。一类是开关型霍尔比如常用的AH3661、SS41输出只有高电平或低电平本质上是个接近开关只能告诉你到了还是没到。另一类是线性霍尔比如A1302、SS49E输出是模拟电压和磁场强度成比例。伺服系统里霍尔常用来做初始换向定位也就是无感FOC启动前先找到转子的大概象限。六步换向法配合三个霍尔精度是多少电角度60度的间隔换算成机械角度对于4对极电机就是15度。这个精度做启动预定位勉强够用但做运行中的连续位置反馈完全不够格。有人会说那我用线性霍尔加ADC采样再查表换算角度行不行理论上可行实际工程上很鸡肋。因为霍尔器件的温漂大、对磁场强度的线性度一般、安装位置稍有偏差就会引入很大的角度误差而且它测的是磁场强度标量不是方向要做角度解算需要额外做反正切运算还要做多点标定补偿。我见过有团队这么搞过最后标定表几百个点温度一变精度还是垮纯粹是给自己挖坑。2.2 MT6816的磁阻效应和信号链MT6816是MagnTek麦歌恩推出的一款12位/14位分辨率的磁编码器芯片核心是各向异性磁阻效应。简单说AMR材料在磁场作用下电阻值会随磁场方向和电流方向的夹角变化而变化。把AMR电阻搭成惠斯通电桥就能把磁场角度变化转换成差分电压信号而且是和磁场方向相关的不是和磁场强度绝对值直接相关。这就有本质优势了第一它对磁场强度的宽容度很高气隙稍微变大、磁铁退磁一点只要磁场方向没变角度输出基本不受影响第二内部集成了PGA可编程增益放大器可以适配不同的磁铁和安装高度灵活度很高第三输出形式是正余弦差分模拟信号或者通过内部ADC解算后走SPI/ABZ/PWM接口输出绝对角度。我记得第一次焊好MT6816的测试板用一个小径向磁环和一个钕铁硼磁铁分别测发现芯片对磁场强度不敏感的特性确实明显——我把磁铁从1mm拉到3mm角度读数只漂移了不到0.3度。这个特性如果换成霍尔传感器早就偏出好几度了。2.3 伺服系统为什么需要的是角度而不是强度伺服系统的位置环、速度环、电流环层层嵌套底层全部依赖一个准确的角度值。FOC算法的Park变换和逆Park变换都需要当前转子电角度作为输入。电角度错了电流解耦就错了力矩输出就抖动位置环就更不用谈。霍尔能告诉你的只是一个区间想要连续角度得靠后续算法去估算而且启动阶段还会面临换向不准的问题。MT6816直接给你一个绝对角度SPI读出12位或者14位的原始码对应0到360度一次读数就是当前绝对位置没有累积误差不需要上电找零。这一点对伺服系统太重要了——设备上电就能知道关节在哪不需要先低速转动去找原点这也是我选它替代霍尔的最直接理由。3. 选型对照实战MT6816 vs 霍尔 vs 其他磁编码方案3.1 核心参数横向对比为了让大家有个直观印象我把几类常见方案放在一个表格里对比。对比项开关/线性霍尔MT6816磁阻编码器AS5047P磁编光电编码器输出分辨率低开关电平12/14位绝对角度14位绝对角度17位以上常见是否抗污染强强强弱码盘怕灰怕油温漂表现较差较好有温补较好优秀上电绝对位置无有有增量型无绝对型有安装公差宽容度一般高高低对偏心敏感成本极低中等偏高含税价高适合场景换向预定位伺服、关节模组高端伺服高精度机床这个表格不是我随便拍的。霍尔传感器成本确实便宜一两块钱一片但它在伺服系统里承担的角色只能是个辅助传感器用来做初始相位检测或者换向指望它做位置环反馈那系统精度天花板就在那里摆着怎么调都上不去。AS5047P是奥地利微电子现在并入ADI的经典磁编码器最早用的人很多性能也确实不错但有个尴尬点现货价格相对高而且在一些项目里采购周期不稳定。MT6816作为国产替代方案性能指标基本对齐价格和供货都有优势这也是我后来在量产项目里逐步切换的原因。不要误会我并不是说AS5047P不好而是对成本敏感的伺服项目MT6816的性价比更突出。3.2 不同极对数电机的适配逻辑伺服电机极对数常见有3对极、4对极、5对极甚至更多。磁编码器读到的机械角度要换算成电角度公式很简单电角度 机械角度 × 极对数。MT6816的SPI读出的是机械角度绝对码你需要在MCU里做一步换算然后通过查表或者数学运算得到电角度供FOC使用。这里有个容易忽略的坑磁编码器的角度数据是单圈的电机转轴和编码器磁铁同步旋转一圈就是一圈。如果你的应用需要多圈计数得靠外部计数器或者MCU配合ABZ信号来处理。MT6816支持ABZ输出但我个人更推荐用SPI读绝对角度配合MCU里的定时器做圈数记录这样可以同时拿到绝对位置和累积圈数逻辑更清晰。对于低极对数的电机比如2对极或者3对极位置环的精度要求通常更高因为机械角度到电角度的放大倍数小同样的机械角度误差对应更小的电角度误差容错空间更小。所以选型时不能只看芯片本身的分辨率还要把极对数放进去算一个有效位置分辨率。举例来说MT6816是14位分辨率单圈4096个码如果只用12位到16384个码14位4对极电机每转有65536个电角度步进驱动一个常规伺服电机这个分辨率绰绰有余。3.3 同门产品之间的选型陷阱MT6816这个型号其实是个家族内部有细分版本。比如有些后缀提供的是SPIABZ输出有些只有模拟正余弦输出有些支持PWM输出。我遇到过朋友买回来发现引脚定义不对、输出格式和自己MCU的接口不匹配被迫改板非常耽误事。我的建议是选型一定要看完整的数据手册确认你的主控支持哪种接口。如果你用的是带独立SPI外设的MCU优先选SPI输出版本因为读回的是绝对角度码处理起来最舒服。如果主控SPI资源紧张选ABZ版本搭配正交解码器也可以但绝对角度的优势就打了折扣。如果只是为了做低成本风机或者泵类的速度反馈PWM输出版本够用了反正不需要精确的位置环。4. 硬件设计时的关键细节径向充磁、气隙和信号走线4.1 磁铁选型和充磁方式对精度的影响磁编码器的精度芯片只占一半另一半在磁铁和结构上。MT6816推荐搭配径向充磁的圆饼磁铁或者轴向充磁的磁环这个不能搞错。很多第一次用的人买了个普通的轴向充磁场磁铁往上一贴发现输出角度非线性严重还以为是芯片坏了。磁铁的选择有几个硬指标磁钢材料钕铁硼N35以上就够、直径要和芯片封装尺寸匹配一般直径6mm到10mm比较常见、充磁方式径向或轴向要和芯片敏感方向匹配、表面磁场强度MT6816手册里有一个输入磁场强度范围一般要求在几十毫特斯拉到几百毫特斯拉之间。我在实际项目中用的是一颗直径8mm、厚度3mm的径向充磁钕铁硼磁铁通过专用的电机轴端固定座压入确保磁铁中心和芯片中心同轴。这里有个重要的安装公差要求一般厂家会标注同心度误差控制在0.1mm以内装偏了会产生谐波误差导致角度非线性变大。精度要求高的场合还得做偏心补偿标定。4.2 气隙安装高度的宽容度与限制很多工程师喜欢把气隙往小里调觉得磁铁离芯片越近信号越强。这个思路在霍尔时代是对的霍尔信号确实对磁场强度敏感气隙变化直接影响输出。但在MT6816这种磁阻编码器上事情不一样了它本质测的是磁场方向不是强度。气隙太小反而可能出问题磁铁装得太近磁场强度超了芯片内部PGA的输入范围输出反而饱和失真。气隙太大磁场强度低于灵敏度门限角度数据噪声变大。经验值在0.5mm到2.5mm之间比较合适具体以手册给出的磁场强度范围和磁铁规格来推算。我习惯的做法是先按磁铁规格估算中心磁场强度再留出装配公差余量选一个中间值作为设计气隙比如磁铁厚度3mm安装间隙1.2mm磁铁表面到芯片表面的距离大约4.2mm算上磁铁和PCB的厚度差。一个重要提醒气隙的一致性直接影响一致性。如果电机批量生产中每个的安装间隙都不一致那每台电机的角度零偏都不一样产线就得逐台标定这是成本的大头。所以结构设计上一定要保证磁铁端面和传感器封装之间的间距严格受控最好用定位工装而不是靠人工手贴。4.3 PCB布局和信号完整性预防MT6816的输出信号是模拟差分信号如果是正余弦输出版本或者数字SPI信号。模拟差分的好处是抗干扰强但前提是PCB布线要对称、等长、远离功率级的开关节点。伺服驱动器里最不缺的就是di/dt噪声源MOSFET桥臂的开关节点、电机三相线的电流回路都是强干扰源。我的布局经验是做在电机尾部的编码器小板上和驱动板分开用屏蔽FPC或者双绞线连接。如果必须在同一块板上编码器区域要加铺地保护信号走线和PWM走线分两层并用地平面隔开SPI的时钟线不要靠近电机三相出线。另外芯片电源引脚一定加去耦电容容量按手册要求一般是0.1uF有些设计还会并联1uF到10uF的电解电容做低频去耦。还有一个容易被忽略的地方电机内部温度可能到85度甚至更高MT6816的温漂系数需要纳入全温度范围的误差预算。如果你的控制精度要求特别苛刻可以考虑做温度补偿表。但我实测下来MT6816的温漂控制得不错在-40度到85度范围角度漂移大概在0.5度以内大多数伺服应用不需要额外补偿。4.4 磁铁和芯片对位的零偏处理就算结构设计再用心磁铁中心也不可能和芯片中心完美重合PCB贴片也有位置偏差。所以每一台设备装出来机械零度和芯片读出的角度之间都有一个固定的偏置角。处理办法是在固件里做一次零点校准设备组装好后给电机通一个已知方向的电流让转子转到一个已知位置读出此时编码器的角度码存到Flash里作为零偏值。之后每次读取原始角度减去这个零偏就得到相对机械原点的绝对角度。这个过程听起来简单但量产时一定要做成自动化工位效率才高。5. 软件层面的适配SPI读取时序、角度换算和滤波策略5.1 SPI读取的关键时序和寄存器配置MT6816的SPI读时序不算复杂但要小心几个细节。芯片一般支持最高10MHz左右的SPI时钟模式通常为CPOL0、CPHA0或CPOL1、CPHA1具体以手册为准。读取的时候主控发一个命令字节芯片回传2到3个字节其中包含角度数据帧。我第一次用的时候在网上找了一段现成的驱动代码发现读回来的数据偶尔跳变排查了很久才发现是SPI模式配置不对芯片手册上给的时序图和MCU的SPI外设在极性和相位上的匹配关系我没看仔细。后来把SCK空闲电平和采样沿严格按手册来配问题就消失了。建议你拿到样片先写一个最简单的读取测试程序用逻辑分析仪抓时序确认数据帧格式正确再往下做。还有一个细节MT6816的绝对角度数据是MSB还是LSB在前需要根据手册确认。不同的读写命令对应不同格式。我习惯把角度码读出来后先做一次位操作提取有效位再换算成浮点角度值避免后面FOC里反复计算浪费时间。 换算公式角度值 (编码码值 / 2^14) × 360.0。5.2 角度换算和电角度对齐拿到机械角度后下一步是得到电角度。公式是电角度 机械角度 × 极对数再对360度取模。这里有一个程序上的坑浮点取模和角度归一化容易出现负数必须做好正数化处理。我通常的做法是float mech_deg (float)raw_code / 16384.0f * 360.0f; float elec_deg fmodf(mech_deg * pole_pairs, 360.0f); if (elec_deg 0.0f) elec_deg 360.0f;然后把这个电角度直接喂给Park变换的sin和cos计算。注意电角度的零点必须和电机反电动势零点对齐否则力矩角会偏表现为电流大、出力小、电机发热。解决方法是做一次电机参数辨识或者反电动势检测把编码器的电角度零点校正到正确的电气位置。5.3 滤波策略既要平滑又要不滞后编码器角度用在电流环里时延迟是致命的。电流环带宽通常做到1kHz以上也就是说角度更新周期可能在几十微秒到一百微秒。MT6816的SPI读取本身很快但如果你在软件里加了滑动平均滤波把几个周期的角度值平均一下就会引入相位滞后电流环可能不稳定。所以我的经验是电流环用的角度尽量不做滤波直接读原始角度码。如果担心噪声可以在速度环或者位置环做滤波因为这两环带宽低对相位延时不那么敏感。速度计算的时候用M法或者T法配合一阶低通滤波器截止频率设在几十赫兹到几百赫兹能有效平滑速度反馈又不至于让速度环发飘。如果一定要做角度滤波推荐用锁相环式角度观测器而不是简单滑动平均。把编码器角度作为输入让观测器输出一个平滑且无滞后补偿的角度估值这在高速高加减速的场合特别有用。6. 标定与产线量产环节最容易忽略的三件事6.1 逐台零偏标定必须自动化前面提到零偏校准这里展开说产线怎么做。人工记偏执、手动输入Flash效率低还容易错。我见过的成熟方案是产线工位通过工装给电机施加一个固定方向的直流电流让转子吸合到已知位置然后上位机通过通信接口读取编码器角度计算出零偏值再通过烧录器或者Bootloader直接写入主控Flash。这个流程必须自动化而且要在固件里设计好专门的标定模式。判断标定成功的条件可以是角度稳定性和重复性连续读50次角度码最大值和最小值之差小于某个阈值比如3个LSB才认为转子稳定数据有效。6.2 角度质量监测不能只靠装完测一次电机装好后测试正常不代表用一段时间后还正常。磁铁退磁是缓慢过程轴承磨损会导致转子轴向窜动气隙变大角度误差慢慢增加。所以固件里最好加一个角度质量监测功能定时检查原始角度码的噪声水平如果噪声从正常值明显变大就可以主动报警。我在项目里会在每次上电时做一次粗检电机不转读取角度码100次计算标准差。标准差超过阈值时给出编码器信号异常的警告。这种方法不需要额外硬件成本为零但对事后排障很有帮助。6.3 固件升级和数据记录要预留通道最后一条经验来自一次惨痛教训最初版本固件没有把编码器的原始角度和校准值通过调试接口输出现场出了问题时只能干瞪眼没法判断是机械偏移、芯片损坏还是磁场干扰。后来我在固件里加了一个调试模式可以通过串口以100Hz的频率输出原始角度码、零偏值、温度和角度标准差排障效率一下提上来了。7. 实战中遇到的坑和我的排查思路7.1 角度数据跳变的真正原因有一次做机器人关节模组测试发现编码器在某个特定位置附近角度值会跳变几度但又不是每次都在同一个位置。一开始我怀疑是芯片坏了换了新片还是这样。排查链路是这样的先抓SPI时序确认时序没问题再测供电电压纹波发现纹波有点大但不是致命最后用示波器测量芯片输出的正余弦模拟信号才发现有一路信号在某个角度范围出现畸变。进一步查原因发现磁铁安装座存在约0.3mm的偏心导致磁铁旋转时和芯片的相对位置不断变化磁场方向在某些角度超出芯片的线性范围。把偏心修好之后问题彻底消失。这件事给我的教训是磁编码器看似抗机械误差能力强但也不是无限宽容。结构公差依然要控制在合理范围内尤其是偏心和高低不平对精度的影响非常直接。7.2 温漂导致的高温报警误判另一个案例是在一个高温环境项目中电机温度升到80度以上后偶尔出现位置跳变报警。排查思路是先用温度记录仪测芯片附近实际温度确认是否超过芯片工作温度范围。结果温度在范围内但角度噪声明显变大。后来分析是磁铁在高温下磁场强度下降而芯片内部PGA的增益没有跟着调整导致输入信号幅度降到ADC的有效分辨率以下。解决方法是启用芯片的增益自动调节功能或者换用耐高温等级更高的磁铁材料比如钐钴磁铁。这个案例说明低温环境和高温环境的磁场特性都要提前测试不能只按常温指标选型。7.3 SPI通信偶尔失败的处理策略SPI偶发失败在实际项目中几乎都会遇到但处理方式有讲究。很多人一看到读回的数据校验失败就复位芯片或者重新初始化SPI这是下策。正确做法是允许连续几次失败后切换为错误状态同时保留最后一次有效的角度值用于安全停机。我的代码里SPI读函数会做数据帧校验连续失败3次就触发报错但如果只是偶尔一帧失败直接丢弃用前一帧数据因为100微秒级别的角度延迟对FOC控制影响很小。这个策略兼顾了安全性和鲁棒性。8. 从MT6816延伸出去多圈方案和系统级设计思路8.1 单圈不够用时怎么扩展多圈计数很多伺服应用需要多圈绝对位置比如机器人关节在掉电后即使被外力移动了几圈上电也要知道当前位置。只靠MT6816本身做不到因为它输出的是单圈绝对位置。但可以用一个简单方案在系统里加一个低压降的备份电源给MCU和编码器供电用MCU定时器持续记录圈数变化断电时位置数据存在非易失存储器里。这个方案我实际做过注意点是MCU要能在掉电瞬间保存数据而且编码器供电不能被突然切断导致记录过程出现跳变。如果应用场景要求更高可以直接选用带多圈计数功能的磁编码器方案或者外挂一个磁感应计数芯片配合齿轮结构实现多圈圈数记录。8.2 与驱动器主控的整体配合建议MT6816选型只是一个环节驱动器的整体架构还涉及电流采样、PWM生成、速度环位置环的软件实现。我个人的倾向是编码器接口采用SPI读取配合DMA减轻CPU中断负载角度到电角度的换算放到电流环中断里用查表和快速数学库确保执行时间在10微秒以内。另外一定要在固件里预留编码器故障的安全处理路径比如检测到角度数据异常时驱动器要进入急停或者降额运行模式不能直接以错误角度继续控制电机否则可能损坏设备甚至伤人。8.3 未来趋势国产磁编码器生态和伺服小型化国产磁编码器这几年的进步是肉眼可见的。MT6816的稳定供货让很多中小型伺服厂商有了成本更低的选择而芯片本身的性能也足够覆盖大部分工业伺服和机器人关节的需求。再加上无框电机、一体化关节模组的趋势编码器芯片和电机、驱动器的一体化设计越来越普遍这对体积、功耗、抗干扰都提出了更高要求。有朋友问我要不要等更高位数的磁编码器我的回答是先看应用需求。14位磁编对于绝大多数伺服应用够了16位甚至更高位的方案当然好但成本和复杂度也上去了。伺服系统的精度是整体设计的结果不是靠一颗编码器芯片就能解决。编码器即使做到20位机械结构、电流环、速度环跟不上系统照样表现不出来。就我个人而言MT6816这款芯片在性价比、易用性和性能之间找到了一个不错的平衡点尤其适合中小功率伺服和机器人关节模组。如果你正在做类似的项目希望能从这篇文章里找到几条有用的线索少走我之前走过的弯路。
返回列表