资讯动态

永磁同步电机d-q模型:从坐标变换到FOC控制实战

发布时间:2026/9/28 2:04:47 来源:尧图企业网站定制
1. 从三相到d-q为什么非要折腾这一趟搞电机控制的人绕不开永磁同步电机PMSM的数学模型。我见过不少刚入行的朋友拿到一套FOC代码能跑起来电流波形也像模像样但一旦被问到“为什么Clarke变换里要乘2/3”“Park变换的角度到底是谁的角度”“d轴和q轴的电感为什么不一样”就开始含糊其辞。这其实不怪他们——很多教材一上来就甩公式把坐标变换讲成了纯数学游戏却没说清楚工程上到底为什么要做这件事。先说结论把三相静止坐标系abc下的永磁同步电机模型转换到两相旋转坐标系d-q本质上是一次“解耦”操作。abc坐标系下电机的电压方程、磁链方程、转矩方程全都是时变系数的微分方程因为定子绕组和转子永磁体之间的相对位置一直在变互感矩阵里塞满了cos(θ)和cos(θ±120°)这类项。你直接拿这个模型去设计控制器PI参数根本没法整定——因为被控对象本身就在随时间变化。变换到d-q坐标系之后情况完全变了。转子的永磁体磁场方向被定义为d轴与之正交的为q轴坐标系跟着转子一起转。这样一来定子绕组在d轴和q轴上的等效电感变成了常数对于表贴式PMSMLdLq对于内置式Ld≠Lq电压方程里不再有随时间变化的电感系数转矩方程也简化成了“永磁转矩磁阻转矩”两项。控制器设计从“时变系统”变成了“线性定常系统”这才是坐标变换真正的工程价值。这套模型适合谁看如果你是做电机控制算法开发的不管是搞DSP还是搞Simulink仿真这篇内容能帮你把底层逻辑理清楚如果你是学生正在做毕业设计或者课程项目这里面的推导细节和实操注意事项能让你少走弯路如果你已经能跑FOC但想搞明白参数辨识、无位置传感器控制这些进阶内容那d-q模型就是你必须啃下来的第一块硬骨头。下面我按“整体思路→核心推导→实操落地→踩坑排查”的顺序把从abc到d-q这条链路完整走一遍。推导部分我会尽量把每一步的“为什么”讲透实操部分会给可直接复现的参数和代码片段。2. 整体设计思路变换链路的选型与考量2.1 为什么是“ClarkePark”两步走而不是一步到位从abc到d-q数学上完全可以构造一个变换矩阵直接搞定。但工程上几乎所有人都选择分两步先Clarkeabc→αβ再Parkαβ→dq。这不是多此一举而是有明确的工程考量。第一步Clarke变换把三相静止坐标系压缩到两相静止坐标系α-β。三相绕组在空间上互差120°但根据基尔霍夫电流定律三相电流之和为零星形连接、无中线所以实际上只有两个独立变量。Clarke变换就是把这个“三变二”的过程规范化。变换后的α轴与a相轴线重合β轴超前α轴90°。这一步的好处是把冗余的一相消掉同时保持功率不变或幅值不变取决于变换矩阵的系数选择。第二步Park变换把两相静止坐标系旋转到两相旋转坐标系。α-β坐标系是静止的而转子在转所以α-β轴上的量仍然是交流量正弦波。Park变换用转子位置角θ把α-β坐标系旋转到与转子同步的d-q坐标系交流量就变成了直流量。直流量意味着PI控制器可以实现零稳态误差这是FOC能够精确控制转矩的根本原因。如果一步到位做abc→dq数学上可行但物理意义不清晰调试时出了问题很难定位是Clarke环节还是Park环节的毛病。分两步走每一步都有明确的物理对应中间变量α-β电流还可以直接用来做故障诊断和观测器设计。2.2 变换矩阵的系数选择2/3还是√(2/3)这是新手最容易迷糊的地方。Clarke变换的矩阵形式取决于你选择“幅值不变”还是“功率不变”原则。幅值不变原则变换后α轴电流的幅值等于原三相电流的幅值。此时Clarke矩阵系数为2/3即iα (2/3) * (ia - 0.5*ib - 0.5*ic) iβ (2/3) * (√3/2*ib - √3/2*ic)功率不变原则变换前后功率守恒矩阵是正交的系数为√(2/3)。此时电流幅值会变成原来的√(3/2)倍。工程上绝大多数电机控制代码用的是幅值不变原则因为电流采样回来直接就是安培值变换后还是安培值PI控制器的输出限幅可以直接对应到实际电流调试起来直观。Simulink里的Clarke模块默认也是幅值不变。但要注意如果你用的是功率不变原则转矩公式前面会多一个3/2的系数推导时别搞混。注意选定了变换原则之后整个推导链路必须保持一致。Clarke用幅值不变Park也必须用幅值不变反Park变换也要对应。中途换原则是调试时出现“电流幅值对不上”的常见原因。2.3 表贴式与内置式d-q模型的关键差异永磁同步电机按转子结构分两大类表贴式SPM和内置式IPM。两者的d-q模型在电压方程形式上一样但电感参数不同。表贴式永磁体的磁导率接近空气d轴和q轴的磁路对称所以Ld Lq。此时磁阻转矩为零转矩只由永磁转矩贡献转矩方程简化为Te 1.5 * p * ψf * iqp为极对数ψf为永磁磁链。控制上通常采用id0控制因为id不产生转矩只会增加铜耗。内置式永磁体嵌在转子铁芯内部d轴磁路经过永磁体磁导率低q轴磁路经过铁芯磁导率高所以Lq Ld。此时存在磁阻转矩转矩方程为Te 1.5 * p * [ψf * iq (Ld - Lq) * id * iq]。因为Ld Lq所以(Ld - Lq)为负要让磁阻转矩为正id必须为负。这就是内置式PMSM常采用MTPA最大转矩电流比控制的原因——用负的id去“挤”出额外的磁阻转矩。这个差异在建模时直接影响Ld、Lq两个参数的取值。如果你拿表贴式的模型去套内置式电机转矩输出会偏小因为丢掉了磁阻转矩那一项。3. 核心推导从abc到d-q的每一步3.1 abc坐标系下的电压方程与磁链方程永磁同步电机在abc坐标系下的定子电压方程用矩阵形式写出来是这样的[ua] [Rs 0 0 ] [ia] d [ψa] [ub] [0 Rs 0 ] [ib] -- [ψb] [uc] [0 0 Rs] [ic] dt[ψc]其中Rs是定子相电阻ψa、ψb、ψc是三相绕组的总磁链。磁链由两部分组成定子电流产生的自感和互感磁链以及转子永磁体产生的磁链。[ψa] [Laa Mab Mac] [ia] [ψf*cos(θ) ] [ψb] [Mba Lbb Mbc] [ib] ψf *[ψf*cos(θ-120°) ] [ψc] [Mca Mcb Lcc] [ic] [ψf*cos(θ120°) ]这里θ是转子d轴与a相轴线的电角度。Laa、Lbb、Lcc是自感Mab等是互感。对于理想电机自感可以写成Laa Ls0 Ls2*cos(2θ)互感也有类似的形式。这些2θ项就是时变系数的来源也是直接拿abc模型做控制的噩梦。3.2 Clarke变换三变二的数学操作Clarke变换的物理意义是把三相绕组等效成两相正交绕组。采用幅值不变原则变换矩阵为[iα] [ 1 -1/2 -1/2 ] [ia] [iβ] [ 0 √3/2 -√3/2 ] [ib] [ ] [ic]如果三相电流对称ia Icos(ωt)ib Icos(ωt-120°)ic Icos(ωt120°)代入后得到iα Icos(ωt)iβ I*sin(ωt)。α-β电流仍然是交流量频率与定子电流频率相同。这一步消掉了零序分量三相之和为零时零序为零。如果电机中性点接地或者有零序电流还需要补充零序分量i0 (iaibic)/3但在正常的星形连接无中线系统中i00。3.3 Park变换把交流量变成直流量Park变换用一个旋转矩阵把α-β坐标系旋转到d-q坐标系旋转角就是转子电角度θ[id] [ cosθ sinθ] [iα] [iq] [-sinθ cosθ] [iβ]把iα Icos(ωt)、iβ Isin(ωt)代入并注意到θ ωt θ0θ0是初始相位得到id I*cos(ωt)*cos(ωtθ0) I*sin(ωt)*sin(ωtθ0) I*cos(θ0) iq -I*cos(ωt)*sin(ωtθ0) I*sin(ωt)*cos(ωtθ0) I*sin(θ0)id和iq变成了直流量大小取决于定子电流矢量与d轴的夹角。这就是Park变换的核心价值——把旋转坐标系下的交流量变成了直流量。反Park变换就是把d-q量变回α-β量[iα] [cosθ -sinθ] [id] [iβ] [sinθ cosθ] [iq]反Clarke变换用于SVPWM前生成三相占空比则是[ia] [ 1 0 ] [ib] [-1/2 √3/2 ] [iα] [ic] [-1/2 -√3/2 ] [iβ]3.4 d-q坐标系下的电压方程与转矩方程经过ClarkePark变换后d-q坐标系下的电压方程为ud Rs*id Ld*d(id)/dt - ωe*Lq*iq uq Rs*iq Lq*d(iq)/dt ωe*Ld*id ωe*ψf其中ωe是电角速度ψf是永磁磁链。对比abc坐标系下的方程电感变成了常数Ld和Lq时变项消失了。方程中出现了交叉耦合项-ωeLqiq和ωeLdid以及反电动势项ωe*ψf。这些项在控制器设计中需要做前馈补偿。磁链方程为ψd Ld*id ψf ψq Lq*iq转矩方程为Te 1.5 * p * (ψd*iq - ψq*id) 1.5 * p * [ψf*iq (Ld - Lq)*id*iq]机械方程为Te - TL J*d(ωm)/dt B*ωm其中TL是负载转矩J是转动惯量B是阻尼系数ωm是机械角速度ωe p*ωm。3.5 参数计算实例从铭牌数据到Ld、Lq假设有一台表贴式PMSM铭牌参数如下额定功率2.2kW额定电压380V额定电流4.8A额定转速3000rpm极对数p4定子电阻Rs1.2Ω永磁磁链ψf0.15WbLdLq8mH。计算额定电角速度ωe p * 2π * n/60 4 * 2π * 3000/60 1256.6 rad/s。计算额定反电动势E ωe * ψf 1256.6 * 0.15 188.5V。这个反电动势是相电压幅值对应线电压有效值约为188.5 * √3 / √2 ≈ 230.8V在380V母线电压下留有足够余量。计算额定转矩Te 1.5 * p * ψf * iq 1.5 * 4 * 0.15 * 4.8 * √2 ≈ 6.1N·m这里iq取额定电流幅值。这些参数在后续的电流环PI整定和MTPA计算中都会用到。4. 实操落地从模型到代码的完整链路4.1 Simulink建模快速验证数学模型如果你只是想验证数学模型对不对Simulink是最快的路径。搭建步骤如下第一步用“Three-Phase Programmable Voltage Source”给三相电压或者直接用受控电压源。第二步用“Series RLC Branch”搭建三相定子绕组注意要设置互感。第三步用“Clarke Transform”和“Park Transform”模块做坐标变换Park模块的输入角度用转子位置反馈。第四步用“PMSM”模块Simscape Electrical里的作为被控对象把d-q电压输入进去。验证方法给一个恒定的id和iq观察转矩输出是否与公式Te 1.5p[ψf*iq (Ld-Lq)idiq]一致。如果对不上检查变换矩阵的系数是否统一以及角度单位是弧度还是度。实操心得Simulink里的Park变换模块默认角度输入是弧度但很多电机编码器输出的是机械角度度。中间需要做“度转弧度”和“机械角转电角度”两步转换。我见过不止一个人在这里翻车波形死活不对查了半天发现是角度单位问题。4.2 DSP代码实现Clarke和Park的定点化处理在实际DSP如TI C2000系列上实现时需要考虑定点运算的效率。以Q15格式为例Clarke变换的代码可以写成// Clarke变换幅值不变原则Q15格式 // 输入ia, ib, ic为Q15格式的电流值 // 输出i_alpha, i_beta为Q15格式 #define TWO_THIRDS_Q15 21845 // (2/3)*32768 #define SQRT3_OVER_2_Q15 28378 // (sqrt(3)/2)*32768 i_alpha (int32_t)TWO_THIRDS_Q15 * ia; i_alpha - (int32_t)(TWO_THIRDS_Q15 1) * ib; i_alpha - (int32_t)(TWO_THIRDS_Q15 1) * ic; i_alpha 15; i_beta (int32_t)SQRT3_OVER_2_Q15 * ib; i_beta - (int32_t)SQRT3_OVER_2_Q15 * ic; i_beta 15;Park变换需要用到sin和cos通常用查表法或者CORDIC算法。TI的库里有现成的SinCos函数精度足够。代码大致如下// Park变换theta为电角度Q15格式 // sin_theta, cos_theta由查表或CORDIC得到 i_d (int32_t)cos_theta * i_alpha (int32_t)sin_theta * i_beta; i_d 15; i_q -(int32_t)sin_theta * i_alpha (int32_t)cos_theta * i_beta; i_q 15;注意定点运算中中间结果要用32位变量存储否则乘法会溢出。右移15位是Q15格式的除法操作但要注意舍入误差的累积。如果精度要求高可以考虑用Q31或者浮点运算。4.3 电流环PI整定基于d-q模型的参数计算有了d-q模型电流环的PI参数就有了理论依据。d轴和q轴的被控对象可以近似为一阶惯性环节Gd(s) 1 / (Ld*s Rs) Gq(s) 1 / (Lq*s Rs)采用“零极点对消”法整定PI让PI控制器的零点对消被控对象的极点即Kp/Ki Ld/Rs或Lq/Rs。此时闭环带宽由Kp决定。假设希望电流环带宽为ωc 2000 rad/s约318Hz则Kp_d ωc * Ld 2000 * 0.008 16 Ki_d ωc * Rs 2000 * 1.2 2400同理Kp_q ωc * LqKi_q ωc * Rs。实际调试时ωc通常取开关频率的1/10到1/5。如果开关频率是10kHzωc取1000到2000 rad/s比较合适。实操心得理论计算的PI参数只是起点。实际系统中存在数字延迟PWM更新延迟、采样延迟这些延迟会降低相位裕度。我通常会把理论Kp乘以0.8到0.9然后根据阶跃响应的超调量微调。如果超调太大先降Kp如果稳态误差消不掉再升Ki。4.4 前馈解耦让d轴和q轴互不干扰d-q电压方程中的交叉耦合项-ωeLqiq和ωeLdid以及反电动势项ωe*ψf会让d轴和q轴产生耦合。如果不做解耦id变化时iq会跟着波动iq变化时id也会波动电流环的动态性能会变差。前馈解耦的做法是在PI控制器的输出上叠加补偿项ud_ref PI_d(id_ref - id) - ωe*Lq*iq uq_ref PI_q(iq_ref - iq) ωe*Ld*id ωe*ψf这样补偿之后d轴和q轴就变成了两个独立的线性系统可以分别整定PI参数。注意前馈解耦需要准确的Ld、Lq和ψf参数。如果参数不准解耦效果会打折扣但不会导致系统不稳定。参数辨识就是解决这个问题的——通过注入特定信号在线估计Ld、Lq和ψf。5. 常见问题与排查技巧实录5.1 电流波形畸变从变换矩阵查起最常见的问题是给定id_ref0iq_ref常数但实际id和iq波形上有很大的纹波或者id不为零。排查顺序如下先查角度。Park变换的角度必须是转子电角度且与编码器零位对齐。如果角度偏了id和iq会交叉耦合id_ref0时iq会有一部分跑到id上去。对齐方法是给一个固定的电压矢量让电机堵转观察id和iq调整编码器零位偏移量直到id0、iq最大。再查变换矩阵系数。如果Clarke用2/3Park用√(2/3)那id和iq的幅值会差√(3/2)倍。检查代码里的系数是否统一。最后查采样时刻。电流采样应该在PWM周期的中点进行避开开关噪声。如果采样时刻不对电流波形上会有毛刺。5.2 转矩输出偏小检查磁阻转矩项如果实测转矩比理论值小尤其是内置式PMSM大概率是漏掉了磁阻转矩项。表贴式PMSM的LdLq磁阻转矩为零转矩公式简化为Te1.5pψf*iq。但内置式PMSM的Ld≠Lq如果还用简化公式转矩会偏小。排查方法用功率分析仪测输入功率减去铜耗和铁耗得到机械功率再除以转速得到转矩。与理论公式对比如果偏差在10%以内说明模型基本正确如果偏差很大检查Ld和Lq的取值是否准确。5.3 高速时电流失控反电动势与电压裕量电机转速升高时反电动势ωe*ψf增大需要的电压也随之增大。如果母线电压不够电流环会饱和失去控制能力。这就是所谓的“电压极限”。排查方法计算当前转速下的反电动势加上电阻压降和电感压降看是否超过母线电压的0.9倍留10%余量给死区和开关管压降。如果超了要么降低转速要么做弱磁控制给负的id抵消一部分永磁磁链。实操心得弱磁控制时id为负iq也要相应减小因为总电流幅值受限于逆变器容量。MTPA和弱磁的切换点需要根据母线电压和转速实时计算。我通常会在代码里做一个查表把不同转速下的id_ref和iq_ref预先算好运行时直接查表比在线计算省时间。5.4 常见问题速查表现象可能原因排查方法解决措施id不为零编码器零位偏移堵转测试观察id重新对齐编码器零位iq纹波大采样时刻不对示波器看电流波形调整采样时刻到PWM中点转矩偏小漏掉磁阻转矩对比理论转矩和实测转矩补上(Ld-Lq)idiq项高速失控电压裕量不足计算反电动势和压降弱磁控制或降低转速PI超调大Kp过大阶跃响应测试降低Kp适当升Ki稳态误差Ki过小观察稳态电流误差增大Ki检查积分限幅5.5 参数辨识让模型更准d-q模型里的Ld、Lq、ψf、Rs这些参数铭牌上不一定给全而且会随温度变化。参数辨识就是通过实验把这些参数测出来。Rs辨识给d轴一个直流电压电机堵转测量稳态电流Rs Ud/Id。注意要等温度稳定后再测因为铜电阻随温度变化。ψf辨识让电机空载旋转测量线电压幅值ψf E/ωe。E是相电压幅值ωe是电角速度。Ld、Lq辨识给d轴或q轴一个高频小信号电压测量电流响应通过阻抗计算电感。或者用脉冲电压法给一个电压阶跃观察电流上升斜率L Ud/(di/dt)。注意参数辨识时电机要堵转或者空载避免负载转矩干扰。高频注入法要注意注入频率不能太高否则集肤效应会影响电感值。6. 模型扩展从d-q模型到进阶应用6.1 无位置传感器控制从d-q模型反推角度d-q模型的一个直接应用是无位置传感器控制。既然Park变换需要角度θ而θ又来自编码器那如果没有编码器怎么办答案是从d-q模型中的反电动势项反推角度。在d-q坐标系下q轴电压方程中的ωe*ψf项包含了角度信息。通过设计一个观测器如滑模观测器或龙伯格观测器可以从电压和电流中估计出反电动势进而提取转子位置和转速。这就是无位置传感器FOC的基本思路。具体做法在α-β坐标系下反电动势eα -ωeψfsin(θ)eβ ωeψfcos(θ)。用观测器估计eα和eβ然后θ atan2(-eα, eβ)。低速时反电动势幅值很小信噪比差所以无位置传感器控制通常只在中高速段有效低速段需要高频注入法。6.2 模型预测控制d-q模型的离散化模型预测控制MPC是近年来的研究热点。它的核心思想是利用d-q模型的离散化方程预测下一时刻的电流然后选择最优的电压矢量使电流误差最小。d-q模型的离散化方程前向欧拉法id[k1] id[k] Ts/Ld * (ud[k] - Rs*id[k] ωe*Lq*iq[k]) iq[k1] iq[k] Ts/Lq * (uq[k] - Rs*iq[k] - ωe*Ld*id[k] - ωe*ψf)其中Ts是控制周期。MPC在每个控制周期遍历所有可用的电压矢量两电平逆变器有8个计算每个矢量作用下的电流预测值选择使代价函数最小的那个。代价函数通常是电流误差的平方和。实操心得MPC的计算量比PI控制大得多在低成本DSP上可能跑不动。如果要用MPC建议用两电平逆变器的简化版或者用无差拍预测控制Deadbeat计算量小很多效果也不错。6.3 匝间短路故障建模d-q模型的修正永磁同步电机的匝间短路是一种常见的故障。短路匝会形成一个闭合回路产生额外的电流和磁场。在d-q模型中匝间短路表现为短路相的有效匝数减少电阻和电感发生变化同时出现一个与短路电流相关的附加磁链项。建模方法把短路匝看作一个额外的绕组与正常绕组有互感耦合。在abc坐标系下建立包含短路匝的方程然后再变换到d-q坐标系。变换后的d-q模型会多出与短路电流相关的项这些项可以用来做故障诊断。这个方向比较专业涉及故障诊断和容错控制这里就不展开了。核心思路是d-q模型是一个框架任何在abc坐标系下能描述的现象都可以通过坐标变换映射到d-q坐标系下分析。7. 写在最后几个容易忽略的细节第一个细节角度对齐是d-q变换的命门。我见过太多人因为编码器零位没对齐导致id和iq交叉耦合调了半天PI参数都没用。对齐方法很简单给一个固定的d轴电压让电机堵转观察id和iq调整零位偏移量直到id最大、iq为零。这个过程花不了十分钟但能省下你几天的调试时间。第二个细节变换矩阵的系数要统一。Clarke用2/3Park用√(2/3)反变换也要对应。我习惯在代码里把系数定义成宏所有地方都引用同一个宏避免手写数字出错。第三个细节Ld和Lq的饱和效应。电机铁芯在重载时会饱和Ld和Lq会下降。如果你的应用需要大转矩输出建议做电感饱和标定把不同电流下的Ld和Lq做成查表运行时根据电流查表取值。这样转矩控制精度会高很多。第四个细节仿真和实测的差距。Simulink里跑得再好到了实际DSP上总会有差异。差异主要来自数字延迟、死区效应、采样噪声、参数偏差。调试时先用仿真验证算法逻辑再在DSP上微调参数。不要指望仿真参数直接能用也不要因为实测波形不好看就否定算法。这套d-q模型我从读书时就开始用工作后做过的每一个PMSM项目都绕不开它。刚开始觉得坐标变换很抽象推导了几遍之后发现它本质上就是“换个角度看问题”——把旋转的、耦合的、时变的东西变成静止的、解耦的、定常的东西。这个思路不仅适用于电机控制很多工程问题都可以用类似的“坐标变换”思维去简化。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑