ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

三相异步电动机MATLAB仿真:从dq建模到SPWM调速

三相异步电动机MATLAB仿真:从dq建模到SPWM调速 简介这是一套面向电机控制与电力电子方向学习者的三相异步电动机Matlab/Simulink仿真资源覆盖异步电机起动、制动、调速、发电机运行及不同坐标系下的仿真建模适合正在学习电机拖动、从事变频调速研究或进行课程设计的新手与中级开发人员对照参考。压缩包内共67个文件以61个mdl仿真模型为主体配套5个m脚本用于机械特性计算与模型修正另有1个fig参数界面整包仅552KB目录按专题划分便于检索调用。模型库涵盖直接起动、电抗器起动、转子绕组串电阻起动等典型起动方式以及反接制动、能耗制动、回馈制动等制动工况并包含调压、变频、串电阻调速和矢量控制策略同时提供abc、dq0、abo坐标系下的电机模型与三相异步发电机带载、空载仿真场景。全部源码经测试校正可运行已有1063人学习下载适合用于理解异步电机运行原理、快速搭建仿真实验或作为课程设计的基础模板。1. 三相异步电动机仿真先确定状态变量再写MATLAB代码接手异步电机仿真任务时最先卡住的往往不是MATLAB语法而是“这台电机的模型里该放哪几个状态变量”。三相异步电动机的电压方程、磁链方程和机械运动方程耦合在一起仿真一开跑就发散大多不是数值算法的问题而是模型参数或初值没定对。用MATLAB做三相异步电动机仿真常见可靠的做法就是从dq坐标系下的动态数学模型出发把电机写成常微分方程组再用ode45这类求解器积分得到转速、转矩、电流曲线。这篇文章从坐标变换开始讲清楚如何用MATLAB编程做异步电机起动和SPWM变频调速仿真并给出能直接运行的代码和参数表最后落到仿真发散时的定位方法适合电机驱动方向的工程师和研究生做过渡参考。2. 搭建三相异步电动机的dq轴数学模型坐标变换和状态方程三相异步电动机在ABC坐标下的数学模型最直观但直接拿来做MATLAB仿真并不划算。定子三相绕组和转子鼠笼绕组之间的互感系数会随转子位置变化每个积分步都要重新组装一个时变的互感矩阵求解代价高模型形式也不利于后续做矢量控制。所谓dq轴模型本质上是把三相绕组等效成两相正交绕组再把这个两相坐标系同步旋转起来。和同步电机不同异步电机的转子没有外部励磁转子磁链完全由定子磁场感应产生所以转子磁链在方程里是状态变量而不是外部给定的输入。2.1 为什么不用三相ABC模型磁链方程里的时变互感异步电机的三相定子绕组空间上相差120度转子绕组也在旋转定转子互感矩阵中每个元素都是转子位置角theta的函数。MATLAB里直接积分这种时变系数方程不是不能跑但每个步长要重新算六组三角函数而且模型里看不到电磁转矩和转差的关系后续想扩展成SPWM变频器-异步电机交流调速系统也无从下手。坐标变换的目标就是把这些时变互感变成常数。整个变换分两步先做Clark变换把三相abc静止坐标系变到两相αβ静止坐标系再做Park变换把αβ静止坐标系变到以同步角速度omega1旋转的dq坐标系。两次变换叠加之后正弦稳态下的三相交流量在dq坐标系里变成直流量电压方程和磁链方程里的系数矩阵就不再随时间变化。2.1.1 Clark和Park变换的矩阵形式与MATLAB实现等幅值约束下的Clark变换写成代码很短% 三相 abc 电流 - 两相静止 alpha beta 电流 ialpha 2/3 * (ia - 0.5*ib - 0.5*ic); ibeta 2/3 * (sqrt(3)/2 * ib - sqrt(3)/2 * ic); % 静止 alpha beta - 旋转 d qtheta omega1 * t id ialpha * cos(theta) ibeta * sin(theta); iq -ialpha * sin(theta) ibeta * cos(theta);逻辑说明第一行和第二行是abc到αβ的投影系数2/3来自等幅值约束意思是变换前后相电压幅值不变。第三行和第四行是旋转坐标变换关键是theta的积分theta omega1*t theta0这里的omega1就是同步电角速度。需要说明的是Park变换还存在等功率约束版本系数差一个根号2/3选择哪种约定了转矩公式前的系数代码里不能混用。2.2 dq坐标系下的定子电压方程和转子电压方程在同步旋转dq坐标系下鼠笼转子短路转子电压为零异步电机的动态方程可以写成定子两个磁链微分方程加转子两个磁链微分方程再加一个机械转速方程。以磁链直接作为状态变量时定子电压方程是d(psi_sd)/dt usd - Rsisd - omega1psi_sqd(psi_sq)/dt usq - Rsisq omega1psi_sd转子电压方程是d(psi_rd)/dt -Rr*ird - (omega1 - omega_r)*psi_rqd(psi_rq)/dt -Rr*irq (omega1 - omega_r)*psi_rd机械方程为d(omega_r)/dt (p/J) * (Te - TL)这里omega_r是转子电角速度机械角速度是omega_r/p。公式里的交叉项omega1*psi_sq和(omega1-omega_r)*psi_rq就是旋转坐标系带来的耦合项转子方程里的omega1-omega_r是转差电角速度异步电机的核心物理过程都集中在这两个差频项上。2.2.1 电感参数换算与典型参数表磁链和电流之间通过电感矩阵互相换算这是MATLAB编程里最容易写错的一步。定义定子自感Ls Lls Lm转子自感Lr Llr Lm再定义Lsigma Ls*Lr - Lm^2则电流用磁链表示为isd (Lrpsi_sd - Lmpsi_rd) / Lsigmaisq (Lrpsi_sq - Lmpsi_rq) / Lsigmaird (Lspsi_rd - Lmpsi_sd) / Lsigmairq (Lspsi_rq - Lmpsi_sq) / Lsigma下面是一台2.2kW、2对极三相异步电动机的典型参数可以直接用于仿真初算。参数符号数值说明定子电阻Rs0.435 Ω每相绕组电阻转子电阻折算值Rr0.816 Ω折算到定子侧定子漏感Lls4 mH定子漏磁路径对应的电感转子漏感折算值Llr4 mH折算到定子侧定转子互感Lm69.3 mH主磁路互感转动惯量J0.026 kg·m²转子加负载折算极对数p2决定同步转速1500r/min拿到参数后第一件事是验算漏感系数sigma 1 - Lm^2/(Ls*Lr)正常值在0.05到0.1之间。如果算出来小于零说明互感取值超出物理范围后面仿真必然发散不用等到跑完才找原因。2.3 状态变量选择的三种做法和适用场景全磁链状态[psi_sd psi_sq psi_rd psi_rq omega_r]是最稳的选择数值鲁棒性好本文采用。定子电流加转子磁链[isd isq psi_rd psi_rq omega_r]适合转子磁场定向控制但定子电流动态快求解时对步长要求高。定转子电流[isd isq ird irq omega_r]的物理意义直观但是四个电流时间常数接近方程组刚性更强MATLAB里求解容易因为maxstep太大而振荡。选哪种状态变量状态方程右端项的代数运算就得配套不能从某一篇论文抄一组电压方程再换一套状态变量去套。% 用漏感系数验算参数是否处于物理合理范围 Lls 0.004; Llr 0.004; Lm 0.0693; Ls Lls Lm; Lr Llr Lm; sigma 1 - Lm^2 / (Ls * Lr); if sigma 0 error(互感参数超出物理范围仿真必然发散); end fprintf(漏感系数 sigma %.4f\n, sigma);提示状态变量选定后代码里磁链到电流的反解公式必须和状态变量一一对应。改状态变量而不改反解公式是仿真结果异常的第一大来源。2.4 整理成MATLAB可用的状态方程标准形式把上面五个一阶微分方程整理成dx/dt f(x, u)的标准形式。输入向量u取同步角速度omega1和d轴电压幅值usd在恒压恒频起动时usq0。这样的标准形式直接交给ode45就能求解。现代MATLAB版本还推荐用odeset控制误差容限比如设置RelTol1e-6AbsTol1e-8对起动过程这种跨时间尺度的问题能有效防止误差累积。3. MATLAB编程求解三相异步电动机起动过程3.1 主程序参数与ode45求解调用用MATLAB做异步电机仿真最直接的做法是编写状态方程函数交给ode45做变步长积分。起动过程从毫秒级的电磁暂态跨越到数百毫秒级的机械动态ode45能根据误差自动调整步长比固定步长欧拉法省心得多。主程序如下% 三相异步电动机起动仿真主程序 Rs 0.435; Rr 0.816; Lls 0.004; Llr 0.004; Lm 0.0693; Ls Lls Lm; Lr Llr Lm; J 0.026; p 2; f1 50; omega1 2 * pi * f1; Un_phase_rms 220; % 相电压有效值 220V Us Un_phase_rms * sqrt(2); % dq变换需要峰值约 311V Lsigma Ls * Lr - Lm^2; t_span [0 1.5]; % 仿真时长 1.5s x0 zeros(5,1); % 磁链和转速初始为0 [t, x] ode45((t,x) im_statefun(t, x, Rs, Rr, Lm, Ls, Lr, ... Lsigma, J, p, omega1, Us), t_span, x0); % 从状态量恢复电流与转矩 psi_sd x(:,1); psi_sq x(:,2); psi_rd x(:,3); psi_rq x(:,4); omega_r x(:,5); isd (Lr*psi_sd - Lm*psi_rd) / Lsigma; isq (Lr*psi_sq - Lm*psi_rq) / Lsigma; Te 1.5 * p * (psi_sd.*isq - psi_sq.*isd); n_r omega_r / p * 60 / (2*pi); % 机械转速 r/min3.1.1 电压Us取峰值而不是有效值这段代码里Us 220*sqrt(2)这是Park变换要求输入的相电压瞬时幅值。220V对应有效值为220V的相电压峰值约311V对应线电压380V的系统。如果直接写Us220稳态磁链和电流都会被系统性低估约30%这也是把别人的代码移植过来后结果偏小的常见原因。仿真里输入的是瞬时值铭牌上写的是有效值两者之间必须换算。3.2 状态方程函数每步先反解电流再求导数状态方程函数必须把五个状态量的导数都算出来返回给ode45。由于电压方程和转矩公式都需要电流第一步先用上一节的代数关系反解出isd、isq、ird、irq。这段代码是起动仿真能被跑通的核心function dx im_statefun(~, x, Rs, Rr, Lm, Ls, Lr, Lsigma, ... J, p, omega1, Us) psi_sd x(1); psi_sq x(2); psi_rd x(3); psi_rq x(4); omega_r x(5); isd (Lr*psi_sd - Lm*psi_rd) / Lsigma; isq (Lr*psi_sq - Lm*psi_rq) / Lsigma; ird (Ls*psi_rd - Lm*psi_sd) / Lsigma; irq (Ls*psi_rq - Lm*psi_sq) / Lsigma; usd Us; % 恒压恒频直接起动d轴给峰值电压 usq 0; % 参考坐标d轴对齐电压矢量 dpsi_sd usd - Rs*isd - omega1*psi_sq; dpsi_sq usq - Rs*isq omega1*psi_sd; dpsi_rd -Rr*ird - (omega1 - omega_r)*psi_rq; dpsi_rq -Rr*irq (omega1 - omega_r)*psi_rd; Te 1.5 * p * (psi_sd*isq - psi_sq*isd); TL 0; % 空载起动 domega_r p / J * (Te - TL); dx [dpsi_sd; dpsi_sq; dpsi_rd; dpsi_rq; domega_r]; end逻辑说明磁链微分方程的右端由电压源项、电阻压降项和旋转耦合项组成。转子侧电压源为零所以只剩电阻压降和转差耦合项。转矩公式前的系数1.5必须和前面等幅值Park变换约定一致如果用的是等功率变换这个系数是p而不是1.5p。TL0表示空载起动带上负载就把负载转矩函数写在这里。参数说明omega1在恒压恒频时是常数2pi50。做变频调速时omega1要变成随时间变化的量同时usd的幅值也要随频率调整这两个输入从常量改成函数后状态方程的框架不用大改。3.3 求解结果绘图与物理量核对把结果画出来用图形确认物理过程figure; subplot(3,1,1); plot(t, n_r); grid on; ylabel(转速 r/min); ylim([0 1600]); title(三相异步电动机起动仿真); subplot(3,1,2); plot(t, Te); grid on; ylabel(电磁转矩 N·m); subplot(3,1,3); plot(t, isd, t, isq); grid on; legend(isd,isq); xlabel(时间 s); ylabel(定子电流 A);绘图要看三个核心物理量转速应从0平滑升到接近同步转速1500r/min电磁转矩在起动瞬间有一个尖峰随后振荡衰减最终趋近于零isd和isq起动初期振荡稳态后变成直流量。如果转速在同步转速附近持续振荡不收敛优先检查J是否过小或方程中Te的符号是否写反。从物理上看零初值对应电机的零状态冷启动电压在t0时刻突然接入定子电流瞬间建立这是正常的数值暂态不代表模型出错。空载稳态转差率一般在1%附近如果仿真结束时转差率大于5%就该检查参数和求解误差设置。3.4 用解析公式校核稳态转差率仿真结束后在命令窗口做一次快速校核n_sync 60 * f1 / p; % 同步转速 1500 n_steady n_r(end); slip_steady (n_sync - n_steady) / n_sync; fprintf(同步转速 %.1f r/min稳态转速 %.1f r/min\n, ... n_sync, n_steady); fprintf(稳态转差率 %.3f\n, slip_steady);空载转差率落在0.005到0.015之间属于正常范围。稳态转速明显高于同步转速说明转矩方向写反电机变成了发电机稳态转速远低于同步转速优先怀疑电压幅值是否少乘了根号2。4. 把仿真扩成SPWM变频器-异步电机交流调速系统4.1 变频调压输入频率和电压必须同步变化第3章把起动仿真做成了恒压恒频的直接起动冲击电流很大。实际驱动系统用SPWM变频器供电基频以下保持U/f比恒定即电压幅值随定子频率近似线性下降。MATLAB里做SPWM变频器-异步电机交流调速系统仿真有两条路线一条把变频器看作理想基波电压源只改变omega1和usd的时变规律另一条要观察电流谐波就必须生成PWM开关信号。最常见的是第一条因为电机本身的动态特性在基波输入下已经能反映调速性能。定义频率斜坡和电压幅值函数f_ramp (t) 20 (45 - 20) * min(max((t - 0.4) / 0.4, 0), 1); usd_amp (f) (f / 50) * 311; % 基频以下 V/f 恒定逻辑说明0.4秒前给定20Hz0.4到0.8秒线性升到45Hz之后保持45Hz。usd_amp把频率映射到相电压峰值。min和max的双重限幅保证频率输出在区间内不会出现t超出区间后频率继续线性外推的问题。频率低于5Hz时定子电阻压降占比显著变大V/f恒定会转矩不足实际系统需要加低频电压补偿仿真里可以简单地在usd_amp中加一个常数偏置。4.2 需要看电流谐波时再生成SPWM开关信号如果研究重点是变频器对电机的谐波影响才需要实际生成PWM脉冲。基波电压源无法反映开关频率附近的高次谐波这时用三角载波和正弦调制波比较得到开关信号fc 2000; % 载波频率 2 kHz fm 30; % 调制波频率 30 Hz M 0.8; % 调制度小于等于1 Ts 1 / (fc * 200); % 过采样每载波周期200点 t (0:Ts:0.1).; tri sawtooth(2*pi*fc*t, 0.5); % 对称三角载波 mod M * sin(2*pi*fm*t); % 正弦调制波 pwm_up (mod tri); % 上桥臂开关信号参数说明载波频率fc决定开关频率实际变频器常见2kHz到10kHz。调制度M是调制波峰值与载波峰值之比M超过1会进入过调制区输出电压基波增大但谐波畸变明显所以线性区一般限制M1。把pwm信号接入电机模型时不能直接把0/1逻辑值接到usd上而要提取脉冲序列的基波分量或用平均值模型等效usd。4.3 变频调速仿真中的参数联动与收敛观察在将第3章的im_statefun从常量改为时变输入时需要同时修改三处参数修改点恒压恒频变频调速特别注意omega12pi50 常量2pif_ramp(t)斜坡切换点要连续usd311 常量usd_amp(f(t))低频段补偿定子压降负载TL0按工况给定突变负载时加斜坡变频仿真最容易出现的问题是斜坡函数在切换点不光滑。f_ramp在t0.4处左侧导数为0右侧为62.5Hz/s导数跳变会让ode45自动缩小步长这一步不是发散但会导致仿真时间指数级增加。把0.4秒的斜坡改到1秒或用smoothstep函数过渡都能缓解。起动冲击电流和转速超调量由斜坡斜率决定斜坡越平滑动态过程越接近实际调速系统的软起动这是仿真里能直接观察到的结论同一条斜坡从0.1s延长到1s定子电流峰值可以从额定值的7倍降到2倍附近。5. 异步电机仿真发散时先看哪里再验证结果5.1 仿真发散时的定位哪个状态量先失控仿真发散几乎不会五个状态量同时爆炸一定是某一个先失稳再通过耦合项把其他量带崩。定位方法是在状态方程函数末尾加一段显示或者用odeset的回调函数观察中间值。更直接的做法是缩小t_span从0到0.001秒逐步放大看是哪一步开始的。如果psi_rd、psi_rq先发散优先检查Lsigma是否算错以及Lm取值是否让漏感系数逼近零。如果omega_r先发散检查转矩公式系数和J的数量级。如果isd、isq高频振荡说明电气时间常数太小方程组刚性增强此时要把求解器从ode45换成ode15s这比反复调MaxStep更有效。5.2 求解器切换与步长设置的边界异步电机方程的刚性来自定子漏感较小产生的快模态和转动惯量J较大产生的慢模态之间的时间尺度差异。ode45在两者的比值超过1000时会频繁收缩步长虽然数值上仍然可以求解成功但积分步数可能达到数十万步。此时改用ode15s通常能快五倍以上。options odeset(RelTol, 1e-6, AbsTol, 1e-8, ... MaxStep, 0.001); [t, x] ode15s((t,x) im_statefun(t, x, Rs, Rr, Lm, Ls, Lr, ... Lsigma, J, p, omega1, Us), t_span, x0, options);MaxStep0.001是保守值对50Hz系统相当于每个工频周期采样20个点足以分辨电磁暂态。需要注意的是RelTol设置过严会让ode45在慢变量区域也缩小步长浪费计算时间1e-5到1e-6已经足够工程精度。5.3 用解析解和铭牌参数二重验证仿真结果验证仿真结果时先用第3.4节的同步转速和稳态转差率检查机械侧再用空载电流的近似解析式检查电气侧。空载时励磁电流近似为I0 Us / (omega1 * (Lls Lm))把仿真得到的稳态isd、isq合成电流幅值Im sqrt(isd.^2 isq.^2)与I0比较。两者偏差在10%以内说明电感和电压参数匹配偏差过大优先排查电压是峰值还是有效值其次才是电感数值。起动电流峰值则用堵转条件下的等效电路估算仿真值和解析值的比值一般在0.9到1.1之间。验证脚本把三项结果同时打印是整个仿真流程里最值得做的基准核对比只看波形形状可靠得多。本文还有配套的精品资源点击获取
返回列表