在直流无刷电机相关的调试现场和开发群里,ax不是一个陌生的词。但很多刚接触电机控制的人看到这个符号,第一反应往往是:ax是坐标轴里的 x 轴吗?那by和cz是不是就是 y 轴和 z 轴?接下来马上就会有一个经典问题冒出来:直流无刷电机ax by cz到底怎么划分的,是按照垂直轴线划分的吗?
这个问题的答案,直接关系到你后面所有的工作——无论是接三相线、装霍尔传感器、写 FOC 坐标变换,还是做换相逻辑表。我在这里先把结论放在最前面:不是垂直轴线,三相相轴两两之间差的是 120° 电角度,不是 90°。但仅仅知道一个结论还不够,因为“为什么是 120°”“机械角度和电角度怎么换算”“怎么在现场把这个 120° 量出来”才是真正影响你落地的细节。
这篇文章就围绕ax这个符号本身,把三相绕组相轴的划分逻辑、实测定相的方法、坐标变换的精神,以及我踩过的几个和相轴相关的坑,一起捋一遍。无论你是刚入门 BLDC 控制,还是已经在调 FOC 但被角度对齐折磨过,这篇应该都能派上用场。
1. 先把这个符号读懂:ax 就是 A 相轴线
1.1 ax 这个符号到底从哪里来
在电机学和控制软件里,ax通常被看作A axis的缩写,也就是A 相绕组的轴线。同理,by是 B 相绕组轴线,cz是 C 相绕组轴线。它们并不是在描述一个抽象的数学直角坐标系,而是在描述定子铁芯上实实在在、空间有向的磁场方向。
为什么需要给“绕组”定义一个方向?因为电流流过绕组时会产生磁动势,而磁动势是有方向的。A 相绕组通正向电流时,产生的磁动势方向就定义为 A 相轴线的正方向。三相绕组在定子圆周上按一定规则布置,所以三相轴线之间就有固定的空间关系。
这个关系不是人为规定的,而是由定子槽形、绕组嵌放方式和极对数决定的。绝大多数三相无刷电机的三相绕组在空间上按120° 电角度互相错开。也就是说,A 相轴线在 0° 电角度位置,B 相轴线就在 120° 电角度位置,C 相在 240° 电角度位置。三者在整个电气周期内是均匀三等分的关系。
1.2 90° 这个印象是怎么来的
很多人看到“三相绕组”和“轴线”这些词,第一反应是拿直角坐标去套。这其实和我们学习三相电的路径有关。早期接触三相交流电时,我们会在纸上用三个向量画对称三相系统,三个向量确实互成 120°;但一旦进入电力电子里的 αβ 坐标变换,看到 α 轴和 β 轴互相垂直,又会接触到 90° 的概念。两套坐标系混在一起,特别容易让人把“相轴”和“正交轴”划等号。
再有一个视觉上的误导来源:在不少电机原理图里,三相绕组被画成定子槽内三个独立线圈的样子,看起来像是空间上各占一块;而电路原理图里又把 A、B、C 三相画成三根线,彼此夹角 90° 或者平行放置。图看多了,脑子里的空间感就乱了。
实际上你要记住一句话:αβ 坐标轴是直角坐标系,abc 三相轴是 120° 对称系,dq 轴才是跟着转子走的“垂直轴”。这三者服务的是不同层面的控制逻辑。ax by cz属于第二类,物理意义是三相绕组磁动势的空间方向,跟你中学数学里的 x、y、z 没有关系。
2. 相轴到底怎么在定子上划分
2.1 把定子圆周当成一张电角度地图
要真正想明白ax by cz怎么划分,最直接的办法是把定子圆周“展开”成一张角度地图。机械上,定子是一个圆,一圈 360° 机械角度。但在电机内部起电磁作用的是“电角度”,两者之间差一个极对数 p 的倍数:
电角度 = 机械角度 × p
为什么会有这种换算?因为转子和定子之间的磁路在一个磁极对范围内会重复一次。你可以把一对 N-S 磁极理解成一个完整的电磁周期,这个周期对应 360° 电角度。电机里有 p 对磁极,那么转子转一圈,电角度就变化 p 圈。
三相绕组的轴线间隔永远按电角度算,都是 120°。但如果把 120° 电角度换算成机械角度,不同极对数的电机结果就完全不同:
极对数为 1(2极电机):三相轴线的机械间隔就是 120°; 极对数为 2(4极电机):120° 电角度 = 60° 机械角度; 极对数为 3(6极电机):120° 电角度 = 40° 机械角度。
这张换算表很有用,但现场的人很少真正去背。实际操作中,大家更常做的是先找到 A 相绕组的一组线圈边,顺着电流方向判断轴线,然后再去定 B、C 相。现场用到的更多是“数槽位”的办法。
2.2 用一台 36 槽 4 极电机现场推一遍
咱们拿最常见的一台 36 槽 4 极永磁无刷电机来实际算一遍。这款电机在很多 100W 到 2kW 的 BLDC 方案里都能见到,适合作为例子。
已知条件:定子 36 槽,转子 4 极也就是 2 对极,p = 2。定子圆周一圈 360° 机械角度,因此每个槽距的机械角度是 10°,折算到电角度就是 20°。
4 极电机里一对极有 18 槽,一个极距跨 9 槽。按 60° 相带划分,每极每相占 3 个槽,也就是 60° 电角度。取第 1、2、3 槽为 A 相正相带(电流从 A 头进、从另一端出),它的相带中心在第 2 槽附近,对应电角度大约 0°(这里以该位置为 A 轴正方向的起点)。
B 相应该落后或超前 120° 电角度,也就是 6 个槽距的机械位置。从第 2 槽算,往后推 6 槽,大概落到第 8 槽为中心的地方,这个位置就是 B 相正相带中心。再推 6 槽,落到第 14 槽附近,是 C 相正相带中心。第 8 槽和第 2 槽之间在机械角度上差 60°,但折算成电角度正好是 120°。
所以现场拆开电机绕线圈时,你看机械位置,可能觉得 A 和 B 之间也就差 60° 或者 40°,这完全不奇怪。反而如果看到机械角差距 120°,那多半是 2 极电机。换句话说,ax by cz的划分永远按电角度进行,不是按机械上的垂直关系。
2.3 槽号对不对,最后要拿磁场轴线来验证
有人可能会说:我不关心相带中心,我只想知道哪一槽属于哪一相。这种做法容易出问题,因为定子槽里嵌的是分布绕组,一个相带占了多个槽,而且每相绕组往往有正边也有负边,分布在相对的两个区域。简单记“第几槽是 A 相”并不总能得到正确轴线位置。
更稳妥的判断方法是用“合成磁动势”的思路。A 相正相带产生的磁动势峰值所在空间方向,就是 A 相轴线的方向。对这个方向影响最大的是正相带和负相带的折中位置。如果你在电机上找不到相带中心,也可以绕一个小的检测线圈,靠近定子内圈某个齿,然后用手慢慢转动转子,观察检测线圈里感应波形过零时的转子位置,这个办法能直接标出该齿所在位置对应的电角度。
还有一类电机要单独说:分数槽集中绕组,例如常见的 12 槽 8 极电机。它的每极每相槽数不是整数,绕组不是按连续相带分布,而是绕在单个齿上,相邻齿之间交替属于不同相。这种电机ax by cz的相带位置和整数槽电机不同,但三条轴线的空间电角度关系依然是 120°。不要拿整数槽的“槽号连续性”死套到分数槽电机上,会把自己套晕。
2.4 最直观的验证办法:示波器看反电动势
理论算完,一定要实测。这里分享一个现场百试百灵的笨办法:把电机三相线任意接到示波器探头,转子匀速转动,看三相线反电动势波形。
如果电机是 Y 型接法,并且中性点没有引出,你测的是线反电动势。三个探头分别接 A、B、C 三根线,公共端接在一起(注意不能和市电地混接,用隔离供电)。匀速转动电机轴,三条波形会出现清晰的三相对称关系:相邻波形之间相位差 120° 电角度。不管 B 相是落后还是超前 A 相——这取决于你的转动方向和定义——三对相位差一定均匀分布。
这个测量方法能同时验证三件事:第一,你手里这台电机的三相绕组确实按 120° 电角度分布;第二,你标记的 A、B、C 出头是否和驱动器定义一致;第三,编码器或霍尔信号和反电动势过零点的相对位置。很多相序问题、角度零位问题,用这一招就能排查掉六成。
3. 实操:把 ax by cz 落实到霍尔和编码器
3.1 驱动器端 U/V/W 和电机端 A/B/C
一台完整的 BLDC 驱动系统里,ax by cz并不是只在电机内部生效,它还体现在驱动器软件中的坐标变量名和硬件接线端子上。常见的默认对应关系是:驱动器 U 相输出接电机 A 相,V 相输出接 B 相,W 相输出接 C 相。很多底层库函数的内部标签直接叫phase_a、phase_b、phase_c,其实就是ax、by、cz的另一种写法。
这里有一个容易被新手忽略的点:换了 U/V/W 和 A/B/C 的对接顺序,软件里的相序表、坐标变换矩阵、霍尔映射表全都可能要同步调整。如果你只把硬件线换了一根,却不动软件,电机轻则抖动,重则启动时报过流。
我见过有人为了省事,把三根线任意接上,然后试图靠软件里“试换向表”来猜正确相序。这在简单六步换相里勉强可行,但在 FOC 里会很痛苦。正确做法是先确定电机端的 A、B、C,再按固定颜色或丝印一一对应到驱动器 U、V、W,然后上电验证反电动势波形。
3.2 用通电定位法量出 120° 电角度
还有一个在电机轴上“直接测相轴划分”的实用方法,我管它叫断电定位法,或者叫磁钢对轴法:
- 先把电机三相线悬空,确保没有电流;
- 驱动器按一个固定开关状态给电,比如 A 相接电源正,B、C 相接电源负;
- 转子会转动并稳定停留在一个固定位置,这个位置对应合成磁动势方向,也就是 A 相轴的正方向;
- 记录这个位置后断电,再切换另一个开关状态,例如 B 相接正,A、C 相接负;
- 转子会再次稳定停在一个新位置,这个位置相对上一次旋转了 120° 电角度;
- 再切一次,换成 C 相接正,A、B 相接负,还能看到转子再走 120°。
你可能会想:既然三组开关状态就能定三个位置,我干脆把开关状态列全,看转子每个位置是不是均匀分布。确实可以,但要注意,三相全桥只有 6 个有效开关矢量,相邻两个矢量的夹角是 60° 电角度,这是因为一个电周期有 360°,6 个矢量均匀分布,每个占 60°。所以如果连续切换 6 个状态,你看到的是每 60° 停一次,这并不违反三相轴线 120° 的关系——60° 是逆变器状态之间的间隔,120° 是绕组磁轴之间的间隔,它们的参考对象不同。
3.3 编码器零位为什么要对齐到 ax
FOC 控制需要实时获取转子电角度,所以编码器的零位必须和某一相轴线有明确的对应关系。大多数控制器的惯例是把编码器零位对齐到 A 相轴线的正方向,也就是ax。
具体操作我一般这样做:先断开负载,用 3.2 里的方法给 A 相正、B 相负、C 相负通电,让转子稳定停在 A 轴正方向。然后把编码器读到的角度值写入零点偏移参数,或者直接把编码器码盘调整到零点位置。这样上电后电角度 0° 就和ax重合,后续 Clarke/Park 变换角度才正确。
有些电机出厂时已经在霍尔端盖内预置好霍尔板,安装角度是固定的,不一定是 A 轴正方向对齐。这种电机仍然可以采用同样的通电定位法检查偏差,然后把角度补偿值写进控制器。差几度电角度在低速运行时可能感觉不到,但高速时扭矩就会明显下降,噪音变大,甚至产生明显的电流波形不对称。
4. 坐标变换:为什么后来大家都谈 dq 轴
4.1 Clarke 变换把 120° 空间映射到 90° 平面
到了控制系统层面,直接处理三相 120° 轴上的交流量比较麻烦,控制上更喜欢把三相量投影到一个正交的两相坐标系里,再做后续处理。这就是 Clarke 变换干的事。
Clarke 变换的矩阵长这样(等幅值变换惯例):
iα = 2/3 * (ia - ib/2 - ic/2) iβ = 2/3 * (√3/2 * ib - √3/2 * ic)这里的系数 2/3 不是随便写的。因为三相瞬时电流在合成矢量空间里,幅值等于各相电流幅值的 1.5 倍(在不做变换的情况下),乘上 2/3 后,合成矢量的幅值就等于实际相电流的幅值。如果你想保留功率不变,系数就要换成 √(2/3)。两种惯例在电机控制库里都常见,使用前要先确认你用的库是哪种,否则后续电流环标定会出问题。
为什么 Clarke 变换里会出现 √3/2 这种数?根源就是ax、by、cz之间夹角 120°。你可以把三相电流画成一幅星形矢量图,三根轴互成 120°,然后把ia、ib、ic向 α、β 两个互相垂直的轴上分别投影。投影结果自然会出现 30°、60° 角的三角函数值,也就是 √3/2。换句话说,Clarke 变换每一步都在提醒你:电机内部的真实空间关系不是直角,而是 120°。
4.2 Park 变换:这才是真正的垂直轴线
经过 Clarke 变换以后,我们得到了静止直角坐标下的iα、iβ,但这两个量仍然是交流量,随转子位置变化而变化,不好做 PI 控制。于是再做一次 Park 变换,把坐标系跟着转子磁极旋转起来,得到 d 轴和 q 轴上的直流量:
id = iα * cosθ + iβ * sinθ iq = -iα * sinθ + iβ * cosθ这个 dq 坐标系才是很多人口中的“垂直轴线”。d 轴对准转子磁极方向,q 轴超前 d 轴 90° 电角度,两者垂直。电磁转矩主要由 q 轴电流产生,d 轴电流主要用于改变励磁或弱磁。所以你在文献里看到“直轴”“交轴”的说法,指的正是这两个互相垂直的方向。
dq 里的 90° 和ax by cz的 120° 根本不在一个语境里。前者是控制坐标系里的处理手段,后者是电机绕组的物理分布。把这两种角度混为一谈,就会出现开头那个“ax 是不是按垂直轴线划分”的疑问。
4.3 坐标变换矩阵写错会怎么样
坐标变换矩阵不是随便填填就行。我见过一个案例,同事把 Clarke 矩阵里 β 轴的符号搞反了,结果电机低速运行时正常,但一旦给到一定转速,电流环就开始震荡,电流波形出现很大的奇数次谐波,转矩脉动明显。查了很久,最后发现是√3/2前的正负号问题,导致 B、C 两相在 αβ 平面里的投影方向反了,矢量合成的磁场方向变成了反方向旋转。
这类问题在代码 review 阶段很难发现,因为矩阵长得很像,编译也不报错。最好的办法是离线写一个小脚本,给一组ia=1, ib=-0.5, ic=-0.5的对称电流进去,检验变换后的iα是否等于 1、iβ是否等于 0。如果不对,基本就是符号或者系数的问题。用最简单的对称向量去校验变换表,比在电机上盲调要快得多。
5. 真实现场:相序、霍尔和扇区的坑
5.1 相序接反:电机反转、电流飙升
最典型的现象是:上电后电机能转,但方向反了,或者正反转力矩不对称,相电流明显比正常大。这时候我的排查顺序是固定的一套:
先用示波器看三相对地反电动势波形,确认电机侧 A、B、C 各自是哪根线。然后把驱动器三相线按 A→U、B→V、C→W 重新对接,保持软件默认相序。上电后如果方向反了,优先调整软件的相序表,而不是直接物理换线。因为很多控制器在自检时还要判断霍尔状态,物理换线容易让霍尔映射表也跟着变,问题更复杂。
5.2 霍尔触发点和 A 相过零点之间的偏差
霍尔传感器的三个开关信号,本质上是三个辅助绕组轴线上磁极位置的二进制编码。装霍尔板时,它的空间位置必须和ax by cz有明确对应关系。常见标准是霍尔跳变沿对齐 A 相反电动势过零点,或者对齐某些换相点。
如果霍尔安装偏差了几度电角度,六步换相时换相点就会提前或滞后,表现是电机空载听起来正常,带负载后噪音大、电流升高,效率下降。更隐蔽的是,有些霍尔信号波形很好,但换相表硬是正确不起来。遇到这种情况,不要先怀疑换相表,先测一下霍尔跳变沿和 A 相反电动势过零点的角度差,测出来再考虑是硬件挪霍尔板还是软件补偿。
5.3 六步换相的 60° 扇区,别和 120° 相轴混在一起
这是也是群里高频出现的误区。六步换相一个电周期有 6 个开关状态,每个状态覆盖 60° 电角度,所以有些人看到 60° 这个数,以为三相绕组的轴线间隔也是 60°。事实上,6 个扇区是在说“逆变器 6 个开关矢量在电压矢量空间里的分布”,是一个均匀切蛋糕的动作;而ax by cz是绕组的物理磁轴间隔,固定是 120° 电角度。两个 60° 和 120° 并存,但一个描述 PWM 状态周期,一个描述电机几何结构,场景完全不同。
你可以这样记忆:3 个绕组轴 = 120° 间隔;6 个空间矢量 = 60° 间隔;2 个正交轴 = 90° 间隔;它们出现在不同分析层级里,各算各的,谁也不能替代谁。
6. 调试之前,先把这三张图画出来
我的经验是:每次拿到一台陌生电机,真正动手写驱动代码之前,先花半小时画三张极简单的图,能省下后面至少两天排查时间。
第一张图,画定子圆周槽位和极对数关系,标出你推算的ax、by、cz位置;第二张图,画 Hall 或编码器的安装位置,标出它们相对 A 相轴线的电角度关系;第三张图,画三相全桥的 6 个开关矢量,标出哪个状态对应哪个合成电压方向。这三张图画完,基本所有和相轴划分相关的疑问都会变成清晰的量化关系,而不是模糊的概念。
我个人调过很多台 BLDC 和 PMSM,最深的体会是:电机控制里几乎没有比“角度”更容易出错的东西,而 90% 的角度错误都源于对ax by cz空间关系的理解偏差。编码器角度、霍尔的边沿、坐标变换的角度,所有这些最终都要统一到“电角度”这一个标尺上。你只要记住三相绕组轴线是 120° 等分,不是垂直 90° 等分,日常中绝大多数相序和零位问题,在调试之前就已经被消灭了一半。