永磁同步电机FOC控制:星形与三角形绕组30°相位偏移及SVPWM扇区重构全解析
2026/9/17 23:56:30 网站建设 项目流程

做永磁同步电机(PMSM)FOC控制的这些年,我总结过一句粗话:真正让你 debug 到怀疑人生的,往往不是高级得不得了的观测器和参数辨识,而是最基础的绕组接法。前段时间调一套无感FOC,电机是三角形(Δ)绕组,我按网上教程默认的星形(Y)模型写代码,电机倒是能转,但电流大、发热快、声音也不对。折腾了半天才反应过来,问题就出在星形到三角形这 30° 的相位偏移上——FOC 和 SVPWM 里的所有角度基准,全被这 30° 给带偏了。

这篇文章就把这段弯路整理出来:30° 偏移到底从哪来、会怎么影响 FOC 的坐标变换、SVPWM 的扇区边界该怎么重构、现场又怎么快速验证补偿方向。适合正在调永磁同步电机 FOC,尤其是用无感方案的工程师,也适合准备入门 FOC、想知道“为什么电机接线方式会影响控制算法”的初学者。读完你至少能少踩一个坑,少烧两块驱动板。

1. 绕组接法才是相位问题的源头

1.1 星形与三角形:两种“方言”

三相电机的定子绕组有两种接法,星形和三角形。星形接法把三相绕组的一个端点接在一起形成中性点,另一端接驱动器;三角形接法则是把三相绕组首尾相连,形成一个闭合的环,三个连接点接驱动器。

从驱动器的角度看,星形电机和三角形电机的外特性完全不同。网上绝大多数 FOC 教程,包括很多播放量很高的视频,默认电机是星形绕组,而且从 Clark 变换到 SVPWM 扇区判断,整套算法都隐含了“星形”这个前提。你拿同一套代码去驱动三角形绕组电机,相当于用普通话的语法去听方言,字面意思都懂,但实际指令全偏了。

这个“偏”集中体现在相位上。星形和三角形绕组在同样的逆变器输出电压作用下,绕组内部实际承受的电压相位差了 30° 电角度,电流相位也相应相差 30°。更麻烦的是,三角形绕组还有“线电流不等于相电流”的问题,幅值差 √3 倍,相位再差 30°。这两个因素叠加,直接让 FOC 坐标系里的 id、iq 解耦失效。

1.2 30° 是从哪一步算出来的

30° 这个数字不是约定俗成的,是可以从三相电压关系里严格推出来的。设三相对称相电压幅值为 Vp,A 相为参考:

Ua = Vp∠0° Ub = Vp∠-120° Uc = Vp∠120°

取 A、B 两相之间的线电压 Uab:

Uab = Ua - Ub = Vp∠0° - Vp∠-120°

做复数运算:

Uab = Vp(1 + 0.5 + j0.866) = Vp(1.5 + j0.866) = √3 Vp ∠30°

这就出来两个关键结论:第一,线电压 Uab 的幅值是相电压 Ua 的 √3 倍;第二,线电压 Uab 的相位超前相电压 Ua 30° 电角度。

星形接法时,绕组直接承受的是相电压,也就是 Ua 这个相位;三角形接法时,绕组两端承受的是线电压 Uab 这个相位。所以两种接法下的绕组电压天然差 30°。只要逆变器输出的是同一组线电压,三角形绕组的相电压就比星形绕组超前 30°。

电流也是同样的逻辑。绕组是阻感负载,电流相位会跟随电压相位,所以三角形接法下的相电流相对星形接法也会有一个 30° 的相位偏移。这个偏移最终体现为定子磁动势的方向偏了 30°,也就是标题里说的“相位偏移”的根源。

1.3 三相功率公式在这个环节的角色

工程上计算三相电机功率,最常用的是 P = √3 U_line I_line cosφ,这个公式星形和三角形都通用,因为它用的是线电压和线电流。很多工程师只关心这个公式,反而忽略了一个问题:同样的公式背后,绕组内部的电压电流关系完全不同。

星形接法时,相电压等于线电压除以 √3,相电流等于线电流。三角形接法时,相电压等于线电压,相电流等于线电流除以 √3。也就是说,同样一台电机,在母线电压不变的情况下,改成三角形接法后,每相绕组能承受的电压更高,理论上可以跑出更高的基速。这也是有些高速电机、大功率执行器选择三角形绕组的原因之一。

不过电压提升了,电流关系也变了。三角形接法下,驱动器母线提供的线电流是绕组内部相电流的 √3 倍。这意味着你虽然提升了电压利用率,但驱动器的电流容量要预留更多。这两个因素经常同时出现在选型讨论里,但很少有人把它和 FOC 的相位基准联系起来。

2. 相位偏移如何打乱 FOC 的坐标系

2.1 FOC 链路回顾:Clark/Park/SVPWM 的基准接力

FOC 的核心思路是把三相正弦电流,通过坐标变换解耦成励磁分量 id 和转矩分量 iq,然后像控制直流电机一样去控制它们。这条链路是:三相电流采样 → Clark 变换(abc → αβ)→ Park 变换(αβ → dq)→ 电流 PI 调节器 → 反 Park 变换(dq → αβ)→ SVPWM 生成六路 PWM。

注意,这条链路里每个环节都依赖一个共同的基准:转子电角度 θe。Clark 变换输出的 αβ 轴不动,Park 变换用 θe 把静止坐标系的量旋转到旋转坐标系,反 Park 变换又要用 θe 把电压指令旋回去。这个“θe”就是整个 FOC 系统的灵魂。

现在问题来了,如果绕组接法是三角形,同样的 θe 指令给进去,定子磁动势的实际方向偏了 30°,那 Park 变换后得到的 id、iq 就不是真正的励磁电流和转矩电流。你看到的 iq 可能虚高,但电机输出转矩上不去;id 可能不为零,但励磁分量根本不在物理磁极方向上。这就是典型的“算法以为自己在拧螺丝,实际扳手已经歪了 30°”。

永磁同步电机在 dq 坐标系下的电压方程最能说明问题:

ud = R id + Ld d(id)/dt - ωe Lq iq uq = R iq + Lq d(iq)/dt + ωe Ld id + ωe ψf

坐标系偏了 30° 之后,实际参与闭环的 ud、uq 分配到了错误的物理轴上,电机的转矩系数等效下降 cos(30°),也就是效率大概打 86 折,而且多出来的电流全部变成铜耗。更难受的是,电流环会拼命增加 iq 来补偿丢失的转矩,发热进一步加剧。

2.2 电流采样的隐藏坑:线电流不等于相电流

星形接法里,驱动器端子上测到的线电流就是绕组里的相电流,可以直接用。三角形接法不是这样,驱动器端子上测的是线电流,绕组内部流动的是相电流,两者不能直接划等号。

看电流关系:线电流 IA = 相电流 Iab - 相电流 Ica。当三相对称时,线电流的幅值是相电流的 √3 倍,相位滞后相电流 30°。如果 FOC 算法直接用线电流做 Clark 变换,那这组电流和星形模型对应的物理量就相差了一个幅值系数和一个相位差。

幅值系数好解决,软件里除以 √3 或者调整采样电阻的放大倍数都能补偿,本质上只影响 PI 参数的标定,不影响控制方向。麻烦的是相位差,它会让电流环的反馈值和真实相电流错开 30°,和前面说的电压相位问题叠在一起,整个电流闭环的角度基准就完全乱套了。

很多工程师遇到“电机能转但堵转电流正弦度很差”“空载电流大得离谱”这类问题,第一反应是换 PI 参数,换完没用,再换采样电阻,还是没用。最后才发现是绕组接法引起的相位问题。所以调三角形电机,第一步就要问自己:我采的到底是线电流还是相电流?软件里有没有做 √3 和 30° 的还原?

2.3 无感 FOC 里的固定 30° 位置偏差

无感 FOC 是另一个重灾区。无感方案里没有编码器,转子位置靠反电动势观测器(比如滑模观测器 SMO、磁链观测器)来估算。这些观测器都是基于反电动势模型建立的,模型里默认的电机接法是星形。

三角形绕组的反电动势和星形绕组差了 30° 相位,观测器估算出来的转子位置角就会带一个固定的 30° 偏差。这个偏差是恒定不变的,不会随着转速升高而消失,也不会随负载变化。表现出来就是:电流环和速度环都能闭环,电机也能稳定转,但效率和动态响应明显不对。

转子初始位置检测也一样。很多无感方案会通过注入电压脉冲或者高频信号来识别初始角度,识别结果在三角形绕组电机上同样会偏 30°。我踩过的坑就是:初始位置识别做完,电机能启动,但启动瞬间会有一个“顿挫”加“哐”的一声,那就是开环定位和闭环运行之间的角度基准不一致。

3. 扇区重构的三条落地路径

3.1 路径一:反 Park 输出后做坐标旋转

第一种改法最符合“扇区重构”这四个字的本质,就是在反 Park 变换输出的 Vα、Vβ 后面,加一个固定角度的坐标旋转。因为想让定子磁动势落在正确方向,本质上就是把参考电压矢量整体旋转 30°。

C 语言实现很简单:

#define PHASE_COMP_DELTA (M_PI / 6.0f) // 30°,符号按实测调整 #define SQRT3_DIV2 (0.8660254038f) void svpwm_phase_compensate(float *v_alpha, float *v_beta, uint8_t is_delta) { float ca, sa, va, vb; if (!is_delta) { return; // 星形绕组不需要补偿 } ca = cosf(PHASE_COMP_DELTA); sa = sinf(PHASE_COMP_DELTA); va = *v_alpha; vb = *v_beta; *v_alpha = va * ca - vb * sa; *v_beta = va * sa + vb * ca; }

调用位置放在反 Park 变换之后、SVPWM 扇区判断之前。从数学上看,这等价于把原来的扇区边界整体旋转了 30°。原来的六扇区边界在 0°、60°、120°、180°、240°、300°,旋转后变成 30°、90°、150°、210°、270°、330°,这就是“扇区重构”的直观意义。

3.2 路径二:重构扇区判断边界(SVPWM 判据的变化)

有些工程师不想改反 Park 输出,想直接从 SVPWM 的扇区判断逻辑下手,这也完全可以。标准 SVPWM 扇区判断用的是三个中间量:

U1 = Vβ U2 = (√3/2) Vα - (1/2) Vβ U3 = -(√3/2) Vα - (1/2) Vβ

根据 U1、U2、U3 的符号可以确定一个扇区编号 N,再通过查表得到对应的扇区。扇区重构的做法,是把这三个判据里的电压分量换掉,相当于先把 Vα、Vβ 旋转 30°,再进入原来的判断逻辑。也就是说,U1'、U2'、U3' 变为:

U1' = (√3/2) Vβ + (1/2) Vα U2' = (√3/2) Vα + (1/2) Vβ U3' = (1/2) Vβ - (√3/2) Vα

实际写代码的时候,我建议别直接改判据里的系数,因为很容易把人绕晕,还容易写错。不如老老实实先调用路径一的坐标旋转函数,把 Vα、Vβ 旋转完,再进原来的标准 SVPWM 模块。这样扇区判断、作用时间计算都不需要动,改动面最小,排查问题也更方便。

扇区判断完之后,SVPWM 还要计算相邻两个非零电压矢量的作用时间 T1、T2。这里会用到三个公共量,很多初学者只背公式,不知道从哪来的,顺便把推导思路说一下。以扇区 I 为例,假设 V1(100)和 V2(110)是相邻非零电压矢量,它们在一个 PWM 周期 Ts 内的平均效果等于参考电压矢量,列方程组:

T1 * V1_alpha + T2 * V2_alpha = Vα * Ts T1 * V1_beta + T2 * V2_beta = Vβ * Ts

代入 V1、V2 的 αβ 分量并联立求解,就会得到 X、Y、Z 这三个公共量:

X = √3 Vβ Ts / Vdc Y = (1.5 Vα + 0.866 Vβ) Ts / Vdc Z = (0.866 Vβ - 1.5 Vα) Ts / Vdc

不同代码库对 N 的映射略有差异,但 X、Y、Z 的表达式是通用的。扇区重构后,只要 Vα、Vβ 已经补偿过,X/Y/Z 公式不用做任何修改,直接代入计算即可。

3.3 路径三:转子角整体加偏置(最省事的调试法)

第三条路最省事,也是在调试现场最常用的:在转子电角度 θe 上直接加一个固定偏置角。比如在反 Park 变换、Park 变换、观测器输出等所有用到 θe 的地方,统一使用 θe' = θe + offset。

float theta_foc = theta_rotor + PHASE_OFFSET;

这个改法写起来最爽,几行代码就搞定,而且不用理解 SVPWM 内部结构。它的本质是把整个 dq 旋转坐标系平移 30°,和路径一的坐标旋转结果是等价的。但要注意,这个偏移角会影响所有与角度相关的环节,包括初始位置检测、电流环的角度,以及无感观测器的角度输出。改之前一定要想清楚影响范围。

三条路径的对比如下:

补偿路径改动位置优点风险
反 Park 后坐标旋转反 Park 与 SVPWM 之间物理意义清晰,不影响反馈回路需新增旋转函数
重构 SVPWM 扇区边界扇区判断逻辑直观体现扇区重构容易改错判据,调试麻烦
转子角整体加偏置所有使用 θe 的位置改动最小,适合现场试验影响全局,定位问题不直观

我个人调试经验是:先用路径三快速验证补偿方向对不对,确认 ±30° 哪个方向有效,再改成路径一正式落地,把偏移角收敛到一个统一的常量宏里。这样最稳。

4. 实测流程:从判断接法到确认补偿方向

4.1 万用表与示波器快速判断绕组接法

拿到一台来源不明的电机,第一步先判断它是星形还是三角形。最直接的办法是用万用表电阻档测三个端子两两之间的电阻。假设单相绕组电阻为 R,则星形接法下,任意两个端子之间是两个绕组串联,电阻约为 2R;三角形接法下,一个绕组和另外两个串联绕组并联,电阻约为 2R/3。两种接法的端间电阻差了 3 倍,非常好区分。

还有个办法是用示波器测反电动势。用手或者一个小电机带动电机转子匀速转动,用示波器探头测任意两端的线反电动势波形,同时记录转子位置(如果有编码器)或者用一个手动转动的参考标记。星形绕组和三角形绕组的反电动势过零点与转子磁极的相对位置会差 30°,配合编码器角度就能确认接法。

如果电机只有三根引出线,看不到内部连接,最稳妥的判断方式还是端间电阻配合“试转电流最小法”,下面会说。

4.2 补偿方向标定:+30° 还是 -30°

理论上星形换到三角形,补偿角是 30°,但到底是 +30° 还是 -30°,取决于你的电压矢量方向定义、绕组绕向、驱动器接线顺序。理论推导可以给一个大致方向,但现场必须实测确认。这个方向标定做错了,效果等于没补偿,甚至更差。

我的现场做法是:先把电机置于空载,用开环 I/f 模式给一个很小的电流让电机慢慢转起来。然后在软件里把补偿角设成可在线修改的变量,从 -60° 到 +60° 之间一步步扫,每次记录空载电流、电机温度、声音状态。

正确的补偿角特征是:空载电流最小、电机声音最干净、温升最慢。如果补偿角正好相反,电机会表现出“能转但很吃力”的样子,电流明显偏大,嗡嗡声也比较明显。实测下来,好的补偿角通常就在 ±30° 附近,不会落在中间值。

提示:调试现场最好准备一个电流钳或者直接读控制器内部的总线电流,不要凭感觉判断“好像挺顺”。电流数据比耳朵可靠得多。

4.3 波形与效率验证

补偿角确认后,还要做两件验证工作。一是看电流波形,用示波器看三相电流,星形接法下表现正常的 FOC 正弦波,在三角形接法下如果相位补偿做对了,同样应该看到平滑的正弦电流,而且三相对称。如果补偿不对,波形会出现明显的畸变,尤其是过零区域会出现毛刺。

二是做效率验证。给电机加一个固定负载,用功率分析仪或者示波器计算输入功率,再对比输出机械功率,确认补偿后的系统效率明显提升。我实测过的数据是:三角形绕组电机不补偿时,同样工况下母线电流大约大了 20%~30%,电机外壳温度比补偿后高出十几度。这个差异在现场一摸就摸得出来。

顺便说一句,Simulink 仿真里也容易踩这个坑。如果模型里的电机本体模块直接选的是星形绕组,但实际电机是三角形,那你无论怎么改 SVPWM 扇区都验证不出正确结果,必须先把电机模型本身改成三角形或者带 30° 相位偏置的等效模型。

5. 常见问题速查与工程心得

5.1 常见问题速查表

现象可能原因排查与对策
电机能转,但电流大、发热快绕组接法未补偿或补偿方向反扫描补偿角,找空载电流最小点
id 闭环后不为零,iq 虚高坐标系角度基准偏 30°检查 θe 是否加了偏置
无感 FOC 启动瞬间顿挫初始位置检测结果偏 30°在初始位置识别结果上加偏移补偿
堵转电流正弦度差、有明显毛刺线电流与相电流未做 √3/30° 还原软件里修正采样值
三角形电机比同规格星形电机热很多SVPWM 零序电压导致三次谐波环流检查零序注入策略、改善散热
补偿后用示波器看矢量圆不够圆死区时间、ADC 采样窗口偏移加入死区补偿,调整采样时刻
变频器/驱动器报过流,但电机未堵转三角形绕组线电流过大确认驱动器电流容量是否满足 √3 折算

5.2 几个容易忽略的工程细节

三角形接法的电机对 SVPWM 的零序分量比星形敏感得多。SVPWM 产生的调制波里本身就包含三次谐波(零序)分量,对星形绕组来说,中性点悬空,三次谐波没有构成闭合回路,基本无害。但三角形绕组是闭合环路,三次谐波会直接形成环流,额外发热。遇到三角形电机温升异常,要把这个因素考虑进去。

电流采样时刻也要重新审视。三角形接法下,相电流和线电流之间有 30° 相位差,如果 ADC 采样窗口刚好落在 PWM 开关动作附近,采到的是一个被干扰的瞬态值。我习惯把采样窗口放在 PWM 中心对齐时刻,并且把死区时间的影响也一起考虑。

还有一个细节:堵转试验。星形电机堵转电流可以直接预测,三角形电机堵转时,相电流和线电流的 √3 关系在磁路饱和时不一定严格成立。如果拿堵转电流去标定 PI 参数,要注意留裕量。

5.3 后续扩展思路

如果这台电机以后还要支持星形/三角形切换(有些电机引出 9 根线,可外部改接),建议把接法类型做成一个软件配置项,所有角度补偿、电流折算、PI 参数都做成两套表,运行时一键切换。

更智能一点的做法是让驱动器上电自学习:依次注入几个固定方向的电压矢量,检测电流响应,自动识别出绕组相位基准并写入补偿角。这个思路和离线初始位置辨识很像,但不依赖编码器零点,属于开环自动标定,适合批量生产时的免调试目标。

另外一个和相位偏移相关但容易被忽略的场景是缺相和短路故障诊断。三角形绕组内部闭合,单相绕组的故障表现和星形不一样,用对称分量法做故障特征提取时,相位基准也要一起修正,否则诊断阈值得重新标。

我自己调完这台三角形电机之后,最大的感受是:FOC 不难,难的是“你以为你控制的是那台电机,实际控制的是模型里的那台电机”。星形和三角形之间看似只差一个接线方式,实际相差的是整套坐标变换的相位基准。如果你拿到一台电机能转但表现怪异,先别急着调 PI,花五分钟确认绕组接法,说不定四两拨千斤。

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

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

立即咨询