☰
PMSM伺服系统三闭环控制Simulink仿真与优化实战
2026/9/28 7:29:47 网站建设 项目流程

搞运动控制的人,第一次在 Simulink 里搭永磁同步电机(PMSM)伺服系统三闭环模型,多半都会经历同一个场景:模型照着论文搭好了,PI 参数也从别人那儿拿来了,一按运行,转速波形要么飞到天上去,要么像抽风一样来回抖。你调 Kp、调 Ki,调得满头大汗,问题反而越来越多。这种情况我见过太多次了,包括我自己刚入行时也没少踩。后来才慢慢明白,三闭环仿真最核心的并不是某个 PI 参数,而是三个环之间的带宽配合,以及结构设计是否合理。

这篇文章我想把基于 Simulink 的永磁同步电机 PMSM 伺服系统三闭环控制仿真与优化的完整经验整理一遍,涵盖数学模型的选型、Simulink 里的搭建顺序、参数整定的理论依据和实操微调、以及从“能跑通”到“跑得好”的几个关键优化手段。内容比较适合三类人看:正在做伺服控制方向毕设的学生、刚入门的驱动工程师、以及想把现有仿真模型调得更稳更快的技术人员。我会尽量用实际调参和排障的视角来讲,而不是照搬教材公式。

1. 先想清楚:三闭环为什么是“内快外慢”的级联结构

1.1 从运动控制的物理本质看三个环的职责

伺服系统的最终任务是让电机轴的位置精确跟随指令。从物理上看,位置的变化率是速度,速度的变化率是加速度,加速度由电磁转矩决定,而电磁转矩又由电流决定。所以电机本体自带一条天然的积分链:电流 → 转矩 → 加速度 → 速度 → 位置。每经过一级积分,信号的“反应速度”就会慢一截,控制难度也随之变化,必须在不同层级分别设置控制器,这就是三闭环在结构上存在的根本原因。

用一个粗浅的类比:位置指令是“你要去哪儿”,速度指令是“你准备走多快”,电流指令则是“你要用多大劲儿推”。这三件事的时间尺度完全不同。推力的改变几乎可以瞬时发生,速度快慢的调整需要一点时间,而位置变化则是缓慢累积的结果。内环必须比外环快,否则外环输出的指令变化太快,内环根本跟不上去,相位滞后慢慢放大,整个系统就表现为振荡甚至发散。这就是“内快外慢”的物理由来,也是所有三闭环整定方法的起点。

有一点需要特别提醒:三个环并不是三个独立的 PI 控制器简单串起来,它们在频域上是层层嵌套的关系。外环的带宽必须明显低于内环的等效带宽,内环的闭环传递函数在带宽范围内要尽可能接近 1,这样外环设计时才能把内环当成一个“快惯性环节”甚至“比例环节”来处理。如果你一上来就让三个环各自跑得飞快,结果往往是整体稳定性一塌糊涂。

1.2 三个环各自的控制对象与标准结构

在标准的三闭环伺服控制结构中,三个环的工作对象并不一样,这里我整理了一张表:

控制环被控对象输出量反馈量典型带宽范围常见控制器
电流环(内环)定子电气方程(L、R)d/q 轴电压id、iq500~2000 rad/sPI + 解耦前馈
速度环(中间环)电流环闭环 + 机械惯量 J/sq 轴电流给定 iq_ref机械角速度50~300 rad/sPI
位置环(外环)速度环闭环 + 积分 1/s速度给定机械位置角度10~60 rad/sP 或 PD +前馈

信号流向是:位置给定 → 位置环控制器 → 速度给定 → 速度环控制器 → q 轴电流给定 → 电流环控制器 → 逆 Park 变换 → PWM → 逆变器 → PMSM → 传感器反馈。这里每个环节都要限幅,限幅值层层向下传递,不能只做 PI 不加约束。

在不同文献里,带宽比例有说 3 倍的,也有说 5~10 倍的。我的经验是:电流环和速度环的带宽至少拉开 3~5 倍,速度环和位置环也至少拉开 3 倍以上。否则你辛苦调出来的位置环响应曲线,本质上不是位置环的性能,而是内环滞后太多导致的“假超调”。

2. Simulink 建模的地基:PMSM 数学方程与坐标变换选择

2.1 表贴式与内置式电机的数学模型差异

在 dq 旋转坐标系下,PMSM 的电压方程是:

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

电磁转矩方程为:

  • Te = 1.5 * p * [Ψf * iq + (Ld - Lq) * id * iq]

机械运动方程为:

  • J * dωm/dt = Te - TL - B * ωm

其中 ωe 是电角速度,等于极对数 p 乘以机械角速度 ωm。如果电机是表贴式(SPMSM),Ld = Lq,转矩方程会简化为 Te = 1.5 * p * Ψf * iq,这意味着转矩只和 q 轴电流成正比,控制思路非常简单:直轴电流 id 给 0,用 iq 线性控制转矩。这也是大多数教材和入门仿真里采用的模型。

内置式(IPMSM)则不一样,Ld < Lq,转矩方程里多出了磁阻转矩项 (Ld - Lq) * id * iq。这种电机通常要用 MTPA(最大转矩电流比)策略分配 id 和 iq,在高速区还要配合弱磁控制。搭建 Simulink 模型时如果你选错了电机类型,后续的整定结果会差很多。

2.2 坐标变换:Clarke/Park 到底要不要手写

FOC 里最核心的数学操作是 Clarke 变换和 Park 变换。Simulink 库里有现成的变换模块,但我更建议你自己手写一遍,尤其是想深入理解控制原理的人。手写一遍你才会真正记住系数和角度关系。

Clarke 变换(等幅值形式):

  • ialpha = 2/3 * (ia - 0.5ib - 0.5ic)
  • ibeta = 2/3 * (√3/2 * ib - √3/2 * ic)

Park 变换:

  • id = ialpha * cos(θe) + ibeta * sin(θe)
  • iq = -ialpha * sin(θe) + ibeta * cos(θe)

在 Matlab Function 里可以写成下面这样:

function [id, iq] = parkTransform(ia, ib, ic, theta_elec) % Clarke 变换 ialpha = 2/3 * (ia - 0.5*ib - 0.5*ic); ibeta = 2/3 * (sqrt(3)/2 * ib - sqrt(3)/2 * ic); % Park 变换 id = ialpha * cos(theta_elec) + ibeta * sin(theta_elec); iq = -ialpha * sin(theta_elec) + ibeta * cos(theta_elec); end

这中间最容易翻车的是电角度和机械角度的换算。你从编码器或者电机模型拿到的角度,必须先用电角度 = 机械角度 × 极对数 p 换算再进 Park 变换。很多仿真发散其实不是 PI 问题,而是这里漏乘了一个 p。

2.3 仿真模型选型:Simscape PMSM 模块 vs 手写方程

Simulink 里建 PMSM 模型有几条路。如果你用的是 Simscape Electrical 里的 PMSM 模块,好处是模块本身自带电气和机械接口,可以直接接三相桥、接负载,仿真结果比较贴近真实系统。适合关心逆变器特性、PWM 谐波、死区影响这些问题的场景。缺点是可定制性差一点,而且仿真步长如果没设好,很容易出现数值收敛问题。

如果你自己按电压方程搭电机模型,用 S-Function 或者 MATLAB Function 实现,优点是每个中间量都在你手里,方便调试和加故障注入,也方便后面做参数辨识、匝间短路这些深度研究。缺点是建模工作量会大一点,而且逆变器和 PWM 环节也得自己搭或选用平均模型。

我的建议分两种情况:如果目标是研究控制算法本身,不想陷入电机电磁细节,建议直接用 Simscape PMSM 模块,控制侧单独搭;如果目标是做故障仿真、参数辨识、或者想完全掌控每个状态变量,就手写方程。两条路我都走过,对初学者来说,第一条路能让你更快聚焦三闭环本身。

3. 在 Simulink 中搭建三闭环:从电流环、速度环到位置环的递进细节

3.1 电流环搭建:反馈极性与反电动势解耦

电流环是三闭环的地基,也是最容易出错的一环。先看结构:d 轴电流给定在额定转速以下设为 0,q 轴电流给定来自速度环输出;反馈值是 Park 变换后的 id、iq;电流调节器输出 ud_ref 和 uq_ref,再经过逆 Park 变换得到 αβ 轴电压,交给 PWM 调制。

搭电流环时要特别注意反馈极性。如果你在仿真里发现 id 和 iq 越控越大,第一件事就是查反馈符号。这里有个笨但有效的验证方法:给定 iq_ref 为一个小正值,id_ref 为 0,看电机是不是正转、iq 反馈是不是为正;如果反馈是负的,说明 Park 变换的角度符号或者电流采样方向有问题。

另一个重要细节是反电动势交叉耦合。随着转速升高,uq 里会有一项 ωe * (Ld * id + Ψf),ud 里会有一项 -ωe * Lq * iq。如果不加解耦,q 轴电流在高转速下会明显受到反电动势干扰,电流环响应变差。工程上普遍的做法是在 PI 输出后面加前馈补偿:

  • ud_ref = ud_PI - ωe * Lq * iq
  • uq_ref = uq_PI + ωe * (Ld * id + Ψf)

在 Simulink 里实现时,用 Fcn 模块或者 MATLAB Function 把这两项算出来再加到 PI 输出上即可。表贴式电机也可以直接令 Ld = Lq = Ls,公式会简单一些。

3.2 速度环搭建:速度反馈信号从哪里取

速度环的反馈是转子的机械角速度,不是电角速度。如果你在 Simulink 里直接对位置信号做微分去求速度,离散系统中噪声会被放大得很难看,仿真里也容易产生不必要的振荡。正确做法是直接从电机模型的转速输出口取,或从传感器模型的转速信号取。

速度环 PI 的输出是 iq_ref,也就是电流环的给定。这里必须加限幅,限幅值要等于你允许的 q 轴电流最大值,通常是额定电流的 1.5~2 倍。如果这个值给得过大,电流环会长期处于饱和状态,速度环的积分饱和问题也会被放大。

很多初学者容易忽略的一点是:速度环的采样时间往往和电流环不一样。实际 DSP 控制里,电流环 10kHz,速度环可能只有 1kHz。仿真时如果你用统一的定步长,也要注意把速度环放在更慢的任务周期里,不要所有环节挤在一个积分步长里。这个细节不影响初步跑通,但会影响后续代码生成和硬件移植。

3.3 位置环搭建:为什么位置环通常不加积分

位置环在最外层,输出是速度给定。常见控制形式有几种:单纯 P 控制是最常见的;要求高一点会加前馈;少数场合用 PD 或位置差分项。

很多人问为什么位置环不学速度环那样加积分。根本原因在于:位置对象的开环传递函数本身含有一个积分环节(速度积分得到位置)。系统已经是一型系统,对于阶跃位置输入,稳态误差天然为 0。如果在这个基础上再加积分,就变成二型系统,阶跃响应容易产生大幅超调,甚至出现持续的极限环振荡。所以位置环用 P 控制就够了,位置静差的消除交给速度环内部的积分去完成。

位置环 P 增益的含义是“每产生单位位置误差,控制器给出多大速度指令”。比如 Kpp = 30,表示位置误差 0.1 rad,速度指令就是 3 rad/s。调试时如果出现位置超调,先别急着改 P,先看速度环有没有超调、位置环输出限幅是否触发。

4. 三闭环参数整定:从理论初值到仿真微调的完整链路

4.1 带宽分配原则:为什么不能三个环孤立整定

三闭环整定最大的误区是孤立看某一个环。你单独把电流环调到又快又稳,但速度环带宽如果和它只差一倍,级联起来的系统依然会振荡。根本原因是内环闭环在有限带宽下存在相位延迟,外环控制器带宽越高,内环延迟对稳定性的影响越显著。所以工程上的顺序是:先定内环带宽,再逐级向外,按照 3~5 倍的间隔分配。

我这里给一组参考值:电流环闭环带宽 1000 rad/s,速度环闭环带宽 200 rad/s,位置环带宽 40 rad/s。对于大多数表贴式小惯量伺服系统,这个组合都能跑出比较干净的波形。如果你的系统机械谐振明显,速度环带宽要适当再降。

4.2 电流环 PI 初值的计算与微调

电流环被控对象可以简化为一阶惯性加延迟。忽略逆变器延迟时,对象是 1/(Ls + R)。采用“零极点对消”整定:

  • 积分时间常数 Ti = L / R
  • 比例增益 Kp = L * ωc
  • 积分增益 Ki = Kp / Ti = R * ωc

这里的 ωc 是你期望的电流环闭环带宽,单位是 rad/s。

我拿一组典型表贴式 PMSM 参数做示例:Rs = 0.958Ω,Ld = Lq = 5.25mH,Ψf = 0.1827Wb,J = 0.0006329kg·m²,极对数 p = 4。若电流环带宽取 1000rad/s,则 Kp = 5.25e-3 × 1000 = 5.25,Ki = 0.958 × 1000 = 958。

仿真微调时,如果电流阶跃出现高频振铃,通常是 Kp 偏大或忽略延迟导致相位裕度不足,这时应适当减小 Kp;如果电流响应太慢,说明带宽不够,增大 Kp 但注意不要过量。我习惯先用理论值跑一遍,然后再把 Kp 下调 10%,给系统留一点裕度。

4.3 速度环 PI 参数的推导思路

速度环的被控对象可以近似为:电流环闭环(等效为一个快惯性环节)串联机械积分环节。电流环等效时间常数 Tcc 可以取 1/ωc 或 2/ωc,工程上常用 2/ωc 做偏保守估计。

转矩系数 Kt = 1.5 * p * Ψf。用前面那组参数计算,Kt = 1.5 × 4 × 0.1827 ≈ 1.096 N·m/A。

速度环如果按对称最优整定,常见经验式:

  • Kp_v = J / (Kt * 2 * Tcc)
  • Ti_v = 4 * Tcc
  • Ki_v = Kp_v / Ti_v

假设 ωc = 1000rad/s,Tcc = 1e-3s,则 Kp_v = 0.0006329 / (1.096 × 0.002) ≈ 0.289,Ti_v = 0.004s,Ki_v ≈ 72.2。这个 Kp_v 单位是 N·m·s/rad,也就是“每 rad/s 速度误差输出多少电流指令”。

速度环调试时,主要还是看阶跃响应和抗负载扰动能力。超调大就适当增加 Ti_v 或降低 Kp_v;负载突变后恢复太慢,则在保证稳定性的前提下提高 Kp_v 或减小积分时间。注意速度环给定需要接一个斜坡或低通滤波器,直接阶跃给定往往会把位置环的响应带偏。

4.4 位置环 P 增益与伺服刚性

位置环通常在最后调整。位置环 P 增益 Kpp 的单位是 1/s,如果没有前馈,位置环闭环带宽大致就等于 Kpp。所以你把 Kpp 取多大,位置环带宽就有多高。

根据前面带宽分配原则,位置环带宽 40rad/s,那 Kpp 就先给 40。跑一下位置阶跃,如果超调明显,Kpp 降到 20~30;如果响应太肉,可以适当升高,但要监听速度指令是否经常撞限幅。位置环 Q 值不高时,加前馈比盲目加 P 更有效。

这里我整理了一张参考表:

控制环理论初值公式示例参数(上文电机)常见调试方向
电流环 KpL * ωc5.25减小以抑振铃
电流环 KiR * ωc958增大以消稳态误差
速度环 Kp_vJ/(Kt2Tcc)0.29增大以提抗扰
速度环 Ti_v4*Tcc4ms增大以抑超调
位置环 Kppωcv/3~520~60增大提刚性,前提是不超调

5. 从“能跑”到“跑得好”:几个高性价比的优化手段

5.1 抗积分饱和:限幅、Clamping 与 Back-calculation

三闭环里每个 PI 都可能碰到积分饱和,但表现最明显的是速度环。位置阶跃时,位置误差很大,速度环持续输出到 iq_ref 限幅,积分项一路累积。等到位置接近目标时,误差已经在减小,但积分仍然把输出压在饱和值上,直到误差反向才能慢慢退出来,结果就是位置大幅超调。这种超调不是位置环 P 增益太高造成的,而是下方多个 PI 的积分“刹不住车”。

Simulink 里如果你用的是 PID Controller 模块,可以直接设置 anti-windup 参数,常见方式有三种:

方式原理适用场景
Clamping输出饱和且积分继续增大时冻结积分计算量小,适合简单系统
Back-calculation将输出饱和差反馈回积分输入,按 1/Tt 衰减调试灵活,工程最常用
Conditional integration条件不满足时暂停积分需要较多判断逻辑

Back-calculation 的 Tt 一般取积分时间 Ti 的 1~2 倍。实调中发现钳位会导致系统响应偏慢时,可以调大反计算系数。

5.2 前馈补偿:速度前馈与加速度前馈

纯反馈控制永远存在跟踪滞后。伺服系统如果只靠位置环 P 控制,位置指令连续变化时,实际位置总会滞后一个固定相位。解决这个问题的最高性价比手段是前馈。

速度前馈实现很简单:位置给定经过微分得到速度给定,乘以一个前馈系数,叠加到位置环 P 控制的输出上。Simulink 里可以用 Derivative 模块,但滤波时间常数要设置好,避免直接把噪声引入系统:

  • ω_ref = Kpp * (θ_ref - θ_fb) + kff_v * dθ_ref/dt

更进阶一点,加速度前馈可以直接补偿负载惯量带来的跟踪滞后。速度环给定里加入加速度项,iq_ref 前送一个与给定加速度成正比的电流偏置。前馈系数通常取 0.8~0.95,不要取 1,留点余量防止过冲。从波形上看,加上速度前馈之后,位置跟踪误差可以减小一个数量级。

反电动势解耦本质上也是一种前馈,它把已知的扰动提前抵消掉,让电流环 PI 只需要处理残余误差。这三类前馈配合使用的时候,系统依然要保持良好的相位裕度,不要为了追求零误差把前馈系数堆到 1。

5.3 高速弱磁与电压约束的简单实现

伺服系统转速接近额定转速以上时,反电动势逐渐接近直流母线电压的限制,电流环输出电压会进入饱和区,iq 电流就无法继续增大。弱磁控制的核心思路是注入负的 id 电流,通过 d 轴去磁效应降低气隙磁场,从而在电压受限的前提下扩展转速范围。

仿真里实现弱磁最简单的方式是查表式弱磁。实时计算电压矢量幅值 Vmag = sqrt(ud² + uq²),当 Vmag 超过最大输出电压 Vmax 时,通过一个弱磁 PI 调节器输出 Δid(负值),叠加到 d 轴电流指令上。同时要确保电流矢量模值不超过电流极限,也就是 id² + iq² ≤ Imax²。弱磁调节器输出限幅一般设在 -Imax 到 0 之间。

对于表贴式电机,弱磁效率相对较低,因为 d 轴电感等于 q 轴电感,负的 id 去磁效果有限,而且会占用电流裕量。如果你主要做的是低速高性能定位,可以考虑先不加入弱磁,把注意力放在前馈和抗饱和上。但如果目标是模拟高速主轴或者伺服高速段,弱磁是绕不开的一环。

6. 三闭环仿真避坑实录:五个最常见问题的完整排查链路

6.1 仿真直接发散:先怀疑求解器,再查反馈极性

仿真一启动,波形直接飞到 1e30 级别,这是三闭环仿真里最常见、也最吓人的情况。很多人第一反应是 PI 参数不对,但我建议按下面的顺序排查。

第一步换求解器。Simulink 的默认变步长求解器是 ode45,对 PMSM + PWM + 逆变器这种带高频开关和强刚性的系统并不友好。先试 ode15s 或 ode23t,同时把最大步长限制在 PWM 周期的十分之一左右。如果 PWM 是 10kHz,最大步长就设 1e-5 到 1e-4 之间。这一步能解决相当一部分发散问题。

第二步查反馈极性。给定 iq_ref 为一个小正值,id_ref 为 0,观察电机是否正向转动、iq 反馈是否为正。如果符号相反,大概率是 Park 变换角度符号或电流方向处理错了。第三步才轮到 PI 参数,先把所有 PI 增益调小到理论值的十分之一,确认系统稳定后再逐步加压。

6.2 电流环振荡:dq 轴电流高频抖动

电流环是最内环,一旦振荡,转速和位置波形都不会好看。仿真里 dq 轴电流高频抖动,常见原因有三个:Kp 过大、采样/PWM 延迟没考虑、或者 Simulink 里形成了代数环。

先看 Kp。如果电流阶跃响应有高频振铃,把 Kp 降下来,同时适当增大 Ki,让零点对消保持住。再看代数环。当你把电流反馈和控制器输出放在同一个代数闭环里时,Simulink 会出现代数环警告。解决办法是在反馈通道加一个 Unit Delay(离散控制)或者在控制路径上加一个小惯性环节。这个方法在离散模型里尤其立竿见影。

如果这些都没问题,就把 PWM 开关频率或采样时间的离散度调高一点,有时仿真步长太大导致 PWM 占空比量化太粗,也会让电流波形看起来像振荡。

6.3 位置超调:“全是积分饱和惹的祸”

我之前带过一个人,位置阶跃响应超调 40%,他以为是位置环 Kpp 太大,一路往下调,调到位置响应慢得像蜗牛,超调还在。我打开速度环的 iq_ref 波形一看,启动瞬间直接顶在限幅上长达 0.2 秒,位置都到了还在顶——这就是典型的积分饱和。

排查链路是这样的:先看速度波形是否也有超调。速度环超调大,先调速度环,别动位置环。再看速度环输出是否长时间处于限幅状态。如果在误差较大阶段持续饱和,优先开启抗饱和策略。最后才看位置环 Kpp,把速度环输入信号改成斜坡给定或加一阶低通,位置超调通常马上改善。

位置环输出本身也要限幅。很多设备有最大运行速度,位置环 P 控制器输出的速度给定不能超过这个值。如果位置误差很大,输出直接撞限幅,这时限幅值本身也算一种“规划”,给得太小位置响应肉,给得太大容易叠加上面积分饱和问题。

6.4 低速爬行与位置静差

低速时出现位置爬行、周期性波动或稳态静差,这个问题在纯仿真里往往不如实际实验明显,但加入摩擦模型、死区效应或位置量化后就会出现。

仿真里如果位置反馈带了量化环节,低速时位置变化甚至在几个 LSB 之间跳动,位置环会不断输出小速度指令,速度环却因为死区或摩擦无法响应,形成爬行。针对这个情况,可以在位置反馈或速度反馈上加小时间常数低通滤波,或者在速度环里加入一个很小的死区补偿。注意死区补偿过大会造成极限环振荡,补偿量要标定准确。

位置静差则要先确认速度环本身是否有静差。如果速度环用的是含积分的 PI,理论上速度静差为 0,位置环 P 控制就能做到位置无静差。如果你发现位置始终差一点,优先检查速度环积分是否被限幅或者抗饱和钳位影响,而不是盲目加大位置环 P。

6.5 负载突变时转速跌落大、恢复慢

伺服系统经常面对负载突变。仿真里给电机加一个阶跃负载转矩,如果转速跌落很大且恢复时间很长,说明速度环的抗扰带宽不够。

改进方向有三个。第一,在相位裕度允许的前提下把速度环 Kp_v 调大,提高速度环截止频率。第二,加负载转矩观测器或者扰动观测器,估计出负载扰动后在电流给定里前馈补偿,这是目前工程上非常主流的手段。第三,减小电流环等效延迟,比如提高 PWM 频率或采样率,电流环响应快了,速度环抗扰性能自然跟着受益。

还有一种情况是机械参数不准导致的。转动惯量 J 在整定公式里直接参与计算,如果你用的 J 比实际值大很多,Kp_v 会偏高,系统偏振荡;J 取得太小,Kp_v 偏低,抗扰就差。仿真里可以通过给一个已知负载阶跃,观察转速恢复曲线的响应速度,反过来估一下 J 的大致范围。

最后说一点个人体会。我在实际调过好几个三闭环模型之后发现,绝大多数“调不出来”的问题,根子不在最后一个 PI 参数,而在前面的结构决策:带宽分配是不是合理、限幅和抗饱和有没有做、反电动势解耦有没有加、电机参数是不是拿错了。把这些问题在搭模型阶段就处理好,后面参数整定通常很快。反过来,如果一上来就埋头调 Kp、Ki,往往会把简单问题越调越复杂。希望你读完这篇基于 Simulink 的 PMSM 三闭环控制仿真与优化经验后,能少走几步弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询