资讯动态

AS5047P磁编码器全模式导出板设计:SPI、ABI、UVW接口验证与PCB布局实践

发布时间:2026/10/6 7:17:19 来源:尧图企业网站定制
做机器人关节、云台或者伺服电机控制角度反馈绕不开编码器。我最早用的是光电编码器装上后确实精度高但怕灰、怕装偏、价格也压不住后来换成磁编码器调试效率一下子高了很多。这次我用立创EDA做了块看起来有点“无聊”的板子——把AS5047P磁编码器的所有输出模式统一引出来再逐项验证一遍。整个过程不复杂但里面对引脚定义、电源接法、布局布线的处理有不少值得记录的地方这篇文章就把设计思路和实测过程完整梳理出来给准备用AS5047P做电机控制、云台或机械臂的朋友一个参考。AS5047P这颗芯片的最大特点是输出模式“全”。它有一颗14位磁角度核心分辨率做到0.0219度同时片上集成了SPI、ABI增量输出、UVW换相信号、PWM输出和小型菊花链通信能力。很多市面上的磁编码器模块只把其中一两路引出来比如只有ABI或者只有SPI实际评估时很不方便。我想要的是一块把“所有模式都引出”的小板子既能单独测SPI又能切到ABI给FOC控制器用还能看UVW波形这样不管是前期验证还是后期嵌入到系统里都不用重复改板。整块板子用立创EDA设计嘉立创打样信号全部按功能分组引到2.54mm排针上配合STM32F103C8T6最小系统板完成验证效果符合预期。1. 这块板子到底解决什么问题1.1 AS5047P能输出哪些信号AS5047P本质是一颗基于霍尔效应的磁旋转编码器芯片它内部通过垂直霍尔阵列感知上方磁铁的旋转角度再在内部做数字化处理。处理完之后角度数据可以通过几套完全不同的物理接口往外送SPI接口14位角度值直接读出0到16383适合MCU直接读取数据密度最高也最常用于校准和状态诊断。ABI增量接口A、B两路正交方波周期代表角度增量I路每转一圈出一个零位脉冲适合接伺服驱动器、PLC高速计数口或者定时器编码器模式。UVW换相接口U、V、W三路信号类似无刷电机霍尔换相信号专门给BLDC/PMSM电机预定位用。PWM输出用占空比表示绝对角度只有一根线也能读角度适合线缆少、抗干扰要求高的场景。这四套接口不是互相替代的关系而是对应不同使用场景。SPI适合系统启动时读绝对角度、标定零位ABI适合运行时给电机驱动器做高速位置环UVW主要配合FOC控制器的电机换相PWM则适合简单系统里省IO口。正因为它功能多才需要一个“全模式引出板”来做系统性评估。1.2 为什么选择“引脚引出”而不是直接做集成很多人会问既然最终要装到电机上为什么不直接把AS5047P放在主板上非要先做一块转接小板我这么做主要出于三个考虑。第一调试成本低。芯片本身是QFN封装中心还有需要正对磁铁的敏感区直接焊在主板上一旦布局不合适或者磁铁安装偏差整块板子都得返工。先做小板可以自由挪位置、换磁铁、调气隙验证清楚再集成返工代价小得多。第二信号可测。直接集成时SPI信号埋在系统里想抓波形得从MCU引脚那边引线观测点不好找。做成小板后每路信号都在排针上示波器探头、逻辑分析仪、万用表想接哪路接哪路验证效率完全不同。第三可复用。这块小板验证完不一定要拆下来。它可以一直作为传感器模块留在测试平台上也可以接不同的主控板反复使用。如果放在立创开源硬件平台上发布别人还能直接复刻省去重新画板的时间。2. 核心原理拆解全模式引脚该怎么设计2.1 电源与去耦3.3V/5V双电压的正确接法AS5047P和很多ams OSRAM的磁性传感器一样对供电比较宽容。芯片上有两个电源引脚分别是VDD3V3和VDD5V实际使用时不要求同时接根据系统电压选择其中一个供电即可。比如你的主控是STM32F103逻辑电平是3.3V那就用VDD3V3供电如果你想直接兼容5V系统就用VDD5V。需要注意两个电源引脚不能同时加上不同电压否则芯片内部会出现不可预期的电流路径轻则工作异常重则损伤器件。板上供电部分我做了两个设计。一是加了可选的0欧跳线通过焊接不同位置的电阻切换整块板子的供电来源这样同一块PCB既能测3.3V系统也能测5V系统。二是在每个电源引脚旁边都放了100nF陶瓷电容同时入口处加了一颗10uF钽电容或MLCC做储能缓冲。磁编码器输出的ABI信号频率高的时候瞬时电流变化会比较快如果电源去耦不够角度读数容易跟着电源噪声一起抖。这个不要去省哪怕只做一块测试板也建议把电容放满。还有一个细节容易被忽略AS5047P的VDD3V3和VDD5V引脚如果有一个没有用到最好也通过一个小电容接地不要直接悬空。从实际测试看悬空引脚附近的电磁干扰会耦合进芯片内部导致角度数据偶尔跳变。虽然影响不一定每次都明显但既然PCB位置够放一颗电容成本几乎为零。2.2 信号引脚分组SPI、ABI、UVW、PWM引脚引出的核心是把同类型的信号放在一起方便接线和排查。我这块板把排针分成四组从左到右依次是电源组、SPI组、ABI组、UVW/PWM组。每组之间用丝印框起来并且标了颜色框或者功能名这样插杜邦线的时候不用每次翻原理图。SPI组的四根信号是CSn、SCK、SDI、SDO。CSn是片选低有效SCK是时钟SDI是主机发给从机的数据SDO是从机返回给主机的数据。AS5047P的SPI是3.3V电平如果你的主控是5V需要做电平转换或者加电阻分压不能直接怼上去。我在这四根线上都加了33欧姆串联电阻位置靠近芯片引脚。这个电阻有两个作用一是抑制信号过冲减少长杜邦线带来的振铃二是万一外部接线短路可以稍微保护一下芯片IO。ABI组引出A、B、I三根线。A和B是正交编码信号相差90度I是索引信号每转一圈输出一个脉冲。UVW组引出U、V、W三根线用于电机换相。PWM输出单独引出一根线同时留了一个对地的测试点方便示波器探头直接压上去测量。另外把芯片的磁场诊断输出MAG_HI和MAG_LO也引出来了如果板上接了LED转磁铁时能看到磁场强度过高过低的状态变化对判断磁铁安装位置非常有用。2.3 完整的引脚引出表排针组信号名方向说明电源VDD输入3.3V或5V由板上跳线选择电源GND输入系统地SPICSn输入SPI片选低有效SPISCK输入SPI时钟最高10MHzSPISDI输入主机到从机数据SPISDO输出从机到主机数据内含14位角度ABIA输出正交编码A相ABIB输出正交编码B相ABII输出每转一圈一个零位脉冲UVWU输出换相信号UUVWV输出换相信号VUVWW输出换相信号WPWMPWM输出占空比表示角度诊断MAG_HI输出磁场过强指示诊断MAG_LO输出磁场过弱指示引出表看起来简单但它决定了整块板的可用性。排针的间距我统一用2.54mm方便直接插杜邦线到STM32F103C8T6最小系统板。每组信号之间留了一个空的GND引脚作为隔离和接地参考测量高频ABI波形时探头的地线可以直接夹在就近的GND上不用绕很远。这个细节在测ABI信号时非常有用探头地线接得远波形上的噪声会大很多。3. 立创EDA实操从原理图到PCB3.1 原理图元件放置与连线在立创EDA中新建工程后第一步不是画原理图而是先确认元件库和封装。AS5047P在立创商城可以搜到商城里的元件一般已经关联了封装可以直接放置到原理图里。如果用的不是商城元件或者从其他EDA软件导入务必检查封装是不是与实际采购的芯片一致尤其是QFN封装的中心焊盘和引脚编号差一个引脚后面焊接就难办了。原理图结构按功能模块摆放我习惯把电源部分放在左上角主芯片放中间排针按接口类型分布在右侧。原理图上的每个信号网络名要与排针引脚一一对应比如SPI_SCK、SPI_SDI、ABI_A、UVW_U不要只写SCK、A这种短名否则PCB布线时不容易分辨。网络名建议全部大写字母和数字之间用下划线分隔立创EDA对网络名大小写是敏感的这一点从最开始就要养成好习惯。芯片本身不需要额外的外部器件但我在每一个电源引脚旁边都放了一颗100nF电容在总电源入口放了一颗10uF电容。MAG_HI和MAG_LO各接了一个LED到地串了1k电阻限流。这个设计对实际测试很友好接通电源后如果磁铁靠近芯片能直接看到LED亮度随角度旋转变化不用示波器也能初步判断芯片有没有工作。排针引脚上我额外加了一排0欧电阻作为“可断点”调试时如果怀疑某个信号被排针短路直接拆掉对应0欧电阻就能隔离。3.2 PCB布局与星型接地PCB布局这块AS5047P和普通数字芯片有本质区别。它靠磁场感应角度所以芯片正上方的电磁场完整性非常重要。PCB上芯片周围不要走大电流的功率线不要放会产生较强磁场的电感或大电流回路芯片正下方中心区域也不要铺连续的铜皮否则会形成涡流轻微影响磁场分布角度精度会下降。我把芯片放在板子正中央四周按功能分区布置排针。电源去耦电容尽量靠近对应电源引脚且电容到电源引脚的走线短而粗最好是先经过电容再到芯片引脚这样能最大限度降低电源回路的感抗。所有排针的地引脚我用一根较宽的走线统一接到主GND点再从主GND点通过多个过孔连接到背面地平面这就是星型接地的思路——把所有地回路先汇聚到一个单点而不是让各路地电流各自找路径回流。实际在立创EDA里布星型接地时我并没有只靠软件自动覆铜而是先把每个地引脚用走线单独引到主GND点然后再铺地铜。如果一上来就大面积铺铜软件会就近打很多过孔把所有地连起来表面上接地很充分但数字信号的回流电流就会在地平面上乱窜甚至可能影响MAG诊断引脚的模拟电平。这块板的信号速率不算高SPI只有10MHz星型接地的收益未必能用示波器直观看出但它避免了地环路带来的偶发角度抖动。拿着磁铁旋转时数据偶尔跳几个LSB很多时候就是地回路太乱导致的。3.3 布线顺序与制造文件输出布线顺序我按“电源→地→信号”来做。先布电源线和地线把整块板的电流通路确定好再布SPI信号然后是ABI、UVW、PWM。SPI的SCK和SDO我尽量避免长距离平行走线如果必须平行间距至少拉开三倍线宽这样可以减小串扰。ABI的A、B、I三根线保持基本等长因为增量编码器最怕的就是A、B相位差不准走线长度差太大高速转动时计数就会出错。立创EDA的DRC检查一定要认真跑一遍重点看安全间距、走线宽度、过孔到焊盘的距离。2层板的话我习惯把信号走顶层底层大面积铺GND地过孔尽量靠近芯片引脚减小回路面积。板子尺寸控制在25mm×25mm以内厚度用1.6mm。如果你计划把编码器直接贴在电机尾部板子厚度建议换成0.8mm或1.0mm因为磁铁安装高度有限板子越薄留给磁铁和芯片之间的气隙调节空间越大。生成制造文件时在立创EDA里直接选择“PCB下单”或导出Gerber交给嘉立创打样。如果有金属外壳安装需求可以在PCB四角加M2安装孔。我这块测试板没加孔直接靠杜邦线悬空测试反而更好调整。4. 验证流程把每一路输出都跑起来4.1 板子上电前检查拿到打样回来的PCB先别急着焊芯片。我的习惯是先用万用表测量电源排针的正负极之间阻值确认没有短路然后再焊芯片。AS5047P是QFN封装如果手工焊接务必检查引脚之间有没有锡桥粘连。焊完之后上电前再量一次电源对地阻值如果发现阻值异常低大概率是焊连了。确认没有短路后接上3.3V电源用万用表量芯片供电引脚电压是否正常。此时如果MAG LED有微弱反应或者用示波器能看到PWM引脚有输出说明芯片已经开始工作。需要注意的是AS5047P出厂时不一定每一路输出都默认使能尤其是ABI、UVW这些需要供电后通过寄存器配置才能工作的功能第一次上电默认状态可能只是SPI和PWM可用。不要一上来就因为没有ABI波形而怀疑板子坏了。4.2 SPI角度读取验证SPI验证我用STM32F103C8T6最小系统板接线是PA4接到CSnPA5接到SCKPA6接到SDOPA7接到SDI共地供电用3.3V。SPI模式选择CPOL0、CPHA1也就是时钟空闲为低、第二个边沿采样。AS5047P一次传输16位芯片会把14位角度数据在SDO上移出。代码里我写了两个函数一个拉低CSn一个通过SPI发送数据并同时接收返回值。读角度时CSn拉低后连续发送两个字节收到的16位数据取低14位就是当前角度值。旋转磁铁角度数值会从0递增到16383继续旋转会回到0这个过程是一个完整的360度循环。实测下来静止时角度值偶尔会有1到2个LSB的跳动这属于正常现象毕竟磁铁表面不可能绝对均匀外部磁场也有轻微波动不用一看到数据跳动就觉得板子坏了。如果想把SPI读取做到项目里我建议在这个阶段顺便把零位逻辑一起考虑。AS5047P支持通过寄存器设置零位也可以用最原始的软件归零方法系统上电后让电机转到机械零位读取当前角度值后续所有角度读数都减去这个值。这个方法不需要编程芯片验证阶段最省事。4.3 ABI增量信号验证ABI信号验证我用了定时器编码器模式。STM32F103的TIM2支持编码器接口可以把PA0和PA1配置成编码器输入A相接PA0B相接PA1然后读取TIM2的CNT寄存器就能得到计数。接线时注意方向如果正转时计数递增、反转时计数递减那说明A、B相位正确如果方向反了不需要改硬件把A和B在代码里交换一下就行。I信号比较特殊它每转一圈输出一个脉冲而且这个脉冲的位置对应磁铁的零度位置。验证时我直接用示波器观察磁铁慢速旋转能看到I引脚出现一个周期性的窄脉冲。I信号和A、B是同步输出的不是SPI读出来的所以在一些没有SPI接口的驱动器上系统可以依靠I信号做每圈归零消除长时间运行的累计误差。这个功能在打印机的纸张定位、雕刻机主轴角度同步里有很大用途。需要注意AS5047P的ABI输出分辨率可以通过寄存器配置出厂默认通常不是最大分辨率。如果你需要更高的每转脉冲数要先通过SPI写入配置寄存器让内部的分频器改变输出脉冲密度然后重新上电或触发一次更新。这块我在第一次测试时忽略了导致计数分辨率只有预期的一半后来查手册才发现是配置问题不是硬件问题。4.4 UVW与PWM输出验证UVW信号验证最简单不需要定时器不需要SPI。把U、V、W三根线分别接到STM32的三个GPIO输入配置成上拉输入然后用一个小的径向磁铁在芯片上方慢慢旋转。程序里直接读GPIO的电平组合正常情况下会看到U、V、W按顺序循环出现6种状态组合每种状态间隔约60度电角度。这组信号可以直接用于无刷电机的120度换相控制。PWM验证用定时器输入捕获。把PWM引脚接到STM32的TIM3_CH1配置输入捕获模式测量高电平时间和整个周期计算出占空比。占空比和当前角度成线性关系旋转磁铁时占空比跟着变。PWM信号的优势是抗干扰能力强、接线少适合电滑环或者线缆数量受限的转台结构。我特别建议在验证时把SPI读到的角度和PWM测到的占空比换算出来的角度放在同一个坐标系里对比。如果两者曲线基本重合说明芯片内部不同输出路径的同步性没有问题。如果差异明显大概率是PWM测量代码里有误差比如输入捕获中断响应不及时。5. 常见问题与排查技巧实录5.1 角度数据跳变、静止噪声大这是磁编码器最容易被吐槽的问题。实际原因通常有三个磁铁没有正对芯片中心、磁铁离芯片高度不合适、供电纹波偏大。第一个问题可以用透明贴纸把磁铁贴在板上方白纸上画好中心十字线来对位第二个问题需要看芯片手册里的磁场强度范围磁性太强会触发MAG_HI报警磁性太弱会触发MAG_LO报警调到哪个报警都不亮的状态就行第三个问题换稳压电源或者加大去耦电容能改善。还有一个容易忽略的原因是SPI读取时序太紧。如果MCU时钟频率较高SCK线较长SDO上的数据建立时间不够读回来的角度就会偶尔错几个位。把SPI时钟降到1MHz再读数据立刻稳定下来那你基本可以确认是时序余量问题而不是芯片问题。5.2 SPI通信不成功SPI不通信先量CSn上的电平。很多情况下芯片没有工作是因为CSn被外部电路拉低或者悬空导致状态不确定。CSn信号线上建议加上拉电阻连接到VDD确保空闲时为高电平。另外AS5047P的SDO是推挽输出还是开漏不同批次可能存在差异如果SDO一直拉不高可以外接10k上拉电阻。排查时用逻辑分析仪抓CSn、SCK、SDO三根线是最快的。正常读角度时CSn拉低期间SDO在第一个SCK上升沿后就应该开始输出数据。如果CSn已经正确拉低但SDO没反应检查芯片供电和焊接如果SDO有数据但MCU读出来不对检查SPI的CPOL和CPHA配置。5.3 ABI方向反了、计数不对ABI方向反不是故障是接线定义差异。A、B两路谁在前谁在后取决于从哪一头看磁铁旋转方向。如果在电机上安装从电机正面看和从背面看旋转方向就是反的。程序里预留一个direction变量或者做成宏定义软硬件对不上时直接取反即可。计数不对则要检查A、B相位差。正常正交编码信号A和B的上升沿之间应该相差90度如果焊接时有虚焊或者走线短路相位差可能就乱了。用示波器双通道同时看A、B波形能明显看出正常和异常的区别。还有一点如果程序里用了定时器编码器模式初始化时要把CNT清零否则上电时会叠加未知初值。5.4 QFN焊接容易连锡QFN封装对新手焊接不太友好引脚藏在封装底部视觉上不好判断。我试过比较实用的方法是先给PCB焊盘上锡薄薄一层然后用热风枪把芯片吹上去。风枪温度调到300度左右风速调小看到引脚旁边的焊锡略微融化并出现光泽说明已经焊好了。如果有连锡可以用助焊剂加烙铁拖焊把多余焊锡带走。焊完后不要急着上电用万用表蜂鸣档量一下相邻引脚之间有没有短路重点量VDD和GND之间。AS5047P这颗芯片如果电源和地接反或者短接损坏概率很大所以焊接完的检查比焊接本身更关键。5.5 星型接地的实际效果严格来说这块板子用的星型接地不是教科书里那种“单点接地”的极端形式而是在多层板普遍做法和单点汇聚之间取了一个平衡。芯片地、排针地、去耦电容地都先单独走到主GND点然后主GND通过一排过孔接到背面完整地平面。这样做的好处是各路的回流电流不会在芯片附近的顶层互相交叠避免了高频数字信号和磁场读出电路之间的耦合。实践中的表现是不管磁铁快速旋转还是静止不动SPI读取的角度数据都比较平稳没有出现那种周期性跳变。如果一上来就直接大面积覆铜、铺满过孔其实大部分情况下也能工作只是排查问题时少了一些控制变量。对于这类需要和磁场传感器打交道的板子接地处理保守一点没有坏处。最后再分享一个小技巧如果你后面要把这块板子放到电机尾部直接用建议在PCB上留两个额外的测试点一个是GND一个是SPI的SDO。这样调试时不需要把整个电机拆下来探针直接点在测试点上就能读到数据。我第一次没留测试点电机装进外壳后想抓波形只能把线硬生生塞到排针里非常痛苦。后来重新改版加上了调试体验完全不一样。AS5047P这种全模式引脚引出板真正用起来之后会发现板子本身不复杂复杂的是板子在不同场景里的接线方式。把每路信号都提前引好、标清后续不管接STM32、接伺服驱动器还是接FPGA都省下大量翻手册和飞线的时间。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑