最近有个搜索词在电机控制圈里挺有意思:直流无刷电机 ax by cz 怎么划分的,是不是按照垂直轴线划分?我盯着 ax by cz 看了好一会儿才反应过来,这不就是英文 axis A、axis B、axis C 被切词拼到一起了么。放到直流无刷电机的语境里,它问的是 a 相轴、b 相轴、c 相轴怎么划分,以及它们是不是像空间直角坐标那样互相垂直。
先给结论:不是垂直轴。三相绕组轴线在空间上互差 120° 电角度,真正互相垂直的是后面坐标变换出来的 αβ 轴和 dq 轴。这个问题看着基础,却卡住了不少人,尤其是一上来就学 FOC 的,坐标变换图一多,很容易把三相轴跟旋转坐标系搞混。这篇文章就用直流无刷电机为对象,把轴系划分、120° 的原因、垂直轴说法的来源,以及怎么用示波器、霍尔信号和电感表实测验证,完整过一遍。适合刚要入门 BLDC/PMSM 的硬件工程师,也适合正被"为什么启动抖动、零速大电流"折磨的控制调参人员。
1. 先搞清楚 ax by cz 到底指什么:三相磁轴和三坐标轴不是一回事
1.1 "ax by cz" 是怎么跑到搜索框里去的
如果你在英文资料或视频里看到 axis A、axis B、axis C 这种写法,搜索引擎按空格切词后,很容易变成一串短得像乱码的东西。ax by cz 就是这样来的:它只是 a 轴、b 轴、c 轴,不是数学里的未知数 x、y、z,也不是空间坐标系的 X 轴、Y 轴、Z 轴。a、b、c 三个字母对应的是电机三相绕组的相名,而 axis 是"磁轴"的意思。
这个澄清不是抠字眼。因为不少刚接触电机控制的人,会直接把 "ax by cz" 理解成三个互相垂直的直角坐标轴,然后后面的问题就全跑偏了。"直流无刷电机的三相轴是不是垂直轴"这个问法,本质就是把"磁场轴"当成了"空间坐标轴"。所以先立一个定义:下面说的 a 轴、b 轴、c 轴,是三相绕组各自磁动势的中心方向,是在电机横截面这个二维平面里的三个方向。
1.2 磁轴不是实轴:一根"等效方向线"
电机定子里没有一根叫"轴"的铁棒。你拆开一个直流无刷电机,看到的是定子齿槽、绕在上面的线圈、转子磁钢和霍尔板。线圈通电后,各槽导体里的电流会在气隙中共同产生磁动势,这个磁动势合成以后会有一个主要方向,这个方向就被定义成该相绕组的轴线。
可以这样理解:每个齿槽里的铜线像一群朝不同方向用力的人,单看每一个槽,方向是散乱的;整相绕组串联起来,通电时所有槽内导体的力合到一起,会有一个合力方向。那个合力方向就是相轴。理想模型里,把 a 轴取为水平向右,那么 b 轴在电角度 -120° 方向,c 轴在电角度 +120° 方向。三个轴都在同一个圆平面内,而不是从同一点伸向三个维度的空间直线。
1.3 直接回答:三相轴为什么不是垂直轴
回到原始问题:直流无刷电机的 abc 三相轴是按垂直轴线划分的吗?不是。三相轴两两相差 120° 电角度,不是 90°。90° 垂直关系出现在之后的 αβ 静止坐标系和 dq 旋转坐标系里,那是坐标变换之后的产物,不是电机绕组本体的属性。
"垂直轴线"这个误解,多半来自控制框图的画法。很多文章和教程喜欢把 abc 坐标、αβ 坐标、dq 坐标三套坐标系叠在一张图里,a 轴画水平向右,α 轴又通常和 a 轴重合,看起来好像从一开始就是正交坐标系。加上 dq 轴确实互相垂直,新手很容易把三套坐标系混成一个,误以为 a、b、c 三相轴也是垂直的。这个误解最好在学习初期就纠正,否则后面看 Clark 变换、SVPWM 扇区、编码器零位对齐,全都对不上。
1.4 在实物上快速感受三相轴位置
想验证三相轴的位置,最直接的是拿一个常见无刷电机自己试。以 9 槽 6 极外转子电机为例,极对数 p = 3,120° 电角度换算成机械角度就是 120°/3 = 40°。也就是说三组绕组在定子圆周上的实际空间位置相差约 40° 机械角。换成 12 槽 4 极电机,p = 2,空间上就是 60° 机械角。
手感验证方法很朴素:给任意两相通一个低压直流电,比如 12V 电源串一个 10Ω 限流电阻,通电一两秒。转子会被电磁力吸到某一个位置;换另外两相通电,转子又会吸到另一个位置。每换一对相线,转子位置就跳过一个 120° 电角度对应的机械角。注意通电时间别太长,绕组会发热;这个实验还能顺便确认相序是否正确,属于玩电机的基础科目。
2. 为什么三相轴必须差 120°:绕组空间排布与旋转磁场的配合
2.1 电角度和机械角度:先算清这笔账
理解三相轴 120°,必须先分清电角度和机械角度。转子每转一圈,磁场变化了 p 个电周期,p 是极对数。四极电机 p = 2,转子转一圈机械 360°,磁场已经跑了两圈电角度。因此三相绕组轴线画在模型图里是 120° 电角度,落到真实机械角,要除以极对数。
以 12 槽 4 极永磁电机为例:12 个槽均布圆周,每槽机械角 30°;极对数 2,所以相邻槽之间电角度差 60°。三相绕组按 A、B、C 顺序在圆周上排布,每个相带占 60° 电角度,三相合起来刚好覆盖 360° 电角度。120° 电角度间隔对应机械角 60°,正好隔一个槽位。这也是绕组设计里"60° 相带"说法的来源。
2.2 三相对称电流加三相对称空间轴,才能得到恒幅旋转磁动势
接下来回答"为什么偏偏是 120°"。交流电机能连续平稳旋转,前提是气隙里出现一个幅值恒定、方向匀速旋转的磁动势。要做到这一点,时间相位和空间位置必须配合。
假设三相电流在时间上互差 120°:
ia = Im × cos(ωt) ib = Im × cos(ωt - 120°) ic = Im × cos(ωt + 120°)
三相绕组空间轴也相差 120°。把每相磁动势沿自己的轴画出再合成,结果是一个幅值恒为 1.5 倍单相最大磁动势、相位随时间匀速旋转的矢量。关键就在这里:电流时间差 120°,空间轴差 120°,两个 120° 匹配,合成磁动势才是一条干净的正圆轨迹。
如果把三相空间轴改成 90° 间隔,电流仍然差 120°,合成磁动势的幅值会周期性波动,低速时转矩脉动明显,噪音也大。打个比方:三个人轮流推转盘,出力的时间点各差三分之一拍,站的位置也在圆盘周围各差 120°,这样任何瞬间都有人以合适的方向推盘,盘子转得又稳又匀;若三个人站成 90° 夹角,节奏又按 120° 算,某些时刻三个人几乎在互相别劲,转盘就会一顿一顿。
2.3 负互感:120° 轴系的电气证据
120° 轴系不只在几何上成立,还直接体现在电气参数里。理想三相对称电机中,任意两相轴线夹角 120°,那么两相之间互感约为自感乘以 cos120°,也就是 -0.5 倍自感,符号是负的。
星形接法电机里,测 A-B 两相间的线电感,绕组是串联关系,线电感 L_AB 约等于 La + Lb - 2M,代入 M = -0.5L,得到 L_AB ≈ 3L。也就是说线电感接近单相自感的三倍。若三相轴真是互相垂直,互感约等于 0,线电感只会是两倍自感。实测直流无刷电机,线电感通常明显大于两倍相电感,常见在 2.5 到 3 倍之间,这就是 120° 轴系留下的电气签名。
读到这里,你应该已经建立概念了:三相轴不是一个坐标轴方向,而是三个互相成 120° 电角度的磁轴。那"垂直轴"到底从哪冒出来的?下一章讲坐标变换。
3. 垂直轴说法的真正来源:αβ 坐标系与 dq 旋转坐标系
3.1 为什么要坐标变换:三相轴在平面内并不独立
三相轴虽然有三个方向,但星形连接下 ia + ib + ic = 0,三相电流里真正独立的只有两个变量。既然只有两个自由度,就可以在同一个平面里找两个正交基,把三相物理量投影过去,这就是 Clark 变换。
标准做法是让 α 轴与 a 轴重合,β 轴逆时针超前 α 轴 90°。按等幅值方式投影,公式是:
iα = (2/3) × (ia - 0.5×ib - 0.5×ic) iβ = (2/3) × (0.866×ib - 0.866×ic)
三相电流平衡时,iα 恰好等于 ia,iβ 是 b、c 两相电流的差值。引入 2/3 系数,是为了让变换前后电流幅值不变;等功率版本则用 √(2/3)。所以要注意:α 和 β 是互相垂直的,但这个垂直是"变换结果"的垂直,不是三相绕组的原始关系。看资料里的叠加图,a 轴水平向右,b 轴在左下,c 轴在左上,夹角 120°,这是一定要记住的正确画法。
3.2 Park 变换再转一次:dq 轴跟着转子旋转
Clark 变换把三相变成了两相,但 αβ 轴固定在定子上,稳态运行时 iα、iβ 依然是交流。于是再做一次 Park 变换,把整个坐标系以转子电角速度旋转,坐标轴取自转子磁链方向。d 轴对齐转子 N 极轴线,q 轴与 d 轴相差 90°:
id = iα × cosθ + iβ × sinθ iq = -iα × sinθ + iβ × cosθ
θ 是转子电角度。这让稳态时的 id 和 iq 变成直流量:id 控制磁链分量,iq 控制转矩分量,电机在控制层面等效成一台直流电机。d 轴和 q 轴的正交性,保证了磁链控制和转矩控制互不干扰,就像把力分解成水平和垂直两个方向,垂直的那个力才专门出力矩。到现在你应该能看懂"垂直轴"在哪里了:它出现在坐标变换后的 αβ 和 dq,而不是电机本体三相轴。
3.3 用一个小脚本证明:120° 轴系合成圆,90° 轴系在抖动
为了把"为什么三相轴不能垂直"讲透,我写了个简单脚本,把同样的三相电流分别投影到 120° 间隔的三相轴和 90° 间隔的错误轴系上,比较合成磁动势矢量幅值的稳定性。
import numpy as np theta = np.linspace(0, 2*np.pi, 400, endpoint=False) # 三相对称电流,时间上互差120° ia = np.cos(theta) ib = np.cos(theta - 2*np.pi/3) ic = np.cos(theta + 2*np.pi/3) # 空间轴按120°分布:a=0°, b=120°, c=240° x120 = np.cos(0)*ia + np.cos(2*np.pi/3)*ib + np.cos(4*np.pi/3)*ic y120 = np.sin(0)*ia + np.sin(2*np.pi/3)*ib + np.sin(4*np.pi/3)*ic # 空间轴按错误的90°分布:a=0°, b=90°, c=180° x90 = np.cos(0)*ia + np.cos(np.pi/2)*ib + np.cos(np.pi)*ic y90 = np.sin(0)*ia + np.sin(np.pi/2)*ib + np.sin(np.pi)*ic r120 = np.sqrt(x120**2 + y120**2) r90 = np.sqrt(x90**2 + y90**2) print("120度轴系: 合成矢量幅值最大/最小 =", r120.max()/r120.min()) print("90度轴系: 合成矢量幅值最大/最小 =", r90.max()/r90.min())跑完的结果很直观:120° 轴系 max/min 等于 1.0,合成磁动势是正圆;90° 轴系 max/min 约为 1.29,说明合成矢量的幅值在周期脉动。轴系一旦被误解成垂直,算出来的空间矢量方向和扇区全是歪的。电机本体如果真要按 90° 正交轴绕线,那就必须配四相绕组加四相逆变器,跟常见三相驱动完全是两套东西。
4. 实测三板斧:用反电动势、霍尔信号和相电感验证 120° 轴系
4.1 第一斧:看线反电动势的过零点
直流无刷电机的三根引出线直接接示波器,用手或者小电钻带着转子旋转,就能看到反电动势波形。接成线电压时,A-B、B-C、C-A 三组线反电动势的过零点相差 120° 电角度。如果是四极电机,示波器上相位差仍然是 120° 电角度,只是对应的机械角要除以极对数。
操作上比较稳的方式是示波器两个通道分别接 A-B 和 B-C,触发通道选 A-B,匀速转动转子。观察两个波形的零点,前一个过零到后一个过零之间,正好是一个 120° 电角度间隔。如果看到的是 90°,基本可以断定接线错误,或者你在拿两台不同电机的线混着测。反电动势波形是转子磁场与定子绕组空间关系最直接的投影,它不会说谎。
4.2 第二斧:看霍尔信号之间的空间间隔
无刷电机内部通常有三个霍尔,标准安装是沿圆周按 120° 电角度间隔布放,也有少数电机按 60° 间隔装。无论哪种,三个霍尔感应到的都是转子磁极位置,一个电周期内三路信号是等分分布的,绝不出现两两垂直的 90° 关系。
用示波器同时抓三路霍尔方波,可以加上拉电阻,一路电周期内你会看到状态码按 001、011、010、110、100、101 循环,每次翻转间隔 60° 电角度。这正是六步换向表的基础:每个状态代表一个扇区,换向逻辑按这个状态组合给三相桥通电。如果霍尔安装时随手摆成相互垂直,三路方波的跳变沿根本不会均匀分布,换向必然错乱。霍尔的位置本质上是顺着 120° 三相轴对转子位置做的采样,而不是垂直轴的采样。
4.3 第三斧:用 LCR 表测相间电感
没有示波器的场合,电感表也能判断轴系。断开驱动电路,用 LCR 表在 A-B、B-C、C-A 之间分别测线电感。星形接法的理想情况下,120° 轴系带来的负互感会让线电感接近三倍相电感;如果错误假设垂直轴,互感约等于 0,线电感只会是两倍相电感。
我实测过一款 2204 航模电机,单相绕组电感约 36 μH,任意两相间线电感约 90 μH,比例在 2.5 倍左右。没到 3 倍是因为磁路有饱和、漏感和制造偏差,但"明显大于 2 倍"这个特征非常稳定。顺手你还能检查三相是否对称:三个线电感读数差在 5% 以内算健康,某相明显偏大,要考虑匝间短路。测量时保持转子位置不动,因为磁路饱和程度和转子角度都会影响读数;测量频率选 1kHz 附近比较有参考价值。
4.4 附加实验:交换相序,转向立刻反转
三相轴空间顺序是 A-B-C 正序。任意对调两根相线,合成旋转磁场方向就反过来,电机反转。开环六步换向里这个现象最明显;FOC 里如果相序错,电机根本没法稳定跟踪目标,轻则啸叫,重则过流烧驱动。
我调试新板子的习惯是:装好电机和驱动后,先不上大电流。手动转动电机,开一路最简单的开环电流环或者六步换向,确认霍尔状态和反电动势过零能对上,之后才切 FOC。这一步能把绝大多数接线问题挡在烧硬件之前。
5. 工程里最常见的三类轴系误判,以及对应的排查思路
5.1 资料图把三相轴画成垂直轴的陷阱
很多论文和博客为了排版美观,会把 a、b、c 三相轴画成互相垂直,或者把控制框图中的 abc 端口画成彼此无关的三根斜线,这最容易带偏新手。识别方法很简单:凡是画三相轴,a 轴水平向右,b 轴指向左下方,c 轴指向左上方,三者互成 120°。反过来,画成 90° 的三相轴图基本都是偷懒的示意,读图时要在脑子里把它修正回 120°。
5.2 编码器零位没和 A 相轴对齐
FOC 里最隐蔽的问题,是编码器零位和 A 相轴没对齐。dq 坐标系的 d 轴要对准转子磁链方向,而转子磁链的绝对位置是相对某一相轴定义的。如果初始角度偏差一点,整个 id/iq 分解都会偏,表现是电机低速抖、给定大电流不出力,甚至堵转。
排查步骤很固定:先给电机一个固定电压矢量,比如只开通 A 相上管和 B、C 相下管,让转子锁在某个位置;再用示波器或上位机读编码器角度,把这个角度记成偏移量。这个偏移量本质上就是转子磁轴相对 A 相轴的空间夹角,补偿进 Park 变换的 θ 里就行。每换一台电机、每换一个编码器,都要重做这个对齐操作,不然你会被"零速定位不准"折磨一整天。
5.3 先跑开环六步,再上 FOC,顺序不要反
我见过不少新手从 FOC 的代码学起,遇到问题就在变换矩阵里翻来覆去找 bug,最后发现是电机自身相序或霍尔装错了。我的建议是别直接跳进矢量控制,先用霍尔加六步换向把电机转起来,拿示波器看霍尔信号的 60° 跳变,看电流换向台阶,理解每个扇区里哪个桥臂在导通。之后再上无感或 FOC。六步换向把 120° 三相轴的扇区关系展示得明明白白,FOC 只是在同一套轴系上叠加了连续的角度插值和电流闭环。
6. 一点个人习惯:先认出 120°,再谈控制
我现在拿到一台从没见过的电机,第一件事不是接驱动器,而是做三件事:用万用表量相间电感,用示波器看线反电动势,再用手转一圈录霍尔的跳变沿。这三样数据看完,极对数、三相轴关系、霍尔安装方式基本就清楚了,剩下的调参才是纯软件活。
轴系问题不是理论考试,它是写在铜线、磁钢、霍尔传感器和示波器波形里的物理事实。与其背 Clark 和 Park 的矩阵,不如先建立"三相轴互差 120°、垂直轴属于变换后坐标"的画面感。等你什么时候看到 90° 的三相轴画法就觉得难受,看到反电动势三个过零间距 120° 就觉得踏实,直流无刷电机的轴系划分这关,就算真正过了。