简介:这份文档面向具备控制理论基础与编程能力的高年级本科生、研究生及工程技术人员,围绕自动控制原理实验教学,系统讲解控制系统的建模、分析与校正方法,帮助读者在MATLAB与MWORKS环境下完成从数学模型建立到性能验证的完整训练。资源包内含1个docx文件,约1.43MB,按实验一至实验六组织内容,依次覆盖传递函数与状态空间模型的建立、时域与频域分析、典型环节动态性能与稳定性、频率特性测量、频率法串联校正,以及EF-Servo集成与滤波,每个实验均配有目的、内容、步骤与思考题。已有677人学习,适合对照文档动手操作、逐步完成任务并结合思考题加深理解,从而熟悉Simulink建模流程与两款工具的使用,提升系统分析与实践能力。
1. 传递函数不是公式,是控制系统的“身份证”
很多人第一次在 MATLAB 里敲下tf(num, den),看到命令窗回显一个分式,就以为建模结束了。但真正让控制系统“跑起来”的,从来不是那个分式本身,而是分式背后那套把微分方程压缩成代数运算的表示体系。自动控制原理实验里反复出现的 TF、ZPK、SS 三种模型,本质上是在回答同一个问题:一个动态系统,到底该用什么样的“身份证”来描述,才能让后续的时域分析、频域分析、稳定性判断都建立在同一套可计算的基础上。搞懂这件事,你才会明白为什么ss(tf(G))转出来的状态空间矩阵不唯一,为什么feedback(G1, G2)默认是负反馈,为什么 Simulink 里连一根线都有方向。这份实验文档把六个实验串成一条线,从建模到校正,恰好是这条认知路径的完整走法。
2. 三种 LTI 模型:为什么同一个系统要有三张脸
线性定常系统的传递函数模型、零极点增益模型、状态空间模型,在数学上等价,在工程上却各有各的用武之地。理解它们之间的转换关系,比记住tf、zpk、ss三个函数的调用格式重要得多。
2.1 传递函数模型:把微分方程变成多项式比值
传递函数的核心操作是对线性定常系统的微分方程做拉普拉斯变换,把时域的微积分运算变成复频域的代数运算。一个 n 阶系统在零初始条件下,输出与输入的拉普拉斯变换之比就是一个有理分式,分子分母都是 s 的多项式。MATLAB 和 MWORKS 里用两个行向量num和den分别存分子分母的系数,按 s 的降幂排列。
% 建立 G(s) = 6 / (s^3 + 6s^2 + 11s + 6) 的传递函数模型 num = 6; den = [1 6 11 6]; % 系数按 s^3, s^2, s^1, s^0 排列 G = tf(num, den);这里有个容易被忽略的细节:den的第一个元素必须是 1,或者至少是非零值,因为它对应最高次项的系数。如果系统有缺项,比如s^3 + 11s + 6没有s^2项,系数向量里必须补 0,写成[1 0 11 6]。漏掉这个 0,多项式阶次就错了,后面算出来的极点全是错的。这是血泪经验里最常见的一类翻车。
传递函数模型的优点是直观,分子分母的系数直接对应系统的微分方程结构,频域分析时把s = jω代进去就能算频率响应。缺点是它只适用于单输入单输出系统,多变量系统没法用两个向量描述。
2.2 零极点增益模型:把结构信息显式暴露出来
把传递函数的分子分母分别因式分解,就得到零极点增益模型。零点让传递函数取零,极点让传递函数趋于无穷,增益是整体的缩放系数。这个模型的价值在于,系统的动态特性几乎完全由极点在复平面上的位置决定。
% G(s) = 6 / [(s+1)(s+2)(s+3)] z = []; % 无零点时留空 p = [-1 -2 -3]; % 极点位置 k = 6; % 增益 G = zpk(z, p, k);极点位置直接告诉你系统的稳定性:全部在左半平面则渐近稳定,有右半平面极点则不稳定,虚轴上有一对共轭极点则临界稳定。阻尼比和无阻尼振荡频率这两个二阶系统参数,本质上就是从共轭极点的位置反推出来的。实验二里改变阻尼比 ζ 观察超调量变化,改变的就是极点在复平面上的角度。
零极点模型还有一个实用场景:串联校正。实验五的频率法串联校正,设计过程就是在开环传递函数上添加零极点,用零点的相位超前补偿系统的相位滞后。用zpk模型做这件事,比在num、den向量上手工做多项式乘法清晰得多。
2.3 状态空间模型:为什么它不唯一
状态空间模型用一阶微分方程组描述系统,矩阵形式是 ẋ = Ax + Bu,y = Cx + Du。A 是系统矩阵,B 是输入矩阵,C 是输出矩阵,D 是直接传递矩阵。对于传递函数模型,ss(G)能把它转成一种特定形式的状态空间实现,通常叫可控标准型。
% 将传递函数转为状态空间模型 Gtf = tf(5, [1 4 5 2]); Gss = ss(Gtf); % Gss.A, Gss.B, Gss.C, Gss.D 分别是四个矩阵关键点在于:同一个传递函数对应的状态空间模型有无穷多个。因为状态变量的选取不是唯一的,你可以对状态做任意可逆线性变换 x' = Px,得到一组新的 A' = PAP⁻¹、B' = PB、C' = CP⁻¹、D' = D,传递函数完全不变。ss(tf(G))只是给出了其中一种规范形式,不是唯一答案。实验一里要求把传递函数转成状态空间再转回传递函数做比较,你会发现转回来的系数有微小的数值误差,比如1.9999999999999993这种,这是浮点运算的正常现象,不是模型建错了。
状态空间模型的真正优势在多变量系统和现代控制理论。状态方程能同时处理多个输入多个输出,能直接做能控性、能观性分析,能设计状态反馈和观测器。实验六的 EF-Servo 集成与滤波,底层用的就是状态空间那套框架。
提示:
ss转换出来的状态空间模型,A 矩阵的特征值就是系统的极点,和pole(G)的结果一致。可以用eig(Gss.A)验证,这是检查转换是否正确的一个快速手段。
2.4 模型连接:串联、并联、反馈的代数本质
实验一要求求两个子系统的串联、并联、反馈连接。这三种连接在传递函数层面就是三种代数运算:串联是相乘,并联是相加,反馈是 G1/(1+G1·G2)。MATLAB 里分别用G1*G2、G1+G2、feedback(G1, G2)实现。
G1 = tf([1 1], [1 4 4]); % (s+1)/(s^2+4s+4) G2 = tf(1, [1 1]); % 1/(s+1) G_series = G1 * G2; % 串联 G_parallel = G1 + G2; % 并联 G_feedback = feedback(G1, G2); % 负反馈,默认feedback函数默认是负反馈,因为工程上绝大多数闭环系统都是负反馈结构。如果要正反馈,需要显式传第三个参数+1。这个默认值的设计动机很直接:负反馈是控制系统能稳定工作的基础,正反馈通常只出现在振荡器或特定补偿结构里。实验里建立单位负反馈系统时,feedback(G, 1)的第二个参数 1 表示反馈通道传递函数为 1,即单位反馈。
串联连接的顺序有讲究。G1*G2和G2*G1在标量传递函数下结果相同,但在状态空间模型下,矩阵维度必须匹配,顺序不能随意交换。这是从传递函数思维切换到状态空间思维时容易踩的坑。
3. 时域与频域分析:极点和零点到底在告诉你什么
建模只是起点,分析才是目的。时域分析看系统对时间信号的响应,频域分析看系统对不同频率正弦信号的稳态响应,两者从不同侧面描述同一个系统,但底层都归结到极零点分布。
3.1 二阶系统的两个参数:阻尼比和无阻尼振荡频率
典型二阶系统的闭环传递函数标准形式是 ωn² / (s² + 2ζωn·s + ωn²)。ζ 是阻尼比,ωn 是无阻尼振荡频率。这两个参数决定了极点的位置:s = -ζωn ± jωn√(1-ζ²)。
ζ 的取值直接决定响应形态:ζ = 0 时无阻尼,等幅振荡;0 < ζ < 1 时欠阻尼,衰减振荡;ζ = 1 时临界阻尼,单调上升无超调;ζ > 1 时过阻尼,单调上升但更慢。实验二要求取 ζ = 0、0.5、0.707、1、1.5 分别画阶跃响应,就是在观察极点从虚轴向左半平面移动时,响应从振荡到单调的连续变化。
% 固定 wn = 5,改变阻尼比观察阶跃响应 wn = 5; zita_list = [0, 0.5, 0.707, 1, 1.5]; t = 0:0.01:5; figure; hold on; for zita = zita_list num = wn^2; den = [1, 2*zita*wn, wn^2]; G = tf(num, den); step(G, t); end legend('ζ=0','ζ=0.5','ζ=0.707','ζ=1','ζ=1.5');这段代码里den = [1, 2*zita*wn, wn^2]对应的是闭环传递函数的分母。注意实验文档里给的参考代码是先建开环再feedback闭环,两种写法等价,但直接写闭环分母更简洁。ζ = 0.707 对应的是最佳阻尼比,超调量约 4.3%,上升时间和调节时间取得较好的折中,工程上常作为设计目标。
ωn 的影响则体现在响应速度上。ζ 固定时,ωn 越大,极点离虚轴越远,响应越快,上升时间和峰值时间都缩短,但超调量基本不变(因为超调量只取决于 ζ)。实验二要求固定 ζ 改变 ωn 取 0.5、1、3、5,观察的就是这个规律。
3.2 时域性能指标的数值求解:step、lsim、initial 的分工
MATLAB 提供了四个求系统响应的函数,分工明确:step求单位阶跃响应,impulse求单位脉冲响应,lsim求任意输入响应,initial求零输入响应。实验二里用step求阶跃响应,用lsim求斜坡输入响应,用initial求初始状态引起的响应。
% 状态空间模型 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_total = yo + yu; x_total = xo + xu;这里体现的是线性系统最重要的性质之一:全响应可以分解为零输入响应和零状态响应之和。initial只算初始状态的作用,lsim只算输入的作用,两者相加就是完整响应。这个分解在理论分析里叫叠加原理,在数值计算里就是两次函数调用加一次向量加法。
step和lsim的返回值有三个:输出 y、时间向量 t、状态向量 x。如果系统是传递函数模型,第三个返回值 x 是空矩阵,因为传递函数模型不显式包含状态信息。只有状态空间模型才能拿到状态轨迹,这是状态空间模型在分析能力上的优势。
3.3 稳定性判断:极点、特征值、奈奎斯特判据的三条路径
实验二要求判断给定系统的稳定性,实验三要求用奈奎斯特判据判断闭环稳定性。这两件事本质上是同一个问题的不同解法。
代数判据看极点位置:传递函数的全部极点都在左半平面,系统渐近稳定。pole(G)直接返回极点,eig(A)返回状态矩阵的特征值,roots(den)返回分母多项式的根,三个函数在数值上等价。
G = tf(2, [1 9 14 0]); % 开环传递函数 p = pole(G); % 开环极点 G_cl = feedback(G, 1); % 闭环系统 p_cl = pole(G_cl); % 闭环极点奈奎斯特判据则是从开环频率特性判断闭环稳定性:闭环系统稳定的充要条件是,奈奎斯特曲线包围临界点 (-1, j0) 的圈数等于开环右半平面极点数。对于开环稳定的系统(右半平面极点数为零),曲线不包围 (-1, j0) 就闭环稳定。nyquist(G)画曲线,margin(G)给出幅值裕度和相位裕度,后者是工程上更常用的稳定性余量指标。
注意:
nyquist画出来的曲线在极高频段可能因为数值精度出现虚假的环绕,判断时要结合pole(feedback(G,1))的结果交叉验证,不要只看图。
3.4 频率特性测量:从半圆图反推传递函数
实验四要求用实验方法测一阶惯性环节的频率特性,再从曲线反推传递函数。一阶惯性环节 G(s) = K/(Ts+1) 的幅相频率特性曲线是一个半圆,圆心在 (K/2, 0),半径 K/2。从半圆与实轴的交点读出 K,从曲线上任取一点 ωk 读出对应的相角 φk,用 T = tan(φk)/ωk 算出时间常数。
这个方法的底层逻辑是:频率特性 G(jω) 是 ω 的复函数,实部和虚部满足一个圆方程。实验测得的幅值和相角数据点,理论上都落在这个半圆上。实际测量有噪声,数据点会偏离理想圆,所以通常用最小二乘法拟合圆参数,再反推 K 和 T。软件仿真得到的曲线是理想半圆,和实验测量结果对比,差异就来自电路元件的非理想特性和测量误差。
4. 串联校正与 Simulink 建模:从分析到设计的跨越
前面几个实验都在做分析,给定系统求性能。实验五和实验六开始做设计,给定性能要求反推系统参数。这是控制工程从“看懂”到“会改”的关键一步。
4.1 频率法串联校正:用零极点重塑开环特性
串联校正的基本思路是在开环传递函数前面串一个校正装置 Gc(s),让校正后的开环频率特性满足设计要求。频率法校正通常用超前校正、滞后校正或滞后-超前校正。
超前校正的传递函数是 Gc(s) = (αTs+1)/(Ts+1),α > 1,提供一个正相角,在穿越频率附近抬高相位,增加相位裕度。滞后校正则是 α < 1,在低频段提高增益、高频段衰减,改善稳态精度而不牺牲稳定性。
% 超前校正示例:给定开环 G,设计超前校正 Gc s = tf('s'); G = 2 / (s*(s+4)); % 开环传递函数 % 设计目标:相位裕度不低于 50 度 % 超前校正参数(示例值,实际需根据 margin 迭代调整) alpha = 4; T = 0.1; Gc = (alpha*T*s + 1) / (T*s + 1); G_open = Gc * G; margin(G_open); % 检查校正后的相位裕度校正设计的核心是迭代:先算未校正系统的margin,看相位裕度差多少,据此估算需要的超前角,再定 α 和 T,然后重新算margin验证。实验五的思考题问“消除和减小稳态误差的措施有哪些”,答案就落在校正装置的低频增益上:增大开环增益能减小稳态误差,但会降低相位裕度,所以需要校正装置在低频段提供高增益、在高频段衰减,这就是滞后校正的用武之地。
4.2 Simulink 建模:图形化背后的数值求解
Simulink 的图形化建模看起来是把传递函数方块用线连起来,但底层做的事情是:把连续系统离散化,用数值积分算法逐步求解状态方程。每个方块在仿真步长内计算一次输出,信号线传递的是当前步的数值。
实验一要求建立单位负反馈系统的 Simulink 模型,输入单位阶跃,输出接示波器。这个模型包含四个基本模块:Step(信号源)、Gain(增益,可选)、Transfer Fcn(传递函数)、Scope(示波器)。连线时要注意方向:Step 的输出接 Transfer Fcn 的输入,Transfer Fcn 的输出接 Scope,反馈线从输出拉回输入端,经过一个求和模块(Sum)做减法。
Simulink 仿真的关键参数是求解器步长。默认的变步长求解器(如 ode45)会根据系统动态自动调整步长,刚性系统可能需要换成 ode15s。步长太大,高频动态被漏掉,响应曲线失真;步长太小,仿真时间成倍增加。实验里观察典型环节的阶跃响应,用默认变步长通常够用,但如果系统有快速衰减的模态,手动设最大步长会更可靠。
4.3 典型环节的电路模拟:传递函数和电路参数的对应
实验三要求设计典型环节的模拟电路,求传递函数,再做软件仿真对比。比例环节、积分环节、惯性环节的电路都是运放加电阻电容,传递函数里的 K 和 T 直接由电阻比值和 RC 时间常数决定。
以积分环节为例,传递函数是 1/(Ts),电路是运放反相输入接电阻 R、反馈接电容 C,T = RC。实验参数 R = 100kΩ、C = 1μF,算出来 T = 0.1s。比例积分环节的 K = R1/R0,T = R0C,两个参数分别由两组电阻电容决定。这种“传递函数参数 ↔ 电路元件参数”的对应关系,是模拟控制时代留下的设计方法,现在虽然用数字控制器实现,但理解这层对应关系,对读懂老图纸和老设备仍然有用。
实际 PD 和 PID 环节的电路是近似的,因为理想微分在物理上不可实现(高频增益无穷大,噪声会被无限放大)。实际电路里串一个小电阻限制高频增益,传递函数从理想的 K(1+Ts) 变成带惯性环节的近似形式。实验文档里特别标注了“其模拟电路是近似的”,这个细节值得注意:理论模型和实际电路的差异,往往就藏在这些“近似”里。
5. 避坑与排查:实验里最容易翻车的几个地方
5.1 系数向量漏补零导致阶次错误
现象:建立传递函数后,pole(G)算出来的极点个数比预期少,或者阶跃响应形态完全不对。
原因:分母多项式有缺项时,系数向量没有补零。比如 s³ + 11s + 6 缺 s² 项,写成[1 11 6]就变成了二次多项式。
解决:按降幂逐项检查,缺哪次项就在对应位置补 0。建完模型后用size(den)或length(den)确认向量长度等于阶次加一。
5.2 状态空间转传递函数出现微小数值误差
现象:tf(ss(G))转回来的分子分母系数和原传递函数不完全相等,出现1.9999999999999993这类值。
原因:浮点运算的舍入误差,状态空间转换涉及矩阵求逆和特征值计算,数值精度有限。
解决:这是正常现象,不是模型错误。比较时用zpk形式看零极点是否一致,或者用minreal做最小实现消去接近零的极零点对。判断相等用容差比较,不要用==。
5.3 feedback 默认负反馈被误认为正反馈
现象:闭环系统的阶跃响应发散,但理论上应该是稳定的。
原因:feedback(G1, G2)默认是负反馈,如果实际连接是正反馈结构,结果就错了。或者反馈通道的符号搞反了。
解决:确认反馈极性。正反馈要显式写feedback(G1, G2, +1)。建完闭环后用pole检查极点是否都在左半平面,和理论分析对照。
5.4 Simulink 仿真步长不当导致曲线失真
现象:示波器上的响应曲线看起来有毛刺,或者快速变化的片段被平滑掉了。
原因:变步长求解器的最大步长设得太大,或者用了不适合刚性系统的求解器。
解决:在模型配置参数里限制最大步长(如设为系统最小时间常数的十分之一),刚性系统换ode15s。对比不同步长下的曲线,确认结果收敛。
5.5 频率特性测量数据偏离理论半圆
现象:实验测得的幅相曲线不是标准半圆,数据点散乱。
原因:测量噪声、电路元件容差、运放非理想特性、信号源内阻影响。
解决:多点测量取平均,用最小二乘拟合圆参数,剔除明显偏离的异常点。和软件仿真的理想曲线对比时,重点关注趋势是否一致,不要苛求逐点吻合。
6. 从实验到工程:模型精度和计算代价的取舍
做完这六个实验,回头看一个贯穿始终的问题:为什么同一个系统要有三种模型,为什么 Simulink 要用数值仿真而不是解析求解。答案落在精度和代价的权衡上。
传递函数模型做频域分析最方便,把 s 换成 jω 就能算,但它只适用于单输入单输出、线性定常系统。状态空间模型能处理多变量、能分析内部状态,但矩阵运算的计算量随阶次增长很快。Simulink 的数值仿真能处理非线性、时变、混杂系统,代价是每次仿真都要从头积分,没法像解析解那样直接给出参数化表达式。
实验里有个细节很能说明问题:二阶系统阶跃响应的性能指标,理论上可以用 ζ 和 ωn 的公式直接算,但实验要求用step画曲线再从曲线上读。两种方法的结果应该一致,差异来自数值求解的步长和读图的精度。工程上选哪种,取决于你要的是快速估算还是精确验证。快速估算用公式,精确验证用仿真,两者互为校验。
我一般会这么理解:解析模型是地图,数值仿真是实地走一遍。地图告诉你大致方向和关键地标,实地走才能发现地图上没标的坑。做控制器设计时,先用解析模型算参数初值,再用仿真验证,最后上实物调试,三步缺一不可。从那以后我每次建完模型,都强制先用pole看一眼极点分布,再用step跑一遍阶跃响应,两个结果对不上就先查模型,不往下走。希望帮到你。
本文还有配套的精品资源,点击获取