直流无刷电机轴系划分:从ax by cz到d-q坐标系的完整解析

发布时间:2026/11/4 5:37:46
直流无刷电机轴系划分:从ax by cz到d-q坐标系的完整解析

搞电机的朋友多少都遇到过这种对话:群里扔过来一个型号或者一串字符,后面跟着一句“ax by cz 怎么划分的?是按垂直轴线划分的吗?”刚入行的时候我也被绕得头晕,后来摸清了门道才明白,这问题背后其实是两套坐标系概念在打架。今天就把这块彻底捋清楚,顺便把我踩过的坑也一并写出来。

先说结论,“ax by cz”这个词本身并不是电工行业里的标准术语,它更像是一段流传在爱好者圈子里的缩写口诀,用来描述直流无刷电机(BLDC)工作时三相绕组对应的轴线关系。真正干活的时候,你会更频繁地听到A相、B相、C相,或者α轴、β轴、d轴、q轴这些说法。但既然这个问题能成为热词,说明确实有很多人在做电机控制或者选型时卡在了坐标划分上,尤其是“垂直轴线”这个表述,容易让人把机械空间和电气空间搅在一起。

1. 先把“ax by cz”的出处和含义定性

1.1 这个名字到底从哪来的

我查了很多资料,也翻了几个老工程师的笔记,可以说“ax by cz”最早出现在一些国外电机测试台架和编码器调试软件的寄存器命名里,意思是把电机的三相分别标记为A轴、B轴、C轴,对应的物理量比如电流、反电动势、磁链都投影到这三个轴向上。后面三个字母x、y、z不是额外的东西,而是指每一相上的瞬时值分量。简单说,ax就是A相在x方向的投影,by是B相在y方向的投影,cz是C相在z方向的投影。但这种写法没有统一标准,不同厂商的固件里可能含义完全不同。

1.2 为什么这个词容易引起误解

正常讲三相电机,我们说的都是A、B、C三相,角度互差120度,这是空间分布上的关系。可一旦有人把a、b、c和x、y、z并排写在一起,新手就会误以为它们是一一对应的坐标轴,于是自然产生疑问:这仨轴是不是垂直的?实际上x、y、z在数学上通常是三维笛卡尔坐标系的三个正交轴,而A、B、C是电气三相轴,几何上并不垂直。问题就出在这两套完全不同的坐标体系被塞进了同一个缩写里。

这种缩写更多的是一种思维模型,不是为了表达物理坐标。就好比你写“abc”不代表英文字母表,写“xyz”也不代表数学坐标轴。把“ax by cz”当作一个整体代码来理解就行。

1.3 实际工程中如何正确使用这种命名

我在调试无刷电机驱动板时,习惯把三相驱动桥的输出标记为AH/AL、BH/BL、CH/CL,对应高端和低端MOS管。固件里如果要定义电流采样通道,就会写成ia、ib、ic。如果有人把工程文件里的ia改名成ax,ib改名成by,ic改名成cz,只要内部映射关系不变,代码照样能跑。问题的关键从来不在于名字本身,而在于你脑子里那张映射表是不是清晰的。

2. 直流无刷电机的轴线划分——机械空间 vs 电气空间

2.1 空间几何轴和电气轴的根本区别

回到热搜词里那个问题,“是按照垂直轴线划分的么”。我先给结论:直流无刷电机的三相轴线在机械空间不是互相垂直的,它们是互差120度分布的。但如果你从电气角度看,在d-q坐标系里,d轴和q轴就是互相垂直的。很多人在这一步懵掉,就是因为没有区分“转子上已经物理存在的轴线”和“控制器里虚拟出来的轴线”。

机械空间里,一台表贴式永磁同步电机或无刷直流电机的定子有三个绕组槽位,均匀分布在圆周上,相邻间隔120度。转子上的永磁体产生磁极,N极和S极交替排列。这时候如果你把N极中心线定义为d轴,那么超前90度电气角的位置就是q轴。一个机械圆周是360度机械角,但电气角等于机械角乘以极对数。比如一台4极电机,一对极占据180度机械角,电气上就是360度。所以d轴和q轴的“垂直”,是电气意义上的垂直,是在一个旋转坐标系里人为定义出来的,不是定子绕组在空间上真的分了四个象限。

2.2 三相绕组与“ax by cz”的对应关系

用最简单的两两导通方式驱动无刷电机时,六个换向状态对应六个空间电压矢量。每个状态下只有两相导通,另一相悬空。如果你把三个绕组分别标为ax、by、cz,那么一次换向比如AB导通、C悬空,就可以理解为电流从a轴流向b轴,产生的合成磁动势方向落在某个扇区。这时候如果把三个字母拆成三对,ax表示A相在x方向上的分量,by表示B相在y方向上的分量,cz表示C相在z方向上的分量,完全是为了数学上合成空间矢量的方便。

我实际做过这样的操作:用Matlab搭建一个BLDC仿真模型,电机模块里三相电压就是写成Va、Vb、Vc,然后做Clark变换变成Vα、Vβ,再做Park变换变成Vd、Vq。如果你非要把输入变量命名为ax、by、cz,只需要在Clark变换矩阵里对应好顺序,结果完全一样。所以这个命名问题的本质,是你要在哪个坐标系里做控制。

2.3 为什么说“垂直轴线”只在d-q坐标系里成立

做过FOC(磁场定向控制)的朋友应该都有体验:你花了半天调PI参数,调的就是d轴和q轴的电流环。d轴负责励磁,q轴负责转矩,这两个电流分量在转子坐标系里是完全解耦的,控制上可以独立调节。所以从控制算法层面看,d、q轴必须垂直,否则两个环就互相耦合,调起来会让人崩溃。而在静止的三相坐标系里,把ABC三相写成互差120度的三个矢量,它们本身就不是正交基,所以谈不上垂直。

这里还有一个反直觉的坑,就是当转子转动时,d轴和q轴也跟着转,你的坐标变换矩阵里的电角度一直在变化。这时候你再回头看三相坐标下的ax、by、cz,它们相对定子是静止的。同一个物理量,站在不同坐标系里看,表达方式完全不同,这就是为什么很多教程强调“先想清楚自己站在哪个坐标系里”。

3. 如何在实际无刷电机系统中建立正确的坐标映射

3.1 从电机引线开始梳理三相顺序

拿到一台无刷电机,最基础的任务是先分清楚哪根线是A相、哪根是B相、哪根是C相。电机出厂时一般会标U、V、W,国内也有标A、B、C的,还有一些厂商直接标1、2、3。不管标什么,你需要做的第一件事就是用万用表测三根线之间的电阻,正常情况下两两之间电阻应该一致。然后用手转动电机轴,用示波器看任意两相之间的反电动势波形,三组波形互差120度,这时候你就能确定相序了。

我建议你拿到电机后花十分钟做个简单的表格,把引线颜色、标记名、你在代码里用的变量名一一对应记下来。很多人出问题不是电机坏了,而是换了一台电机后线序没重新确认,结果驱动波形对不上,电机就嗡嗡响不转。这里有个背锅重灾区:霍尔传感器。无刷电机里霍尔元件的顺序必须和三相绕组顺序匹配,否则换向逻辑全乱。我踩过一次坑是某国产电机厂商的霍尔线和功率线颜色体系和常规习惯不一样,结果我按照上一台电机的接线方法插上去,电机死活不转,后来查霍尔波形才发现顺序反了120度。

3.2 Clark变换与Park变换中轴名怎么定义

做FOC时,三相电流ia、ib、ic经过Clark变换得到iα、iβ,这一步是把三相静止坐标变成两相静止坐标。变换矩阵里有个系数,等于2/3或sqrt(2/3),取决于你是否做功率不变约束。我实际用的公式是iα = 2/3 * (ia - 0.5ib - 0.5ic),β轴同理。变换完以后α轴和β轴互相垂直,这可以理解为一种数学手段而非物理实体。

接着做Park变换,把iα、iβ乘上旋转矩阵,得到id和iq。旋转矩阵的角度来自编码器或霍尔传感器给出的转子电角度。这时候坐标系和转子固定在一起,d轴在转子磁极方向,q轴与它垂直。到这里你可以看到,真正的“垂直轴线”出现在两次变换之后的d-q坐标系里,而不是最初的三相线路上。

很多新手做仿真时喜欢直接用幅值不变系数2/3,然后用同样的PI参数去带真实电机,结果电流环发抖。我后来才弄清楚,问题不在于2/3还是sqrt(2/3),而在于你在仿真里用的角度定义和实际编码器方向是否一致。如果电机转向反了,电角度就一直在累加或递减,PI调节器跟着疯掉,眼看电流波形像锯齿。

3.3 怎样用换向表验证轴序是否匹配

无刷电机方波控制里有个核心概念:换向表。六步换向法里,根据霍尔传感器的三个信号组合,决定哪两相通电。很多人会直接把网上找来的换向表抄进工程里,但电机相序不同、霍尔安装位置不同,表是完全可能不一样的。正确做法是把霍尔信号和反电动势波形放在一起,标记出每个换向点的位置。

我常用的验证方法是手动缓慢转动电机轴,在示波器上同时看三路霍尔信号和一路反电动势。当转子转到某个位置,霍尔信号发生跳变时,对照当时的反电动势相位,就能推出正确的通电顺序。这里要留个心眼:示波器探头本身的相位延迟不可忽略,尤其在高转速下,差个几微秒就可能在换向边界上错误判断。实测下来用10MHz带宽限制功能能减少不少高频噪声干扰。

3.4 一个完整的坐标映射实操案例

我去年做一台36V、150W的无刷减速电机控制器,电机引线颜色是黑绿白,霍尔线是红蓝黄。我先用直流电源简单测试,任意两线接12V看电机是否转动,确定三根功率线的相序。然后把霍尔线依次交换组合,测出六组霍尔信号与反电动势波形之间的正确配对。最终在代码里定义phase_map数组,顺序是black->A,green->B,white->C,然后把霍尔值映射到换向状态表。这里如果三相顺序写错,最典型的结果是电机电流冲击大,噪音明显,甚至出现堵转。

这种场景下如果有人问我ax by cz怎么划分,我会直接告诉他:你在代码里把它当成三个传感器通道的代号就行,方法和物理相序的虚实对应性没有必然关联。关键是你的变换矩阵和换向表必须要和实际物理接线一致,这才是真正的“划分方式”。

4. 常见问题与排查技巧实录

4.1 为什么三相电机某两相电阻异常偏大

有次调试一块旧驱动板,接好电机后上电,电机一抖一抖的,电流很大。我测了三相电阻,A-B是2.5欧,B-C是2.5欧,但A-C是5欧。这个时候第一个怀疑对象不是电机,而是线束或者驱动板上的接线端子。我用万用表笔直接戳电机三根引出线,测出来的电阻都是2.5欧,那问题就转移到了控制板到电机的连线中间,很可能有接触电阻或者端子氧化。把接线端子换新后故障消失。这类问题如果不先测裸电机,很容易误判成电机线圈烧了。

4.2 霍尔换向位置不准,电机高速丢步

如果你做的是方波控制,霍尔信号在边沿处有抖动或噪声,高速时换向就会丢步。这时候硬件上要在霍尔信号线上加滤波电容,软件上要做去抖处理。我常用的软件方案是检测到边沿后先判断信号稳定时间超过某一阈值再认为换向有效,但这个阈值不能太大,否则高速下延迟太多。霍尔边沿抖动超过几十微秒时,多半是信号线受到功率管开关噪声干扰,这时候优先检查接地和布局,而不是一味调软件参数。

4.3 编码器角度与电机转子不对齐

用FOC做高精度控制时,编码器的零位必须与转子d轴对齐。很多电机厂商会在电机轴上刻一个标记,安装编码器时要保证编码器索引位置和d轴位置重合。如果编码器装偏了,固定补偿角度就能解决,但前提是你知道偏了多少。我用的办法是给q轴电流一个较小的值,看电机能否停在某个确定角度,然后微调编码器角度偏移量,直到电机停稳且转向正确。这个过程有点玄学,但实测非常管用。你要盯住id反馈是否为零,不为零就说明dq轴还没对正。

4.4 电流环调不稳,id和iq互相干扰

说到FOC就绕不开电流环调试。刚开始调的时候,我直接把id设定为0,然后只调iq,结果速度上去后电流波形乱跳。后来才明白,d-q轴虽然数学上解耦,但在实际离散化算法里有交叉耦合项,转速越高,dq轴之间耦合越明显。解决办法是在控制器里加入解耦项,把当前转速下的电感耦合电压补偿进去。这个操作就是拿转速乘以电感得到补偿电压,分别加到d、q轴PI输出上。加完之后电流波形才真正稳定下来。

4.5 转速计算抖动导致速度环震荡

如果编码器分辨率不够,或者采样周期不匹配,转速计算结果会像台阶一样跳动。用这种转速去跑速度环,容易造成速度环震荡。我一般不用差分法直接算速度,而是用M法或T法组合,或者加一阶低通滤波。滤波时间常数需要根据转速范围和负载动态特性折中,滤波太狠会迟钝,太轻又抖。有一次我为了省事把滤波系数调到几乎不过滤,结果速度环在小转速下持续振荡,后来改到截止频率20Hz左右才正常。

5. 按垂直轴线划分的误解还有哪些

5.1 常常混在一起的“磁极轴线”与“绕组轴线”

很多文章里提到dq轴,会说d轴是磁极轴线,q轴是转矩轴线。你没有真正拆过电机的时候,看到“磁极轴线”四个字会以为在电机内部有一条几何上画出来的线。其实磁极轴线指的是转子永磁体N极中心所在的位置,随着转子旋转,这个位置在空间里不断变化,所以d-q轴是一个旋转坐标系。而三相反电动势轴线固定在定子上,永远是静止的。这两者之间是通过转子电角度建立联系的。

5.2 把“垂直”误解成物理90度

物理空间里的垂直和电气空间里的正交,差别非常大。一个8极电机,机械上相邻两个磁极间隔45度,但电气角相隔180度。所以在电机内部,你永远找不到d轴和q轴在空间上呈90度夹角的位置,除非你站在转子参考系里看等效磁场矢量。这也是很多画图软件让人困惑的地方,你把d-q坐标系画在定子圆周上,q轴永远不在机械90度的角度上。

5.3 命名混乱对调试的影响有多大

做电机控制项目时,代码里经常出现三个字母的缩写,比如foc.h里的abc_to_alpha_beta函数、beta_to_dq函数。这些函数如果注释写得不好,后来接手的人很容易被“ax by cz”这类命名带偏。我见过一个项目,源码里把三相电流命名为alpha电流、beta电流、gamma电流,结果新来的同事拿着它跟硬件原理图对线,半天对不上,因为原理图上标的还是U、V、W、ia、ib、ic。后来我定了个规矩,所有软件里的变量命名必须和原理图硬件标注保持一致,至少要在头文件里写清楚映射关系,这才算把这个坑填上。

5.4 网上零散资料带来了更多误导

这年头自学资料一大把,但质量也是鱼龙混杂。很多个人博客文章里,作者自己没把坐标系理清楚,就写“A相轴线在x轴上”,这种话单独看没毛病,可一旦和后面“q轴垂直”放在一起,新手就直接懵了。我的建议是只看几篇权威性高的应用笔记,把三套坐标系(三相静止、两相静止、转子旋转)的变换关系亲手推导一遍。你真正推导完以后,任何关于“ax by cz怎么划分”的问题都不会再有疑惑,因为你会明白所有的轴都是自己定义出来的工具,重要的是让它们在数学上自洽。

6. 工程实现的几条落地建议

6.1 先画一张坐标系关系图

做任何电机驱动项目,第一步不要急着写代码,千万不要急着写代码。先拿张纸,把电机定子、转子、三相绕组、霍尔位置、编码器零位都画出来,标好角度关系。然后在这张图上把三相静止坐标、α-β静止坐标、d-q旋转坐标都标出来,写清楚它们之间靠什么角度关联。这张图花二十分钟,但后续调试能帮你省下至少一下午。

6.2 用惯用的变量命名规范固定映射

我在自己的代码库里一直使用以下命名规范,实测对团队协作友好:

  • 物理三相输入:ia、ib、ic
  • Clark变换输出:i_alpha、i_beta
  • Park变换输出:i_d、i_q
  • 电角度:theta_e
  • 机械角度:theta_m
  • 角速度:omega

当你把每个变量名背后代表哪个坐标系写进代码注释里,就不会再有人在群里问“ax by cz怎么划分了”。很多时候,这个疑问本质上是代码可读性差导致的误会。

6.3 用离线数据回放验证你的变换正确性

我强烈建议大家在调板之前,先离线跑一遍坐标变换。怎么做?用示波器采集一段电机运行时的三相电流波形,存成CSV文件。然后在Matlab或Python里加载这段数据,做Clark和Park变换。因为此时你已经知道电机实际运行的方向和电角度数据,你可以核对变换后的d-q分量是否合理。如果变换程序有顺序错误,离线很快就能暴露出来,比上电调试安全得多。这个流程我每次做新平台都要走一遍,百试百灵。

6.4 把“轴”当作逻辑概念而非物理概念

最后想强调的一点是:工程里的“轴”首先是一种数学工具。你写矩阵变换,其实是解耦的需要,物理绕组还是那三根线,不会因为控制器里多了一个“q轴”就改变它在电机里的位置。所以当你看到任何有关ax、by、cz的讨论,第一反应应该是“这里是不是有人把坐标系混着用了”,而不是“我的电机是不是少了一根轴”。

理解这一点以后,再从“垂直轴线”的问题回头看,你会发现答案已经不重要了,因为你已经知道,真正重要的是你在哪个坐标系下思考问题,以及你的控制算法是否和实际的引线相序匹配。这才是直流无刷电机控制里最核心、也最容易被忽略的基础工程素养。