☰
AS5047P磁编码器全模式引出板设计:原理、布局与验证
2026/10/6 7:19:21 网站建设 项目流程

做无刷电机控制器那段时间,我一直在找合适的位置反馈芯片。光编码器精度高,但体积大、安装精度要求高,在振动场合还容易被污染;普通开关霍尔又只能用来换相,做不了位置闭环。后来在一套开源的关节模组方案里看到AS5047P这颗磁编码器,才算是找到了兼顾精度和成本的方案。这颗芯片有14位分辨率,单圈16384步,支持ABI增量输出、UVW换相输出、SPI绝对角度读取和PWM输出,一颗芯片基本覆盖了从电机换相到位置闭环的所有需求。

不过真到自己画板时,我发现一个很现实的问题:网上能找到的AS5047P开源板,大部分只引出了作者那套应用需要的引脚。做关节模组的人只留UVW和SPI,做测量仪器的人只留ABI,你想要把这颗芯片的潜力都摸一遍,只能自己动手。于是就有了这个项目——用立创EDA把AS5047P的全模式引脚全部引出到排针,做成一块既能当评估板、也能直接嵌进项目里的开源硬件转接板,并且做了完整的信号验证。这篇就把整个流程、关键设计决策和实测踩过的坑记录下来。

1. 为什么我要做一块"全模式引脚引出"板,而不是直接抄现有设计

1.1 四套输出接口,对应四类完全不同的应用场景

先明确一个前提:AS5047P不是"只有一种输出"的编码器芯片。它内部用CORDIC算法算出14位绝对角度,然后根据配置,把角度信息转换成几种不同形式的输出。所以它本质上是一颗"会算角度的传感器",而不是一个固定格式的编码器。

ABI输出是标准的增量编码器信号,A和B两路方波相位差90度,Z(I)索引脉冲每圈一个。它适合接带正交解码能力的MCU——比如STM32的TIM编码器模式,可以直接把A/B接上去计数,用于增量式位置和速度测量,也能兼容大多数伺服驱动器和步进驱动器的接口。

UVW输出是模拟霍尔换相信号的三路方波,彼此相差120度。它主要给BLDC/PMSM电机的换相电路用,省掉外部霍尔传感器。这部分对做伺服驱动的人特别有用,可以直接把UVW接到驱动器的霍尔输入口。

SPI接口是配置和读取绝对角度的核心。它不只是用来拿角度数据,还可以设置零位、调整ABI分辨率、读AGC诊断值。也就是说,ABI和UVW的具体行为都是由SPI寄存器配置出来的,调试时一定要先打通SPI。

PWM输出则是把角度映射成占空比,只需要一个普通IO口接示波器或者逻辑分析仪就能读角度,适合没有专用编码器接口的低成本MCU。这四个输出针对的是不同工程场景,如果都放在同一块板子上,切换应用时就不用重新画板了。

1.2 开源硬件平台上的参考设计,为什么不能直接抄

立创开源硬件平台上有不少AS5047P相关项目,我也下载过几个工程文件。但下载后才发现,大部分作者会在原理图里只画自己需要的电路,比如把UVW三个引脚空着,或者只留一个2.54mm的SPI排针。这通常不是作者偷懒,而是他的应用确实不需要那些接口。问题在于,如果你照着抄,后面想改模式,就要重新画板或者飞线,非常痛苦。

我见过一个比较极端的例子:有人想在另一个项目里复用一块开源的AS5047P最小板,结果发现那块板把PROG/PWM引脚只引到测试点,连标准焊盘都没留。事后想用PWM输出,就得把芯片撬起来飞线。这就是"按需设计"和"通用设计"的差别。所以我在画全模式板时给自己定了个原则:所有信号引脚必须引到标准排针,所有复用引脚必须有明确的功能选择手段,宁可多占一点板面积,也不让某个模式在后期接不出来。

1.3 "全模式"不是把引脚都拉出来那么简单

把引脚全部拉出来,听起来很容易,实际上有几个问题要处理。第一是引脚复用冲突,像PROG/PWM这种复用引脚,到底当OTP编程脚用还是当PWM输出用,需要跳线或者焊桥决定。第二是电源域问题,VIO引脚决定输出电平,板子要同时兼容3.3V和5V系统,就得在设计时留好跳线选择,不能焊死。第三是信号完整性,ABI输出在高速旋转时频率不低,如果只是飞线引到排针,波形会变差,所以在PCB布局上要尽量缩短走线,并且把去耦电容放对位置。

其实这块板子的目标不是做出一个"完美的量产模块",而是做出一个"能把所有模式都验证清楚的实验平台"。在原型阶段,全模式引出的价值远大于精简设计。等你确定好最终用哪套接口,再画一版只留必需信号的板子也不迟。

2. AS5047P的引脚与接口逻辑:动手画原理图前必须想清楚的几件事

2.1 引脚功能与电源/接地规划

AS5047P常见封装是SOIC-14,引脚不算多,但每个引脚的分工很明确。我画原理图的时候,是参照AMS官方数据手册的引脚定义来做的,在这里把关键信号整理成一张表,方便后面布局和调试参考。

信号功能说明设计注意点
VDD3V3芯片主电源范围3.0~3.6V,就近放0.1uF去耦电容
VIO输出接口电平参考3.0~5.5V,决定A/B/I、U/V/W和SDO输出高电平,要和主控IO电压匹配
GND地整板铺地平面,避免地环路
CSn / CLK / SDI / SDO4线SPI接口注意CSn时序,16位传输期间必须保持低电平
A / B / IABI增量输出推挽输出,I是索引脉冲
U / V / W换相输出可配置极对数
PROG / PWMOTP编程 / PWM输出复用引脚,全模式板用跳线切换

还有一个容易被忽略的点:AS5047P内部的模拟前端对电源纹波比较敏感。虽然它输出的是数字信号,但角度计算的本质是内部ADC对磁场角度采样,电源如果很脏,角度输出会在某个区间跳变。我的做法是VDD3V3和VIO各放一个0.1uF陶瓷电容,在电源入口加一个4.7uF电容,PCB底层完整铺地。这样处理之后,用逻辑分析仪观察波形,ABI的毛刺明显少了很多。

2.2 ABI/UVW/SPI/PWM四套接口,在芯片内部到底怎么共存

这个问题我在画原理图时纠结了很久:如果ABI和UVW都输出,会不会互相占用?看数据手册会发现,AS5047P的多路输出是"同时存在"的,但具体启用哪些,需要配置寄存器。

ABI输出就是标准的增量编码器输出,A、B两路相位差90度,Z索引每圈一个。它适合接带正交解码能力的MCU,比如STM32的直接把A/B接到定时器编码器模式引脚,读计数器就能得到位置增量。UVW输出模拟的是霍尔信号,三路相差120度,给无刷电机驱动器换相用。极对数需要在寄存器里配置,我测试时配置为1,对应一个电机的极对数。

SPI是配置和读取绝对角度的核心。调试顺序建议是:先用SPI确认角度数据正常,再配置ABI/UVW参数,最后用逻辑分析仪检查波形。PWM输出相对独立一些,它把角度直接映射为占空比,在全模式板上,我把PWM信号引到和PROG复用的排针上,用跳线帽切换。做普通功能验证时,跳线帽放在PWM侧即可。

2.3 电平适配:VIO才是容易踩雷的地方

这一点值得单独说。AS5047P的VDD3V3必须接3.3V,但VIO引脚可以接3.3V也可以接5V,它决定的是输出接口的电平。也就是说,如果VIO接5V,那么A/B/I、U/V/W和SDO输出高电平就是5V;如果VIO接3.3V,输出高电平就是3.3V。

我在第一版测试时直接用5V给VIO,结果接STM32F4的SPI时出了问题。STM32F4的IO不是5V容忍,SDO输出的5V高电平直接把GPIO配置搞乱了,SPI读回来的角度全是乱的。后来我把VIO改成3.3V,让芯片输出电平和MCU一致,问题才消失。所以在全模式板上,我在VIO这里留了一个三针跳线,可以快速选择3.3V或5V,方便接不同主控。这个设计成本很低,但实际调试时会省很多事。

3. 在立创EDA里完成原理图与PCB布局:全模式板的关键设计决策

3.1 元件库与封装:为什么我选择从立创商城直接导入

在立创EDA里加芯片,我第一反应是在元件库里搜"AS5047P"。立创EDA标准版和专业版都支持直接在元件库中搜索立创商城的元件,好处是符号和封装都已经画好,而且和嘉立创打样系统匹配。如果用网友自制的封装,虽然也能画,但偶尔会出现符号没问题、焊盘间距差一点的情况,板子打回来发现芯片放不上去就尴尬了。

我的做法是:在专业版里搜索AS5047P,选立创商城的封装,把原理图符号和PCB封装一起导入。这样即使我记不住确切的引脚间距,也不会出错。顺便说一下,如果你用的主控是STM32或者其他常用MCU,也可以这样导入,尤其是QFN这类手工难焊的封装,专业版自带的封装库比网上流传版本可靠得多。

3.2 原理图连线:按功能分组的排针和跳线设计

全模式板的原理图画法,关键是"分组清晰"。我在原理图里把排针分成四组:电源组、SPI组、ABI组、UVW组,另外单独一个PROG/PWM跳线组。每组排针旁边用文字标注信号名,方便后面焊接和调试。这样做还有一个额外好处:如果以后要把板子发布到开源平台,别人打开原理图也能一眼看懂。

具体连线上有几个细节:

  1. VDD3V3和GND先经过一个总的电源排针,再分别给芯片、去耦电容和LED指示灯供电。LED用来判断板上有没有电,调试时非常管用,尤其是怀疑供电问题时,看一眼LED就能排除一半可能。
  2. 芯片的A/B/I、U/V/W直接连到对应排针。AS5047P输出是推挽结构,可以直接驱动一般负载,不需要串电阻。但如果你要接长线或者特殊负载,可以在原理图里预留串联电阻位置,用0欧电阻焊上就行。
  3. PROG/PWM用三针跳线:中间接芯片,两侧分别接PWM排针和编程电压。正常使用选PWM侧,做OTP编程时再切到编程侧。
  4. SPI的CSn、CLK、SDI、SDO接到一组4针排针,旁边再留一个GND,方便直接插杜邦线连到主控。

原理图页上可以加一些文字说明,比如"接3.3V主控时,VIO跳线选择3V3"、"磁铁中心对准丝印十字"这类。这些注释在开源发布时非常有用,别人拿到板子不至于一脸蒙。

3.3 PCB布局:磁铁位置、排针排布和星型接地的取舍

到了PCB布局环节,最需要注意的不是排针怎么放,而是磁铁和芯片的相对位置。AS5047P是靠感应芯片上方磁铁的旋转角度来工作的,芯片中心必须和磁铁中心基本对齐,间距通常在1~3mm。我专门在PCB正面丝印画了一个十字标记,标注"磁铁中心对准此处",如果你打算把板子直接装在电机尾部,这个标记就是装配参考。

排针布局建议按功能放在板子四周,而不是挤在一起。这样可以减少信号间串扰,也方便测量时夹逻辑分析仪探头。我实际做的是:左侧放电源和SPI排针,右侧放ABI排针,上方放UVW排针,下方放PWM跳线,整体呈一个"十字放射"结构。虽然板子稍微大了一点,但调试体验好了很多。

关于接地,这块板子面积小,我不建议把地分割成模拟地、数字地两块。高频回流路径如果被分割打断,反而会引入噪声。更稳妥的做法是:整板底层铺完整地平面,所有GND引脚直接打孔到地平面,在电源入口处单点汇合。这其实就是星型接地的思想——各个功能模块的地都各自就近回到地平面,再从电源端一点接入,避免"地回路串扰"。我这样处理之后,ABI波形在逻辑分析仪上边沿非常干净。实际上在立创EDA里设置铺地也很简单,选定底层网络为GND,一键铺铜就可以了,关键是不要手动去割地。

4. 焊接、上电与逐项验证:从SPI到波形,完整测试流程

4.1 焊接注意点与测试环境搭建

AS5047P是SOIC-14封装,焊接难度不算高,但也要注意两点:一是焊盘间距小,容易连锡,建议用合适的烙铁头和助焊剂;二是芯片底部如果有多露焊盘(有些批次是QFN封装),要用热风枪均匀加热。焊接完成的板子,先用万用表量一遍VDD3V3和GND之间有没有短路,确认无误后再上电。

测试用主控我选的是STM32F103最小系统板,用3.3V给板子VDD3V3供电,VIO也接3.3V。SPI四根线加上GND,用杜邦线连到主控,逻辑分析仪接到ABI那组排针上。这种接线方式虽然看起来乱,但对验证来说完全够用,重点是每根杜邦线颜色要固定,比如红色电源、黑色地、黄色CLK、绿色SDI、蓝色SDO,避免接错。

4.2 第一步验证:通过SPI读取14位绝对角度

拿到板子,第一步先验证SPI能读取角度,而不是急着看ABI。因为ABI的分辨率、零位这些参数都是通过SPI寄存器配置的,如果SPI都读不通,后面调波形没有意义。

用STM32的硬件SPI发一个读角度命令,然后接收返回的数据。AS5047P的SPI帧格式比较特殊,是16位命令帧,SDO上会同时回传数据,读出来的原始值还要根据手册格式解析出14位角度。这里一定要对着数据手册来,千万别想当然地按普通Flash的读法来写。我自己的代码里注释都会标清楚帧格式,方便后面回来查。

我第一次读的时候,返回的全是0xFFFF。排查了很久,最后用逻辑分析仪挂到CSn和CLK上,发现CSn必须保持低电平覆盖整个16位传输,而我之前的代码在传输过程中提前拉高了,导致芯片认为命令被中断,SDO自然就回不了有效数据。把这个时序修正后,数据就正常了。最后通过串口把角度值打印到上位机,手动旋转磁铁,观察角度是否随旋转连续变化。这里有一个关键判断:如果角度在某些位置突然跳变到0或者跳到最大值,大概率是磁场强度不够或者磁铁偏心,而不是SPI的问题。

4.3 第二步验证:用逻辑分析仪检查ABI和UVW波形

SPI确认无误后,我给ABI设置了一个固定的脉冲数分辨率,比如每圈1024个脉冲,然后在逻辑分析仪上观察A、B、I三路信号。

正确的情况是:A和B两路方波相位相差90度,I每圈出现一个脉冲。我手动均匀旋转磁铁,看到逻辑分析仪的波形图里,A/B频率随转速变化,I脉冲每圈一次,这说明ABI输出完全正常。把磁铁反向旋转,A和B的相位关系会反过来,这也是判断编码器方向的一个直观方法。

接下来验证UVW。把极对数配置为1,旋转磁铁,看到U、V、W三路波形依次相差120度,和一个周期的霍尔信号完全一样。这个结果说明UVW接口可以直接用于无刷电机换相,不用再接外部霍尔。PWM验证更简单,把跳线帽切到PWM侧,用示波器或者逻辑分析仪测占空比,旋转磁铁时占空比从0到100%线性变化。如果只是需要判断大概角度,PWM完全够用。

5. 实测中的三个坑和对应排查思路

5.1 坑一:SPI读回0xFFFF,问题出在CSn时序而不是芯片

这大概是很多人第一次用AS5047P最容易遇到的问题。排查过程可以按顺序来做:

  1. 先查供电。用万用表量VDD3V3和VIO,确认芯片供电正常。
  2. 查接线。SPI四根线有没有接对,CLK、SDI、SDO、CSn有没有和主控的对应引脚搞混。
  3. 查CSn时序。把逻辑分析仪挂到CSn和CLK上,看16位传输期间CSn是否被提前拉高。

我这次问题就出在第3步。修正之后,数据立即恢复正常。这个案例说明,遇到SPI通信异常,第一步不是怀疑芯片坏了,而是用逻辑分析仪看时序是否满足数据手册要求。AS5047P这类绝对角度芯片对时序要求比较严格,CSn的变化必须和SCLK对齐,差一点都不行。

5.2 坑二:角度在某些区间跳变,根源是磁场强度不够

第二次测试时,我发现角度在30度和60度附近会突然跳变。排查时我读了一下AGC寄存器的诊断位,发现磁场强度警告位被置位了——说明磁铁离芯片太远,或者磁铁强度不够。

我最初用的是一片直径4mm的普通钕铁硼圆片,换成直径6mm、厚度3mm的径向磁化磁铁,把间距调整到2mm左右后,AGC警告消失,角度输出变得非常平滑。这个经验对任何磁编码器项目都适用:磁铁规格和安装间距直接决定了系统稳定性,所有磁编码器数据手册里都有磁场强度建议范围,设计时不能只看"能用",最好留出裕量。如果你用的是径向磁化磁铁,安装时还要注意充磁方向要和转轴垂直,否则角度输出会非线性。

5.3 坑三:ABI输出波形正常但脉冲数不对,忘了配置分辨率

ABI输出使用前需要先通过SPI寄存器设置脉冲数分辨率。我在这块板上电后直接看ABI波形,发现频率明显不对——磁铁转一圈,A/B输出只有固定的几个脉冲,这才想起来AS5047P默认ABI分辨率并不是我需要的值。写完寄存器、把分辨率配置成每圈1024个脉冲后,重新上电验证,波形和计算值就吻合了。

这里给个建议:寄存器配置在上电后会恢复默认值,如果你的应用需要特定ABI分辨率,最好在程序初始化时每次都重新配置,不要指望芯片"记住"上次的设置,除非你做了OTP永久编程。PROG引脚就是干这个用的,但OTP编程是一次性的,编程前一定要确认参数没问题,否则芯片就废了。

把整个项目做完,我的体会是:全模式引出板真正的价值不在于把所有引脚拉出来,而在于它能逼你把每路接口的信号特性和时序都理解清楚。为了验证每种模式,你不得不对着数据手册读寄存器、对着逻辑分析仪看波形、对着示波器量占空比。走完这一圈之后,这颗芯片在后续项目里基本就不会再添乱。

最后再分享一个小技巧:AS5047P支持SPI菊花链级联,多颗芯片可以把SDO接到下一颗的SDI串联起来,共用时钟和片选。我做全模式板时特地把SPI的CSn、SDI、SDO都引到了排针上,如果以后做多关节机械臂或者多电机联动,直接拿几块板子级联测试就行。这个功能平时用不到,但真到了多轴同步的场景,你会发现当初多引出来这几根引脚,省掉了整整一版重新设计的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询