资讯动态

三相异步电动机起动过程建模与Matlab状态方程仿真分析

发布时间:2026/10/2 9:12:18 来源:尧图企业网站定制
一台三相异步电动机直接合闸接上380V工频电网会发生什么大部分人知道起动电流大、转速慢慢升但大到底有多大慢慢到底有多慢电流和转矩在头几个周波里到底怎么振荡这些问题不写方程是答不准的。这次我用三相坐标系状态方程把一整台感应电动机的起动过程完整算了一遍代码用Matlab实现把起动电流、电磁转矩、转速爬升曲线全部跑了出来。这篇文章就围绕这套模型展开为什么选三相坐标系、方程怎么列、Matlab代码怎么写、结果怎么看、以及我踩过的几个坑。这个实现适合正在做电机仿真、毕设涉及异步电机起动分析、或者想搞懂Simulink电机模块内部机理的读者。代码可以直接复制运行参数我给的是一台4kW鼠笼电机跑出来的结果和工程经验对得上起动电流约6倍额定电流转矩有强烈振荡转速从零爬升到同步转速附近。下面一步步来。1. 为什么用三相坐标系状态方程做起动计算1.1 直接起动算的到底是什么全压直接起动是最简单的起动方式合闸瞬间电网直接加到定子绕组上。这个过程的特殊性在于起动瞬间转差率等于1转子回路感应出很大的电流定子电流瞬间冲到额定值的5到7倍同时电磁转矩在最初几个周波里剧烈振荡有时还会出现负转矩转速从零逐渐上升到达稳定转速的时间由机械时间常数决定可能几百毫秒甚至几秒。这些现象的本质是机电耦合的暂态过程单靠稳态等效电路算不出来。稳态等效电路能算出额定工况下的电流、转矩、效率但算不出合闸瞬间的电流冲击、转矩振荡、转速上升曲线。要算出这些动态量必须建立电机的微分方程模型对时间做数值积分。感应电动机在三相静止坐标系下的状态方程就是最直接的数学模型。所谓三相坐标系状态方程就是直接以定子三相电流和转子三相电流折算值作为状态变量加上转速和转子位置角列写电压方程、磁链方程和机械运动方程最终整理成dx/dt f(x, u)的形式然后交给Matlab做数值积分。这个思路非常透明所有物理量都是abc三相的瞬时值不需要坐标变换适合一步一步看懂每一个量的来龙去脉。1.2 三相坐标系的痛点时变电感矩阵三相坐标系模型最大的麻烦在于电感矩阵是时变的。定子绕组轴线在空间固定不动转子绕组随转子旋转定子某一相和转子某一相之间的互感会随着转子位置角θ不断变化。转子转一圈互感按余弦规律变化一次。所以电感矩阵L中有cosθ、cos(θ120°)、cos(θ-120°)这样的项每一步积分都要重新计算。这也是为什么工程上更常用dq坐标变换把三相量投影到与转子磁场同步旋转的坐标系里电感矩阵变成常数矩阵方程从时变变成时不变。但dq变换需要引入Park矩阵物理过程被藏起来了。三相坐标系虽然矩阵时变每一步要多算几次三角函数和矩阵求逆但对Matlab来说这点计算量完全可接受。它的优势是没有任何抽象变换定子电压、电流、磁链全部是真实物理量特别适合学习、调试和验证概念。我的建议是如果初次接触电机动态模型一定要先从三相坐标系版本走一遍。你亲眼看到电感矩阵随角度变化、看到电流波形和转矩波形如何被源头上的时变项影响之后再去理解dq变换会顺畅得多。如果你一上来就用dq模型大概率只是套公式不知道为什么要变换。1.3 这套代码能做什么、适合谁做这套模型的价值至少有三个方面。第一它是所有感应电机暂态分析的基石从直接起动到后来的降压起动、软起动、变频调速模型框架完全一样只是输入电压或电机接线方式不同。第二它能让你看见三相模型和dq模型之间的关系为后面学空间矢量、直接转矩控制、矢量控制打基础。第三代码完全可控你可以随时改参数、改负载、改合闸初相角观察各类工况的变化。如果你是在校学生这套代码可以直接作为电机动态仿真的课程设计或毕设核心内容。如果你做工业应用比如需要评估一台电机直接起动对电网的冲击、计算机械系统承受的最大转矩冲击这个模型也能给出定量参考。文章后面所有代码我都整理成可直接运行的Matlab脚本参数、函数、绘图一应俱全。2. 状态方程推导与电机参数2.1 六阶电气方程的基本框架三相坐标系下的感应电动机电气部分可以看成两个三相对称绕组定子三相绕组和转子三相绕组折算到定子侧。每一相都满足电压平衡关系外加电压等于电阻压降加磁链变化率。把所有六相合写成一个矩阵方程就是u R i d(L i) / dt其中u是六维电压向量i是六维电流向量R是对角电阻矩阵L是六阶电感矩阵。磁链向量ψ L i所以对时间求导时要用乘积法则展开为u R i L (di/dt) (dL/dθ) i (dθ/dt)如果把dθ/dt记为电角速度ω整理成状态方程的标准形式di/dt L⁻¹ [ u - R i - ω (∂L/∂θ) i ]这个方程里三项的物理意义非常清楚第一项是外加电压第二项是电阻压降第三项是旋转电动势运动电动势。旋转电动势来自电感随转子角度变化它是电机将机械功率转化为电功率或反过来传递能量的关键项也是转矩产生的根源。2.2 电感矩阵长什么样电感矩阵L由四块组成L [ Lss, Lsr(θ); Lsr(θ)ᵀ, Lrr ]其中Lss是定子三相自感和互感矩阵Lrr是转子三相自感和互感矩阵Lsr是定转子互感矩阵。因为转子参数已经折算到定子侧定子主磁通电感Lm和转子主磁通电感取同一个值这样Lsr和Lsr的转置对称出现整个L矩阵保持对称。定子侧矩阵的具体形式是Lss(i,i) Lsσ LmLss(i,j) -Lm/2i≠j为什么非对角线是负的Lm的一半因为三相绕组在空间互差120°电角度互感按cos(120°)折算而正弦分布磁场下两互差120°绕组的互感正好是最大互感的负一半。转子侧结构相同只要把Lsσ换成Lrσ。定转子互感矩阵是核心它随转子位置角变化Lsr(θ) Lm [ cosθ, cos(θ2π/3), cos(θ-2π/3); cos(θ-2π/3), cosθ, cos(θ2π/3); cos(θ2π/3), cos(θ-2π/3), cosθ ]这个矩阵的含义是定子A相轴线在空间0°位置转子a相轴线在θ位置两者互感最大时为Lm实际互感等于Lm乘以它们夹角余弦。转子b相、c相轴线分别超前a相120°和240°所以和定子各相的夹角要相应加减120°。写代码时要注意Lsr的转置一定要用Lsr.不能遗漏。2.3 电磁转矩与机械方程转矩从哪里来磁场储能对转子位置的偏导。整个系统的磁场储能为W 0.5 iᵀ L i对机械转角求偏导经过极对数换算得到电磁转矩Te p · 0.5 · iᵀ · (∂L/∂θ) · i这里p是极对数。因为θ是电角度机械角是θ/p磁场储能对机械角求导时就会多出一个p因子。电动机的机械运动方程为J · dΩ/dt Te - TL其中Ω是机械角速度J是转动惯量TL是负载转矩。如果把状态变量选为电角速度ω pΩ那么微分方程改写为dω/dt p · (Te - TL) / J这样整个系统的状态向量选择如下六个电流状态isa、isb、isc、ira、irb、irc一个电角速度ω再加一个转子电角度θ用来更新电感矩阵。共八个状态变量。所有电气量的单位都采用国际单位制电压伏、电流安、电感亨、转矩牛米。2.4 一台4kW电机的典型参数为了让代码直接可跑我采用一台常见4kW鼠笼电机的典型参数额定电压380V线电压Y接额定频率50Hz极对数2同步转速1500r/min额定转速约1430r/min。参数表格如下。参数符号数值说明定子电阻Rs1.405 Ω每相折算转子电阻Rr1.395 Ω已折算到定子侧定子漏感Lsσ5.84×10⁻³ H每相折算转子漏感Lrσ4.05×10⁻³ H已折算励磁电感Lm0.1722 H主磁通对应电感转动惯量J0.0131 kg·m²机械系统折算值极对数p2额定负载转矩TL_N26.7 N·m按额定功率和额定转速折算额定电流可以粗略估算4000W / (√3 × 380V × 0.85) ≈ 7.2A所以起动电流冲到40到50A是符合经验的。额定转矩按T P/Ω 4000/(1430×2π/60) ≈ 26.7 N·m。3. Matlab代码实现从方程到可运行脚本3.1 参数定义与初始状态Matlab代码第一步是定义电机参数和初始状态。我把参数放进一个结构体P里方便传递。初始状态设定为电机静止、全部电流为零。注意合闸初相角phi0是一个值得关注的可调参数后面会专门分析它的影响。默认我取phi0 -pi/2即A相电压在t0时刻过零避免一上来就强行给A相加峰值电压。% im_start_main.m % 三相坐标系状态方程感应电动机起动动态计算 clear; clc; close all; % 电机参数 P.Rs 1.405; % 定子电阻, Ohm P.Rrp 1.395; % 折算转子电阻, Ohm P.Lssg 5.84e-3; % 定子漏感, H P.Lrsg 4.05e-3; % 折算转子漏感, H P.Lm 0.1722; % 励磁电感, H P.J 0.0131; % 转动惯量, kg*m^2 P.p 2; % 极对数 P.TL 0; % 负载转矩, N*m空载起动 % 电源参数 P.f 50; % 频率, Hz P.Ul 380; % 线电压有效值, V P.Um P.Ul * sqrt(2/3); % 相电压峰值, V P.phi0 -pi/2; % A相电压初相角t0时A相电压为0 % 初始状态: [isa isb isc ira irb irc omega theta] x0 zeros(8,1);这里有一个小细节Y接380V系统相电压有效值是380/√3≈220V相电压峰值是220×√2≈311V所以P.Um 380*sqrt(2/3)是对的比380√2要小别写错。3.2 状态方程导数函数的完整实现核心部分是状态方程导数函数im_start_dynamics.m。这个函数先根据当前转子角度θ重新计算电感矩阵再算电流导数、电磁转矩和转速导数。需要注意矩阵L是对称的但求逆时用左除反斜杠不要显式写inv(L)数值稳定性更好。function [dx, Te] im_start_dynamics(t, x, P) % 三相坐标系感应电动机状态方程导数函数 % x [isa isb isc ira irb irc omega theta]^T % 输出dx为状态导数Te为电磁转矩 i x(1:6); omega x(7); theta x(8); % 定子/转子电感矩阵 Lss (P.Lssg P.Lm) * eye(3) (-P.Lm/2) * (ones(3) - eye(3)); Lrr (P.Lrsg P.Lm) * eye(3) (-P.Lm/2) * (ones(3) - eye(3)); Lsr P.Lm * [ cos(theta), cos(theta 2*pi/3), cos(theta - 2*pi/3); cos(theta - 2*pi/3), cos(theta), cos(theta 2*pi/3); cos(theta 2*pi/3), cos(theta - 2*pi/3), cos(theta) ]; L [Lss, Lsr; Lsr., Lrr]; % 电感对电角度的偏导数 dLsr -P.Lm * [ sin(theta), sin(theta 2*pi/3), sin(theta - 2*pi/3); sin(theta - 2*pi/3), sin(theta), sin(theta 2*pi/3); sin(theta 2*pi/3), sin(theta - 2*pi/3), sin(theta) ]; dLdtheta zeros(6); dLdtheta(1:3, 4:6) dLsr; dLdtheta(4:6, 1:3) dLsr.; % 注意转置保持对称 % 三相电压源 wt 2*pi*P.f * t P.phi0; u [P.Um*cos(wt); P.Um*cos(wt - 2*pi/3); P.Um*cos(wt 2*pi/3); 0;0;0]; % 电阻矩阵 R blkdiag(P.Rs*eye(3), P.Rrp*eye(3)); % 电流状态导数 didt L \ (u - R*i - omega * (dLdtheta * i)); % 电磁转矩 Te P.p * 0.5 * i. * dLdtheta * i; % 机械方程omega为电角速度 domega P.p * (Te - P.TL) / P.J; dtheta omega; dx [didt; domega; dtheta]; end这个函数返回两个输出第一个是状态导数供ode45使用第二个是电磁转矩供后处理绘图使用。Matlab调用ode45时只取第一个输出不会报错这是合法的函数设计。后处理时单独调用一次函数用[~, Te] ...取出转矩即可。3.3 主脚本求解、后处理与绘图求解部分我直接用ode45。注意容差设置电流通道省量级在几十安如果绝对容差设得太严比如1e-5求解器会疯狂缩小步长仿真变得很慢设得太松又看不到波形细节。我的经验是电流通道绝对容差给1e-3转速和角度通道给1e-2相对容差给1e-4速度和精度比较平衡。% 求解起动过程仿真1.2秒 tspan [0 1.2]; opts odeset(RelTol, 1e-4, AbsTol, [1e-3*ones(1,6), 1e-2, 1e-2]); [t, X] ode45((t,x) im_start_dynamics(t, x, P), tspan, x0, opts); % 后处理计算每个时刻的电磁转矩 Te zeros(size(t)); for k 1:numel(t) [~, Te(k)] im_start_dynamics(t(k), X(k,:)., P); end % 转速换算为 r/min n X(:,7) / (2*pi*P.p) * 60; % 绘图 figure(Position,[100 100 800 900]); subplot(3,1,1); plot(t, X(:,1), r, t, X(:,2), g, t, X(:,3), b, LineWidth, 1); xlabel(t (s)); ylabel(定子电流 (A)); legend(i_{sa},i_{sb},i_{sc},Location,EastOutside); title(三相坐标系感应电动机起动电流动态); grid on; xlim(tspan); subplot(3,1,2); plot(t, Te, LineWidth, 1); xlabel(t (s)); ylabel(电磁转矩 (N·m)); title(电磁转矩动态); grid on; xlim(tspan); subplot(3,1,3); plot(t, n, LineWidth, 1.5); xlabel(t (s)); ylabel(转速 (r/min)); title(转速爬升过程); grid on; xlim(tspan);如果你只想快速看结果这一段就够了。运行时间在普通笔记本上也就几秒钟取决于ode45的步数。如果要遍历多个初相角或多组参数建议自己写固定步长RK4否则ode45的变步长会让每个工况计算时间有波动。3.4 ode45和自写RK4怎么选对这套模型ode45完全够用代码最省事。但ode45也有两个小问题一是变步长会让每个工况的计算步数不可控做参数扫描时总时间不好预估二是个别极端初相角下ode45可能报步长降到最小值这时需要降低容差或换求解器。自己写四阶RK4也很简单固定步长比如dt1e-4秒仿真1.2秒就是1.2万步每步调用一次导数函数。RK4的好处是逻辑完全透明方便在循环里输出中间量也方便后续改造成实时仿真的离散模型。坏处是固定步长下精度不如ode45的自适应步长步长要取得足够小。对于这个模型两个物理时间尺度要同时满足工频周期20ms定子瞬态时间常数约7ms左右转子时间常数约80ms。要看到电流波形细节步长取0.1ms1e-4s够了如果只看包络线和转速步长取0.5ms也可以。建议按1e-4设置别省这点计算量。4. 起动过程结果怎么读4.1 起动电流的双指数冲击特征跑出来的电流波形非常典型起动瞬间A相和另外两相电流先出现一个很大的冲击峰值轻松超过40A相当于额定电流的5到6倍。仔细看在最初几个周波里电流波形不是对称正弦而是叠了一个明显衰减的直流分量这就是所谓的非周期分量。它来自合闸瞬间磁链不能突变的约束稳态磁链和初始零磁链之间必须有一个衰减直流分量来补偿。这个直流分量的衰减快慢由定子瞬态时间常数决定大约几十毫秒。之后电流波形逐渐变成对称正弦但包络仍然在一个较高水平因为此时转速还没上去转子电流很大。随着转速升高、转差率减小电流逐步回落整个起动电流包络呈现一种先衰减、再缓降的双指数特征。前一个衰减快对应直流分量消失后一个衰减慢对应机械转速上升、转差率下降。运行你会发现观察不同相的电流峰值并不完全对称这是因为合闸初相角使各相初始磁链条件不同直流分量大小不一样。这是三相模型才能看到的细节dq模型把所有量变换到同步坐标后这种不对称信息反而被抹掉了。4.2 转矩振荡与转速爬升的物理含义电磁转矩曲线在起动初始阶段非常狂暴正负交替峰值可能冲到额定转矩的2到3倍以上最低还会出现负转矩。负转矩意味着电机短暂地处于发电状态对机械系统来说就是周期性冲击。这种振荡频率和转差频率有关起动瞬间转差频率高转矩振荡频率也高随着转速上升转差频率下降转矩振荡频率跟着变低振荡幅度也逐渐减小。转速曲线是最直观的在约0到0.3秒区间转速快速上升0.3秒后接近同步转速进入一个较平缓的爬升段最终稳定在接近1500r/min的位置。空载起动时由于模型里没有铁耗和机械损耗转速几乎能到同步转速附近只有很小的转差来维持励磁电流。如果带上额定负载最终稳定转速约1430r/min更接近实际铭牌值。要注意的是转速上升的时间主要由机械系统的转动惯量J决定。J越大转速爬升越慢起动过程越长电动机需要承受大电流的时间也越长。这对工程上选择起动方式很重要大惯量负载直接起动可能造成电机过热或电网电压骤降。4.3 合闸初相角不是小事代码里的P.phi0参数可以模拟在不同时刻合闸的效果。默认取-π/2A相电压过零时合闸。你可以改成0让A相在电压峰值瞬间合闸观察起动电流有什么变化。实测下来不同初相角下第一周波的电流峰值能差出好几个安培同时各相直流分量分配比例完全不同。原因是这样的电机是感性负载稳态时磁链滞后电压90°。如果合闸瞬间电压正好是峰值稳态磁链恰好为零和初始零磁链一致直流分量理论上最小电流冲击相对温和。如果合闸瞬间电压过零稳态磁链反而接近峰值初始零磁链需要建立一个很大的直流分量来补偿冲击更大。当然这是单相理想化解释三相耦合起来更复杂但趋势一致。工业上异步电机直接起动时的合闸相角是随机的所以最恶劣情况下的电流冲击必须留足裕量。4.4 转动惯量和负载怎么影响动态把P.J从0.0131改成0.05你会看到电流大电流持续时间明显变长转速上升变慢转矩振荡的衰减也变慢。把P.TL从0改成额定负载26.7N·m稳定转速会回落到1430r/min附近稳态电磁转矩等于负载转矩起动段转矩曲线整体抬升。这两个参数对设计很有参考价值如果机械负载惯量大起动时间长了热积累严重如果负载转矩在起动过程里还有变化比如风机泵类负载转矩随转速平方上升那就不能只看恒定负载的结果。我把这几组对比整理成一张速查表。参数变化电流冲击转速过渡时间稳定转速转矩振荡J增大大电流时间变长明显变长基本不变衰减变慢TL增大略有增大略变短降低转差增大稳态值抬升初相角变化峰值可差数安几乎不变不变首波形态改变电源电压升高峰值按比例增大略缩短提高峰值增大5. 常见问题与调参避坑实录5.1 我踩过的几个坑第一个坑是电感矩阵的转置搞错。我把Lsr写好后底部左块直接用了Lsr结果整个L矩阵不对称仿真出来的电流波形肉眼可见地歪转速也异常。检查方式是打印任意时刻的L矩阵对比右上和左下是否互为转置。记住一行代码L [Lss, Lsr; Lsr., Lrr]后面别忘了写点转置。第二个坑是电磁转矩符号反了。一开始我把dLdtheta的符号定义反了导致Te算出来几乎全是负值转速从一开始就往下掉完全不符合起动物理过程。这个问题的排查方法是做稳态检查空载起动末段Te应该趋近于0带负载起动末段Te应该趋近于TL。如果符号错了这两个检查点一定过不了。第三个坑是ode45步长卡死。在某个初相角下ode45直接报错说步长已经小于允许最小值。原因是电流通道绝对容差设得太严求解器为了达到精度疯狂缩步长。解决办法是把AbsTol适当放宽比如1e-3或者改用固定步长RK4。电流这种幅值几十安培的变量绝对容差给到1e-4以下完全没必要。第四个坑是转子漏感和定子漏感参数写反。参数表里Lrσ4.05mH有人会把它当成转子端漏感忘了已经折算到定子侧。如果没折算转子回路电感差一个数量级起动电流和稳态转速都会偏。凡是碰到折算两字一定要确认值代入的是哪个量。5.2 正确性验证的三个检查点模型跑通了不代表结果对我每次改完参数都会过三个检查点。第一个检查点是空载稳态。空载起动结束后转速应该停在1500r/min附近电流是一个很小的对称正弦幅值大概是额定电流的30%左右电磁转矩在0附近小幅波动。如果转速明显低于同步转速先看转子电阻是否折算正确。第二个检查点是额定负载稳态。带上26.7N·m负载稳态转速应该在1430r/min附近电磁转矩平均值约等于负载转矩定子电流约等于额定电流7A左右。如果转速偏差超过50r/min检查励磁电感Lm和转子电阻。第三个检查点是起动电流倍率。直接起动峰值电流应该在额定电流的5到7倍40到50A不等。如果峰值只有两倍额定多半是电感矩阵偏大或者电压峰值算错了如果峰值超过10倍多半是漏感给太小了。漏感决定起动电流的上限主磁通电感决定运行电流和转矩水平两者作用完全不一样。5.3 可以继续扩展的方向这套三相坐标系模型改一改就能做不少工程仿真。第一个方向是星三角降压起动。只需要在前几秒给电机加380V等转速上来了再切换成三角形接法把定子侧电压或接线结构改一下就行不用动模型主体。第二个方向是软起动器仿真通过控制晶闸管导通角逐步升高定子电压可以直接用这套模型观察软起动对电流冲击的抑制效果。第三个方向是砸开dq模型的神秘面纱把三相模型算出来的电流、磁链做Park变换和dq模型结果对比你会非常直观地理解坐标变换的意义。数据结果还可以继续分析比如统计起动过程电流的有效值评估对电网的冲击把转矩曲线作为机械系统的激励做传动链扭转振动分析或者把电机模型封装成Matlab函数配合simscape搭建完整机电系统。三相坐标模型最宝贵的地方在于所有变量都是原始物理量你可以直接拿去做各种后处理不需要担心坐标变换的还原。跑完这套模型我最大的体会是电机动态模型的核心不在Matlab代码本身而在搞清楚电感矩阵、旋转电动势和转矩表达式之间的逻辑链条。代码只是把公式翻译成数字公式背后的物理图像才是真正有用的东西。如果你也是第一次写电机模型我建议把L矩阵和dLdθ矩阵打印出来盯着看几遍再对照电流和转矩波形去理解收获会比直接跑通大得多。这个三相模型跑顺之后再去碰矢量控制、直接转矩控制这些更复杂的主题心里就有底了。

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

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

免费获取报价 →
↑