简介:这份文档面向具备基础控制理论与编程能力的高年级本科生、研究生及工程技术人员,围绕自动控制原理实验教学,系统讲解控制系统的建模、分析与校正方法,帮助读者在MATLAB与MWORKS环境下完成从数学模型建立到性能验证的完整实践。内容涵盖六个实验:控制系统数学模型的MWORKS与MATLAB实现、时域与频域分析、典型环节动态性能与稳定性分析、频率特性测量、系统串联校正,以及EF-Servo集成与滤波,每个实验均配有实验目的、内容、步骤与思考题,便于对照操作并加深理解。资源包共1个docx文件,约1.43MB,结构完整、篇幅精炼,适合作为课程实验指导书或自学手册使用。目前已有677人学习,读者可借此熟悉传递函数、状态空间、Simulink建模及频率法校正等关键技能,提升动手实践与系统分析能力。
1. 传递函数不是数学作业:为什么控制系统要先建模再仿真
很多人第一次做自动控制原理实验,看到tf(num, den)这种写法,第一反应是「这不就是把系数抄进去吗」。但真正跑过仿真的人会知道,翻车往往就发生在这一步:分子分母系数顺序写反、离散系统忘了采样周期、状态空间转回传递函数后多出几个1e-15的数值噪声,曲线看着没问题,结论却全错。控制系统的时域响应、频域特性、稳定性判据,全都建立在同一个前提上——模型必须和物理系统对得上。这份实验文档把六个实验串成一条线:先用 MATLAB 和 MWORKS 把传递函数、零极点、状态空间三种 LTI 模型建起来,再让典型环节在阶跃信号下暴露动态性能,最后用频率特性测量和串联校正把「分析」推到「设计」。搞懂这条线,你才知道仿真曲线背后到底是哪几个参数在说话。
2. LTI 模型的三种面孔:传递函数、零极点、状态空间为什么能互相转换
2.1 传递函数模型:分子分母系数向量就是全部信息
线性定常系统的传递函数写成多项式比值,MATLAB 和 MWORKS 都用两个行向量num和den来承载。连续系统里den的第一个元素固定是 1,对应最高次项系数归一化;离散系统则多一个采样周期Ts,Ts=-1或空表示采样周期未定义。这个约定看起来琐碎,但它决定了后面所有函数能不能正确识别系统类型。
% 连续系统传递函数 G(s) = 6 / (s^3 + 6s^2 + 11s + 6) num = 6; den = [1 6 11 6]; G = tf(num, den); % den 首元素为 1,表示最高次项 s^3 系数已归一化tf不只是构造函数,它还是模型转换的入口。把任意 LTI 模型传进去,tf(G)会返回等价的传递函数形式。这里有个容易被忽略的点:状态空间转传递函数时,数值计算会引入浮点误差,原本干净的s^3 + 4s^2 + 5s + 2可能变成1.0s^3 + 3.999999999999999s^2 + ...。这不是 bug,是多项式求根和展开的固有精度损失,看结果时要学会忽略1e-15量级的尾巴。
2.2 零极点增益模型:无零点时为什么必须传空向量
零极点模型把传递函数拆成增益、零点、极点三组数据,物理意义更直接:极点决定系统的固有模态和稳定性,零点影响响应形状。MWORKS 里用zpk(z, p, k)建立,z是零点行向量,p是极点行向量,k是标量增益。
% G(s) = 6 / ((s+1)(s+2)(s+3)) z = []; % 无零点时必须给空向量,不能省略 p = [-1 -2 -3]; k = 6; G = zpk(z, p, k);无零点时z传空是硬性要求。如果图省事写成z = 0,系统会认为在原点有一个零点,零极点分布图直接多出一个圈,频率响应相位也会跟着偏。这种错误在实验报告里很常见,曲线一画出来和理论对不上,回头查半天才发现是空向量写成了零。
2.3 状态空间模型:为什么它不唯一而传递函数唯一
状态空间用A、B、C、D四个矩阵描述系统,ss(A,B,C,D)建立模型。传递函数和零极点模型对给定系统是唯一的,但状态空间模型不唯一——同一个传递函数可以对应无穷多组状态变量选择,也就是无穷多组A、B、C、D。ss(G)只能把传递函数转成一种指定形式的状态空间实现,常见的是可控标准型。
% 由传递函数转状态空间,再转回传递函数 num = 5; den = [1 4 5 2]; Gtf = tf(num, den); Gss = ss(Gtf); % 得到一种状态空间实现 Gtf1 = tf(Gss); % 转回传递函数,系数会有微小数值误差这个不唯一性有实际后果:状态响应曲线依赖初始状态x0的定义,换一组状态变量,x(t)的曲线形状就变了,但输出y(t)不变。实验里求零输入响应和零状态响应时,initial(G, x0)和lsim(G, u, t)返回的x是当前实现下的状态轨迹,不能跨实现直接比较。理解这一点,才不会对着两条不同的状态曲线怀疑自己算错。
2.4 模型连接:串联相乘、并联相加、反馈用 feedback
子系统连接是建模的基本操作。串联用G = G2 * G1,注意乘法顺序对应信号流向,G1在前G2在后;并联用G = G1 + G2;反馈用feedback(G1, G2),默认负反馈。
G1 = tf([1 1], [1 4 4]); % 子系统1 G2 = tf(1, [1 1]); % 子系统2 G_series = G2 * G1; % 串联 G_parallel = G1 + G2; % 并联 G_feedback = feedback(G1, G2); % 负反馈连接反馈连接最容易出错的地方是正负号。feedback默认负反馈,如果实际是正反馈,必须显式传第三个参数+1。另外,反馈连接要求两个系统的输入输出维度匹配,单输入单输出系统直接连没问题,多变量系统就要检查矩阵维度,否则报错信息不会告诉你具体哪一维对不上。
3. 时域响应:step、lsim、initial 背后在解什么方程
3.1 典型环节的阶跃响应:参数变化到底改变了哪条曲线
比例、积分、微分、惯性、延迟五个典型环节,在单位阶跃信号下的响应形状各不相同,但实验要求改变参数观察影响,这其实是在训练「参数到曲线」的映射直觉。比例环节G(s)=K,输出就是输入的K倍,阶跃响应是一条高度为K的水平线,K只改变幅值不改变形状。积分环节G(s)=K/s,阶跃响应是斜率为K的直线,K越大爬升越快。微分环节G(s)=Ts,对阶跃信号的理论输出是冲激,Simulink 里用du/dt模块仿真时会看到极窄的尖峰,T改变尖峰面积。
惯性环节G(s)=K/(Ts+1)是最值得细看的。阶跃响应按指数规律趋近K,时间常数T决定爬升速度:T=0.1时几乎瞬间到位,T=10时慢得肉眼可见。这里有个血泪经验——Simulink 仿真时间设得太短,T=10的曲线只画出一小段,看起来像线性上升,误判成积分环节。延迟环节G(s)=e^{-τs}在 Simulink 里用 Transport Delay 模块,τ改变的是响应整体右移的时间,波形形状不变。
3.2 二阶系统:阻尼比和无阻尼振荡频率各自管什么
二阶系统是时域分析的核心。标准形式G(s) = ωn² / (s² + 2ζωn s + ωn²),两个参数分工明确:阻尼比ζ决定超调量和振荡程度,无阻尼振荡频率ωn决定响应快慢。
zeta = 0.707; % 阻尼比 wn = 5; % 无阻尼振荡频率 num = wn^2; den = [1 2*zeta*wn wn^2]; G = tf(num, den); step(G); % 绘制单位阶跃响应固定ωn=5,让ζ取 0、0.5、0.707、1、1.5:ζ=0是等幅振荡,永远不收敛;ζ=0.5有明显超调,大约 16%;ζ=0.707是工程上常说的最佳阻尼,超调约 4.3%,上升时间和调节时间折中;ζ=1临界阻尼,无超调但响应偏慢;ζ=1.5过阻尼,更慢且无超调。固定ζ在 0 到 1 之间,改变ωn取 0.5、1、3、5,会发现ωn越大响应越快,上升时间和峰值时间都缩短,但超调量基本不变——因为超调只由ζ决定。
这个分工不是巧合。二阶系统的极点位置是-ζωn ± jωn√(1-ζ²),实部-ζωn决定衰减速度,虚部ωn√(1-ζ²)决定振荡频率。ζ改变的是实部和虚部的比例,ωn改变的是整体缩放。理解极点位置,比死记「ζ 影响超调」有用得多。
3.3 step、lsim、initial 的调用差异与返回值含义
三个函数对应三类响应求解。step(G, t)求单位阶跃响应,t是时间向量,通常取0:dt:t_end,dt是步长,t_end要足够覆盖调节时间。lsim(G, u, t)求任意输入u作用下的响应,u的长度必须和t一致。initial(G, x0)求零输入响应,只对状态空间模型有意义,x0是初始状态向量。
A = [0 1; -2 -3]; B = [0; 1]; C = [1 1]; D = 0; G = ss(A, B, C, D); t = 0:0.5:10; x0 = [1; -1]; [yo, t, xo] = initial(G, x0, t); % 零输入响应 u = ones(size(t)); [yu, t, xu] = lsim(G, u, t); % 零状态响应 y = yo + yu; % 总响应,线性系统可叠加返回值里x只有状态空间模型才有,传递函数模型调用step时x返回空矩阵。总响应等于零输入响应加零状态响应,这是线性系统的叠加原理,实验里把两条曲线相加验证一下,比看公式直观。注意lsim的输入u如果是行向量而t是列向量,维度不匹配会报错,统一转成列向量最稳妥。
3.4 稳定性判断:极点位置和特征值是一回事
连续系统渐近稳定的充要条件是所有极点位于 s 左半平面,等价于状态矩阵A的所有特征值实部为负。pole(G)返回传递函数极点,eig(A)返回矩阵特征值,roots(den)返回分母多项式根,三个函数从不同入口回答同一个问题。
G = tf(1, [1 4 10 6]); p = pole(G); % 传递函数极点 pzmap(G); % 零极点图,直观看到极点是否在左半平面实验里判断稳定性时,光看pole返回的数值还不够,要确认没有极点恰好落在虚轴上——虚轴上的极点对应临界稳定,阶跃响应是等幅振荡或线性增长,和稳定是两回事。数值计算可能把-1e-16这种接近零的实部算出来,判断时要设一个容差,不能死抠符号。
4. 频域分析:奈奎斯特图和伯德图在回答不同问题
4.1 奈奎斯特判据:开环曲线怎么判断闭环稳定性
奈奎斯特图把开环频率响应画在复平面上,横轴实部、纵轴虚部,频率从 0 到无穷变化。判据的核心是看曲线包围临界点(-1, j0)的圈数:闭环系统稳定的充要条件是包围圈数等于开环右半平面极点数。对于开环稳定的系统,曲线不包围(-1, j0)就闭环稳定。
num = 2; den = [1 9 14 0]; % 开环 G(s) = 2 / (s^3 + 9s^2 + 14s) G = tf(num, den); nyquist(G); % 绘制奈奎斯特图奈奎斯特图容易看错的地方是曲线走向和频率方向。图上不标频率,判断包围方向时要结合nyquist返回的数据或者手动标注几个关键频率点。另外,开环有积分环节时曲线在原点附近趋于无穷,MATLAB 画出来的图会有断裂或大圆弧,不能简单按「包围」数圈,要补画无穷大半圆再判断。
4.2 伯德图与 margin:幅值裕度和相位裕度从哪读
伯德图把幅频和相频分开画,横轴对数频率。bode(G)画图,margin(G)直接算出幅值裕度和相位裕度并在图上标出来。相位裕度是幅频曲线穿过 0 dB 时,相频曲线距离 -180° 的差值;幅值裕度是相频曲线穿过 -180° 时,幅频曲线距离 0 dB 的差值。
G = tf(2, [1 9 14 0]); margin(G); % 自动标注幅值裕度和相位裕度 [Gm, Pm, Wcg, Wcp] = margin(G); % 返回裕度值和对应频率margin返回的Gm是幅值裕度的绝对值,换算成 dB 要取20*log10(Gm)。相位裕度为正表示稳定,为负表示不稳定。工程上常要求相位裕度在 30° 到 60° 之间,太小系统振荡厉害,太大响应迟钝。实验里比较奈奎斯特判据和极点判据的结果,本质上是在验证同一个稳定性结论的两种表达,数值上可能有微小差异,但定性结论必须一致。
4.3 频率特性测量:从实验曲线反推传递函数
实验四要求用实验方法测一阶惯性环节和二阶系统的频率特性,再反推传递函数。一阶惯性环节G(s)=K/(Ts+1)的幅相曲线是个半圆,半圆直径对应低频增益K,曲线上某频率点的相角φ满足tan φ = -ωT,取一个点就能算出T。
这个反推过程依赖测量精度。实验设备测出来的幅值和相位有噪声,选点太靠近高频或低频都会放大误差,一般取相角在 -45° 附近的点算T最稳。软件仿真得到的曲线是理想值,和实验曲线对比时,差异主要来自电路元件的容差和测量仪器的频响限制,不是仿真错了。
5. 避坑与排查:仿真曲线对不上时先查这五处
5.1 现象:阶跃响应曲线形状对,但幅值差一个数量级
原因通常是传递函数增益写错。tf(num, den)里num是分子多项式系数,不是增益标量,如果分子是常数K,num要写成[K]或者直接写K,但分母首项归一化后,实际增益是num(end)/den(end)。解决方法是建完模型后用dcgain(G)查低频增益,和理论值对一遍。
5.2 现象:状态空间转传递函数后系数出现1e-15噪声
原因是对多项式做求根再展开的数值误差,不是模型错了。解决方法是看结果时忽略1e-12以下的项,或者用minreal(G)做最小实现消去零极点对消产生的近似项。如果噪声出现在主导系数上,说明系统本身接近不可控或不可观,要回头检查A、B、C矩阵。
5.3 现象:feedback连接后闭环响应发散,但开环明明稳定
原因是反馈极性搞反了。feedback(G1, G2)默认负反馈,如果实际连接是正反馈,闭环极点会跑到右半平面。解决方法是显式检查feedback的第三个参数,正反馈传+1,或者用G_cl = G1/(1+G1*G2)手动算一遍对比。
5.4 现象:lsim报维度不匹配
原因是输入向量u和时间向量t的方向不一致,一个行向量一个列向量。解决方法是统一用u = u(:)和t = t(:)转成列向量,再传给lsim。另外u的长度必须等于t的长度,多一个少一个都会报错。
5.5 现象:奈奎斯特图判断稳定性和极点判断结果矛盾
原因是开环有积分环节时,奈奎斯特曲线在原点附近不闭合,直接数包围圈数会漏掉无穷大半圆的贡献。解决方法是先确认开环右半平面极点数,再补画原点附近的无穷大半圆,按完整曲线判断。极点判断更直接,两者矛盾时优先信pole的结果,回头查奈奎斯特图的画法。
6. 串联校正的设计取舍:为什么相位裕度不是越大越好
串联校正的实验把前面所有分析串起来:给定开环传递函数,设计校正装置让闭环满足性能指标。频率法校正的核心是调整开环伯德图的形状,用超前校正抬高中频段相位,用滞后校正压低低频段增益。这里有个设计取舍值得细想——相位裕度不是越大越好。
超前校正能提高相位裕度,改善超调,但会把截止频率往高处推,高频增益上升,抗噪声能力下降。滞后校正压低低频增益提高稳态精度,但会引入相位滞后,截止频率往低处走,响应变慢。工程上常见的做法是先定截止频率,再在截止频率附近补相位,而不是盲目追求 60° 以上的裕度。我一般会这么理解:相位裕度 45° 到 50° 是响应速度和稳定性的平衡点,超过 60° 系统确实更稳,但快速性损失往往不值得。
验证校正效果不能只看伯德图。建好闭环模型后跑一遍阶跃响应,看超调量、调节时间是否达标,再用margin确认裕度,两个域对得上才算设计成立。如果伯德图裕度漂亮但阶跃响应振荡,多半是校正环节引入了未建模的高频动态,或者截止频率附近有谐振峰没压住。
从那以后我每次做校正设计,都强制走一遍「开环伯德图定形状、闭环阶跃验指标、极点分布查稳定」三步,不跳过任何一步。这份实验文档把六个实验按建模、时域、频域、校正的顺序排下来,每一步都有对应的函数和曲线可复现,适合对着做一遍再回头读原理。希望帮到你。
本文还有配套的精品资源,点击获取