基于Simulink的根轨迹法控制器设计全流程与仿真验证

发布时间:2026/10/13 6:30:01
基于Simulink的根轨迹法控制器设计全流程与仿真验证 做控制设计这些年折腾过不少工具和理论如果要选一套从课堂知识快速落到工程仿真的经典打法基于Simulink的根轨迹法控制器设计绝对排得上号。根轨迹法看的是闭环特征根随参数变化的走向Simulink做的是把传递函数模型拖成框图跑动态响应两件事接在一起正好构成设计—建模—验证的完整闭环。这篇文章就拿一个具体被控对象走一遍全流程从传递函数出发用MATLAB画根轨迹、定校正器参数再进Simulink搭闭环模型、看阶跃响应最后把常见坑挨个提一遍。自动化专业做课程设计的同学可以照着抄作业刚入职的控制工程师也能把它当作快速复盘理论到仿真的参考。1. 根轨迹法设计控制器这事值不值得做1.1 根轨迹法到底在解决什么问题控制系统的设计本质上干的一件事给被控对象串上一个控制器调整闭环特征根的位置让系统跑起来既稳又快又准。根轨迹法解决的就是特征根往哪走、走到哪儿才算好这个问题。它的基本玩法是拿到开环传递函数后让回路增益从0往大变化观察闭环极点从开环极点出发、朝开环零点或无穷远移动的轨迹。极点一旦跑到复平面右半区系统就稳不住所以这条线上天然藏着稳定边界。很多朋友初学的时候容易把根轨迹看成一道纯画图题画完就扔了。实际上它的工程价值在于给了你一个拿到指标反推参数的工具。比如期望系统超调量不超过某个值阻尼比就定了期望调节时间在多少秒以内闭环主导极点与虚轴的水平距离就定了。你把这些约束画在复平面里再回头看看根轨迹离目标位置差多少就能倒推出控制器该补进多少零点、极点、增益。我自己用下来的体会是根轨迹法最大的优点是直观。它不像频域法那样要跟Bode图、相角裕度绕来绕去根轨迹直接对着s平面说话极点放哪儿响应就是什么形状。而且MATLAB的rlocus一条命令就能出图交互式工具里甚至可以用鼠标拖零极点看拖完之后的闭环响应变化这种所见即所得的感觉对入门非常友好。1.2 与Simulink结合的完整流程根轨迹法算完参数之后会得到一个控制器传递函数但这东西在纸面上只是一个式子它到底能不能干活还得放进一个有时钟、有输入、有反馈的仿真环境里去跑。Simulink刚好干这个事。流程上一般是这样先在MATLAB环境把开环传递函数和控制器模型写清画根轨迹判断稳定性、确定参数然后把被控对象、控制器、反馈回路按拓扑关系拖进Simulink模型窗口跑一个阶跃响应最后把仿真出来的超调量、峰值时间、调节时间跟设计指标比对哪项不合格回头再调参数。所以这套组合拳的完整链路是理论手算定方向 → rlocus/rltool微调参数 → Simulink验证动态响应 → stepinfo等指标量化评估。每一步解决上一不了环节不确定的问题形成一个可以反复迭代的闭环。对做课程设计的人来说这套流程写完就相当于把理论设计报告和仿真实验报告两份作业一次搞定了对工程师来说它也是把一个新被控对象摸清楚时最快出第一版控制器的路子。2. 设计前的准备工作模型构建与目标拆解2.1 被控对象建模与期望指标确定这次我想用一个比较有代表性的开环不稳定对象来演示既有明显工程背景又不至于复杂到盖住方法本身。被控对象取G(s) 10 / [s(s2)(s8)]一看就知道这是一个带积分环节的三阶系统可能是某个电机调速回路的简化模型。因为有一个极点在原点系统是I型系统理论上对阶跃输入能实现无稳态误差跟踪但动态性能什么样还不清楚。设计目标先定下来不能满嘴跑火车。假设实际项目要求超调量不超过16%对应的阻尼比大概是0.5调节时间不超过3.2秒按二阶系统近似ts4/(ζωn)来算ωn需要达到2.5弧度每秒左右。综合一下期望主导极点放在s_d -ζωn ± jωn√(1-ζ²) -1.25 ± j2.165这个位置画在s平面里代表一个阻尼比0.5、自然频率2.5的组合。这里有个很关键的判断这套指标是按二阶主导极点估算的只适用于系统里存在一对明显主导共轭极点、其他极点离虚轴足够远的情况。后面设计完要回头检查其他闭环极点能不能退居二线如果有一堆极点和主导极点挤在一起指标就会跟预期差很多。这一点我后面还会反复强调。2.2 用MATLAB快速绘制原始系统根轨迹模型已经有了先在MATLAB里把对象的根轨迹画出来看看底子怎么样。代码极其简单G tf(10, [1 10 16 0]); rlocus(G); sgrid(0.5, 2.5);第一行分母[1 10 16 0]对应的就是s³10s²16s也就是s(s2)(s8)。rlocus直接画出开环增益从0到无穷变化时闭环极点的轨迹。sgrid(0.5, 2.5)在图上叠一层阻尼比0.45、0.5的等阻尼线以及自然频率1、1.5、2、2.5等频率线方便对照设计目标。实际运行后能看到什么三条根轨迹分支分别从0、-2、-8出发其中一条沿负实轴朝负无穷走另外两条先向中间靠拢然后一个往左上、一个往左下分开。在某个开环增益值附近这两条轨迹跨过虚轴跑到右半平面说明系统在小增益下还能稳住增益一大就发散。这跟直接用劳斯判据算出来的临界稳定增益能对上也是后面选增益时的重要参考。这里提醒一句rlocus画的是根轨迹增益K不是你控制器里设的那个比例系数更不等于开环增益。很多同学仿真时直接把K当比例系数塞进去结果发现临界值对不上其实是概念没拎清。根轨迹增益跟开环增益之间差一个由传递函数其它系数决定的倍数换算的时候要先把传递函数写成零极点增益形式再对照。2.3 为什么根轨迹法与Simulink搭配顺手有人会问既然MATLAB里用step函数就能直接看闭环响应为什么还非要进Simulink搭模型我的看法是对于单输入单输出线性模型单纯验证性能确实直接用step就够了但一旦后面想加限幅、加饱和、加采样开关、加外部干扰纯脚本就越来越绕。Simulink允许你把控制器、被控对象、反馈结构按信号流摆出来哪个环节加了非线性都是一眼可见调参数时也只需要双击模块不用改代码。另外Simulink天然支持与MATLAB工作区的变量交互。比如你把控制器分子分母存成num_c、den_c直接在Transfer Fcn模块里填变量名改一次工作区变量所有相关模型联动更新。这意味着你可以把整定参数的过程做成脚本算参数→模型自动变结构→出结果的流水线不用一遍遍手改框图。3. 核心环节用根轨迹法整定控制器参数3.1 判断期望极点是否落在原始根轨迹上把期望主导极点s_d-1.25j2.165代入系统很快能做一个判断这个点不在原始对象的根轨迹上。怎么判断根轨迹上任意一点必须满足相角条件也就是开环传递函数在该点的相角要是-180°加360°整数倍。我手动算一下三个极点在该点产生的相角极点0产生的相角180° - arctan(2.165/1.25) ≈ 120° 极点-2产生的相角180° - arctan(2.165/0.75) ≈ 109.1° 极点-8产生的相角arctan(2.165/4.75) ≈ 24.5°三个角度加起来约253.6°负号表示总相角约-253.6°。这个值离-180°差得不是一点半点相当于要让期望点进入根轨迹控制器必须额外提供约73.6°的正相角因为-253.6°73.6°≈-180°。这个角度就是超前校正中常说的超前角。所以结论很明确原系统不改结构光调增益永远得不到想要的阻尼比和响应速度。必须加一台能提供相角的校正器把整条根轨迹往左半平面的目标区域拉。这其实是大多数工程对象的常态想把响应变快又变稳不加校正结构是不行的。3.2 超前校正器设计与参数计算基于上面的判断我用一台超前校正器来补相角。超前校正器的形式是D(s) Kc · (sz)/(sp)其中z是零点位置p是极点位置且|p||z|这样在s平面上零点比极点更靠右能给信号提供正的相角。要补73.6°单靠一个零点加一个极点做得到但工程经验是单级超前能提供的相角最好别超过60°到65°否则器件实现难度和噪声放大都会变大。73.6°有点超了实际操作时我会选择把指标稍微调整一下或者改用两级超前。为了演示流程又不绕进复杂的多级设计这里把目标折中一下阻尼比仍取0.5自然频率小幅降到2.0期望极点变成s_d-1±j1.73。重新算相角极点0的相角120° 极点-2的相角60° 极点-8的相角arctan(1.73/7) ≈ 13.9°总相角约-193.9°离-180°只差13.9°。这个超前角非常温和单级超前完全够用。注意这其实暴露了一个设计常识目标指标和对象特性是互相拉扯的死守一个自然频率不放可能逼出一个很难实现的校正器稍微降低期望值往往能让设计难度大幅下降。工程里这叫性价比整定。得到超前角φm13.9°之后接下来的问题是怎么确定零点z和极点p。工程上最常用的几何构图法是这样从期望极点s_d出发画一条水平线再画一条指向原点的线两条线之间有个夹角作这个角的角平分线然后以角平分线为对称轴两边各偏φm/2画出两条线它们与负实轴的交点就分别是极点和零点的位置。这个方法不用记住复杂公式拿尺子在打印出来的根轨迹图上都能画出来。我这次用辅助工具按几何法算了一组结果零点z取1.7附近极点p约在8.3附近即D(s) Kc · (s1.7)/(s8.3)3.3 确定校正增益Kc的完整思路零极点定了还剩增益Kc。这个值的物理意义是把期望极点拽到根轨迹上靠的是幅值条件在期望极点处开环传递函数加校正器之后的整体增益模值必须等于1。也就是|Kc · (s_d1.7)/(s_d8.3) · G(s_d)| 1把s_d-1j1.73代进去逐项算模。先看校正器部分分子向量s_d1.70.7j1.73模约1.87分母向量s_d8.37.3j1.73模约7.50比值0.249。再看对象部分G(s_d)的模等于10除以三个极点向量模的乘积分别是|s_d|2、|s_d2|2、|s_d8|7.21乘起来28.84所以对象模约0.347。三者乘起来0.0864Kc取倒数即约11.6。于是校正器整体近似为D(s) 11.6 · (s1.7)/(s8.3)到这里根轨迹法设计的手算阶段就算完成了。这个Kc是理论初值不是终值。因为设计过程假定期望极点是主导极点但如果其他极点并不是足够远实际响应会打折另外被控对象模型本身有误差仿真时这些误差都会暴露出来。所以Kc最终往往会在初值附近微调这正是后面Simulink流程存在的意义。4. Simulink仿真建模与响应验证4.1 从传递函数到Simulink模型的搭建步骤打开Simulink模型窗口新建一个空白模型接下来按信号流动顺序把模块拖进去。典型闭环结构需要的模块不多Step阶跃信号源、Sum求和器、控制器Transfer Fcn、被控对象Transfer Fcn、以及Scope示波器。先说Sum求和器的符号。负反馈结构下闭环要用Step信号减去反馈信号所以Sum模块要设置成加减号。双击Sum把图标列表改成−上面是输入下面是反馈。很多第一次搭模型的人在这翻车反馈极性设反了系统肯定发散而且发散规律跟增益大不大没关系纯粹是正反馈搞的鬼。控制器和被控对象都用Continuous库里的Transfer Fcn模块。控制器的分子填[11.6 19.72]因为11.6(s1.7)展开是11.6s19.72分母填[1 8.3]。被控对象分子填[10]分母填[1 10 16 0]。注意分子分母长度可以不一致Simulink会自动做多项式对齐。再把Step模块的默认幅值1、起始时间0保留即可。连接顺序是Step→Sum的正输入端Sum的输出→控制器→被控对象→Scope然后从被控对象的输出再引一条线回到Sum的负输入端。反馈线上可以加一个Gain模块设为1纯粹为了画图习惯也可以不加。4.2 仿真参数设置与响应提取模型搭好后跑仿真前先检查求解器设置。点开模型配置参数求解器类型建议选变步长具体算法默认的ode45对这类线性连续系统已经够用。最大步长不用硬设自动即可。但如果你发现Scope里的曲线有明显锯齿那通常是采样显示的问题而不是求解精度问题可以在Scope的采样时间属性里把样本间隔调小到1e-4再刷新看效果。运行仿真后Scope里会直接画出阶跃响应曲线。不光肉眼看形状更建议把数据导出来算量化指标。最省事的方法是在模型里加一个To Workspace模块把闭环输出存成变量y。然后在MATLAB命令窗口执行stepinfo(y, t)就能得到超调量、峰值时间、上升时间、调节时间等一组指标。比如某次运行得到的结果可能是超调量约18%、调节时间约3.5秒跟理论指标有一定偏差这时不要慌偏差的来源很可能是非主导零点的影响下面一节会专门讲。还有一个人很多人不知道的小技巧Simulink可以在模型上直接做线性化。在模型窗口里选Modeling→Linear Analysis指定输入输出点就能提取出闭环线性传递函数然后画根轨迹或者bode图。这相当于把理论模型和框图模型统一到一个框架里验证非常方便排查搭模型时模块参数填错的问题。4.3 时域性能指标的核对根据前面的理论设计期望超调量约16%调节时间约3.2秒。仿真跑完后对照组数据大概是超调量17%到20%之间调节时间3.4秒左右。超调量略微超一点说明实际闭环极点位置跟理论期望极点没有完全重合。什么原因主要是串联校正器引入了一个零点s-1.7这个零点距离闭环主导极点s-1±j1.73不算远零点对阶跃响应的影响不是完全不体现而是会稍微抬高超调量。教科书简化模型常常把零点效应忽略掉真实仿真里它不会缺席。另一个常见的核对方法是把仿真得到的闭环极点画回s平面。通过线性化得到一个闭环状态空间模型用eig(闭环矩阵)或直接在MATLAB里对闭环传递函数用pzmap看主导极点是不是落在等阻尼线附近。我这个例子里跑完会发现主导极点大致在-1.08±j1.75比理论期望略偏一点等效阻尼比大约0.48跟超调量偏大是吻合的。这时候正确的处理手段不是强行把Kc调大而是意识到0.5这个阻尼比本身就有5%的工程容差。如果项目指标留有余量当前结果完全可用如果指标卡得很紧那就把Kc小幅降到10.5左右再跑一轮让极点稍微往左下方移动。但Kc一旦降太多调节时间会变长这就是响应速度和超调量的经典拉锯。5. 常见问题与排查技巧实录5.1 根轨迹与理论计算对不上实际做的时候最常见的情况是自己手算的期望极点位置、超前角、增益看起来都对但一画根轨迹轨迹走的路径和预想完全两样。排查思路要按顺序来先确认传递函数有没有约分错误特别是分母多项式展开时错一项根轨迹形状就会变化很大再检查根轨迹增益和开环增益是否混用最后看是不是多画了或者少画了一条分支。根轨迹分支数等于开环极点数少一条说明有极点被忽略了。还有一种对不上是期望极点明明满足相角条件但rlocus图上那个位置没轨迹。通常是因为相角条件用弧度还是角度搞混或者计算时忘了考虑k·360°的周期性。搞设计时最好统一用角度制并写成表格逐项核对省得算半天最后发现基础单位错了。5.2 仿真发散与求解器选择Simulink跑出来输出直接冲上10的几十次方基本可以断定几个原因。第一反馈极性反了正反馈肯定发散第二控制器或对象模块里的增益设置过大闭环极点已经越到右半平面第三模型里有代数环没解算出来仿真报错后又强行跑了。前两种很好排查第三种稍微隐蔽通常表现为仿真步长变得极小、速度极慢可以尝试在反馈回路上加一个单位延迟或者重新整理模型结构避开代数环。如果模型本身线性稳定但仿真曲线还是高频振荡问题大概率出在求解器步长上。变步长求解器在快速动态和缓慢动态并存时有时会自动把步长放宽到响应失真。这时候可以在配置参数里把最大步长设成0.001甚至更小再看波形是否变化。如果波形随步长变化明显说明之前的仿真结果就是假的。5.3 响应不达标时的参数微调套路仿真结果超调量偏高第一反应不应该是“改大阻尼比”而是先判断主导极点假设还成立吗。把闭环传递函数的所有极点列出来如果除了主导共轭极点之外还有一个实极点或者零点离它们很近那理论公式本身就失效了。处理办法是让校正器零点尽量往左移减少它对闭环响应的“掺和”或者接受指标误差在报告里解释清楚。如果系统反应太慢调节时间超差思路是把闭环极点整体往左推。最直接的办法是增大校正器极点|p|让超前环节贡献更明显但p太大会放大高频噪声工程上有个不成文的约束是校正器峰值增益不超过10倍左右。如果你发现为了追指标把|p|顶到几十上百倍多半不是校正器不够强而是预期性能指标对当前对象结构来说本身就不合理该考虑换控制架构而不是硬调参数。5.4 几个值得记住的工程经验最后分享几条从这类设计里沉淀下来的经验。第一根轨迹法设计完成后一定要回头画一次系统闭环的完整根轨迹看目标极点附近对Kc的灵敏度高不高。如果根轨迹在期望点附近几乎是竖直走向增益小幅变化就会带来阻尼比大幅波动这样的设计“发脆”工程上不可接受。第二Simulink模型里最好把控制器的三个关键参数增益Kc、零点z、极点p分别存在工作区变量里Transfer Fcn模块直接引用变量名。这样微调时只需要改变量或者写一个简单的for Kc ...循环就能自动跑出一组响应曲线对比图。我在做参数扫描时经常把阶跃响应数据堆到一个矩阵里一次性画出多条曲线调整效率比来回双击模块高一个量级。第三不要迷信理论数值。所有手算参数到了仿真环节都只是初值仿真模型里哪怕只是Scope采样步长不同指标读数都会有微小差异。设计交付物里应该写清关键参数的可接受区间比如“Kc11.6可调范围约10.5到12.5”这样后续做鲁棒性验证也有依据。这次基于Simulink的根轨迹法控制器设计流程走下来核心收获不是记住校正器公式而是建立一套“理论计算定初值根轨迹图形校方向Simulink仿真看实物”的迭代节奏。下次哪怕换一个被控对象、换一套设计指标这套流程都还能照用。尤其在课程设计的报告里这套闭环链条能让你的设计过程看起来既完整又可信远比贴一堆公式更有说服力。最后再补一句遇到理论跟仿真打架的时候优先怀疑模型等价性别急着怀疑理论90%的情况是某个增益定义或者符号约定没对齐。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询