3. Simulink基础与电机模型搭建

各位同学好,我是你们的老朋友。今天咱们进入这门课的第一个实操环节——Simulink环境介绍和PMSM模型搭建。

说实话,我见过不少工程师,理论功底很扎实,但一打开Simulink就懵了。其实这玩意儿没那么玄乎,你把它当成一个搭积木的工具就行。今天我就带大家把这块积木搭起来。

3.1 Simulink环境介绍

Simulink是MATLAB家族里专门做动态系统仿真的工具。说白了,它就是个图形化的编程环境。你不需要写大段代码,拖拖拽拽就能把系统搭出来。

我个人习惯把Simulink界面分成三块:

  • 模块库浏览器:左边这一栏,所有你能用的模块都在这里。电机控制常用的像PMSM模块、逆变器模块、PI控制器模块,都在Simscape Electrical里。
  • 模型画布:中间这块大白板,就是你搭系统的地方。双击空白处可以直接搜索模块,这个快捷键我天天用。
  • 仿真设置栏:顶部的工具栏,设置仿真时间、求解器类型这些参数。

我记得刚入行那会儿,有个老工程师跟我说:「Simulink里90%的报错都是求解器没选对。」这话一点不假。电机仿真一般用ode23t或者ode45,前者适合刚性系统,后者适合非刚性。PMSM模型我建议用ode23t,因为电机模型里时间常数差异很大,属于典型的刚性系统。

小技巧:仿真步长别设太大。我一般设1e-6秒,也就是1微秒。步长太大,仿真结果会失真;太小,仿真跑得比蜗牛还慢。

3.2 永磁同步电机(PMSM)数学模型

要搭模型,先得懂数学。PMSM的数学模型,说白了就是三个方程:电压方程、磁链方程、转矩方程。

电压方程(dq坐标系下):

ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)

这里uduq是d轴和q轴电压,Rs是定子电阻,LdLq是d轴和q轴电感,ωe是电角速度,ψf是永磁体磁链。

你可能会问:「为什么非要用dq坐标系?」其实就是为了把交流量变成直流量,方便控制。三相交流电在静止坐标系下是正弦波,控制起来很麻烦。但转到旋转的dq坐标系下,就变成了直流分量,用PI控制器就能搞定。

磁链方程:

ψd = Ld * id + ψf
ψq = Lq * iq

转矩方程:

Te = 1.5 * p * (ψd * iq - ψq * id)
   = 1.5 * p * (ψf * iq + (Ld - Lq) * id * iq)

这里p是极对数。注意看,转矩由两部分组成:ψf * iq是永磁转矩,(Ld - Lq) * id * iq是磁阻转矩。对于表贴式PMSM,Ld = Lq,磁阻转矩为零。对于内置式PMSM,Ld < Lq,可以利用磁阻转矩来提高效率。

重点:转矩波动主要来自两个地方——一是电流谐波,二是齿槽转矩。电流谐波会让iq产生脉动,齿槽转矩是电机结构本身带来的。后面几章我们会专门讲怎么抑制它们。

3.3 在Simulink中搭建PMSM模型

好,理论讲完了,咱们动手搭模型。我一般分三步走:

3.3.1 方法一:使用Simscape Electrical自带模块

这是最省事的办法。Simscape Electrical里有个现成的PMSM模块,参数填进去就能用。

操作路径:Simscape > Electrical > Specialized Power Systems > Electric Drives > Permanent Magnet Synchronous Motor

参数设置界面长这样:

参数名 典型值 说明
Stator resistance (Rs) 0.05 Ω 定子电阻,越小效率越高
Inductances (Ld, Lq) 0.0008 H, 0.0008 H 表贴式电机Ld=Lq
Flux linkage (ψf) 0.175 Wb 永磁体磁链
Pole pairs (p) 4 极对数
Inertia (J) 0.001 kg·m² 转动惯量
注意:我曾经在项目里直接用默认参数,结果仿真出来的电流波形跟实测差了一大截。后来才发现,默认的ψf值跟实际电机对不上。所以,参数一定要从电机手册里查,或者用实验测。

3.3.2 方法二:基于数学方程手动搭建

如果你想深入理解电机内部机理,我建议自己搭一遍。用到的模块很简单:

  • 积分器(Integrator):把微分方程变成积分形式
  • 增益模块(Gain):乘以系数
  • 加法器(Sum):加减运算
  • 乘法器(Product):乘法运算
  • 三角函数(Trigonometric Function):做坐标变换

具体搭建步骤:

  1. 先搭电压方程:用加法器和增益模块实现uduq的计算
  2. 再搭电流方程:对电压方程积分得到idiq
  3. 然后搭转矩方程:用乘法器和增益模块计算Te
  4. 最后搭机械方程:Te - Tl = J * (dωm/dt),积分得到转速

我给你们看一段核心的代码实现,这是我在MATLAB Function里写的:

function [id, iq, Te, omega_m] = PMSM_model(ud, uq, Tl, omega_m_prev, id_prev, iq_prev)
    % 参数定义
    Rs = 0.05;      % 定子电阻
    Ld = 0.0008;    % d轴电感
    Lq = 0.0008;    % q轴电感
    psi_f = 0.175;  % 永磁体磁链
    p = 4;          % 极对数
    J = 0.001;      % 转动惯量
    B = 0.0001;     % 阻尼系数
    dt = 1e-6;      % 仿真步长
    
    % 电角速度
    omega_e = p * omega_m_prev;
    
    % 电流微分方程(欧拉法离散化)
    did_dt = (ud - Rs * id_prev + omega_e * Lq * iq_prev) / Ld;
    diq_dt = (uq - Rs * iq_prev - omega_e * (Ld * id_prev + psi_f)) / Lq;
    
    id = id_prev + did_dt * dt;
    iq = iq_prev + diq_dt * dt;
    
    % 转矩计算
    Te = 1.5 * p * (psi_f * iq + (Ld - Lq) * id * iq);
    
    % 机械方程
    domega_dt = (Te - Tl - B * omega_m_prev) / J;
    omega_m = omega_m_prev + domega_dt * dt;
end

这段代码用的是欧拉法离散化,简单直观。实际项目中我更喜欢用四阶龙格-库塔法,精度更高。但教学嘛,先让大家看懂原理。

3.3.3 两种方法的对比

对比项 自带模块法 手动搭建法
搭建速度 快,5分钟搞定 慢,至少半小时
灵活性 低,只能改参数 高,可以加自定义逻辑
学习价值 高,能深入理解机理
仿真速度 快(优化过) 取决于代码质量

我个人建议:初学者先用自带模块跑通整个系统,再回头用手动搭建法加深理解。两条腿走路,稳得很。

避坑指南:我曾经在手动搭建模型时,忘了加ωe * Lq * iq这个耦合项,结果仿真出来的电流波形完全不对。检查了两天才发现。所以,搭建完一定要跟自带模块的结果做对比验证。

3.4 模型验证

模型搭完了,怎么知道对不对?我一般做三个测试:

  • 空载启动测试:给定一个阶跃转速指令,看电机能不能平稳启动。正常情况电流先冲上去,然后回落,转速慢慢上升。
  • 负载突变测试:在稳态运行时突然加负载,看转速跌落多少、恢复多快。这个能检验模型的动态响应。
  • 稳态精度测试:让电机恒速运行,看转速误差在多少以内。一般要求误差小于1%。

嗯,今天就先讲到这里。下一章咱们开始讲转矩波动的来源,以及怎么用Simulink分析它。大家回去先把PMSM模型搭起来,有问题随时问我。