做电机控制的这些年,我最深的体会是:永磁同步电机(PMSM)矢量控制,光啃书本是远远不够的。课本上推导坐标变换、画框图,一套流程下来脑子里全是向量和矩阵,真到了动手调模型的时候,照样懵。所以现在很多做驱动开发的朋友,第一步都是用 Simulink 把矢量控制仿真跑通,再回头理解原理。这个“基于永磁同步电机矢量控制Simulink仿真”的项目,就是干这个用的。它能帮你把 FOC(Field Oriented Control,磁场定向控制)的完整流程——坐标变换、双闭环 PI 调节、SVPWM 调制、逆变器驱动——在电脑上完整地跑一遍,波形看得见、参数调得动、逻辑理得清。适合刚接触电机控制的学生、刚转行做电机驱动的工程师,以及想快速验证算法想法的在职开发。
这篇文章我会把这套仿真模型的搭建思路、核心模块、参数整定、典型问题和调试手段全部摊开讲。内容偏实操,原理部分也不会跳过,因为不理解原理,调参就是瞎调。
1. 项目整体设计:永磁同步电机矢量控制到底在控制什么
1.1 为什么选择矢量控制而不是别的方案
PMSM 本身是一个非线性、强耦合的控制对象。三相定子电流在电机内部产生的磁场,和转子永磁体磁场之间互相影响,如果我们直接在三相静止坐标系里控制电压和电流,会发现变量之间彼此纠缠——这一相的电感变化会牵动另一相的电流,控制器的设计难度会直线上升。早期有人用恒压频比(V/F)控制,简单是简单,但动态响应慢、转矩控制精度差,稍微带点负载就掉转速。
矢量控制的核心思路,用一句话说,就是“把交流电机当成直流电机来控”。它不是真的物理上去改变电机结构,而是通过数学变换,把三相静止坐标系下的电流,映射到一个和转子磁极同步旋转的两相坐标系(dq 坐标系)里去。在这个旋转坐标系里,电流被拆成两个正交分量:一个是励磁分量 id,一个是转矩分量 iq。两者看起来就像是直流电机的励磁电流和电枢电流,互不干扰、单独可控。我们要做到的,就是让 id 保持为 0(或是按最大转矩电流比策略给一个负值),然后用 iq 去线性控制电机的电磁转矩。
这样做带来的好处是很实在的:转矩响应快、调速范围宽、低速性能好,而且稳态精度高。现代伺服驱动器里,FOC 基本是标配。相比直接转矩控制(DTC)那种查表式、转矩脉动大的控制方式,FOC 在低速和伺服场景下优势明显;相比 V/F 控制,FOC 的带载能力和动态响应完全不在一个量级。所以选 FOC 做仿真和研究,是合理且通用的选择。
1.2 双闭环架构的来龙去脉
FOC 的工程实现,普遍采用电流内环和速度外环的双闭环结构。为什么不只用一个速度环?这个要从控制带宽的基本逻辑说起。
速度是电流的积分效果,如果想要速度响应快,必须先把电流控制好。电流环的响应带宽远高于速度环,把电流环放在里面,外环速度环只要给出“我需要多大转矩”的指令,也就是 iq 的参考值,内环电流环就能快速跟踪,从而让实际转矩跟上指令。反过来,如果只有一个速度环直接生成电压指令,中间缺少对电流的快速校正机制,一旦负载突变,电流会剧烈波动,速度也会跟着抖,动态性能就很差。
在 Simulink 模型里,这条链路是清晰可见的:
- 转速给定(Speed Ref)进入速度环 PI 调节器,输出 iq_ref;
- id_ref 通常设 0(表贴式电机常用 id=0 控制);
- 两个电流环 PI 调节器分别处理 d 轴和 q 轴的电流误差,输出 Ud 和 Uq;
- Ud、Uq 经过反 Park 变换,得到两相静止坐标系下的 Uα、Uβ;
- Uα、Uβ 送入 SVPWM 调制模块,生成逆变器开关信号;
- 三相逆变器把直流母线电压转换成三相交流电压,驱动 PMSM;
- 电机反馈三相电流,经 Clarke 变换和 Park 变换,得到实际 id、iq,送进电流环,形成闭环。
这个架构里,每一层干每一层的活。速度环管“跑多快”,电流环管“怎么用劲”,SVPWM 管“怎么把指令变成实际电压”。分层清楚,调参也好办。
2. 核心模块拆解:坐标变换、SVPWM 与 PI 调节器
2.1 Clarke 变换和 Park 变换:把坐标系转明白
Clarke 变换,是把三相静止坐标 abc 变成两相静止坐标 αβ。公式不复杂,关键是记住等幅值变换的系数:
iα = ia - 0.5 * ib - 0.5 * ic iβ = (√3/2) * (ib - ic)这里的系数取 2/3 还是 1,取决于你要等幅值还是等功率变换。矢量控制里通常用等幅值变换,因为这样电流环 PI 的输出限幅值可以直接按照电机额定电压电流去设定,不用来回换算。Simulink 里自带的 Clarke 变换模块默认也是等幅值系数,如果你手写 S 函数或者用公式搭模块,要留意这一点,不然电流环反馈会整体偏小,控制效果直接不对。
Park 变换,是把 αβ 坐标转到 dq 旋转坐标。它需要一个转子位置角 θe,也就是电角度。公式是:
id = iα * cos(θe) + iβ * sin(θe) iq = -iα * sin(θe) + iβ * cos(θe)反 Park 变换就是把 Ud、Uq 变成 Uα、Uβ:
Uα = Ud * cos(θe) - Uq * sin(θe) Uβ = Ud * sin(θe) + Uq * cos(θe)很多新手第一次搭模型,翻车就翻在反馈电流的 Park 变换和反 Park 变换用的角度不一致。必须牢记:反馈回路上用的 θe,和反 Park 变换用的 θe,必须是同一个来源、同一时刻的值。最稳妥的办法是在模型里直接把电机模块输出的转子角 θe(电角度)引一条信号线,同时送给反馈 Park 变换和反 Park 变换模块,保证角度同步。如果角度差了 90 度电角度,最典型的现象就是电流环完全失控,id 和 iq 波形全是乱的,转速根本拉不上去。
2.2 SVPWM:电压空间矢量调制到底在算什么
SVPWM 全称 Space Vector Pulse Width Modulation,中文叫电压空间矢量调制。它的作用,是把我们想要的 Uα、Uβ,变成三相逆变桥六个开关管具体的开通关断时序。
为什么用 SVPWM 而不是 SPWM?因为 SVPWM 对直流母线电压的利用率更高,最高可达逆变器输出相电压基波幅值为 Udc/√3,比 SPWM 提升了约 15%;而且它产生的定子磁链轨迹更接近圆形,谐波含量更低。简单来说,同样的母线电压,用 SVPWM 电机能跑得更快、更稳。
SVPWM 的实现分四步:
- 判断扇区:根据 Uα、Uβ 的值,确定参考电压矢量落在六个扇区中的哪一个。工程上不需要真的算角度,判断 Uβ、√3Uα - Uβ、-√3Uα - Uβ 这三个量的正负组合就能定扇区。
- 计算相邻矢量作用时间:在第一扇区里,相邻的两个非零矢量是 V1(100)和 V2(110),它们的作用时间 T1 和 T2 由 Uα、Uβ 和直流母线电压 Udc 计算得出。
- 分配零矢量时间:一个 PWM 周期内,非零矢量作用时间之和可能不足一个周期,剩余时间由零矢量 V0(000)和 V7(111)填补。七段式 SVPWM 把零矢量时间平均分配到周期头和周期尾,好处是每个开关周期内只有一个开关管切换,开关损耗小,谐波也小。
- 输出占空比:把切换时间转换成三相比较寄存器的值,送给 PWM 生成器。
在 Simulink 里,你可以直接写一个 MATLAB Function 模块来实现 SVPWM 的这四个步骤,也可以用 Simscape Electrical 里的现成逆变器模块搭配 PWM 发生器。前者更能帮助你理解原理,后者更快落地。我的建议是:学习阶段手写 SVPWM,工程阶段用自带模块。
手写 SVPWM 的 MATLAB Function 核心逻辑类似这样:
function [Tcmp1, Tcmp2, Tcmp3] = fcn(Ualpha, Ubeta, Udc, Ts) % 扇区判断 A = Ubeta; B = (sqrt(3) * Ualpha - Ubeta) / 2; C = (-sqrt(3) * Ualpha - Ubeta) / 2; sector = 0; if A > 0, sector = sector + 1; end if B > 0, sector = sector + 2; end if C > 0, sector = sector + 4; end % 根据扇区查表计算 T1, T2 % ... 中间是一张扇区对应的矢量作用时间查找表 % 计算切换时间 Ta, Tb, Tc % 输出比较值 Tcmp1, Tcmp2, Tcmp3 end写 SVPWM 函数时最常踩的坑,是扇区判断和 T1、T2 计算的查表对应关系搞错。这一点没有捷径,拿一张扇区分布图,挨个矢量画一遍,确认每个扇区用哪两个相邻矢量,才能保证输出波形正确。
2.3 PI 调节器:控制系统的“大脑”
矢量控制里最核心的调节器就是 PI。电流环和速度环各有两个 PI(直轴和交轴电流环各一个,速度环一个)或者按模块共用结构。
为什么用 PI 而不是 P 或者 PID?因为电流环和速度环都是典型的一阶或带积分特性对象,PI 控制器足以实现零稳态误差;微分项 D 在这种低频工况下容易放大噪声,实际电机控制里很少用,除非是针对特定机械谐振做陷波。
在 Simulink 里,电流环 PI 可以直接用库里的 Discrete PI Controller 模块,也可以自己搭一个:比例项输出 + 积分项输出(用 Discrete-Time Integrator),两者相加后经过限幅模块再输出。注意,积分器必须带限幅,而且限幅值要和输出限幅一致,否则会出现积分饱和:控制器输出已经顶到限幅值,但积分项还在持续累积,等误差方向反转时,积分项要花很长时间才能退出来,表现为转速超调大、调节时间长。这个现象叫 windup,实际项目中几乎每个人都会遇到一次。
电流环 PI 的参数,可以从电机电气时间常数入手估算。电流环被控对象近似为一阶惯性环节,时间常数是 Ls/Rs(Ls 是相电感,Rs 是相电阻)。按照“零极点对消 + 带宽法”,可以设:
- 电流环比例增益 Kp ≈ Ls * ωc
- 电流环积分增益 Ki ≈ Rs * ωc
其中 ωc 是期望的电流环带宽,一般取 500~2000 rad/s。这个估算给出的是初值,后续还要靠仿真微调。速度环的参数也同理,但速度环带宽要远低于电流环,一般取 20~100 rad/s,才能保证内外环时间尺度分离,系统稳定。
3. 基于 Simulink 的仿真模型搭建与初始化脚本
3.1 模型整体架构与模块选型
这一节直接进实操。先明确一下总体结构,从上到下依次是:
Speed Ref -> 速度环PI -> iq_ref id_ref = 0 iq_ref + id_ref -> 电流环PI -> Ud、Uq -> 反Park -> Uα、Uβ Uα、Uβ -> SVPWM -> 逆变器 -> PMSM PMSM 反馈三相电流 ia/ib/ic -> Clarke -> 静止αβ电流 -> Park -> dq电流 PMSM 反馈机械角速度 wr -> 速度采样 -> 速度环反馈模块的选型上,有两种常见路线。
一种是用 Simscape Electrical 里的模块库。电机用 Permanent Magnet Synchronous Motor 模块,逆变器用 Three-Phase Inverter 加 Universal Bridge,PWM 信号用自带 PWM Generator 模块产生。这种路线的好处是模型搭起来快,但缺点是逆变器模块内部的细节被封装了,我们看不到开关管的触发逻辑,对理解 SVPWM 没有太大帮助。
另一种是纯数学模块搭建:电机部分用数学方程建模(在 Simulink 里用积分器、乘法器搭出 PMSM 的 dq 数学模型),逆变器用三相桥臂逻辑建模,SVPWM 自己写 MATLAB Function。这种路线工作量大,但每一步都是透明的,非常适合教学和论文仿真。
我个人推荐学习阶段抄近路:电机用 Simscape 的标准模块,SVPWM 自己写。这样既省去了自己搭电机模型的高强度数学工作,又能把 FOC 的核心调制部分看清楚。等以后再需要做硬件在环或者实验对比时,再考虑全自定义建模。
3.2 仿真参数的确定与初始化脚本
仿真的第一步,是把电机参数和控制器参数提前在脚本里初始化好。这样模型里所有模块的参数都可以直接引用工作区变量,改参数时只改脚本,不用一个个翻模块对话框,效率高得多。
下面给一个常见的 PMSM 参数初始化脚本示例,参数值对应一台典型的中小功率伺服电机:
%% PMSM 参数 Rs = 0.958; % 定子相电阻,欧姆 Ld = 0.00525; % d轴电感,亨 Lq = 0.012; % q轴电感,亨 flux = 0.1827; % 永磁体磁链,韦伯 J = 0.000632; % 转动惯量,kg*m^2 B = 0.0003035; % 阻尼系数,N*m*s P = 4; % 极对数 %% 直流母线电压与调制参数 Udc = 311; % 直流母线电压,对应220V交流整流 Ts = 1e-5; % 电流环采样周期,100kHz Tsw = 1e-4; % 开关周期,10kHz %% 速度环与电流环参考带宽 wc = 1000; % 电流环带宽,rad/s ws = 60; % 速度环带宽,rad/s %% PI参数初值(由带宽法估算) Kp_i = Ls * wc; % 电流环比例系数 Ki_i = Rs * wc; % 电流环积分系数 Kp_s = J * ws; % 速度环比例系数粗估 Ki_s = Kp_s * ws / 5; % 速度环积分系数粗估计算电流环带宽用的 Ls,如果你的电机模块是 Ld 和 Lq 区分了的,那就用 q 轴电感 Lq,因为 iq 才是转矩电流。表贴式电机 Ld ≈ Lq,直接用 Ld 也差不多;内置式电机 Ld 和 Lq 差不少,别搞混。
在实际参数设置中,还有几个容易被忽略的细节。第一个是电机模块里的初始转子角度,Simscape 的 PMSM 模块通常可以设置初始机械角度或电角度,这个值必须和反馈 Park 变换期望的角度对应。如果你没有刻意处理,默认初始角不一定和模型里的角度检测信号对齐,导致启动瞬间电流环就出错。我习惯在初始化脚本里直接把电机的初始角度设成 0 度,并且确保反馈角度信号从模块输出端子拿,这样角度同步问题就能避免。
第二个是负载转矩。刚开始调试时,先把负载转矩设 0,甚至是恒定的很小值,先让电机空载启动,把速度环和电流环基本调通,再考虑加阶跃负载测试抗扰动能力。一上来就带额定负载,模型容易发散,排查问题时变量太多。
第三个是步长。Simulink 默认的变步长求解器在纯离散控制系统里不一定合适。带 SVPWM 的模型开关频率高达 10kHz,为了让 PWM 脉冲足够平滑,我建议直接用固定步长,步长设 1e-5 甚至 5e-6 秒,求解器选 ode23t 或 ode4。别嫌仿真时间长,电机电气时间常数本身是毫秒级,步长太大直接失真。
3.3 仿真运行与关键波形分析
模型搭好后,运行仿真前建议把示波器加在几个关键位置:
- 转速波形:看启动过程有没有超调,稳态误差多少,负载突变时转速跌落多少。
- iq 和 id 波形:iq 应该紧跟 iq_ref,id 应该稳定在 0 附近,波动允许但要有界。
- 三相电流波形:在高速段应该是比较光滑的正弦,低频毛刺如果很大,要考虑开关频率和死区设置。
- 电磁转矩 Te:看是否跟 iq 成正比,脉动量在合理范围内。
- 反电动势和转子位置角:用于观察角度信号是否正常。
我跑的第一次模型,转速从 0 加速到额定 2000rpm,大概在 0.1 秒时间范围内。如果 PI 参数偏保守,看起来就是一条缓慢上升的斜坡;如果 PI 参数过大,转速会出现明显振荡,甚至发散。调参的目标是兼顾快速性和小超调,实际经验是:超调控制在 5% 以内,调节时间控制在 0.05~0.1s 就够用。
4. 双闭环 PI 参数整定流程与调试实录
4.1 参数整定为什么必须先内环后外环
双闭环系统在调参时有一个铁律:先调内环,再调外环。原因前面提过,电流环带宽必须高于速度环,如果内外环带宽接近或倒挂,两个环路会互相干扰,系统可能出现低频振荡,那时候你根本分不清到底是电流环还是速度环的问题。
调内环的具体方法是:把速度环断开,给 iq_ref 一个固定值(比如 5A),或者用速度环开环直接给一个阶跃参考。观察实际 iq 对参考值的跟踪情况。先把 Kp 从小往大加,直到 iq 响应变快、没有明显超调;再加入 Ki,消除稳态误差。这条调法跟调普通一阶系统是一样的。
我实测下来,电流环比例系数按带宽法估算后,往往可以直接用,Ki 稍微小于估算值更好。因为仿真模型里的逆变器有延迟、采样也有延迟,过高的 Ki 会让电流环变得“过于积极”,低频段出现谐振峰。
速度环调试的方法是:切到双闭环模式,速度环先给很小的 Kp(比如 0.1 倍估算值),Ki 设小值甚至 0,让速度响应慢一点,看整体能不能跑通。然后逐步增加 Kp,让转速响应变快,但注意观察超调。如果超调过大,就先保持 Kp,增加 Ki 的权重,靠积分消除稳态误差,同时把速度环输出限幅(也就是 iq_ref 最大值)限制在电机安全范围之内。
4.2 一组可复现的 PI 参数与现象对照
下面给出我实际调试某一台仿真模型时的前后对照数据,供参考。这里的参数对应的是上面初始化脚本里那组电机参数,转速环带宽调整前设定 30 rad/s,调整后是 60 rad/s。
| 参数 | 初估值 | 调整后值 | 主要现象 |
|---|---|---|---|
| 电流环 Kp | 10.5 | 8.5 | 初值下 iq 噪声偏大,调小后电流环更平滑 |
| 电流环 Ki | 958 | 700 | 初值下 iq 出现轻微过冲,调小后跟踪更稳定 |
| 速度环 Kp | 0.038 | 0.12 | 初值下转速响应过慢,调大后启动加快 |
| 速度环 Ki | 0.456 | 1.8 | 初值下稳态有静差,调大后静差消除 |
| 速度环限幅 | ±15A | ±12A | 防止启动瞬间 iq 冲击过大 |
这个表的核心价值在于:初估值是理论起点,但实际调试必须根据波形反馈调整。理论给方向,波形给答案。
4.3 抗饱和限幅:最容易被忽视的环节
很多人在仿真中碰到“速度环输出很大,但转速就是上不去”或者“转速超调 30%”这类问题,追踪下来,十有八九是限幅问题。
在 FOC 里,速度环输出是 iq_ref,它的物理含义是转矩电流指令。这个值不能随便给,因为它对应电机的发热和驱动器的母流能力。在 Simulink 模型里,如果你直接把速度环输出的限幅设成 ±100,相当于允许电流环全功率输出,电机除了物理极速之外不受控制约束,启动时 iq 会冲到非常高,波形看起来很吓人。反过来,限幅设太小,比如 ±2A,电机的加速能力被锁死,转速永远追不上参考值。
正确做法是把 iq_ref 限幅设为电机额定电流的 1.2~1.5 倍,比如额定 8A 的电机,限幅给 ±10A 或 ±12A。更精细的做法是跟温升模型关联,但仿真阶段不必那么复杂。
与此同时,速度环 PI 的积分器本身也要限幅,而且限幅范围最好和输出限幅一致。积分器饱和意味着控制器不再对误差积分,如果积分器输出超出限幅,表现出来就是响应变迟钝。为了避免这个问题,Simulink 里可以直接用内置 PI 模块的 anti-windup 功能,或者自己在积分器后面加一个 Saturation 模块,并把积分器的 Enable zero cross 关掉。
5. 常见仿真异常现象与排查技巧实录
5.1 仿真发散到 NaN 或 Inf,先查这里
相信每个搭过 PMSM 模型的人都被“NaN 出现在时间 x.x 秒”支配过。仿真发散这件事,原因通常是以下几个:
- 步长过大:SVPWM 和电流环的采样时间如果比系统最小时间常数还大,数值积分就会不稳定。处理办法是减小固定步长,步长至少比开关周期小一个数量级。
- PI 参数过大:尤其是电流环 Kp 太大,导致闭环极点跑到离散稳定域之外。处理办法是回退参数,参考带宽法重新估算。
- 代数环问题:反馈电流经过 Clarke、Park 变换后直接进 PI,PI 输出再控制逆变器,如果中间有直接馈通路径,会形成代数环,导致求解失败。处理办法是在反馈通道加一个 Memory 模块或 Unit Delay 模块,打破代数环。
- 角度跳变:转子位置角度在 ±π 边界跳变时,如果三角函数模块或者 SVPWM 函数没处理好,会出现步进突变,严重时直接发散。处理办法是角度信号用角度累加器模式而不是直接包络模式,或者让角度统一用 rad 的连续值不要 wrap。
排查发散问题,我的习惯是先把速度环开环,给固定的 iq_ref,只运行电流环;电流环稳定后,再接速度环。分段验证是定位问题的核心手段,别想着一次全部打通。
5.2 电流波形毛刺大,问题不一定在电机
三相电流波形出现大量毛刺时,不要第一时间怀疑电机参数,先检查这两处。
第一,SVPWM 输出的开关频率和逆变器死区时间设置。Simscape 的 Universal Bridge 模块里有内部死区设置,默认可能是几微秒。死区时间过大会在电流过零点附近造成明显的电压误差,表现为低频谐波和毛刺。缩小死区或者关闭死区仿真(纯理想仿真),波形立即干净,说明调制环节没问题。
第二,采样频率和 PWM 载波的同步关系。如果电流环采样频率不是开关频率的整数倍,或者采样时刻没有对齐 PWM 中心点,电流采样会叠上开关纹波,波形自然毛刺大。解决办法是让电流环采样周期等于开关周期,并且触发时刻在 PWM 波形的中点附近采样,也就是“居中采样”的思维。
第三,信号线上存在高频噪声耦合,通常跟模型布局有关。信号线走线太长,或者把三相电流总线跟 SVPWM 脉冲线并列走线,仿真图里看不出问题,但数值上确实会串扰。解决办法是给反馈信号加 Rated Power 或 Filter 模块做低通滤波,或者在变换前先做单位归一化处理。
5.3 转速稳态误差与振荡并存,多半是速度环带宽太高
调好电流环之后,速度环出现振荡是常见现象。表现是:转速波形在给定值附近来回震荡,频率不高但幅度不小,常见于负载突变或者给定速度阶跃时。
原因分析:速度环带宽调得太高,超出了电流环闭环带宽的一半左右。外环带宽太接近内环,内外环耦合加剧,整体系统相角裕度下降,表现为低阻尼振荡。这个在我身上发生过不止一次,每次都是因为我想让转速响应更快,盲目加大 Kp,结果整出明显的“爬行”现象。
解决办法不是单纯减小 Kp,而是重新拉开内外环带宽差距。电流环带宽保持在 800 rad/s 以上,速度环带宽控制在电流环带宽的 1/10~1/5 左右,也就是 80~160 rad/s 是合理范围。带宽拉开后,同样的 Kp 值,系统就稳定了。
5.4 启动瞬间 id 剧烈跳变,问题出在角度初始值
有一次跑模型,电机一启动,id 直接从 0 跳到 -20A,iq 基本不正,转速爬不起来。排查了半天,最后发现是 PMSM 模块的初始转子角度没有和我的 Park 变换角度对齐。
PMSM 模块默认的初始转子电角度是有具体数值的(不一定为 0)。而反馈 Park 变换模块的初始角度默认值是 0。两者不一致,相当于我们以为自己在控制转子磁极固定的 d 轴,实际叠加了一个 90 度误差,电流环在启动瞬间就会强拉电流,造成 id 饱和。解决办法是在初始化脚本里把电机的初始角度设置改成 0 度,或者在反馈 Park 变换里把初值改成模块的初始角度。更稳的办法是:从电机模块的输出端口中直接引出转子角 θe 送给 Park 变换,而不是自己另造一个角度信号源。
5.5 独家调试手段:开环先动,闭环稳
最后分享一个我自己一直沿用的调试流程。不要总想着一次性把双闭环都接起来看效果,那样出了问题你根本不知道是谁的问题。我通常按下面的顺序走:
- 纯开环测试:固定 SVPWM 的 Uα、Uβ 输入为一个恒定小矢量(比如幅值 30V 的直流),看逆变器和电机能否正常转。这一步验证的是调制、逆变、电机三个环节的正确性。如果电机不动或者电流乱飞,问题出在逆变器或电机模型。
- 加入电流环:给定一个固定的 iq_ref,id_ref=0,看电流能否稳定跟踪。这一步验证变换和 PI 的方向是否正确。
- 加入速度环:给定一个阶跃速度,逐步调速度环 PI。这一步验证速度环闭环和限幅逻辑。
- 加负载和扰动:在 t=1s 时突加负载,观察转速跌落和恢复时间,验证系统的鲁棒性。
每一步最多跑 0.2~0.5 秒的仿真,步长固定 1e-5,波形观察重点放在跟踪误差和稳态噪声上。分段验证看起来慢,但实际是排查效率最高的方式。相比一次接好然后花一下午找发散原因,分段验证基本能把问题定位到具体模块。
这个项目的后续扩展方向其实也很多:比如把 id=0 控制改成最大转矩电流比(MTPA)控制,或者加入弱磁控制,把母线电压利用到极限;再比如引入滑模观测器,在无位置传感器条件下试一下转子位置估算;还能做硬件在环,把算法部署到 DSP 里驱动真实电机。仿真模型的骨架搭扎实了,后续这些方向都只是往上加模块的问题。