MBD笔记:IPMSM 速度控制模型解析
简介
本文对Matlab官方示例IPMSM 速度控制进行简单分析,观察如何在Matlab/Simulink平台搭建PMSM速度控制仿真模型.
示例模型简介:
示例展示了如何控制基于内置式永磁同步电机 (IPMSM) 的汽车电力牵引驱动装置中的转子角转速. 高压电池通过受控三相转换器(即三相逆变器 Inverter)为 IPMSM 供电. IPMSM 根据负载以电机模式和发电模式运行。理想角速度源提供负载。Control 子系统使用开环方法控制 IPMSM 转矩,并使用闭环方法控制电流。在每个采样时刻,转矩请求都会转换为相关的参考电流。电流控制基于 PI,并且其使用的采样率比转矩控制所用的采样率更快。仿真在电机模式和发电机模式下都使用了多个转矩阶跃。任务调度是在 Stateflow® 中设计的。Scopes 子系统包含示波器,可用于查看仿真结果
仿真模型(顶层):

IPMSM 速度控制几个要点:
- 绘制电机转速曲线(
IPMSMVelocityControlPlotMotorSpeed.m实现); - Converter模块可选择2种仿真模型:精细模型(默认) 或 等效模型;
- 通过Simscape Results Explorer查看仿真结果;
- 修改模型参数;
- 其他.
下面我们通过仿照搭建仿真模型方式,逐步学习、分析示例模型.
仿真模型
注意:模型使用的传感器都是理想传感器,因此检测到的信号不需要额外处理,而真实物理世界的传感器,需要针对不同特性传感器进行处理.
顶层模型

主要几个部分:
- Input模块,模拟输入目标转速、负载转矩信息;
- Control控制模块,将输入的目标转速,检测到的三相电流(iabc)、机械角速度(w)、机械角度(a)、母线电压(Vdc)信息,通过该模块计算得到;
- Converter 逆变器模块,接收Control输出6相(3对)PWM波形,驱动IPMSM电机选择,同时采集3相电流iabc;
- 负载模块,通过Torque Source(转矩源)接受负载转矩信息,模拟负载转矩,同时测量trq(电磁转矩),w,a(转速、角度);
- Scopes模块,示波器统一监测各模块重要信号.
模型设置(属性):
- 预加载
IPMSMVelocityControlData;,对应工程目录下IPMSMVelocityControlData.m文件.

IPMSMVelocityControlData.m主要内容:
主要初始化 一些全局变量,如最大功率Pmax, 最大扭矩Tmax, Ld d轴电感,Lq q轴电感等.
注意2个变量num, den是在对应的模型封装中定义的.
%% Machine Parameters
Pmax = 35000; % Maximum power [W]
Tmax = 205; % Maximum torque [N*m]
Ld = 0.00024368; % Stator d-axis inductance [H]
Lq = 0.00029758; % Stator q-axis inductance [H]
L0 = 0.00012184; % Stator zero-sequence inductance [H]
Rs = 0.010087; % Stator resistance per phase [Ohm]
psim = 0.04366; % Permanent magnet flux linkage [Wb]
p = 8; % Number of pole pairs
Jm = 0.1234; % Rotor inertia [Kg*m^2]
%% High-Voltage System Parameters
Cdc = 0.001; % DC-link capacitor [F]
Vnom = 325; % Nominal DC voltage [V]
V1 = 290; % Voltage V1(< Vnom) [V]
AH0 = 280; % Initial battery charge [hr*A]
%% Control Parameters
Ts = 5e-6; % Fundamental sample time [s]
fsw = 10e3; % PMSM drive switching frequency [Hz]
Tsi = 1e-4; % Sample time for inner control loop [s]
Tso = 1e-3; % Sample time for outer control loop [s]
Kp_id = 0.8779; % Proportional gain id controller
Ki_id = 710.3004; % Integrator gain id controller
Kp_iq = 1.0744; % Proportional gain iq controller
Ki_iq = 1.0615e+03; % Integrator gain iq controller
Kp_omega = 3.5; % Proportional gain velocity controller
Ki_omega = 200; % Integrator gain velocity controller
%% Zero-Cancellation Transfer Functions
numd_id = Tsi/(Kp_id/Ki_id);
dend_id = [1 (Tsi-(Kp_id/Ki_id))/(Kp_id/Ki_id)];
numd_iq = Tsi/(Kp_iq/Ki_iq);
dend_iq = [1 (Tsi-(Kp_iq/Ki_iq))/(Kp_iq/Ki_iq)];
numd_omega = Tso/(Kp_omega/Ki_omega);
dend_omega = [1 (Tso-(Kp_omega/Ki_omega))/(Kp_omega/Ki_omega)];
%% Current References
load IPMSM35kWCurrentReferences;
上面代码,最后加载 IPMSM35kWCurrentReferences.mat文件. 提供IPMSM 电流参考查表数据,用于 FOC 控制中的 MTPA(最大转矩电流比)+ 弱磁控制.
这个表是通过 离线计算 + 优化算法 生成的,不是实时计算的,因为MCU没有这个算力.

- 退出时,清理资源
主要清理 预加载时申请的资源

Input模块

Input模块由Signal Editor模型组成. 参数含义:
场景设置:
| 参数 | 当前值 | 含义 |
|---|---|---|
| 文件名 | IPMSMVelocityControlInput.mat |
信号数据存储的 MAT 文件 |
| 激活场景 | Test_1 |
当前使用的测试工况名称 |
| 活动信号 | Torque |
当前正在编辑的信号(Speed 或 Torque) |
信号属性:
| 参数 | 当前值 | 含义 |
|---|---|---|
| 使用来自以下源的属性 | Dialog parameters |
从对话框参数获取属性设置 |
| 将信号属性应用于所有场景 | ✅ | 该信号的属性(如单位)对所有场景生效 |
| 将信号属性应用于所有信号 | ❌ | 不跨信号应用(仅当前信号) |
输出设置:
| 参数 | 当前值 | 含义 |
|---|---|---|
| 输出总线信号 | ❌ | 不作为总线信号输出 |
| 单位 | inherit |
继承上游/下游单位(或手动指定如 N*m) |
| 采样时间 | 0 |
连续采样(或继承模型步长) |
| 插值数据 | ✅ | Signal在离散时间点之间的数据,使用线性插值得到 |
| 启用过零检测 | ✅ | 精确检测信号跳变/过零时刻,信号穿0瞬间插值,从而避免固定步长采样错过关键事件 |
| 最终数据值之后的输出 | 外插 |
超出定义时间后,按最后趋势外推 |
我们打开信号编辑器(对应文件IPMSMVelocityControlInput.mat),能用可视化方式编辑输入数据.
- 输入转速(Speed)信号
这个转速含义是人工输入的目标转速.. 转速从0逐渐增加到3000RPM.

- 输入转矩(Torque)信号

扭矩从0到-98,再到+26.
注:
负数负载转矩,提供驱动力矩,推动电机转动,外部拖动电机,能让逆变器切换到发电模式,能量回馈直流母线;
正向负载转矩,提供阻力矩,阻碍电机转动,电机克服负载做功,能让逆变器切换到电机模式;
Inverter模块

主要包含直流325V电池电源、DC-Link 电容(直流母线电容)、母线电压检测电路、逆变器Inverter、驱动门电路、相电流检测电路.
- 电池电源

电池电荷量 = 电池剩余电量,用于 SOC 跟踪和能量管理.
当然,我们已经设置为 “无限”,初值如何设置都不重要.
- 母线电容
在逆变器系统中起关键作用:
1)稳定母线电压,提供稳定Vdc;
2)吸收纹波电流,滤除逆变器开关引起的高频电流纹波;
3)能量缓冲,瞬时功率交换,补偿电池响应慢;
4)抑制电压尖峰,吸收电机回馈能量,防止母线过压.

母线电容容值如何计算?
工程经验公式:
通用设计:
简化公式:
| 应用场景 | 经验值 |
|---|---|
| 通用变频器 | 20~50 μF/kW |
| 电动汽车 | 10~30 μF/kW |
| 光伏逆变器 | 5~15 μF/kW |
| 高功率密度 | 3~10 μF/kW |
而我们的应用是针对35kW电动汽车驱动,经验值范围15~30μF/kW,所以最终电容值范围525~1050 μF.
而我们取1mF,是合理的.
- Vdc检测模块
就是一个理想电压传感器,检测母线电压(Vdc),这电压值会提供给Control模块,用于计算、保护策略.

1、2都是连接端口(Connection Port),专门连接物理电路(区别于数字电路的Inport模型);
Vdc是Goto模型,用于给指定From模块发送信号.
- Inverter模块
相当于6个(3对)MOS管/IGBT,由3组互补中心对称的PWM波驱动,Inverter模块再驱动电机工作.

保真度级别2个选项区别
| 选项 | 内部建模 | 仿真速度 | 精度 |
|---|---|---|---|
| 详细模型 - 开关器件 | 6 个 IGBT + 二极管逐个建模 | 慢(1μs 步长) | 高,含开关损耗、尖峰 |
| 平均模型 - 等效电压源 | 理想受控电压源 | 快(100μs 步长) | 低,只关心系统动态 |
官方示例需要精确仿真 PWM 开关过程、电流纹波、损耗分析,因此选详细模型.
开关器件为什么选 IGBT?
| 器件 | 适用功率 | 特点 |
|---|---|---|
| IGBT | >10kW | 耐压高、电流大、成本适中 |
| MOSFET | <10kW | 开关快、导通电阻低 |
| SiC MOSFET | 任意 | 高频、高效、贵 |
35kW 属于中功率,IGBT 是工业标准.
- Gate Driver(栅极驱动)模块


Gate Driver 是驱动 IGBT/MOSFET 开关的专用电路,PWM 控制信号 转换为 6 路 IGBT 栅极驱动信号.
Gate Driver 模型 = PWM 信号分配器 + 死区生成器 + 电平转换器.
该模块2个端口:
1)S端口,接收 PWM 控制指令(来自 PWM Generator或者MCU),告诉 Gate Driver 何时开关各相 IGBT;
2)G端口,输出 6 路经过处理的栅极驱动信号,直接控制 IGBT 开关.
要驱动PMSM,通常是3对(6路)中心对称的互补PWM波形.
- iabc相电流采集

仿真模型用的是理想电路传感器(Current Sensor),采集3相电路. 当然,实际电路中,我们通常会用相电阻采集相电流.
注意:Current Sensor并不能直连Goto模型iabc,因为Current Sensor输出物理信号,而iabc是 Simulink 信号,需要通过PS-Simulink Converter模型转换.
IPMSM电机及负载转矩模块

这个模块提供IPMSM模型,转矩源(Torque Source)模拟负载转矩,同时传感器检测机械转矩(trq)、转子的转速和位置(w,a). 另外,解算器(Solver Configuration).
- IPMSM模块
仿真内置式永磁同步电机电机控制笔记:PMSM无位置传感器控制介绍(IPMSM)


电气连接:选择复合三相端口,三相abc就会变成一个端口~;
IPMSM核心特征:凸极性,即Ld < Lq,设置对应值的时候,需要注意;
零序分量是三相电流平均值\(i_0=\frac{1}{3}(i_a+i_b+i_c)\),零序分量存在的必要条件:三相之和不等于零.
零序:选择“排除”,相当于强制零序分量为0,即\(i_a+i_b+i_c=0\). 物理上,要求电机是星型绕组(Y接),中线没有引出(三相三线制);如果是三相四线制,则要求引出中线.
转子角定义:工程上,通常选择a相磁轴和q轴之间角度,会决定转子位置角\(θ_e\)(电角度)的参考基准.
端口:
~ abc三相复合端口,即相电流输入端口;
R 机械旋转端口(Rotational),电机转轴侧,连接负载/减速器/编码器;
C 机械壳体端口(Casing/Case),电机定子/外壳侧,通常接地或连接机架. C通常接Mechanical Rotational Reference(简称MRRefLoad),而不是GND,因为前者是机械旋转域的0 rad/s参考,而后者是电气域的0V参考.
- 转矩源(Torque Source)和转动惯量(Inertia)
电机的机械旋转的运动方程(参见MBD笔记:三相PMSM数学模型(一)公式(4)):
电机系统中,转矩源(Torque Source)和转动惯量(Inertia)2个模块必须同时加,如果不加 Inertia,则方程变成:
转矩源端口:
1)机械旋转端口(Rotational)R,连接旋转轴,传递机械运动(机械角速度ω、机械角度θ、转矩);
2)信号输入端口(Signal)S,即控制信号来自 Input模块的Torque 输入转矩指令值(N·m);
3)机械旋转端口(Casing/Case)C,反作用力矩端口,通常接地(MRRefLoad).
- trq模块
检测并传递转矩.

- w,a模块
检测并传递机械角速度ω、机械角度θ

Control模块
控制核心,接收目标转速信号(RPMReq),检测信号:三相电流(iabc_sens)、机械角速度(w_sens)、机械角度(th_sens)、母线电压(vdc_sens). 通过计算得到6个(3对)互补PWM波形(SPWM/SVPWM),达到目标转速,驱动Inverter工作,带动电机旋转.
这部分对应MCU实际实现.

来看下Control主要包含哪些模块:

这是一个分层任务调度的FOC(磁场定向控制)系统.
各模块功能:
| 模块 | 任务周期 | 功能 | 控制类型 |
|---|---|---|---|
| Outer Loop Control | 1ms(慢速) | 转速环 → 生成 $ i_{dq_ref} $ 和 $ T_{q_ref} $ | 转速PI |
| Current Control | 100us(快速) | 电流环 → 生成 $ V_{dq} $ → 反Park → PWM | 电流PI |
| Measurements | 100us(快速) | 采样 $ i_{abc}, \omega, \theta, V_{dc} $ | 信号采集 |
| PWM Generator | 50us(触发) | 三相两电平PWM生成 | SPWM/SVPWM调制算法 |
任务调度模块Task Scheduler为其他模块提供循环周期调用入口,调用周期分别是100us、100us、1ms.
任务调度模块 Task Scheduler

Simulink每50us执行连接到 Function-Call Generator模块的Stateflow图,然后由Stateflow图 Task Scheduler 调制出3个任务调度子入口:Task100us_1,Task100us_2,Task1ms_1,分别提供100us、100us、1ms周期调用.

Stateflow图Task Scheduler实现:

可以看到实现原理很简单,就是通过一个计数器cnt求余来实现.
右键stateflow图> 属性,建议将动作语言修改为C,启用时状态为重置. 如果动作语言不设置为C,那么图中可能无法使用C风格代码,生成MCU C代码需要转换,可能产生兼容性问题.

Outer Loop Control模块
外环控制模块,实现了速度环PI调节,输入目前转速RPMReq、实际转速we、母线电压Vdc,输出dq轴电流参考idq_ref(电流环的目标值)、饱和转矩参考Tq_ref(经电压/电流限幅后的实际可达转矩)、转矩限幅Tq_Lim(当前工况下的最大允许转矩).

Task1ms模块
Task1ms通过Trigger Port(触发端口)实现,用于创建函数调用子系统或触发子系统,实现多速率/事件驱动的任务调度. 需要放在子系统边界,接收Task Scheduler模块产生的触发信号Task1ms_1.

为什么触发器类型要设置为 函数调用?
因为 函数调用 由软件调度器决定何时执行,可以灵活控制任务顺序和优先级,适合周期性多任务(如1ms转速环、100us电流环).
而 边沿触发 由硬件事件决定何时执行,与物理信号同步,适合硬件同步采样(如PWM中间点触发ADC).
显然,由Task Scheduler决定何时调用,更适合用 函数调用方式.
Velocity Controller模块
该模块用Velocity Controller模型实现速度PI控制器. 并不之间生成dq轴电流参考(目标值),而是先生成未饱和转矩参考TqRefUnsat,交给下游的PMSM Current Reference Generator来实现生成dq轴电流参考.

- 控制类型:选择P-PI控制.
PI控制和P-PI控制区别:
1)PI控制
速度误差 $ e_\omega = \omega_{ref} - \omega $,输出转矩指令:
特点是:
- 只有一组比例 $ K_{p-\omega} $,积分 $ K_{i-\omega} $;
- 全程 $ P+I $ 同时作用,积分持续累加误差,消除稳态转速静差
适用于 伺服、机器人、高速启停电机.
2)P-PI控制
分2个阶段:大误差区间(启动 / 转速阶跃突变):仅 P 控制器工作;小误差区间(转速接近给定、稳态阶段:切换 PI 控制器).
(1)大误差区间
用独立参数 $ K_{p-\omega} $(参数界面“P 控制器比例增益”),无积分项:
纯 P 调节,响应极快,不会积分累积,抑制启动超调、避免积分饱和.
(2)小误差区间
误差缩小到阈值后,自动切入完整 PI,使用另一组 $ K_{p-\omega} $(控制器比例增益)+ $ K_{i-\omega} $ 积分项:
依靠积分消除稳态转速静差,保证稳态精度.
注意:该阈值在模块内部封装好了,硬编码值为0.01(归一化标幺误差).
适用于 风机、泵类平稳调速.
- 积分抗饱和增益(Anti-Windup Gain)是防止PID积分器饱和的关键参数,用于限制控制器输出值远超正常范围.
数学原理:
标准PI(无抗饱和):
带抗饱和的PI:
其中,\(K_{aw}\)抗饱和增益,积分修正的"强度系数",界面中设置为100;u_calc计算输出(u_calc = Kp·e + Ki·∫e),PI控制器未限幅的原始输出;u_sat饱和输出,经限幅后的实际输出
u_calc = Kp·e + Ki·∫e (控制器算出来的值,可能很大)
│
▼
┌─────────┐
│ 限幅环节 │ ──→ u_sat = sat(u_calc, -TqLim, +TqLim) (实际能给出的值)
│ ±TqLim │
└─────────┘
│
└── 差值 = u_calc - u_sat = "被限幅剪掉的部分"
│
▼
积分更新 Ki·∫e: integral += Ki·e·Ts - Kaw·(u_calc - u_sat)·Ts
↑
└── 这里 Kaw = 100
其中,TqLim 是 PMSM Current Reference Generator模块基于当前电机运行状态的物理约束,实时计算得到.
- 采样时间,离散化采样时间
采样时间-1,代表继承自外部模块,决定了模块执行频率(PI算法执行频率);
离散化采样时间,固定值Tso,决定算法内部计算步长\(\Delta T\)(积分/微分用).
- 输入端口
| 端口 | 名称 | 含义 | 类型 |
|---|---|---|---|
| wRef | 转速参考 | 目标转速设定值(rad/s) | 标量信号 |
| wMechanical | 机械转速 | 实际电机转速反馈(来自编码器/观测器) | 标量信号 |
| TqRefSat | 转矩限幅 | 最大允许转矩(饱和限幅值) TqRefStat与TqLim关系: TqRefStat = stat(TqRef, -TqLim, +TqLim) |
标量信号 |
| Reset | 复位 | 积分器清零/控制器复位信号. 0表示正常工作;1表示复位; |
布尔/触发 |
输出端口
| 端口 | 名称 | 含义 | 类型 |
|---|---|---|---|
| TqRefUnsat | 未限幅转矩参考 | PI控制器输出的原始转矩指令(未饱和) | 标量信号 |
PMSM Current Reference Generator模块
PMSM Current Reference Generator模块是 FOC 系统中连接转速环与电流环的核心桥梁,负责将"转矩需求"转换为"最优电流指令".
为什么说是 最优电流指令?
因为"最优"强调了效率最大化的设计目标.
1)同一转矩,多种电流组合;
对于IPMSM,转矩方程:
给定 $ T_e = 10 , \text{N·m} $,满足该方程的 $ (i_d, i_q) $ 有无数组:
| \(i_d\) (A) | \(i_q\) (A) | 电流幅值 \(\sqrt{i_d^2 + i_q^2}\) | 效率 |
|---|---|---|---|
| 0 | 5.0 | 5.0 | 一般 |
| -2.0 | 4.2 | 4.7 | 较好 |
| -3.5 | 3.8 | 5.2 | 较差 |
| -2.5 | 4.0 | 4.6 | 最优 (MTPA) |
2)如果没有选择“最优”,比如简单固定\(i_d^*=0\)(只控制\(i_q\))时,那么电流幅值更大,从而线损\(I^2R\)更大,效率低发热更严重;同时,同样硬件输出更小力矩.
何为最优电流?
所谓“最优”,指经过MTPA(Maximum Torque Per Ampere,最大转矩电流比)优化后的最小电流组合.
给定转矩 $ T_e $,求使电流幅值最小的 $ (i_d, i_q) $:
满足约束:
参数设置:

母线电压Vnom=325V、最大功率Pmax=35kW,最大转矩Tmax=205N*m.
- 端口
输入端口
| 端口 | 名称 | 含义 | 来源 |
|---|---|---|---|
| TqRef | 转矩参考 | 转速环输出的目标转矩 | Velocity Controller |
| wMechanical | 机械转速 | 当前电机转速(用于弱磁判断) | 编码器/观测器 |
| Vdc | 直流母线电压 | 逆变器输入电压(用于电压限幅) | 母线电压采样 |
输出端口
| 端口 | 名称 | 含义 | 去向 |
|---|---|---|---|
| idqRef | dq电流参考 | 最优 \([i_d^*, i_q^*]^T\) 矢量 | Current Control(电流环) |
| TqRefSat | 饱和转矩参考 | 经限幅后的实际可达转矩 | 反馈/监控 |
| TqLim | 转矩限幅 | 当前工况下的最大允许转矩 | Velocity Controller(外环限幅) |
Current Control模块

主要由一个Park Transform(包括Clarke 变换、Park变换)模型、PMSM Current Controller with Pre-Control(PI PMSM电流控制(带前馈补偿))模型组成.
PMSM Current Controller with Pre-Control模块
该模块实现:根据当前dq轴电流参考,实测的dq轴电流(Clarke、Park变换得到)、电角速度、母线电压,通过PI电流控制,输出的dq轴电压参考.
- 前馈补偿/控制(Pre-Control)
标准PI电流控制(纯PI):
带前馈的PI电流控制(PI + 前馈控制):
前馈补偿项含义:
| 前馈项 | 物理意义 | 作用 |
|---|---|---|
| \(-\omega_e L_q i_q\) | d轴交叉耦合电压 | 补偿q轴电流对d轴的反电动势 |
| \(\omega_e L_d i_d\) | q轴交叉耦合电压 | 补偿d轴电流对q轴的反电动势 |
| \(\omega_e \psi_f\) | q轴反电动势 | 补偿永磁体旋转产生的反电势 |
为什么会有前馈补偿?前馈补偿项来自哪里?
补偿项来自PMSM的标准定子电压方程(dq旋转坐标系,参见MBD笔记:三相PMSM数学模型(一)的同步旋转坐标系下的数学建模 小节,式(27)):
其中,\(R_si_d,R_si_q\) 定子电阻d、q轴压降,\(L_d \dfrac{d i_d}{d t}\) 电感动态压降,\(-\omega_e L_q i_q\) 为d轴交叉耦合,\(\omega_e L_d i_d\)为q轴交叉耦合,\(\omega_e \psi_f\) 为q轴反电动势.
为什么需要前馈补偿?
主要为了及时消除交叉耦合干扰、反电动势干扰. 我们对比无前馈补偿、有前馈补偿的PI控制:
| 无前馈补偿(纯PI) | 有前馈补偿(PI + 前馈) |
|---|---|
| 交叉耦合和反电动势作为 扰动 由PI慢慢消除 | 前馈直接抵消已知扰动 |
| 动态响应慢,电流跟踪有滞后 | 动态响应快,电流跟踪更准 |
| 高速时PI带宽不足,电流畸变 | 高速仍能保持良好跟踪 |
| 需要更高PI增益(易振荡) | 可用较低PI增益,更稳定 |
- 端口
输入端口
| 端口 | 名称 | 含义 | 来源 |
|---|---|---|---|
| idqRef | dq电流参考 | 电流环目标值 \([i_d^*, i_q^*]^T\) | PMSM Current Reference Generator |
| idq | dq电流反馈 | 实际测量电流 \([i_d, i_q]^T\) | Park Transform(电流采样变换后) |
| wElectrical | 电角速度 | \(\omega_e = p \cdot \omega_{mech}\),用于前馈计算 | 编码器/观测器 |
| VphMax | 最大相电压 | 当前允许的最大相电压幅值(用于输出限幅) | \(V_{dc}/\sqrt{3}\) 或 SVPWM调制范围 |
| Reset | 复位 | 积分器清零信号 1表示复位;0表示正常工作 |
外部控制/故障保护 |
输出端口
| 端口 | 名称 | 含义 | 去向 |
|---|---|---|---|
| vdqRef | dq电压参考 | 控制器输出的 \([V_d^*, V_q^*]^T\) | Inverse Park Transform → Inverser |
idq输入信号变换

我们用电流传感器测得三相电流,w,a模块的Motion Sensor传感器测得转速、转子位置(角度),如何得到dq轴实际电流?
这就需要用的Clarke变换、Park变换. 这里的 Park Transform实际执行了这2个变换.
为什么dq0之后要接一个Selector?
因为输出的 dq0实际上是3个信号:\(dq_0=[i_d,i_q,i_0]^{T}\),而要求的输入\(idq = [i_d,i_q]^{T}\). 因此,添加一个Selector只取前面2个信号.

调制SPWM/SVPWM模块

该模块接收三相电压参考和母线电压,生成6路互补PWM信号(3相×上下桥臂),驱动两电平三相逆变器.

PWM模式选择 CPWM. CPWM和DPWM区别:
CPWM = 三相始终开关,纹波小、噪声均匀,通用;
DPWM = 每60°钳位一相,开关损耗降低1/3,适合高速高效率应用.
CPWM三相PWM波形:
┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
A: ─┘ └─┘ └─┘ └─┘ └─┘────┘ └─┘ └─┘ └─┘
┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
B: ─┘ └─┘ └─┘ └─┘ └─┘────┘ └─┘ └─┘ └─┘
┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
C: ─┘ └─┘ └─┘ └─┘ └─┘────┘ └─┘ └─┘ └─┘
↑ 三相始终在开开关关
DPWM三相PWM波形:
┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
A: ─┘ └─┘ └─┘ └─┘ └─┘────┘ └─┘ └─┘ └─┘
┌───────┐ ┌───────┐
B: ─┘ └───────┘ └──────────── ← 钳位到高/低电平,60°不开关
┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
C: ─┘ └─┘ └─┘ └─┘ └─┘────┘ └─┘ └─┘ └─┘
↑ B相在60°区间内保持常数(钳位)
连续PWM选择SPWM,简单直观,后续可以修改成SVPWM. SPWM和SVPWM区别:
SPWM = 纯正弦调制,简单直观,电压利用率86.6%;
SVPWM = 注入零序三次谐波,电压利用率100%,等效提升15.5%输出能力,是现代电机控制主流选择
详见MBD笔记:SVPWM技术(二),MBD笔记:SPWM技术(三)
开关频率(载波频率)为fsw=10kHz,采样时间Ts=5e-6s=5μs,即采样频率200kHz.
注意:这里的采样频率用于PWM内部比较器,用于生成10kHz PWM载波.
如下图,PWM输出信号为什么要连接一个Rate Transition模型?

Rate Transition是用来处理不同速率和任务之间的数据完整性. PWM Generator执行周期是模块的执行周期Task100us_2(100μs),而输出的S信号会接到Gate Driver模块(电气模块),进而驱动Inverter. 显然,电气模块的速率会更快,因此数据的读取是从 慢→快 (模块显示NoOp).
Measurements模块
这部分主要负责处理测量数据,主要包括:三相电流检测值处理、机械角速度检测值处理、机械角度检测值处理、母线电压检测值处理. 当然该模块并不负责数据采集,因为数据采集由传感器模块负载.
传感器采集的数据,往往不能直接使用,因为PMSM存在极对数,我们测得机械角度/机械角速度,而程序通常需要电角度/电角速度;母线电压可能存在干扰,抖动,因此需要滤波处理.

如下面的模型,几个信号的处理,很简单:

有3点需要提:
1)从机械角度(累积值)转换成电角度时,需要将电角度限制在 [0,2π) 范围内,防止角度无限累积导致的问题.
2)母线电压滤波


注:参数(num, den)的定义参见下文.
使用双线性变换(传递函数\(\frac{Y(Z)}{U(Z)}\))实现一阶低通数字滤波器(平滑滤波),Tf≈0.99s,接近 1 秒超大惯性,截止频率极低(≈0.16Hz),只保留母线超慢变化,完全滤除开关纹波、负载瞬态波动
实现一阶低通滤波的传递函数:
对应时域原函数:
为什么使用双线性变换,而不用经典的后向欧拉方法对母线电压滤波?
后向欧拉时域原函数:\(y[k]=α*y[k-1]+(1-α)u[k]\)
这是由于 母线电压滤波的特殊需求要求决定的:
母线电压 Vdc 特点:
- 直流分量: 缓慢变化(电池放电、负载变化)
- 开关纹波: 10kHz 高频
- 负载瞬态: 中频波动
- 目标: 只保留超慢变化
滤波器要求:
- 截止频率极低: ~0.16Hz
- 完全滤除开关纹波
- 相位延迟不重要(Vdc用于限幅,非快速控制)
双线性变换:双边平均 u[k]+u[k−1] 相当于梯形积分,更平滑,比后向欧拉更精确匹配连续系统频率响应,对直流增益无误差,更适合需要精确低频特性的母线电压滤波.
Vdc Filter的参数可视化输入,我们是通过封装编辑器实现的.
Vdc Filter参数设置:

Vdc Filter封装编辑器:

定义2个参数(num, den),根据用户输入数据自动计算. (num, den)会在模块内部计算传递函数时用到.

3)PwmEnable 实际上是一个欠压保护机制

通过Relay模型实现:
当电压 < 0.5* VDC_VECT(1) (137.5V)时,PwmEnable信号为0,这会导致PWM Generator输入的三相电流iabc=0,会停止输出PWM波形,电机会停止旋转;
只有当电压上升恢复至VDC_VECT(1)(275V)时,PwmEnable信号恢复为0,会恢复对PWM Generator的iabc信号输入.
注意:VDC_VECT是IPMSM35kWCurrentReferences.mat导入的一个数组(由IPMSMVelocityControlData.m触发加载),内容如下. VDC_VECT(1) 代表第1个元素275.

仿真结果
仿真结果,主要通过Scopes模块来观察.

该模块监测各重要信号波形,便于开发人员排查问题,对仿真程序运行没有实质影响.
各个Scope仿真波形如下:
RPM Scope:

黄:rpm_ref (转速参考);蓝:rpm(实测转速)
TQ Scope:

黄:Tq_ref(转矩参考);蓝:Tq_meas(实测转矩);红:Tq_lim(正向转矩限幅);绿:-Tq_lim(反向转矩限幅)
IABC Scope:

黄:a相电流(测量值);蓝:b相电流(测量值);红:c相电流(测量值)
Vdc Scope:
由于母线电压可能不稳定,因此添加一个Rate Transition模块(对应传递函数\(1/z\)),时域上延迟1个周期显示Vdc_sw(采集并滤波后的Vdc)

黄:Vdc_sw(软件处理后的母线电压)
THETA Scope:
转子位置(电角度,0~2π rad)

黄:theta(转子位置,相对于a轴的电角度)
VDQ Scope:
PI+前馈补偿 输出的d、q轴电压

黄:d轴电压;蓝:q轴电压
PWMENABLE Scope:
由Vdc检测的欠压保护机制,输出的PwmEnable信号.

黄:PwmEnable(PWM使能信号)
ID Scope:
d轴电压参考,PI+前馈补偿 的输入d轴电压信号(Park变换后的输出)

黄:idq_ref(1)(d轴电压参考);蓝:idq(1) d轴电压信号
IQ Scope:
q轴电压参考,PI+前馈补偿 的输入q轴电压信号(Park变换后的输出)

黄:idq_ref(2)(q轴电压参考);蓝:idq(2) q轴电压信号
调用后处理脚本
例程还有一个后处理脚本IPMSMVelocityControlPlotMotorSpeed.m,用来绘制电机转速曲线、三相电流曲线. 如果需要显示,则可以采用下面2个方法(可选).
运行方法:
- 方法 1:仿真后手动matlab命令运行
sim('IPMSMVelocityControl');
IPMSMVelocityControlPlotMotorSpeed;
- 方法2:
模型属性的StopFcn回调中添加IPMSMVelocityControlPlotMotorSpeed;代表行,如下图.

绘制的电机转速曲线、三相电流曲线:

可以看到,电机实际转速曲线跟目标转速(转速参考)曲线大致相同;
三相电流并不是纯正的正弦波形,由于是PWM逆变器输出方波调制而成,经电机电感滤波后仍有开关纹波;在启动、加速过程中,电流幅值变换也不是正弦波.

浙公网安备 33010602011771号