自动控制原理实验全攻略:从传递函数到Simulink仿真与稳定性分析 简介这份文档面向具备基础控制理论与编程能力的高年级本科生、研究生及工程技术人员围绕自动控制原理实验教学系统讲解控制系统的建模、分析与校正方法。内容涵盖六个实验控制系统数学模型的MWORKS与MATLAB实现、时域与频域分析、典型环节动态性能与稳定性分析、频率特性测量、系统串联校正以及EF-Servo集成与滤波每个实验均配有目的、内容、步骤与思考题帮助读者掌握传递函数、状态空间、Simulink建模及频率法校正等核心技能。资源包为1个docx文档大小约1.43MB结构完整、便于对照操作。目前已有676人学习下载适合作为课程实验指导或自学参考读者可借助MATLAB与MWORKS工具逐步完成实验任务并通过思考题加深对控制系统工作原理的理解提升动手实践与系统分析能力。1. 从传递函数到仿真波形这套自动控制原理实验资源到底能干什么很多控制理论的学习者都有过这样的体验课堂上把劳斯判据、奈奎斯特判据背得滚瓜烂熟一到要用 MATLAB 或 MWORKS 把传递函数跑出阶跃响应曲线就不知道从哪下手。这份自动控制原理实验资源就是冲着这个断层来的。它把六个实验串成一条完整的链路——从传递函数、零极点增益、状态空间三种模型的建立与互相转换到时域指标测量、频域稳定性判定再到串联校正和 EF-Servo 集成滤波每一步都给了可运行的代码和 Simulink 连线方案。适合正在上控制理论实验课的高年级本科生和研究生也适合需要快速把控制模型跑起来验证的工程技术人员。下面按我实际拆这套资源的顺序把关键步骤和容易翻车的地方讲清楚。2. 三种数学模型与 Simulink 建模从 tf 到状态空间的完整链路2.1 为什么先建 TF 模型再转 ZPK 和 SS控制系统的数学模型有四种描述方式传递函数TF、零极点增益ZPK、状态空间SS和 Simulink 结构图。前三种是数学表达式MATLAB 和 MWORKS 都支持连续和离散两种类型。实际做实验时我一般先用 TF 模型把传递函数写进去因为分子分母系数向量最直观不容易搞错。然后再用zpk()和ss()转成其他形式对比不同模型下的系统特性。以实验一中传递函数 $G(s)\frac{4}{s(s1)^2(s3)}$ 为例展开分母后是 $s^45s^37s^23s$分子是常数 4。在 MATLAB 里这样写% 实验一建立TF模型并转换为ZPK和SS num 4; % 分子系数 den [1 5 7 3 0]; % 分母系数注意补零 G_tf tf(num, den); % 建立传递函数模型 G_zpk zpk(G_tf); % 转换为零极点增益模型 G_ss ss(G_tf); % 转换为状态空间模型 G_tf_back tf(G_ss); % 再从SS转回TF验证一致性这里有几个参数需要留意。den向量的长度决定了系统阶数缺项必须补零比如 $s^45s^37s^23s$ 没有常数项末尾要写 0。zpk()转换后无零点时零点向量为空MATLAB 会自动处理。ss()转换得到的状态空间模型不唯一但tf(ss(G))转回来应该和原传递函数在数值精度内一致——如果差异很大多半是分母系数写错了。MWORKS 这边的写法略有不同需要先加载TyControlSystems包# MWORKS 中建立传递函数模型 using TyControlSystems num 6 den [1 6 11 6] G tf(num, den) # 返回6 / (s^3 6s^2 11s 6)MWORKS 的tf()函数调用格式和 MATLAB 基本一致但包名和加载方式是关键区别。如果你在 MWORKS 里直接敲tf报未定义九成是忘了using TyControlSystems。2.2 子系统串联、并联与反馈连接的代码实现实验一第二题要求对两个子系统 $G_1(s)\frac{s1}{s^24s4}$ 和 $G_2(s)\frac{1}{s1}$ 求串联、并联和反馈连接。这三种连接在 MATLAB 里分别对应乘法、加法和feedback()函数% 定义两个子系统 G1 tf([1 1], [1 4 4]); % G1(s) (s1)/(s^24s4) G2 tf([1], [1 1]); % G2(s) 1/(s1) % 串联连接G_series G1 * G2 G_series G1 * G2; % 并联连接G_parallel G1 G2 G_parallel G1 G2; % 反馈连接默认负反馈G_feedback G1 / (1 G1*G2) G_feedback feedback(G1, G2);串联的顺序有讲究G1 * G2表示信号先经过 G1 再经过 G2和G2 * G1在标量系统里结果相同但在 MIMO 系统里顺序不能随意换。feedback(G1, G2)默认是负反馈前向通道是 G1反馈通道是 G2。如果要正反馈加第三个参数1。这里最容易翻车的是反馈连接时搞混前向和反馈通道——记住第一个参数是前向第二个是反馈。2.3 Simulink 建模单位负反馈系统的搭建与仿真实验一第三题要求建立开环传递函数 $G(s)\frac{2}{s(s4)}$ 的单位负反馈 Simulink 模型。Simulink 建模的核心步骤是打开 Library Browser拖入所需模块连线设参数运行仿真。需要的模块清单如下模块名称所在库用途StepSources产生单位阶跃输入Transfer FcnContinuous设置开环传递函数SumMath Operations实现反馈求和ScopeSink观测输出响应具体操作在 Simulink 中新建模型从 Sources 库拖入 Step 模块从 Continuous 库拖入 Transfer Fcn 模块从 Math Operations 拖入 Sum 模块设为--从 Sink 库拖入 Scope。连线时注意 Sum 模块的输出接 Transfer Fcn 的输入Transfer Fcn 的输出接 Scope 的同时反馈回 Sum 的负输入端。Transfer Fcn 的 Numerator 设为[2]Denominator 设为[1 4 0]。仿真时间默认 10 秒即可运行后双击 Scope 就能看到阶跃响应曲线。注意Transfer Fcn 模块的分母系数要按降幂排列缺项补零。s(s4)展开是s^24s所以分母写[1 4 0]末尾的 0 不能漏。3. 时域与频域分析从阶跃响应到奈奎斯特判据的实操3.1 二阶系统时域指标测量与参数影响分析实验二的核心是研究阻尼比 $\zeta$ 和无阻尼振荡频率 $\omega_n$ 对二阶系统动态性能的影响。典型二阶系统的闭环传递函数为$$G(s) \frac{\omega_n^2}{s^2 2\zeta\omega_n s \omega_n^2}$$在 MATLAB 里我一般用以下代码批量跑不同参数组合% 实验二二阶系统时域分析 wn 5; % 固定无阻尼振荡频率 zeta_list [0, 0.5, 0.707, 1, 1.5]; % 不同阻尼比 t 0:0.01:10; % 时间向量 figure; hold on; for i 1:length(zeta_list) zeta zeta_list(i); num wn^2; den [1, 2*zeta*wn, wn^2]; G tf(num, den); step(G, t); end legend(ζ0, ζ0.5, ζ0.707, ζ1, ζ1.5); hold off;这段代码跑完你能直观看到$\zeta0$ 时等幅振荡$\zeta0.5$ 时超调明显$\zeta0.707$ 时超调约 4.3%$\zeta1$ 时无超调但响应偏慢$\zeta1.5$ 时过阻尼响应更慢。性能指标可以用右键菜单里的 Characteristics 直接读——上升时间、峰值时间、超调量、调节时间都能在曲线上标出来。反过来固定 $\zeta0.5$改变 $\omega_n$ 取 0.5、1、3、5你会发现 $\omega_n$ 越大响应越快但超调量基本不变。这个结论在实验报告里经常被问到记住一句话$\zeta$ 决定超调$\omega_n$ 决定速度。3.2 状态空间模型的时域响应求解实验二第三题给了一个状态空间模型$$\dot{x} \begin{bmatrix} 0 1 0 \ 0 0 1 \ -6 -10 -4 \end{bmatrix} x \begin{bmatrix} 0 \ 0 \ 1 \end{bmatrix} u, \quad y \begin{bmatrix} 6 0 0 \end{bmatrix} x$$要求分别用step()和lsim()求状态响应和输出响应。代码这样写% 状态空间模型定义 A [0 1 0; 0 0 1; -6 -10 -4]; B [0; 0; 1]; C [6 0 0]; D 0; G ss(A, B, C, D); % 单位阶跃响应 t 0:0.01:10; [y_step, t_out, x_step] step(G, t); % 单位斜坡响应用lsim u_ramp t; % 斜坡输入 u(t) t [y_ramp, t_out2, x_ramp] lsim(G, u_ramp, t); % 绘图 figure; subplot(2,1,1); plot(t, x_step); title(状态响应阶跃输入); subplot(2,1,2); plot(t, y_step); title(输出响应阶跃输入);step()返回三个值输出y、时间向量t、状态向量x。如果系统是 TF 模型而不是 SS 模型x返回空矩阵。lsim()的第二个参数是输入向量长度必须和时间向量一致。这里斜坡输入直接取u t因为时间从 0 开始斜坡信号就是 $u(t)t$。3.3 奈奎斯特图与伯德图的绘制及稳定性判定实验二频域部分要求对开环传递函数 $G(s)\frac{2}{s^39s^214s}$ 画奈奎斯特图并用奈奎斯特判据判断闭环稳定性。同时用pole()求闭环极点做对比验证。% 频域分析奈奎斯特图与稳定性判定 num 2; den [1 9 14 0]; G_open tf(num, den); % 画奈奎斯特图 figure; nyquist(G_open); grid on; % 求闭环极点 G_closed feedback(G_open, 1); poles pole(G_closed); disp(闭环极点); disp(poles); % 画伯德图并标注裕度 figure; margin(G_open);奈奎斯特判据的核心是看开环奈奎斯特曲线包围 $(-1, j0)$ 点的圈数 $N$结合开环右半平面极点数 $P$闭环右半平面极点数 $Z P - N$。如果 $Z0$闭环稳定。用pole()求闭环极点更直接——所有极点实部为负则稳定。两种方法结果应该一致如果不一致先检查开环传递函数有没有写错再检查feedback()的符号。注意nyquist()画的是开环频率响应不是闭环。判断稳定性时用的是开环曲线包围临界点的圈数别搞混了。4. 典型环节电路模拟与频率特性测量MWORKS 实操4.1 六种典型环节的传递函数与电路参数对应实验三要求对比例、积分、比例积分、比例微分、惯性、比例积分微分六种环节做电路模拟和软件仿真。每种环节的传递函数和电路参数对应关系如下表环节类型传递函数电路参数关系实验参数比例(P)$K$$K R_1/R_0$$R_010k\Omega$积分(I)$\frac{1}{Ts}$$T R_0 C$$R_0100k\Omega, C1\mu F$比例积分(PI)$K(1\frac{1}{Ts})$$KR_1/R_0, TR_0C$按电路图取值比例微分(PD)$K(1Ts)$$K\frac{R_1R_2}{R_0}, T\frac{R_1R_2}{R_1R_2}C$$R_1R_210k\Omega$惯性$\frac{K}{Ts1}$$KR_1/R_0, TR_1C$$R_1200k\Omega, C1\mu F$PID$K_P(1\frac{1}{T_is}T_ds)$近似实现见正文多组电阻电容在 MWORKS 里对这些环节做阶跃响应仿真以惯性环节为例# MWORKS 惯性环节阶跃响应 using TyControlSystems K 1.0 T 0.2 num [K] den [T, 1] G tf(num, den) stepplot(G) # 绘制阶跃响应曲线惯性环节的阶跃响应按指数规律上升时间常数 $T$ 越大上升越慢。实验里取 $T0.2s$对应 $R_1200k\Omega$、$C1\mu F$。如果你在虚拟仿真软件里测得的曲线和 MWORKS 仿真对不上先检查电路参数是否和传递函数推导时用的一致。4.2 频率特性测量从半圆图反推传递函数实验四要求用实验方法测一阶惯性环节和典型二阶系统的频率特性再根据测得曲线反推传递函数。一阶惯性环节 $G(s)\frac{K}{Ts1}$ 的幅相频率特性曲线是一个半圆圆心在实轴 $K/2$ 处半径 $K/2$。从半圆图上反推参数的步骤找半圆与实轴的交点起点对应 $\omega0$幅值为 $K$所以 $K r(0)$。在半圆上任取一点 $\omega_k$量出该点的相角 $\phi(\omega_k)$。用公式 $T \frac{\tan\phi(\omega_k)}{\omega_k}$ 计算时间常数。在 MWORKS 里画奈奎斯特图验证# 一阶惯性环节频率特性 using TyControlSystems K 1.0 T 0.2 G tf([K], [T, 1]) nyquistplot(G) # 绘制奈奎斯特图应看到半圆 bodeplot(G) # 绘制伯德图幅频特性-20dB/dec衰减实际测量时频率点选得越靠近半圆顶部相角 -45° 附近算出的 $T$ 越准。如果选在 $\omega$ 很小或很大的点相角接近 0° 或 -90°$\tan\phi$ 对误差很敏感反推的 $T$ 波动会很大。5. 串联校正与 EF-Servo 集成滤波从理论到工程落地5.1 频率法串联校正的设计步骤实验五要求用频率法设计串联校正装置。串联校正的核心思路是根据期望的截止频率和相角裕度选择超前、滞后或超前-滞后校正网络改善系统的动态性能和稳态精度。设计步骤我一般这样走画未校正系统的伯德图读出截止频率 $\omega_c$ 和相角裕度 $\gamma$。根据性能要求确定期望的 $\omega_c$ 和 $\gamma$。计算需要补偿的相角 $\phi_m \gamma - \gamma \Delta$其中 $\Delta$ 是余量一般取 5°~10°。选择超前校正网络 $G_c(s)\frac{\alpha Ts1}{Ts1}$其中 $\alpha \frac{1\sin\phi_m}{1-\sin\phi_m}$。确定 $T$ 使校正后系统的截止频率落在期望位置。验证校正后系统的相角裕度和幅值裕度。MATLAB 代码框架% 串联超前校正设计 num 2; % 未校正系统分子 den [1 9 14 0]; % 未校正系统分母 G tf(num, den); % 读未校正系统的裕度 [Gm, Pm, Wcg, Wcp] margin(G); fprintf(未校正相角裕度%.1f°, 截止频率%.2f rad/s\n, Pm, Wcp); % 设计超前校正网络 phi_m 45 - Pm 8; % 需要补偿的相角加8°余量 alpha (1 sind(phi_m)) / (1 - sind(phi_m)); % 根据期望截止频率确定T % ...具体计算略按步骤3-5执行 % 验证校正后系统 Gc tf([alpha*T, 1], [T, 1]); G_new Gc * G; margin(G_new);校正前后一定要用margin()对比相角裕度和幅值裕度。如果校正后相角裕度反而变小多半是超前网络的零点极点位置放反了或者 $\alpha$ 算错了。5.2 EF-Servo 集成与滤波的注意事项实验六涉及 EF-Servo 集成和滤波这部分更偏工程实现。EF-Servo 通常指某种伺服驱动集成环境滤波环节用于抑制噪声和机械谐振。在 MATLAB 里做滤波仿真时我一般先用tf建立滤波器模型再和伺服系统串联观察阶跃响应和频率响应。% EF-Servo 滤波环节仿真 % 二阶低通滤波器 wn_filter 100; % 滤波器自然频率 zeta_filter 0.707; % 滤波器阻尼比 G_filter tf(wn_filter^2, [1, 2*zeta_filter*wn_filter, wn_filter^2]); % 与伺服系统串联 G_servo tf([10], [0.01, 1]); % 简化伺服模型 G_total G_filter * G_servo; % 对比滤波前后 figure; bode(G_servo, G_total); legend(未滤波, 滤波后);滤波器的截止频率要选在伺服系统带宽之上、噪声频率之下。截止频率太低会拖慢系统响应太高则滤不掉噪声。实际调试时我一般从伺服带宽的 2~5 倍开始试看阶跃响应的上升时间和超调量是否可接受。6. 几个容易翻车的细节和我的固定检查习惯这套实验做下来有几个坑我踩过不止一次这里列出来供参考。第一个坑传递函数分母缺项忘补零。比如 $G(s)\frac{2}{s(s4)}$分母展开是 $s^24s$系数向量必须写[1 4 0]末尾的 0 代表常数项为零。如果写成[1 4]MATLAB 会当成一阶系统处理仿真结果完全不对。现象是阶跃响应曲线形状怪异原因就是分母阶数少了一阶。解决办法很简单写den之前先把传递函数展开成降幂多项式逐项对照。第二个坑MWORKS 里忘了加载 TyControlSystems 包。现象是敲tf或zpk报未定义函数原因是 MWORKS 的控制系统函数在独立包里不像 MATLAB 那样默认加载。每次新建 jl 文件第一行就写using TyControlSystems养成习惯。第三个坑反馈连接时前向和反馈通道搞反。feedback(G1, G2)默认 G1 是前向G2 是反馈。如果实际系统是 G2 在前向、G1 在反馈结果就错了。现象是闭环传递函数和手算对不上。解决办法画方块图确认信号流向或者用feedback(G2, G1)再算一遍对比。第四个坑奈奎斯特判据的包围圈数数错。奈奎斯特曲线可能多次穿越负实轴数包围圈数时容易漏。现象是判据结论和pole()求闭环极点的结论矛盾。我一般以pole()的结果为准奈奎斯特图用来辅助理解。如果两者不一致先检查开环传递函数有没有写错再检查feedback()的符号。第五个坑频率特性测量时选点太偏。反推时间常数 $T$ 时如果选的频率点相角接近 0° 或 -90°$\tan\phi$ 对测量误差极其敏感算出的 $T$ 可能差好几倍。现象是同一环节测两次得到不同的 $T$。解决办法选相角在 -30° 到 -60° 之间的点最好在 -45° 附近这时候 $\tan\phi \approx 1$误差最小。从那以后我每次建完模型都强制走一遍检查清单分母系数补零了吗包加载了吗反馈通道对吗闭环极点实部为负吗频率特性选点合理吗这五步走完基本不会出大错。希望帮到你。本文还有配套的精品资源点击获取