ARTICLE DETAIL

资讯详情

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

磁编码器实战指南:从原理到AS5047P选型调试全解析

磁编码器实战指南:从原理到AS5047P选型调试全解析 做了这么多年运动控制和嵌入式开发编码器这东西我一直觉得是“用的时候简单选的时候头疼”的典型代表。以前做伺服项目光电编码器是主流娇贵、怕脏、安装要求高稍微有点震动或者油污就容易丢码。后来接触到磁编码器尤其是像AS5047P这类芯片出现之后整个系统的设计思路都变了——不用再担心光栅被污染也不用费劲对光轴一颗小磁铁加一个芯片就能搞定绝对角度。这篇文章就把我这几年用磁编码器的经验整理一下从原理到选型再到实际调试踩坑一次讲透。不管你是做机器人关节、云台、电机FOC控制还是工业传感器只要想用磁编码器替代传统方案这篇的内容应该都能帮上忙。我会从基础原理聊起再结合AS5047P这个型号讲寄存器配置、输出模式、误差补偿最后把常见的问题和排查方法列成清单方便直接对照使用。1. 磁编码器到底是怎么工作的1.1 从“测角度”这个需求说起不管是电机转子位置、机械臂关节角度还是云台方位本质上都是在测一个旋转体的绝对或者相对角度。传统做法是光电编码器一个码盘上刻了很多透光和不透光的条纹发光管照过去接收管收到信号后数格子。这种方式精度能做到很高但问题也很现实——码盘怕油污、怕灰尘、怕震动机械结构上必须精密轴承否则码盘和读数头一碰就废。磁编码器的思路完全绕开了这些麻烦。它不再用光而是用磁铁产生磁场传感器芯片直接感知磁场方向的变化。一个很小的径向充磁圆柱磁铁装在转轴末端芯片放在正上方或正前方几毫米的位置转轴一转磁场方向跟着转芯片通过内部算法算出角度。结构简单、没有磨损件、抗污染能力强这是它最大的底气。1.2 磁编码器的三种测量原理市面上的磁编码器方案按检测原理大致可以分三类。霍尔效应式这是最基础的方式。霍尔元件能检测垂直于芯片表面的磁场强度布置几个霍尔元件通过差分信号得到角度。优点是成本低、芯片方案成熟缺点是受磁场强度波动影响较大精度通常不高而且对安装间隙比较敏感。磁阻式AMR各向异性磁阻效应利用磁性材料电阻随磁化方向变化这一特性。AMR传感器对磁场方向敏感而不是对强度敏感所以温度特性和一致性比较好。常见芯片像TLE5012B就是这类。它的特点是可以做到比较高的分辨率在伺服和汽车市场用得多。AMR有个典型特性是输出周期为180度也就是转一圈会出现两个电周期芯片内部会做算法处理来还原0到360度的绝对角度。巨磁阻式GMR/TMR比AMR灵敏度更高功耗更低。TMR芯片尤其适合低功耗应用。不过成本相对高一些而且TMR对磁铁饱和磁场的要求也更高磁铁装歪了误差会明显变大。1.3 分辨率、精度和重复精度别再搞混选型的时候经常有人把分辨率当成精度其实差得远。分辨率是输出角度值的“细分程度”比如AS5047P号称14位分辨率也就是每圈有16384个计数理论上最小能分辨360/16384度约等于0.0219度。这个值决定的是你读数“刻度”多细。精度是实际角度和真实角度之间的偏差受磁铁安装偏心、芯片非线性、磁场畸变等因素影响AS5047P实际精度通常在0.1到0.5度这个量级好的情况下能做到0.05度左右。重复精度是回到同一个位置时输出角度的一致性这个指标通常比精度好很多因为很多系统误差是固定的可以通过校准消除。做伺服控制时真正影响闭环稳定性的往往是重复精度而不是绝对精度。指标含义典型值以AS5047P为例分辨率输出角度的细分刻度14位 / 16384 LSB每圈绝对精度测量值与真实值的偏差±0.1°左右安装优良时重复精度同一位置多次测量一致性远优于绝对精度温漂温度变化对输出影响与磁铁和芯片相关1.4 为什么需要“绝对式”增量编码器断电就归零每次上电都要找原点这在很多工业场景下是不可接受的。绝对式磁编码器则是一上电就能输出当前绝对角度不需要找零。这意味着设备掉电再上电控制系统立刻知道关节在哪个位置省掉了一堆回零流程安全性和效率都有明显提升。AS5047P就是一款绝对的磁角位置传感器同时又支持增量ABI输出所以它能兼顾绝对位置读取和增量编码器接口对接。2. 磁编码器和光学编码器到底怎么选2.1 光学编码器的优势和短板光学编码器在超高精度场合仍然是王者比如光刻机、天文望远镜、高精密转台分辨率可以做到20位以上精度能做到角秒级。但它的使用条件相当苛刻码盘表面一旦有灰尘或油雾信号马上劣化震动会导致码盘与读数头间距漂移安装时要求轴系精度高否则码盘偏心会直接带来大的读数误差。这就导致光学编码器的成本很难降下来——精密加工、密封外壳、洁净环境装配每一环都在烧钱。2.2 磁编码器到底牺牲了什么磁编码器的劣势主要在两个方面一是绝对精度达不到光学高端产品的水平二是对磁铁和安装位置更敏感。但胜在结构简单可靠、成本低、抗污染、抗震动甚至可以在油污环境下工作。拿实际项目来说我之前做一款AGV驱动轮的电机反馈原设计用的光电编码器经常因为粉尘导致读数不稳换成磁编码器加密封磁铁之后再也没有因为这个返工。2.3 常见的磁编码器芯片方案对比型号原理分辨率接口特点AS5047P霍尔集成算法14位SPI / ABI / UVW / PWM静音PWM输出适合电机控制AS5600霍尔12位I2C / 模拟输出低成本适合简单角度检测TLE5012BAMR15位SPI / IIF / PWM低功耗角度误差补偿好MA730GMR14位SPI / ABI / PWM兼容性好安装高度宽容度高MT6816磁阻14位SPI / ABZ / UVW国产方案性价比高从选型角度做FOC电机控制我优先推荐带UVW输出的芯片可以直接替换霍尔传感器做高精度绝对值读取用SPI模式最方便如果追求低成本简单应用AS5600这类I2C接口的芯片就够了。3. AS5047P核心特性与硬件设计要点3.1 为什么我特别推荐AS5047PAS5047P是奥地利微电子ams推出的一款14位磁角位置传感器最大特点是集成了DAEC动态角度误差补偿算法在高达28k rpm转速下还能保持不错的角度输出精度这个对高速电机控制非常重要。另一个特点是支持多种输出模式既能当绝对编码器用也能当增量编码器用还有专门为电机控制设计的UVW换相输出和PWM输出。3.2 磁铁选型与安装要求磁铁是整个编码器系统里的关键器件很多人装完误差大十有八九是磁铁这里出了问题。AS5047P推荐使用直径6mm、厚度2.5mm左右的径向充磁圆柱磁铁材质最好是钕铁硼NdFeB剩磁强度一般在200mT到500mT之间。磁铁必须径向充磁也就是磁场方向垂直于圆柱轴线并且绕着圆周呈360度均匀分布。如果买到了轴向充磁的磁铁芯片读出来的角度就是不对的。安装时要让磁铁中心尽量对准芯片中心垂直高度建议控制在0.5mm到3mm范围内。高度太低可能超出芯片线性测量范围太高则磁场太弱信号不稳定。注意AS5047P芯片顶部有一个标记点PCB布线时要确保磁铁旋转中心和芯片中心在垂直投影上尽量重合。我实测过安装偏心0.5mm时绝对角度误差可能会增加0.2度以上。3.3 外部电路设计重点AS5047P供电范围是3.3V或5V我一般用3.3V以兼容MCU。电源引脚旁边要加0.1uF去耦电容最好再并联一个4.7uF电容电源质量直接影响内部ADC的稳定性。VDD3V3引脚是芯片内部稳压输出虽然是给内部电路用的但也可以给外部基准参考不过建议只接去耦电容不要拉电流给其他芯片。如果使用SPI模式SCLK最高能到10MHz读角度非常快。但SPI的CS引脚必须正确拉低否则数据会乱掉。3.4 安装偏心和气隙如何影响精度安装偏心和气隙是系统误差的两个主要来源。偏心是指磁铁旋转中心与芯片中心不完全重合这个误差在角度域表现为一次谐波。气隙是磁铁表面到芯片表面的距离。气隙变化会改变磁通密度如果磁铁本身磁场强度随角度不均匀角度输出就会出现非线性。建议在机械设计时把气隙公差控制在±0.1mm以内这样对精度的影响才不明显。3.5 校准能纠正多少误差有个好消息AS5047P内部集成了自动线性化和增益校准功能可以补偿一部分安装误差和磁铁不均匀产生的误差。但只能做一阶补偿对于偏心导致的二次谐波效果有限。要求高的话可以自己在系统层面做校准比如用高精度光学编码器作为参考把磁编码器转到各个角度记录误差表然后软件插值补偿。这个方法虽然多了标定流程但能把精度从0.3度提升到0.05度级别很值得做。4. AS5047P的寄存器配置与角度读取实战4.1 寄存器地址先记牢AS5047P的寄存器是通过SPI访问的读命令格式为“前缀 14位寄存器地址”写命令格式为“前缀 14位地址 数据”。有几个寄存器是必须要知道的0x3FFFANGLE角度数据寄存器14位有效数据0x3FFEANGLEUNC未校准的角度原始数据0x0017ABI配置寄存器0x0018UVW配置寄存器0x0019SETTING1包含DAEC、噪声滤波等设置0x001ASETTING2包含PWM频率等设置0x001CERRFL错误标志寄存器4.2 读取角度值的SPI示例代码下面这段是用STM32的硬件SPI读取AS5047P角度值的核心逻辑我直接给实际能跑的版本。#define AS5047P_ANGLE 0x3FFF #define AS5047P_READ 0x4000 // 读命令标志位 uint16_t as5047p_read_reg(uint16_t reg) { uint16_t cmd reg | 0x4000; // 最高位置1表示读 uint16_t rx 0; HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_TransmitReceive(hspi1, (uint8_t*)cmd, (uint8_t*)rx, 2, 100); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); return rx; } uint16_t as5047p_get_angle(void) { return as5047p_read_reg(AS5047P_ANGLE) 0x3FFF; } float as5047p_get_angle_deg(void) { uint16_t raw as5047p_get_angle(); return (float)raw * 360.0f / 16384.0f; }这里有个细节读0x3FFF寄存器时返回的数据其实有两部分高16位是本次读到的角度低16位是上一次读到的角度。因为SPI是移位方式命令发出去之后芯片在SCLK边沿把数据移出来。如果只需要角度直接取高16位是没问题的但如果你想做“回读校验”可以对比低16位是否和上一次一致用来判断通信是否稳定。4.3 ABI输出模式怎么配置ABI是增量编码器的A/B/Z信号AS5047P的ABI输出可以配置分辨率倍数比如1倍、2倍、4倍可调。通过寄存器0x0017来配置。比如你要设成4倍频输出代码如下uint16_t abi_config 0x0004; // 4倍频 as5047p_write_reg(0x0017, abi_config);ABI输出的好处是可以直接接到很多驱动器/控制器的编码器接口上不需要改固件。但要注意ABI输出是增量信号断电后位置丢失要靠Z信号或者上电读SPI来恢复绝对位置。4.4 UVW输出与PWM输出UVW输出用于替代霍尔传感器做电机换相。AS5047P支持1对极到7对极电机的UVW配置。电机极对数不同UVW信号的扇区不同配置时要和电机的极对数严格对应否则电机会抖动甚至反转这属于低级错误但在现场经常碰到。PWM输出模式适合不想用SPI又想拿到角度信息的场合。PWM周期可以配置典型配置是占空比0%到100%对应0度到360度。这种模式抗干扰能力比模拟电压强接线也就一根线很适合做云台角度反馈。4.5 DAEC动态角度误差补偿要不要开DAEC是AS5047P的招牌功能专门补偿高速旋转时的动态角度误差。电机转速很高时由于内部信号链处理需要时间输出角度会滞后于实际角度DAEC就是把这个滞后补回来。寄存器SETTING1里的DAEC相关位可以配置开关和模式。低速应用开不开无所谓但像无刷电机FOC控制转速超过5000rpm后DAEC开关前后的角度差肉眼可见开着的电流波形明显平整很多。代价是加了一点内部延迟对于低速高精度定位来说反而是关掉DAEC更好因为延迟会引入相位误差。我的建议是转速不高或者定位场景关闭DAEC高速电机控制开启DAEC并选择合适的补偿模式。5. 实测中的常见问题与排查技巧5.1 上电读角度值一直在跳这个问题出现的频率最高。先区分是“跳”还是“漂”。跳是指同一个位置上电多次角度不一样这个往往是供电或SPI时序问题。漂是指上电后温度变化导致角度缓慢变化那就是磁铁材料温漂问题。供电问题排查步骤用示波器看VDD引脚纹波3.3V下纹波最好小于50mV。检查去耦电容是否靠近电源引脚太远了效果大打折扣。检查SPI空闲时CS是不是高电平必须保证CS拉高时SCLK不会乱跳。如果是磁铁温漂换用温度系数更低的钕铁硼磁铁或者做温度补偿。5.2 角度输出非线性误差曲线像S形出现S形误差曲线大概率是磁铁充磁不均匀或者靠近外部铁磁性材料。磁铁周围不能有铁质螺丝、轴套这些东西会改变磁路导致芯片感应的磁场方向发生非线性畸变。排查方法很简单把磁铁和芯片单独拿出来在木质或者塑料工作台上转一圈测一下如果误差曲线变好很多那就是周围金属件的问题。5.3 偏心导致的误差怎么补偿偏心误差在角度域表现为一次谐波也就是误差围绕真实角度转一圈出现一次正弦波动。做高精度项目我一般会在机械装配后做一次整圈标定。标定流程是用高精度参考编码器或者分度头作为基准。让磁编码器从0度开始每10度记录一次误差。把误差曲线拟合或者存成查找表。软件里根据当前角度查表修正。这个流程只需要写个小脚本就能完成效果立竿见影。实测一台原本精度0.35度的设备标定后能到0.05度以内。5.4 ABI输出有毛刺驱动器偶尔报警ABI信号毛刺一般来自两个地方一是SPI和ABI同时使用时SPI读操作干扰了ABI输出二是硬件上A/B线没有上拉电阻。AS5047P的ABI引脚是开漏输出使用必须接上拉电阻阻值建议1k到4.7k具体看线长。线长超过20cm时建议加RC滤波或者用差分传输否则高速时信号完整性很难保证。5.5 常见问题速查表现象可能原因处理办法角度值跳变电源纹波大 / SPI时序不稳加强去耦检查CS和SCLK时序上电角度不准磁铁装反 / 偏心过大检查磁铁充磁极性重新对中角度非线性周围铁磁干扰 / 充磁不均远离金属件更换磁铁转速高时角度滞后DAEC未开启配置SETTING1寄存器开启DAECABI信号毛刺开漏无上拉 / 线太长加上拉电阻缩短走线SPI读回全FF或0CS引脚悬空 / 接线错误检查CS上拉用示波器看MOSI5.6 几个必须避开的坑第一个坑磁铁随便买。淘宝上写着“钕铁硼圆片”的很多是轴向充磁直接装上去角度是完全错的。一定要买标明“径向充磁”并且适合编码器用的磁铁。第二个坑传感器芯片正下方最好不要铺大面积的铜皮。一些PCB设计软件自动铺地会铺到芯片底下这会改变天线效应和地环路对磁场测量有细微影响。第三个坑SPI读取频率和电机PWM频率别靠太近容易互相干扰。实测下来把SPI的SCLK推到5MHz以上、PWM频率在20kHz左右时两者基本没什么串扰。第四个坑AS5047P的电源域和电机电源域要做隔离。别省那点功夫电机启停瞬间的大电流会造成地弹轻则角度跳一个LSB重则直接导致芯片复位。6. 实际项目中的性能表现与优化建议我手里有个项目是做两轴云台的原来用光电编码器加机械限位成本高、装配麻烦。后来改成AS5047P磁铁直连电机后轴芯片贴在定子端盖上间隙控制在1mm。装配时间从原来的30分钟降到不到3分钟整机精度完全满足要求。还有一个是无刷电机FOC控制项目用AS5047P的SPI模式读取14位绝对角度配合UVW信号做初始换相。因为不需要额外装霍尔电机长度短了一截扭矩密度提升明显。这条产线到现在跑了大半年没有出现一例编码器相关的失效。如果你也在用或者打算用AS5047P我的建议是第一版PCB一定要留出SPI调试接口哪怕最后用不到调试时会救你命。磁铁和芯片中心对准的工装不能省手工目检靠不住。有条件就在最终装配状态下做一次整圈标定效果比换更贵的传感器还明显。寄存器配置改成宏定义写在头文件里方便以后换芯片或者调模式。磁编码器这套东西说简单确实简单两根线一个磁铁就能出数据说复杂也很复杂误差来源从磁铁到PCB到周边金属件无处不在。但摸清原理、踩过几次坑之后它就是那种让你再也不想用回光电方案的可靠选择。
返回列表