尧图精选

感应电动机起动仿真:基于三相坐标系状态方程的Matlab实现

🕒 发布时间:2026/10/2 10:07:37 📁 来源:尧图网络
做感应电动机起动仿真大多数人一上来就用dq坐标系。但实际上三相坐标系状态方程才是理解问题本质的起点。这篇东西不讲教科书上的泛泛推导直接给你能从物理模型走到Matlab代码的完整路线顺带把我调试这个模型时踩过的坑、试错出来的经验都放在里面。先明确这篇内容解决什么问题你想知道一台鼠笼式感应电动机从静止直接合闸起动定子电流、电磁转矩、转速到底怎么随时间变化。用三相坐标系下的六阶状态方程在Matlab里数值积分就能把这些动态过程完整算出来。这个过程没有坐标变换没有实虚部分离所有物理量都是绕组里真实存在的相电压、相电流。适合刚接触电机动态建模的研究生、搞电机控制的工程师以及任何想弄清楚“书本上的电压方程和磁链方程到底怎么变成一条起动电流曲线”的人。1. 为什么选三相坐标系建模思路的一次取舍1.1 三相坐标系和dq坐标系的本质差异感应电动机的动态模型有两条经典路线。一条是三相坐标系abc下的自然模型另一条是经过Park变换的dq旋转坐标系模型。两条路都能算但算出来的东西侧重点完全不同。dq坐标系的思路是“把交流变成直流”。定子三相绕组在空间上相差120度通入三相交流电后产生旋转磁场各相电压电流都是随时间变化的交流量。通过坐标变换把三相绕组等效成两个相互垂直的绕组d轴和q轴这两个绕组随磁场同步旋转。变换之后稳态工况下d、q轴分量变成直流量这就大大简化了控制算法的设计。矢量控制、直接转矩控制全部建立在dq模型之上。代价是坐标变换背后的数学关系要有一定基础才能理解而且变换之后相绕组里真实的不对称信息被抹掉了。三相坐标系模型是另一条路思路是“照着电机的物理结构硬算”。定子有A、B、C三个绕组转子等效成A、B、C三个绕组总共六个绕组。把每个绕组的电压方程、磁链方程全部写出来联立成一个六阶微分方程组然后直接用数值积分方法求解。不搞坐标变换不搞解耦就是实打实地算每一相绕组里的电压、电流、磁链。这两种思路可以类比成拍照dq坐标系相当于一台能自动追焦的云台相机画面干净稳定适合精细操作三相坐标系相当于一台固定机位的普通相机画面包含全部原始信息虽然处理起来笨重些但每一帧都能看到完整现场。1.2 三相模型能做什么不能做什么三相坐标系模型的第一个优势是保留了全部不对称信息。dq变换成立的前提是三相对称工况。如果电源电压不平衡、某一相断线、或者发生单相短路三相电流不再满足空间对称条件dq模型里某些参数就会变成时变量算出来的结果并不直观。而abc三相模型天然包含每一相的独立状态直接就能看到哪一相电流大、哪一相电流畸变不需要做任何额外处理。第二个优势是物理概念直观。对初学者来说“A相绕组电压等于电阻压降加上磁链变化率”比“d轴磁链等于什么什么”更容易建立物理图景。调试模型的时候如果某相电流曲线走势怪异你可以直接回头查这一相的电压方程和磁链表达式定位问题的链条更短。第三个优势是方便扩展故障模型。想在起动动态计算的基础上再叠加断相、匝间短路、电源跌落等工况只需要把对应相的方程改一改或者把电感矩阵里某个元素调整一下不需要推倒重来。代价也很明显。六阶微分方程组的数值积分比三阶dq模型计算量大得多尤其在需要高精度长时间仿真时差距更明显。另外三相坐标系下的电感矩阵是时变的因为定转子相对位置在不断变化每一积分步都需要重新计算电感矩阵这就对程序实现提出了更高要求。所以模型选型的关键逻辑是如果只是做稳态特性分析或者控制系统设计dq模型效率高得多如果要做起动动态、不对称工况、故障暂态这类问题三相坐标系模型才是正确选择。我见过有人硬用dq模型做断相仿真结果波形解释起来非常费劲这就是选型出了问题。2. 感应电动机六阶状态方程的建立过程2.1 先从物理绕组说起一台鼠笼式感应电动机定子是三相绕组转子是鼠笼导条。做理论分析时把鼠笼转子等效成星形连接的三相绕组这就是“转子绕组折算”的物理基础。折算之后定子有A、B、C三相绕组转子有a、b、c三相绕组有些教材写成A、B、C对应定子用另外的字母表示转子。建立模型前要明确方向约定。本文采用电动机惯例电压正方向与电流正方向一致正值电流产生正值磁链。按照这个约定每一相绕组的电压方程写出来就是u R·i dψ/dt也就是说外加相电压一部分降在绕组电阻上R·i另一部分用来克服磁链的变化dψ/dt。这个式子很简单但它就是整个动态模型的骨架。六个绕组就有六条这样的方程矩阵化之后就是u_abc R_s·i_abc dψ_abc/dtu_ABC R_r·i_ABC dψ_ABC/dt定子和转子的下标分开写。值得强调的是转子侧绕组在物理上是短路的也就是说转子电压向量等于零。这是感应电动机区别于双馈电机的关键点转子侧没有外加激励全靠电磁感应产生电流。磁链方程比电压方程复杂。六个绕组的磁链不仅取决于本绕组电流还取决于所有其他绕组的电流。把磁链写成矩阵形式ψ L·i其中ψ和i都是六维向量L是6×6的电感矩阵。这个电感矩阵就是三相坐标系模型的灵魂搞懂它整个模型就通了。2.2 电感矩阵的组装自感、互感、转子位置角电感矩阵L里面对角元素是各绕组自感非对角元素是绕组间互感。把这些元素分块来看定子三相绕组结构相同空间互差120度。定子每相自感L_ss是常数定子绕组之间的互感也是常数。因为三相绕组空间位置对称任意两相之间的互感都等于−L_ms/2。这里的负号来自120度空间夹角磁通方向相反所以互感为负。下标ms对应主磁通对应的互感幅值。转子折算后的三相绕组也有相同的自感L_rr和互耦−L_mr/2。对于均匀气隙的感应电动机定子自感和转子自感存在折算关系后面的参数表会给出具体数值。难点在于定子与转子之间的互感。转子在旋转定子A相绕组和转子a相绕组之间的夹角在不断变化所以定转子互感是转子位置角θ的周期函数。具体来说L_Aa L_ms·cos(θ)L_Ab L_ms·cos(θ 2π/3)L_Ac L_ms·cos(θ − 2π/3)每对定转子绕组之间的互感都等于L_ms乘以它们空间夹角的余弦。θ是转子a相绕组轴线领先定子A相绕组轴线的电角度。这样整个6×6电感矩阵可以写成如下分块形式L [ L_ss L_sr(θ)L_rs(θ) L_rr ]其中L_ss和L_rr是常数矩阵L_sr(θ)是转子位置角的函数矩阵L_rs(θ)是L_sr(θ)的转置。电角度θ与转子机械角速度ω之间满足dθ/dt p·ωp是极对数。这一步关系把电磁方程和运动方程连接起来了。电感矩阵随θ变化这是三相坐标模型时变性的根源。dq坐标变换之所以被广泛使用正是因为它能把这种时变性消除掉。但在三相坐标模型里我们直接面对时变电感矩阵用数值方法处理它。2.3 从磁链方程到状态方程有了电压方程和磁链方程接下来要变成适合数值积分的形式。这里有两种路径核心区别在于选择什么量作为状态变量。路径一以磁链为状态变量。把磁链方程ψ L·i改写成i L⁻¹·ψ代入电压方程得到dψ/dt u − R·L⁻¹·ψ状态变量是六个磁链分量每个积分步需要计算一次L⁻¹因为是时变矩阵然后解出电流进而算转矩。这个形式的好处是方程右端非常紧凑不需要处理电感对时间的导数。路径二以电流为状态变量。把磁链方程代入电压方程后由于电感矩阵是时变的求导会产生额外项u R·i L·(di/dt) (dL/dθ)·ω·i整理成标准状态方程形式di/dt L⁻¹·(u − R·i − (dL/dθ)·ω·i)这个形式看起来复杂一些需要计算dL/dθ但好处是状态变量直接就是电流后处理时不需要再做一次矩阵求逆。两种路径数学上完全等价但我在实际编程中推荐路径一。原因很直接dL/dθ的解析表达式容易写错而且程序越长越容易出低级错误。用磁链做状态变量方程形式统一求逆矩阵交给Matlab处理逻辑清晰得多。代价只是每个积分步多一次L⁻¹计算对于起动仿真这种秒级时间跨度来说完全可接受。电磁转矩的表达式。三相坐标系下转矩可以从磁场储能对机械角位移的偏导推出实用表达式是T_e p · L_ms · [ i_A·i_a·sin(θ) i_A·i_b·sin(θ2π/3) i_A·i_c·sin(θ−2π/3)i_B·i_a·sin(θ−2π/3) i_B·i_b·sin(θ) i_B·i_c·sin(θ2π/3)i_C·i_a·sin(θ2π/3) i_C·i_b·sin(θ−2π/3) i_C·i_c·sin(θ) ]看起来一大串其实就是逐项对应定转子绕组间互感随θ的变化率乘以对应电流乘积。程序里用三重循环或直接按矩阵运算写都可以。运动方程J·(dω/dt) T_e − T_LJ是转动惯量T_L是负载转矩。把电角度θ和机械角速度ω纳入状态向量整个系统就是八阶状态方程六个磁链分量加上ω和θ。不过通常θ不直接出现在电磁方程右端而通过sin和cos出现所以状态向量可以压缩成七个变量但为了程序可读性我习惯保留八个分量。3. Matlab代码实现从参数录入到曲线输出3.1 电机参数录入与单位陷阱先给一组典型的小型鼠笼感应电动机参数。这里用标幺值便于验证结果的合理性。实际电机铭牌参数需要折算到电路模型折算过程本身就是一门学问这里不做展开。参数数值说明额定线电压U_n380V三相电源线电压有效值额定频率f50Hz电网频率极对数p2四极电机定子电阻R_s0.435Ω折算到定子侧转子电阻R_r0.816Ω折算到定子侧定子自感L_ss0.0713H含漏感转子自感L_rr0.0713H折算后与定子侧相等定转子互感L_ms0.0693H主磁通对应互感转动惯量J0.089kg·m²电机本体加负载折算负载转矩T_L0N·m空载起动后续可改这里有一个最容易踩的陷阱我专门拿出来说。电压必须换算成相电压峰值。电源线电压380V有效值对应相电压有效值380/√3≈220V峰值220×√2≈311V。如果直接把311V当成幅值往正弦函数里代对不起你算出来的起动电流直接大一倍。我最初调试时波形怎么都对不上查了半天发现是这里的问题。程序开头建立电压函数。三相平衡电源电压function u voltage_source(t) Um 311; % 相电压峰值 f 50; % 电源频率 omega 2*pi*f; u [Um*cos(omega*t); Um*cos(omega*t - 2*pi/3); Um*cos(omega*t 2*pi/3); 0; 0; 0]; % 转子三相电压为零 end注意转子侧三个分量是短路绕组电压恒为零。这是感应电动机的基本特征。3.2 状态方程函数与ode45调用接下来写系统微分方程函数。状态向量x定义为六个磁链分量加电角速度ω和电角度θ共八个分量function dxdt motor_dynamics(t, x, param) % 状态向量分解 psi_s x(1:3); % 定子磁链 psi_r x(4:6); % 转子磁链 omega x(7); % 机械角速度 theta x(8); % 电角度 % 电感矩阵 Lss param.Lss; Lrr param.Lrr; Lms param.Lms; Lsr Lms * [cos(theta), cos(theta2*pi/3), cos(theta-2*pi/3); cos(theta-2*pi/3), cos(theta), cos(theta2*pi/3); cos(theta2*pi/3), cos(theta-2*pi/3), cos(theta)]; L [Lss*eye(3) Lms*[-0.5 -0.5; -0.5 -0.5; -0.5 -0.5] ... % 这里定子互感部分需要仔细写 ...]; % 具体矩阵略按分块形式写清楚即可 end电感矩阵的具体写法是容易出错的地方。我建议先把定子侧常数矩阵和转子侧常数矩阵单独算好L_sr(θ)单独算最后拼装。注意矩阵维度6×6的L矩阵不能少任何一块。电流由磁链反解i L \ [psi_s; psi_r];这里用矩阵左除而不是inv()数值稳定性更好代码也更简洁。电磁转矩计算。按上一节的转矩公式先把定转子电流拆出来然后直接套用三重乘积求和。我习惯把转矩写成单独函数方便复用。Te p * Lms * ( ... );运动方程dxdt zeros(8,1); dxdt(1:3) u(1:3) - Rs * i_s; dxdt(4:6) -Rr * i_r; % 转子电压为零 dxdt(7) (Te - TL) / J; dxdt(8) p * omega;这里dxdt(1:3)对应定子磁链导数的电压方程dψ/dt u − R·i。转子侧因为电压为零dψ/dt −R·i。运动方程把机械角速度和电角度联系起来了。主程序调用tspan [0 1.5]; % 仿真总时长1.5秒 x0 zeros(8,1); % 初始静止磁链为零 options odeset(RelTol, 1e-6, AbsTol, 1e-8); [t, x] ode45((t,x) motor_dynamics(t,x,param), tspan, x0, options);起动仿真从零状态开始也就是说所有磁链、转速、角度全部初始化为零。这个零初始条件对应“电机静止且未通电”合闸瞬间电压突然接入正好模拟实际起动过程。3.3 从状态变量到三相电流波形仿真完成后x矩阵里存的是磁链、转速、角度。要得到电流还是需要逐点反解。把整个矩阵传进循环n length(t); i_abc zeros(n, 3); for k 1:n psi x(k,1:6); Lk build_L(x(k,8)); % 按当前角度重建电感矩阵 ik Lk \ psi; i_abc(k,:) ik(1:3); % 取定子三相电流 end这样一个循环后i_abc就是定子三相电流的完整时域波形。转速直接从x(:,7)取转矩用电磁转矩函数逐点算。画图部分不复杂但有一个关键点要提醒起动第一周期内的电流波形包含显著的直流衰减分量。电机合闸瞬间由于磁链不能突变定子电流中会出现非周期分量这个分量按定子时间常数衰减同时叠加在交流分量上。实际启动波形看起来就是电流先剧烈振荡然后逐渐收缩到对称状态。如果你仿真出来的电流从第一个周期开始就是完美正弦反而是不正常的。4. 仿真结果判读与验证4.1 起动电流、起动转矩的合理范围程序跑完只完成了第一步更重要的是判断结果对不对。感应电动机直接起动有几个公认的经验数据可以用于快速验证起动电流倍数为额定电流的5到7倍。额定电流I_n P_n/(√3·U_n·cosφ·η)小型电机一般在10A左右所以起动电流峰值可能达到70A以上仿真波形上一眼就能看到电流冲击。起动转矩倍数为额定转矩的0.8到2倍四极电机通常接近1到1.5倍。如果计算出的电磁转矩长期远低于负载转矩电机会堵转转速永远起不来。空载起动稳态后定子电流约为额定电流的20%到40%对应空载励磁电流。转速接近同步转速四极电机同步转速1500r/min稍有转差。起动时间由转动惯量J和平均加速转矩决定典型小型电机在0.5到2秒之间完成起动。如果1.5秒内转速还没接近同步转速要么J设置太大要么负载转矩过大。这里有个直观判断仿真是否正确的技巧看波形是否在合理时间尺度内收敛到稳态。正常起动过程电流幅值从冲击值逐渐回落转速从0平滑上升到接近同步转速这个过程是单调的、平滑的没有长时间振荡。如果电流衰减需要几十秒或者转速大幅超调然后震荡说明模型参数或数值设置有问题。4.2 从波形细节里读物理过程三相坐标系模型的一大优势是能够看到真实的相电流波形细节。起动初期磁链建立阶段定子电流由交流分量和直流分量叠加。直流分量造成电流波形的“偏心”——正半周峰值与负半周峰值不对称这在dq模型里不容易直接看到。随着直流分量衰减电流波形逐渐对称化。电磁转矩的波形更值得关注。起动初期转矩包含明显的2倍频脉动分量这是定转子电流相互作用、磁场非同步旋转导致的结果。平均转矩等于脉动转矩在一个周期内的平均值正是这个平均值驱动转子加速。起动转矩的脉动特性在实际电机中会造成噪音和机械冲击仿真曲线上能看得非常清楚。转速上升曲线也不是直线。起动初期转矩大加速度大随着转速升高进入转矩-转速特性曲线的下降段加速变慢。从转速曲线上可以估算起动时间和加速过程的平稳性。如果转速曲线在某个区间出现平台甚至下降要怀疑负载转矩是否已经超过了电机在该转速下的最大转矩。4.3 负载起动与参数敏感性把空载起动改成带负载起动很简单把运动方程里的T_L设成恒定值或者转速的线性函数。比如风机水泵类负载转矩与转速平方成正比TL 3.5 * (omega/omega_n)^2; % 额定负载转矩按转速平方变化这时起动时间显著变长稳态转速下降转差率增大。对比空载和满载起动曲线你能直观感受到负载转矩对起动过程的影响。这种“参数怎么变结果怎么变”的敏感性分析正是三相坐标模型的好用之处——物理因果关系清晰每一个参数在方程里都有明确位置。5. 常见问题与调试经验实录5.1 数值发散原因与对策模型写对但仿真发散是初学者遇到最多的状况。数值发散通常表现为状态变量快速增长到天文数字Matlab报错或曲线直接冲飞。常见原因按概率排**单位混乱。**这类问题最常见。SI单位制下电压是V电流是A电感是H电阻是Ω。如果把kV直接当V代入电流会大1000倍不发散才怪。我建议所有参数全部统一到SI单位仿真结束后再把结果转成好读的倍数值。**初始条件与物理约束不符。**三相坐标模型要求初始磁链为零且电流为零。如果人为给了一个非零初始磁链而转子又没转到对应位置状态变量之间会有内部矛盾数值上容易产生冲击。最安全的初始化是全部置零。**方程刚性。**感应电机模型的电感数值通常较小而机械时间常数较大状态变量既有快变分量又有慢变分量ode45的误差控制可能失效。如果ode45报错或者步长缩小到异常程度换成ode15s或ode23t这类刚性求解器通常就能解决。**开关突变太剧烈。**合同瞬间电压从0跳到311V对数值积分是个强烈的激励。如果步长控制不好第一小步的误差就会传到后面。把RelTol收紧到1e-6、AbsTol到1e-8通常可以改善。5.2 三相坐标模型独有的几个坑**电感矩阵奇异风险。**从理论上讲6×6电感矩阵是正定的不会奇异。但如果参数之间不自洽比如定子自感和互感搭配不合理矩阵条件数会很大逆矩阵计算误差剧增。参数录入后先做一次eig(L)检查特征值确认矩阵正定是值得养成的习惯。**相电压和线电压的换算。**前面强调过仿真模型里用的是相电压峰值不是线电压有效值。这个错误不会导致发散但会导致所有电流幅值系统性偏大而且波形看起来依然“正常”——最坑人的错误类型。**转子折算参数的理解。**转子电阻和自感必须是折算到定子侧的数值。有些人从电机设计软件直接拿到转子原始参数就放进去电感量级差了十倍转矩计算完全失真。确认参数来源或者通过空载和堵转实验数据反推参数是建模前的必要步骤。5.3 调试顺序和提速技巧我建议的调试顺序是先做最简化验证把转动惯量设得极大等效转子几乎不动此时模型退化成静止状态下的三相变压器转矩曲线的脉动频率应等于电源频率的两倍。这个结果跟解析解能明确对上验证通过后再恢复真实惯量看转速上升过程。提速方面ode45对整个仿真时间内的步长控制有大量冗余。如果仿真只需要看起动过程的前0.5秒就把tspan设成[0 0.5]别把时间延长到稳态能省不少计算时间。另外把电感矩阵的计算函数用向量化写法避免在循环里逐元素赋值也能显著提升速度。6. 模型扩展方向与实际应用三相坐标系状态方程建好后扩展能力强得惊人。这里列几个我实测过的方向每个都是在这个模型上小改动就能实现的功能。**不对称电源电压起动。**把电压函数里三相幅值改为不同的常数比如A相311V、B相300V、C相280V就能仿真电压不平衡下的起动过程。你会看到三相电流显著不平衡转矩脉动加剧转速曲线出现低频振荡。这种工况在dq模型里要额外引入正负序分解复杂很多。**断相起动。**把某一相电压置零模拟缺相起动。结果非常直观电机无法从静止状态正常起动电流中流过很大的堵转电流转速可能长期低速振荡。这种分析对现场故障诊断有直接参考价值。**负载转矩突变。**在运动方程里加入时间逻辑比如t大于某个值后T_L从0跳到额定值模拟突加负载工况。转速会瞬间跌落然后重新恢复电流冲击明显可见。我个人的体会是三相坐标系模型虽然计算量不如dq模型经济但作为理解电机动态过程的基石价值远超那点计算开销。**当你把电机真正当成三个空间上相差120度的绕组而不是一个抽象的旋转坐标系很多控制策略和故障现象的本质都能看得更通透。**先把这个模型吃透再去看dq变换、矢量控制理解的深度完全不同。最后分享一个小技巧所有参数录入前先手动算一遍稳态空载电流和起动电流的粗略值跟仿真结果对比。如果量级对不上别急着调求解器回头检查参数录入和电压换算问题。我调试那么多模型发现绝大多数“模型跑不出结果”的问题根源都在参数没进对而不是方程写错了。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →