拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

PMSM伺服系统三闭环控制Simulink仿真与优化实战

PMSM伺服系统三闭环控制Simulink仿真与优化实战 搞运动控制的人第一次在 Simulink 里搭永磁同步电机PMSM伺服系统三闭环模型多半都会经历同一个场景模型照着论文搭好了PI 参数也从别人那儿拿来了一按运行转速波形要么飞到天上去要么像抽风一样来回抖。你调 Kp、调 Ki调得满头大汗问题反而越来越多。这种情况我见过太多次了包括我自己刚入行时也没少踩。后来才慢慢明白三闭环仿真最核心的并不是某个 PI 参数而是三个环之间的带宽配合以及结构设计是否合理。这篇文章我想把基于 Simulink 的永磁同步电机 PMSM 伺服系统三闭环控制仿真与优化的完整经验整理一遍涵盖数学模型的选型、Simulink 里的搭建顺序、参数整定的理论依据和实操微调、以及从“能跑通”到“跑得好”的几个关键优化手段。内容比较适合三类人看正在做伺服控制方向毕设的学生、刚入门的驱动工程师、以及想把现有仿真模型调得更稳更快的技术人员。我会尽量用实际调参和排障的视角来讲而不是照搬教材公式。1. 先想清楚三闭环为什么是“内快外慢”的级联结构1.1 从运动控制的物理本质看三个环的职责伺服系统的最终任务是让电机轴的位置精确跟随指令。从物理上看位置的变化率是速度速度的变化率是加速度加速度由电磁转矩决定而电磁转矩又由电流决定。所以电机本体自带一条天然的积分链电流 → 转矩 → 加速度 → 速度 → 位置。每经过一级积分信号的“反应速度”就会慢一截控制难度也随之变化必须在不同层级分别设置控制器这就是三闭环在结构上存在的根本原因。用一个粗浅的类比位置指令是“你要去哪儿”速度指令是“你准备走多快”电流指令则是“你要用多大劲儿推”。这三件事的时间尺度完全不同。推力的改变几乎可以瞬时发生速度快慢的调整需要一点时间而位置变化则是缓慢累积的结果。内环必须比外环快否则外环输出的指令变化太快内环根本跟不上去相位滞后慢慢放大整个系统就表现为振荡甚至发散。这就是“内快外慢”的物理由来也是所有三闭环整定方法的起点。有一点需要特别提醒三个环并不是三个独立的 PI 控制器简单串起来它们在频域上是层层嵌套的关系。外环的带宽必须明显低于内环的等效带宽内环的闭环传递函数在带宽范围内要尽可能接近 1这样外环设计时才能把内环当成一个“快惯性环节”甚至“比例环节”来处理。如果你一上来就让三个环各自跑得飞快结果往往是整体稳定性一塌糊涂。1.2 三个环各自的控制对象与标准结构在标准的三闭环伺服控制结构中三个环的工作对象并不一样这里我整理了一张表控制环被控对象输出量反馈量典型带宽范围常见控制器电流环内环定子电气方程L、Rd/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 * iquq 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。如果电机是表贴式SPMSMLd 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 轴电流给定在额定转速以下设为 0q 轴电流给定来自速度环输出反馈值是 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 * iquq_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.1827WbJ 0.0006329kg·m²极对数 p 4。若电流环带宽取 1000rad/s则 Kp 5.25e-3 × 1000 5.25Ki 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 * TccKi_v Kp_v / Ti_v假设 ωc 1000rad/sTcc 1e-3s则 Kp_v 0.0006329 / (1.096 × 0.002) ≈ 0.289Ti_v 0.004sKi_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 三闭环控制仿真与优化经验后能少走几步弯路。
返回列表