简介:一份自动控制原理课程的二阶系统阶跃响应与性能分析实验报告,适合自动化、电气及相关专业本科生在控制理论实验、MATLAB仿真练习或实验报告撰写时参考。报告以广州大学实验为背景,完整呈现了实验目的、实验内容、所用仪器、实验过程、原始程序与结果分析;围绕典型二阶系统闭环传递函数,利用MATLAB的step()命令分别绘制不同阻尼比ζ(0.1、0.4、0.7、1.0、1.3)和自然频率ωn(2、4、6、8、10)下的单位阶跃响应曲线,讨论参数对超调量与响应速度的影响;并设计了满足σp=10%、ts(5%)=2s的系统参数K与a,同时在曲线上标注性能指标;还对无速度反馈与带速度反馈两种控制结构进行了瞬态性能对比,涵盖超调量、调节时间、上升时间等指标。资源为单个PDF文件,大小约483KB,内容紧凑完整。已有3032人学习,适合用来对照实验要求理解二阶系统动态特性、掌握MATLAB时域仿真方法,或作为撰写同类实验报告的参考。
1. 二阶系统阶跃响应:自控原理实验报告的题眼
写实验报告时经常出现一个现象:仿真曲线画出来了,超调量却和书上公式对不上,调节时间也偏大,最后只能把理论值改成仿真值,却解释不了差异来自哪里。根因多半不是 MATLAB 算错,而是对二阶系统两个核心参数——阻尼比 ζ 和自然频率 ωn——的作用边界没摸清。阶跃响应是线性系统最直接、最容易复现的动态测试,标准二阶系统又恰好能用这两个参数封闭地描述全部动态性能:超调量、峰值时间、上升时间、调节时间。下面按“建模 → matlab 阶跃响应仿真 → 性能分析 → 实验报告落地”来拆,每一步都给出能直接运行的脚本和需要检查的指标。
2. 二阶系统建模:传递函数、阻尼比与自然频率
2.1 标准传递函数为什么写成这个形式
机械平移系统是最直观的例子:质量块 m 连接弹簧 k 和阻尼 c,外力 F(t) 作用下,位移 x 满足 m x'' + c x' + kx = F。对方程做拉普拉斯变换并整理,输出对输入的传函是 k/m 除以 (s² + (c/m)s + k/m)。为了让自控原理教材里的性能分析公式统一生效,把分子分母同时归一化,就得到标准二型:
G(s) = ωn² / (s² + 2ζωn s + ωn²)
其中 ωn = sqrt(k/m),ζ = c/(2√(km))。ωn 是不存在阻尼时的振荡角频率,ζ 是实际阻尼与临界阻尼的比值。两个参数一旦确定,系统的全部时域行为就确定了,这就是自控原理里反复强调“二型归一”的背景。分子写成 ωn² 而不是任意增益 K,是为了让单位阶跃的终值严格等于 1;如果实验对象经过简化后分子还带比例系数,应当先做归一化再套公式,否则超调量计算公式需要改写。同样的结构也出现在 RLC 串联电路和忽略电磁时间常数的直流电机转速回路中,所以标准二型覆盖的不只是机械系统。
在 MATLAB 里,标准二型传递函数用 tf 构造时最容易出错的是分母系数顺序:
% 标准二阶系统:zeta=0.5, wn=10 rad/s zeta = 0.5; wn = 10; G = tf(wn^2, [1, 2*zeta*wn, wn^2]); disp(G)tf 第一个参数是分子多项式系数,按 s 降幂排列,标量 wn^2 表示常系数分子;第二个参数是分母多项式系数,从最高次项 s² 开始写,[1, 2zetawn, wn^2] 展开就是 s² + 2ζωn s + ωn²。不少实验脚本写成 [2zetawn, wn^2] 或 [1, 2zetawn],前者丢掉 s² 项系数 1 会直接报错,后者漏掉常数项,把系统从二阶降成一阶,响应曲线和理论完全对不上。这个细节是实验报告“模型建立”章节里复核代码的第一道检查点。
2.2 特征根与阶跃响应形态的对应关系
标准二型的分母构成特征方程 s² + 2ζωn s + ωn² = 0,两根为 s1,2 = -ζωn ± ωn√(ζ² - 1)。根的位置直接决定阶跃响应是振荡还是单调,这是判断程序输出是否合理的依据。按 ζ 的取值,响应可以按下表归类:
| 阻尼比范围 | 特征根位置 | 阶跃响应形态 | 性能分析要点 |
|---|---|---|---|
| ζ > 1 过阻尼 | 两个不等负实根 | 单调上升,无超调 | 响应慢,不适用欠阻尼公式 |
| ζ = 1 临界阻尼 | 二重负实根 | 单调上升,无超调 | 无振荡前提下的最快收敛 |
| 0 < ζ < 1 欠阻尼 | 共轭复根,实部为负 | 衰减振荡,有超调 | 超调量、峰值时间公式只在此区成立 |
| ζ = 0 无阻尼 | 共轭纯虚根 | 等幅振荡,不衰减 | 只在理论分析中出现 |
实验报告通常选择欠阻尼区间来做阶跃响应观测,因为只有这个区间能看到完整的振荡过程和峰值点,也才能把超调量、峰值时间、调节时间三个指标同时演示出来。若 ζ 取到 1.5,响应没有峰值,只能分析上升时间和调节时间,报告呈现的信息量会减少。需要注意,ζ 越接近 0,等幅振荡越接近不衰减,仿真时长也必须加长,否则“调节时间”根本没有定义;自控原理课程设计里常见的问题就是把 ζ 取到 0.1 以下再强行算 ts,得到的数值没有任何工程参考价值。
2.3 时域指标定义与欠阻尼近似公式
对 0 < ζ < 1 的欠阻尼标准二型,阶跃响应输出为 y(t) = 1 - (e^(-ζωn t)/√(1-ζ²)) sin(ωd t + β),其中 ωd = ωn√(1-ζ²) 是阻尼振荡频率,β = arccos ζ。四个常用性能指标的定义与近似公式如下:
| 指标 | 定义 | 欠阻尼近似公式 |
|---|---|---|
| 峰值时间 tp | 输出到达第一个峰值的时间 | tp ≈ π/ωd |
| 超调量 Mp | (y(tp) - yss)/yss × 100% | Mp ≈ e^(-ζπ/√(1-ζ²)) × 100% |
| 上升时间 tr | 响应从 0 到首次到达稳态值的时间 | tr ≈ (π - β)/ωd |
| 调节时间 ts | 输出进入误差带且不再离开的时间 | 2% 误差带:ts ≈ 4/(ζωn);5%:ts ≈ 3/(ζωn) |
这四个公式是自控原理性能分析部分的骨架,但不是所有区间都精确。上升时间公式对应的是 0 到首次穿越稳态值的定义,MATLAB 里 stepinfo 的 RiseTime 却是 10% 到 90% 稳态值的时间,两套定义不同,做数据对照时不要直接相等。调节时间公式是对阶跃响应包络线的近似,适合 0.3 < ζ < 0.8 的范围。写实验报告时,我一般把公式、代入值、仿真值、偏差放在一张表里,偏差超过 5% 就回头检查采样步长和误差带设置,而不是直接改数据。峰值时间对采样精度最敏感,尤其当 ωn 较大时,若仿真步长接近振荡周期的 1/20,峰值读数会明显偏小,这会在第 3 章的 MATLAB 实验里直观表现出来。
3. 用MATLAB做二阶系统阶跃响应实验:从模型到指标提取
3.1 用 tf 与 step 搭最小实验环境
matlab 阶跃响应实验的第一步是建模型,第二步是用 step 出曲线。推荐把模型定义和绘图分开写,方便更换 ζ 和 ωn 后重复运行。最小可复现脚本如下:
% 参数区 zeta = 0.5; wn = 10; t = 0:0.005:3; % 时间栅格:0 到 3s,步长 5ms % 模型区 G = tf(wn^2, [1, 2*zeta*wn, wn^2]); % 阶跃响应计算 [y, t] = step(G, t); % 绘图区 plot(t, y, 'LineWidth', 1.5); grid on; xlabel('t (s)'); ylabel('y(t)'); title(['单位阶跃响应,zeta=', num2str(zeta), ', wn=', num2str(wn)]);step(G, t) 的第一个参数是传递函数,第二个参数是时间向量。使用显式时间向量可以保证多条曲线重合比较时采样点一致,也避免自动选点引起的峰值漏采。这里把仿真时长设为 3s,对应 ζωn = 5,时间常数是 0.2s,3s 相当于 15 个时间常数,足够让响应进入 2% 误差带并稳定下来。振荡周期 Td = 2π/ωd = 2π/(10×√(1-0.25)) ≈ 0.726s,5ms 的采样步长约为周期的 1/145,绘图时不会丢失峰值信息。如果只写 step(G) 不给时间栅格,MATLAB 也能自动选择合理范围,但当你把 ζ 调大或调小以后,自动范围会变,报告截图之间的可比性就没那么强,所以我一般都会显式给定时间向量。
3.2 用 stepinfo 提取超调量、峰值时间、调节时间
出图只是第一步,实验报告要写的是具体指标,直接调用 stepinfo 是最稳的做法:
% 获取阶跃响应的完整性能指标 S = stepinfo(G); fprintf('上升时间 tr = %.4f s\n', S.RiseTime); fprintf('调节时间 ts = %.4f s\n', S.SettlingTime); fprintf('超调量 Mp = %.2f %%\n', S.Overshoot); fprintf('峰值时间 tp = %.4f s\n', S.PeakTime); fprintf('峰值 y(tp) = %.4f\n', S.Peak); fprintf('稳态值 yss = %.4f\n', S.SteadyStateValue);stepinfo 返回一个结构体,RiseTime 默认按 10% 到 90% 稳态值计时,SettlingTime 默认按 2% 误差带计时,Overshoot 的输出单位是百分比而不是百分数,Peak 是输出最大值,SteadyStateValue 是最终稳态值。对 ζ=0.5、ωn=10 的系统,理论值是 tp≈0.3628s、Mp≈16.3%、ts(2%)≈0.8s;stepinfo 的结果会在这些值附近小幅浮动,浮动来源是离散采样时峰值不一定恰好落在某一个栅格点上,而不是仿真出了错。
这里有个容易被忽视的坑:stepinfo 默认 SettlingTimeThreshold 是 0.02,也就是 2% 误差带。如果实验指导书写的是 5%,直接用 4/(ζωn) 就会比指导书数据大 25% 左右。显式传参的方式是 S = stepinfo(G, 'SettlingTimeThreshold', 0.05);把这个参数写进实验脚本,等于在方法学部分明确交代了误差带定义,报告的可复核性会好很多。
3.3 阻尼比扫描:一次看清三条曲线随 ζ 怎么变
性能分析不能只看一个点,把 ζ 从 0.3 扫到 1.5,曲线簇能直接支撑“阻尼比影响动态性能”的结论。扫描脚本可以用循环加 hold on 实现:
wn = 10; zetaList = [0.3, 0.5, 0.707, 1.0, 1.5]; t = 0:0.005:2.5; legendStr = strings(1, numel(zetaList)); hold on; for i = 1:numel(zetaList) G = tf(wn^2, [1, 2*zetaList(i)*wn, wn^2]); step(G, t); legendStr(i) = sprintf('zeta=%.3f', zetaList(i)); end hold off; grid on; legend(legendStr, 'Location', 'southeast'); title('二阶系统阶跃响应随阻尼比的变化');zetaList 里的每个值都对应一条响应曲线,MATLAB 会把它们叠加在同一张图上。从这张图可以直接读出三个现象:超调量随 ζ 增大而减小,峰值时间随 ζ 增大而后移,调节时间则先减后增;ζ 超过 1 后曲线不再振荡,改成单调上升但尾部拖长。这组曲线是实验报告“结果与分析”部分最有说服力的素材,比单张曲线图信息量大得多。若希望曲线颜色稳定便于复现,可在循环内用 plot(t, y, 'Color', 某预设值) 替代直接调 step,但不影响指标数值。
对应扫描数据的典型数值如下,供校核脚本输出:
| ζ | 超调量 Mp | 峰值时间 tp(s) | 调节时间 ts(2%, s) |
|---|---|---|---|
| 0.3 | 37.2% | 0.329 | 1.333 |
| 0.5 | 16.3% | 0.363 | 0.800 |
| 0.707 | 4.32% | 0.444 | 0.566 |
| 1.0 | 0 | 无峰值 | 约 0.58(仿真) |
| 1.5 | 0 | 无峰值 | 约 1.05(仿真) |
表格里的 ts 对 ζ=1 和 ζ=1.5 已经不满足 4/(ζωn) 近似,所以单元格不填公式计算值。ζ=1 时响应单调衰减,调节时间主要被 e^(-ωn t)(1+ωn t) 拖慢,比欠阻尼区的 0.4s 明显更长;ζ=1.5 时主导极点为 -3.82,时间常数约 0.262s,所以 ts 反而比 ζ=1 更慢。这解释了“阻尼越大越快”的直觉只在欠阻尼区间内成立,过阻尼以后系统是被慢极点拖住的。
4. 阶跃响应性能分析的关键参数区间与常见误区
4.1 阻尼比 0.707 为什么被反复提起
自控原理的经典教案里,ζ=0.707 常被写成最佳阻尼比,理由是在标准二型中它能同时压低超调量和调节时间。ζ 从 0.5 升到 0.707,超调量从 16.3% 降到 4.32%,调节时间从 0.8s 缩短到 0.566s,这是一段“减振又加快”的甜区;继续增大阻尼,超调量已经趋近于零,调节时间反而开始变长。所以工程上常把 0.707 当作阻尼比的经验起点。
但实验报告结论里不要写“所有二阶系统都应取 0.707”。高阶系统约化成二型后还有未建模动态,若传递函数分子带零点,比如 G(s) = ωn²(s/α + 1)/(s² + 2ζωn s + ωn²),零点会显著增大超调量,同样的 ζ=0.707 可能得到 20% 以上的超调。实际电机转速环、温控回路里,取 ζ 在 0.5 到 0.8 之间,是根据系统带宽、稳态精度和输入信号类型折中出来的,不是靠一个数字打天下。写报告时建议把“仅对标准二型有效”这个适用条件写清楚,说明你理解公式的边界,这通常是答辩时老师喜欢听到的层次。
4.2 调节时间为什么有两种判据
阶跃响应性能分析中,误差带取 2% 还是 5%,得到的 ts 相差明显。2% 判据对应公式 4/(ζωn),5% 判据对应 3/(ζωn),两者相差 25%。MATLAB 的 stepinfo 默认按 2% 计算,这一点经常被忽略。若实验指导书要求“响应稳定在终值 5% 以内”,正确脚本写法是:
S5 = stepinfo(G, 'SettlingTimeThreshold', 0.05); fprintf('调节时间 ts(5%%) = %.4f s\n', S5.SettlingTime);对 ζ=0.5、ωn=10 的系统,2% 判据约 0.8s,5% 判据约 0.6s。报告里只写“调节时间 0.8s”而不标误差带,数据就没有可比性。我一般会在实验报告的性能分析表中把两套数据都列出,并注明“本报告后续分析均以 2% 误差带为准”,这样无论指导老师习惯哪种口径都有据可查。
4.3 实验报告里经常出错的三个细节
细节一,稳态值没等够。单位阶跃的标准二型终值应为 1,但仿真时长太短时 y(end) 还差几个点没到 1,超调量的基准偏小,百分数自然偏大。验证方法很简单:脚本里打印 S.SteadyStateValue,并确认它接近 1;如果不接近,就把 tFinal 再增大一倍重新跑。
细节二,峰值被采样漏掉。当仿真步长太大时,plot 连线会越过真实峰顶,导致 tp 和 Mp 读数偏小。建议把仿真步长控制在阻尼振荡周期的 1/50 以内,也就是 dt ≤ 2π/(50ωd),对 ωn=10、ζ=0.5 的系统就是 dt ≤ 0.0145s。实验脚本里刻意取 0.005s 就是给峰值留足余量。
细节三,没交代输入信号和初始状态。自控原理性能分析默认是单位阶跃输入、零初始状态。有些报告贴出曲线却不写输入幅值,老师无法判断超调量的基准到底是 1 还是别的值。在实验报告的方法学部分明确写一句“输入为单位阶跃,初始状态为零”,并把生成图像的那段脚本放进附录,是复核实验最有效的做法。
5. 能直接写进实验报告的MATLAB完整示例
当实验报告的“实验步骤”和“结果与分析”要求展示可复现代码时,下面这个脚本把所有要素收在一起:参数、模型、仿真、指标、参考线、标注。ζ 和 ωn 改一行即可复用。
% 二阶系统阶跃响应及性能分析——完整示例 % 参数区 zeta = 0.5; wn = 10; tFinal = 3; dt = 0.005; t = 0:dt:tFinal; % 模型区 G = tf(wn^2, [1, 2*zeta*wn, wn^2]); % 指标区:显式指定 2% 误差带 S = stepinfo(G, 'SettlingTimeThreshold', 0.02); % 绘图区 [y, t] = step(G, t); plot(t, y, 'b-', 'LineWidth', 1.6); hold on; yline(1, 'k--'); % 稳态值参考线 yline(1.02, 'r:'); % 2% 误差带上界 yline(0.98, 'r:'); % 2% 误差带下界 hold off; grid on; xlabel('t / s'); ylabel('y(t)'); title(sprintf('二阶系统阶跃响应:zeta=%.2f, wn=%.1f rad/s', zeta, wn)); text(0.4, 1.18, sprintf('Mp=%.2f%%\ntp=%.3fs\nts=%.3fs', ... S.Overshoot, S.PeakTime, S.SettlingTime), 'FontSize', 10);这段脚本把指标和图形放在一张图里,省去报告里频繁引用数字的麻烦。yline 画稳态值和 2% 误差带,读图时可以直接看调节时间是否在带内;text 会把超调量、峰值时间、调节时间三行文字标在曲线右侧,需要调整位置就把第一个参数 0.4 换成目标横坐标。若同时想导出 5% 判据的数据,追加一行即可:
% 导出全部指标,便于粘贴进实验表格 S5 = stepinfo(G, 'SettlingTimeThreshold', 0.05); results = struct2table(S5); disp(results);这一步能同时给出 2% 与 5% 两套调节时间数据,写报告时就可以在表格下方注明“调节时间按 2% 误差带计算”,口径闭环。运行完整个脚本后确认三点:曲线终值等于 1 且进入两条红虚线之间后不再穿出;Peak 值大于 1 时 Overshoot 为正;SettlingTime 远小于 tFinal 说明仿真时长留够。检查完再截图,实验报告里的每张图都有脚本对应,可复现性才算成立。
本文还有配套的精品资源,点击获取