ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

直流无刷电机ax by cz三相轴解析:不是垂直轴,而是120°电角度划分

直流无刷电机ax by cz三相轴解析:不是垂直轴,而是120°电角度划分

前阵子有个做运动控制的同行问我:直流无刷电机里经常看到“ax by cz”这种轴名写法,这三条轴是怎么划分的,是不是按垂直轴线分的?他说他翻了不少代码,变量一会儿是axis_a/axis_b/axis_c,一会儿是alpha/beta,还有人直接标x/y/z,越看越迷糊。这个问题听起来基础,但我实际调试FOC时见过太多人卡在这一步:坐标轴没想清楚,后面Clark变换写错符号、编码器零点对歪、Hall状态表编反,最后电机要么转不起来,要么抖得跟筛子似的。这篇就把“ax by cz”的划分方式彻底说清楚,顺便回答“垂直轴线”这个误区到底出在哪。

1. 先把“ax by cz”这串字母拆干净:三相轴不是垂直轴

1.1 三相绕组空间轴线才是ax/by/cz的物理来源

直流无刷电机定子上有三相绕组,通常叫A、B、C,也有些人叫U、V、W。每一相绕组通上电流之后,都会在电机气隙里产生一个磁势,这个磁势的有效方向就是这一相的“相轴”。资料里把A相轴写作a-axis,缩写就成了ax;B相轴写成b-axis,缩写by;C相轴写成c-axis,缩写cz。所以ax/by/cz不是随手编的三个符号,它们对应的是电机内部三相绕组的物理轴线。

这三条轴线在空间上不是垂直的,而是两两相隔120°电角度。为什么必须是120°?因为三相电流在时间上已经互差120°相位,要让三者的合成磁势变成连续旋转的圆形磁场,空间上也得对称分布120°。你可以想象三个人站在圆盘边上拉绳子,三个人位置均匀隔开,发力相位又互相错开,合力的方向才能平稳绕圈。如果三个人全挤在一起,或者站成垂直十字形,合力方向就乱套了。

这里有个容易忽略的细节:相轴不是某一根导线的方向,而是整相绕组等效磁势的中心轴线。电机的线圈是分布在好几个槽里的,但合成磁势可以简化成一个轴线方向。所以你在电机端盖上找不到一条物理的“轴”,它更像一个矢量方向。

1.2 120°是电角度,不是机械角度

很多新手第一次拿量角器去量电机引出线位置,发现三根线之间的机械夹角根本不是120°,然后就开始怀疑资料写错了。其实这里差了一个极对数p。无刷电机的转子有多少对磁极,电角度周期就是机械角度的p倍。三相轴之间相差的是120°电角度,换算成机械角度要除以p。

举个例子:2极电机极对数p=1,A相轴和B相轴的机械夹角就是120°;4极电机p=2,机械夹角变成60°;14极电机的极对数p=7,A相轴和B相轴的机械夹角只有约17.1°。很多电动车电机就是14极甚至20极,你拿眼睛根本看不出“均匀120°”的分布,但它们电气上确实是120°电角度对称。

这个概念直接回答热词里的疑问:ax/by/cz是按“电角度120°均匀划分”的,不是按垂直90°划分。如果哪天你实测到两相之间机械夹角只有几十度,先算一下极对数,别急着下结论。

1.3 命名上的歧义:ax/by/cz里的“yz”不是坐标轴

为什么那么多人会把ax by cz理解成垂直轴?问题出在写法上。ax、by、cz里面刚好带上了x、y、z三个字母,很容易让人联想到空间直角坐标系的x轴、y轴、z轴,进而觉得ax是x方向、by是y方向、cz是z方向,三条轴当然互相垂直。

实际上这里的x、y、z只是后缀,是“axis”一词的尾字母加简写习惯,并不代表笛卡尔坐标方向。更坑的是,有些仿真软件和文档里确实会用X、Y、Z来标注三相输入信号。比如MATLAB的Clarke变换模块,输入端标的就是X/Y/Z,而不是A/B/C。这种标注方式进一步加剧了误解:你以为是三维直角坐标,实际上它表达的还是三相绕组轴。

所以先把结论钉死:ax/by/cz本身不是垂直轴,它就是一组建模在定子上的、互差120°电角度的三相物理轴。

2. “垂直轴线”到底说的是什么:αβ轴与dq轴

2.1 Clark变换:三相120°变成两相90°

既然三相轴不是垂直的,那控制算法里的“垂直轴”是从哪来的?答案是数学变换。三相绕组彼此耦合、又冗余(星形接法下Ia+Ib+Ic=0),直接做控制很麻烦。于是先做Clark变换,把三相电流从abc轴投影到两相静止直角坐标系αβ上。变换后,α轴通常与A相轴重合,β轴逆时针超前α轴90°电角度。

等幅值变换的标准形式是:

  • Iα = Ia - (1/2)Ib - (1/2)Ic
  • Iβ = (√3/2)(Ib - Ic)

从公式能看出来,α轴分量的计算方式相当于把三相电流按空间120°方向做矢量合成,β轴方向则完全由B、C两相电流的差值决定。做完变换后,原来三根互差120°的轴,就变成了一组互相垂直、完全解耦的两根轴。信号不再有两相冗余,合成矢量的大小和方向可以直接用平面几何方法处理。

这里有个工程坑:Clark变换有等幅值和等功率两种系数约定。等幅值变换输出电压矢量的幅值直接对应相电压幅值,而等功率变换会在系数里多一个√(2/3)。两种写法都没有错,但代码里只能选一种,而且要跟电流采样增益、后续逆变器调制算法保持一致。经常有人调完电流环发现力矩小了或波形不对,最后查出来是等幅值和等功率变换混用了。

2.2 Park变换:静止垂直轴变成旋转垂直轴

Clark变换得到的αβ轴虽然是垂直的,但还是静止坐标系,转子转一圈,αβ轴上的电流依然是正弦波。如果直接拿PI控制器去跟踪正弦参考,会有稳态误差,控制效果很拉胯。所以还要做Park变换,把αβ轴上的交流量变成旋转坐标系dq轴上的直流量。

dq坐标系固定在转子上,d轴一般取转子永磁体磁链方向,q轴超前d轴90°电角度。变换公式大致是:

  • Id = Iα·cosθ + Iβ·sinθ
  • Iq = -Iα·sinθ + Iβ·cosθ

变换之后,稳定运行时Id和Iq都是直流量,PI控制器可以做到无静差。Iq对应转矩电流,Id对应励磁电流,表贴式电机通常把Id控到0,内置式电机还要做最大转矩电流比控制。这一层又是两个垂直轴,只不过变成了旋转的垂直轴。

所以“垂直轴线”这个说法,在控制语境下其实指两样东西:静止的αβ垂直轴和旋转的dq垂直轴。它们都是数学变换的产物,跟电机里真实存在的三相绕组轴不是一回事。

2.3 三个坐标系的真实关系:一张对比表

坐标系轴组成轴间角度参考系主要用途
三相静止abc轴ax/by/cz120°电角度定子固定电机实际绕组物理轴,采样和输出的原始量
两相静止αβ轴α/β90°定子固定Clark变换后的中间量,交流信号,便于几何合成
旋转dq轴d/q90°转子旋转Park变换后的控制量,稳态为直流,直接做PI

看完这张表就清楚:ax/by/cz从来都不垂直,它们是电机物理结构决定的120°分布;αβ轴和dq轴才是真正按90°划分的垂直轴。热词里问“ax by cz是不是按垂直轴线划分”,严格回答是“不是”;但如果你打算用FOC去做控制,算法内部一定会先把三相轴变换到垂直轴上去。物理是三相,控制是两相,桥梁就是坐标变换。

3. 直流无刷电机里两种控制方式,对坐标系的使用完全不同

3.1 方波六步换向:直接切三相轴

常规BLDC方波驱动不做什么Clark、Park变换,它就是直接操作三相桥臂。控制方式叫六步换向,每个电周期走六个状态,每个状态里三相桥臂中两相导通、一相悬空,每60°电角度切换一步。

典型的开关组合如下(“上桥”表示上管导通,“下桥”表示下管导通,“悬空”表示该相上下管都关断):

步序A相B相C相电流路径
步1上桥导通下桥导通悬空A+ B-
步2上桥导通悬空下桥导通A+ C-
步3悬空上桥导通下桥导通B+ C-
步4下桥导通上桥导通悬空B+ A-
步5下桥导通悬空上桥导通C+ A-
步6悬空下桥导通上桥导通C+ B-

方波控制正因为直接用三相轴上的开关状态驱动电机,所以相电流是梯形波而不是正弦波,合成磁势方向每60°跳变一次,扭矩脉动和噪音都比较大。但它的优点是非常简单,对控制器性能要求低,很多小功率风机、水泵还在用。

如果你看到一台无刷电机只是霍尔换向、六步PWM,那它全程都没有“垂直轴”参与。它的坐标系就是ax/by/cz三相轴,换向表写得多清楚,电机就走得多顺。

3.2 FOC正弦控制:必须先把三相轴换成垂直轴再算

FOC则完全是另一套逻辑。它先采样三相电流Ia、Ib、Ic,做Clark变换得到Iα、Iβ,再做Park变换得到Id、Iq,然后分别对Id、Iq做PI调节,输出Uq、Ud,再经过逆Park变换得到Uα、Uβ,最后由SVPWM或正弦PWM把电压矢量还原到三相桥上输出。

在FOC的调试界面里,你看到的不是“A相电流多大”,而是Iq多少、Id多少。你调电流环PI参数,调的也是旋转直角坐标系上的控制量。正因为dq轴互相垂直且解耦,才能把一个交流电机控制系统拆成类似直流电机的两个独立回路来处理。这比直接在三相轴上做六个状态来回切细腻得多,代价是运算量大、对转子位置精度要求高。

这里要特别说明:即使FOC内部全是垂直轴计算,最终作用于电机的仍然是三相桥臂的开关组合,真正通电出力还是ax/by/cz三相绕组。数学变换只是把“怎么出力”这件事算得更精准。

3.3 从相电流波形看坐标系差异

用示波器挂电流探头看相电流,一眼就能分辨两种控制:

  • 方波六步:相电流接近梯形波,每个电周期有一段平台,开关切换处有尖峰,换向时有明显的转矩脉动。
  • FOC正弦:相电流是连续的正弦波,三相互差120°,波形干净,运行噪音低。

如果你在调试FOC时看到相电流不是正弦,而是类似梯形的形状,多半是电角度不对、编码器零点偏了,或者电流环带宽不够。因为从垂直轴坐标系算出来的参考电压本来就是正弦的,输出到三相轴上就应该是正弦。

4. 工程中最容易踩的坑:坐标轴混用与零点对齐

4.1 开环定位到底定在哪个角?A+B-不只是A相轴

调试无刷电机时,最常用的操作是开环定位:给逆变器通一组固定开关组合,让转子锁到一个确定位置,然后去对齐编码器零点。很多教程直接说“给A相上桥、B相下桥通电,转子就停在A相轴上”,这句话其实不严谨。

实际算一下A+B-导通的情况:设Ia=I,Ib=-I,Ic=0,代入Clark变换:

  • Iα = I - (1/2)(-I) - 0 = 1.5I
  • Iβ = (√3/2)(0 - (-I)) = 0.866I

合成矢量角atan2(0.866I, 1.5I)约等于30°,再根据定义方向,实际上是-30°电角度。也就是说,这个开关组合让转子停在A相轴逆时针偏30°的位置,而不是A相轴正方向。

正确的做法有两种。第一,要精确定位到0°电角度,需要通过软件给三相注入一组互差120°的电流,比如Ia=I,Ib=Ic=-I/2,让合成电流矢量正好指在α轴正方向。第二,如果只做简单标定,可以把开环定位停下来的位置直接定义为程序的0电角度,但这时你的0°对应的是那个偏30°的合成磁势位置,后面Hall和编码器的所有换算都要基于这个自定义零点。

我在实际项目里推荐方式二,因为简单可靠。但一定要把“这个零点对应的是合成矢量方向,不是某相绕组轴线”写进注释里,不然过几个月再调试自己都会绕晕。

4.2 编码器零点偏移导致的Iq/Id串扰

FOC最依赖的东西就是转子电角度θ。如果编码器零点跟A相轴线之间差了一个角度Δθ,那么Park变换算出来的Id、Iq就不再是真实的直轴电流和交轴电流,而是旋转了Δθ之后的投影。表现出来的症状很典型:小电流时电机能转,但给大一点的Iq指令,Id也跟着跑,两个轴互相串扰;速度稳定后电流波形有2倍频纹波。

校准方法我常用两种:

一是机械对齐法。先开环定位(注意4.1里的偏置),然后安装编码器,让它在定位点输出一个约定角度,比如0度或某个固定值。接着在程序里把这个固定值与标准A相轴之间的角度差写进“电角度偏移量”常量。

二是软件标定法。电机低速开环运行,给一个固定的小Iq指令,在线微调电角度偏移量,同时观察Id波形。当Id稳定在0附近、不再随转速波动时,偏移量就对了。这个方法特别适合磁编码器或绝对值编码器,因为不需要重新机械拆装。

有一点非常关键:不同代码库对电角度的定义方向不一致。有的写θ_elec = 机械角×极对数 + 偏移量,有的写θ_elec = 机械角×极对数 - 偏移量,符号反了会导致整个FOC是完全正反馈,电机一给电流就啸叫。改代码前先画一张坐标系方向图,标出d轴和q轴的正方向,再对公式。

4.3 霍尔状态序列与三相轴对应关系的核对

方波控制里霍尔状态表错位是家常便饭。三颗霍尔传感器通常按120°电角度安装,输出8种状态(实际只用6种)。但不同电机厂摆放位置不同,状态跳变的顺序和Hall边沿跟反电动势过零点的关系也完全不同。网上抄来的换向表大概率不适合你的电机。

我的做法是:用逻辑分析仪或示波器同时抓三路Hall信号和A相反电动势。用手缓慢匀速盘转子,记录Hall边沿变化顺序,以及在每个Hall状态区间里反电动势过零点的位置。然后把真实状态序列整理出来,再去填六步换向表。

这里有个隐蔽坑:霍尔有60°安装和120°安装两种类型。60°安装的三路Hall边沿在电气角度上间隔60°,120°安装间隔也是60°?不对,准确说两者产生的高电平宽度不同,状态序列会差一个码。如果你按120°的表去套60°的电机,或者反过来,电机能空载转但一带负载就顿挫,或者正转正常反转错乱。遇到这种情况,先确认电机霍尔传感器到底是60°还是120°电气布置,再决定状态表。

5. 实战排查速查表与调试流程建议

5.1 现象、原因与处理对照表

现象可能原因检查手段处理方向
能转但力矩小、噪音大相序接反、编码器零点偏移、Clark系数错误示波器看相电流波形是否正弦、反电动势过零顺序重新做编码器零点标定,核对坐标系定义
电流环调不上去,Id/Iq互相串扰d/q轴方向定义反、电角度偏移量不对给固定小Iq观察实际转向和Id趋势修正坐标变换符号,软件补偿偏角
方波控制每60°抖动一次Hall状态表错误或霍尔60°/120°类型搞混逻辑分析仪抓Hall状态和反电动势过零点重新整理Hall状态表
FOC能空载运行,带载就失步转子位置采样延时、电流环带宽太低看低速带载时Id/Iq波形是否紊乱提高电流环带宽,补偿位置采样延迟角
高速运行时相电流出现明显削顶母线电压不足、调制比饱和看调制深度是否接近1检查母线电容容量,适当降低转速指令

这张表是我踩过坑的总结,不一定覆盖所有情况,但帮你快速定位80%的坐标系相关问题。

5.2 一套个人推荐的调试顺序

第一,先检查电机本体。三相直流电阻是否对称,绝缘是否正常。不对称的电机怎么调都是白费功夫。

第二,示波器测三相反电动势波形。这里不只是看幅度,更是要确认顺序:是A→B→C还是A→C→B。这个顺序直接决定你后续方向相关代码怎么写。

第三,开环定位。用固定电流矢量把转子锁住,完成编码器或霍尔零点标定。如果是增量式编码器,每次上电都要做一次找零或整定。

第四,电流环小电流闭环。电流环是基础,别急着跑速度环。给定一个很小的Iq指令,比如额定电流的5%,观察Id是否趋近0,相电流是否正弦。如果波形不对,先查坐标变换和零点。

第五,速度环中速闭环。看转速波动能不能压得住,加载后动态响应如何。这一步主要暴露机械阻尼、负载惯量和编码器分辨率问题。

第六,带载和高速测试。这里才验证SVPWM调制、死区补偿、高速弱磁这些进阶功能。

按照这个顺序,每步都确认好了再进下一步,整体调试时间反而最短。

5.3 新手如何快速建立坐标系直觉

别一上来就啃坐标变换矩阵。我的建议是先把定子展开图画一遍:把三相绕组的分布画出来,标出ax、by、cz三条轴的空间位置,然后再在旁边画α轴和β轴,标出它们与A相轴的关系。最后画旋转的dq轴,用箭头表示转子所在位置。

有一个技巧特别好用:在调试上位机里把坐标变换前后的矢量全部打印出来,画成可视化的相量图。你会直观看到三个相隔120°的电流矢量,经过Clark变换后变成一个在αβ平面旋转的合成矢量,再经过Park变换后变成两个几乎不动的Id、Iq直流分量。看一遍完整过程,比看十篇原理文章都管用。

还有就是要接受“坐标系定义可以有方向差异”。不同框架、不同教材里的d轴、q轴正方向定义不完全相同,有的q轴超前d轴90°,有的滞后90°,你只要保证代码内部自洽、物理方向和自己画的图一致就行,不要死记硬背公式符号。

我自己第一次接触无刷电机控制时,也被ax by cz这种写法晃了一下,真以为三相轴是x/y/z方向的垂直轴,结果按三维直角坐标的思维去推Hall组合,怎么算怎么不对。后来把电机拆开,对着定子绕线看了一遍,又用示波器在线反电动势上过了一次零点,才彻底转过弯来。这个事给我最大的教训是:控制算法里的坐标轴,只有一部分是物理轴,大部分是数学轴;你脑子里要同时装三套轴系,并且随时知道当前调试的关键量到底在哪个轴系上。最后再分享一个实用小技巧:每次换控制板或换电机型号,先把代码里的Clark/Park变换前后矢量打印出来画一次图,亲眼验证一下120°变90°、交流变直流的全过程,所有坐标系的困惑都会立刻消失。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进