
简介本资源为南京邮电大学《自动控制原理》课程实验报告Word文档面向修读自动控制、自动化相关课程的本科生与考研复习者可用于参考实验思路、对照Matlab仿真流程与整理实验结论。报告围绕时域分析、根轨迹、频率响应与串联校正四大模块展开实验一详细记录一阶系统在不同时间常数下的脉冲、阶跃、斜坡及单位加速度响应并通过改变阻尼比与自然频率观察二阶系统阶跃响应的振荡与幅值变化后续实验则借助rlocus、rlocfind等指令讨论极点分布、临界稳定增益与校正策略内容与教材章节对应紧密。压缩包内共1个docx文件约23KB篇幅26页含完整实验目的、步骤、指令与结果分析可直接借鉴排版与结论表述。目前已有364人学习下载适合作为实验预习、报告撰写与期末复习的参考材料。1. 一份 26 页的 docx 实验报告拆开其实是四段能跑的 MATLAB 代码很多人打开《南邮自动控制原理实验报告.docx》第一反应是照着截图抄曲线、抄结论交完事。等被问一句「这个临界增益 65.84 是怎么来的」就只能翻回文档里找那句现成答案。这份报告真正值钱的地方不在排版而在于它压着四条可以自己跑通的链路时域响应一阶、二阶、根轨迹rlocus/rlocfind、频率响应与稳定判据bode/nyquist/margin、串联校正超前与滞后。它面向的是正在做自动控制原理实验、课程设计的人也适合已经把控制理论忘得差不多、需要一套脚本快速把结论复现出来的工程师。对照胡寿松第七版教材的习题去做会发现实验里的现象和课本推导能一一对上——这件事比报告本身更有用。我打算按「建模指令 → 时域 → 根轨迹 → 频域 → 校正与交付」的顺序把这 26 页里含糊的地方用可运行代码补齐顺带标出文档里几处容易在验收时被挑出来的系数笔误。2. 时域分析tf/step/impulse 建模与一阶、二阶参数扫描2.1 传递函数建模tf 的系数向量规则MATLAB 里最基础的入口是tf它接收两个降幂排列的系数向量。分母缺项必须补 0比如 $s^3s$ 写成[1 0 1 0]而不是[1 1 0]这是新手最高频的翻车点。% 连续系统传递函数建模 G1 tf([1],[1 1]); % 1/(s1)一阶 G2 tf([1],[1 0 1]); % 1/(s^21)无阻尼二阶 G3 tf([1 2],[1 8 26 40 25]); % (s2)/(s^48s^326s^240s25) % 离散系统采样周期 0.1s Gd tf([0.0952],[1 -0.9048],0.1); % 常用查询 G3.Variable % 返回 s确认是连续系统 pole(G3) % 开环极点 [z,p,k] zpkdata(G3,v) % 零极点增益形式便于手算tf返回的是 tf 对象不是符号表达式别拿它去做diff。要看幅频特性用bode要看极零点分布用pzmap。zpkdata加v参数返回的是向量而不是元胞脚本里循环处理更方便——不加的话你会拿到{1x1 cell}新手常在这里卡住。2.2 一阶系统时间常数 T 对四类输入的响应实验里让 T 取 1、3、7分别看脉冲、阶跃、斜坡、单位加速度响应。阶跃和脉冲有现成函数斜坡和加速度得用lsim输入信号自己构造。Tlist [1 3 7]; t 0:0.01:20; for k 1:numel(Tlist) T Tlist(k); G tf([1],[T 1]); % 1/(Ts1) figure(Name,sprintf(T%gs,T)); subplot(2,2,1); impulse(G,t); title(单位脉冲); subplot(2,2,2); step(G,t); title(单位阶跃); subplot(2,2,3); lsim(G,t,t); title(单位斜坡); % 输入 ut subplot(2,2,4); lsim(G,0.5*t.^2,t); title(单位加速度); % 输入 ut^2/2 grid on; endlsim(sys,u,t)的第二个参数是输入序列长度必须和t一致否则报维度不匹配。单位加速度输入按定义是 $t^2/2$ 而不是 $t^2$写成后者响应幅值会差一倍。另外lsim只给曲线不给稳态值要读稳态误差得自己取y(end)或改用dcgain——一阶系统对阶跃的稳态增益是 1对斜坡的稳态误差是 T这个 T 就是时间常数本身也是判断「响应快慢」的唯一指标。2.3 二阶系统阻尼比与自然频率的双参数扫描标准二阶形式是 $\frac{\omega_n^2}{s^22\zeta\omega_n s\omega_n^2}$所以tf的分子是 $\omega_n^2$不是 1。这一步错了整套曲线都会变形。阻尼比 ζ自然频率 ωn分母系数[1, 2ζωn, ωn²]分子01[1 0 1][1]0.51[1 1 1][1]21[1 2 1][1]0.52[1 2 4][4]0.55[1 5 25][25]t 0:0.01:18; cases {[1 0 1],[1 1 1],[1 2 1],[1 2 4],[1 5 25]}; figure; hold on for i 1:numel(cases) den cases{i}; G tf(den(end), den); % 分子取常数项 wn^2 [y,~] step(G,t); plot(t,y,LineWidth,1.2,DisplayName,sprintf(den[%s],num2str(den))); end legend(Location,best); grid on; hold off注意tf(den(end), den)这个写法分母的常数项正好等于 $\omega_n^2$用den(end)当分子既省事又不会抄错。原报告里第 7 页把 ωn5 那组写成s^25s5、第 6 页把 ωn2 那组的结果显示成2/(s^22s2)都是转写时的系数笔误按标准式应该是s^25s25和4/(s^22s4)。这种错误在验收时最容易被盯上自己重跑一遍就能发现。扫完能得到的规律是ζ0 等幅振荡0ζ1 衰减振荡且 ζ 越小超调越大ζ1 临界无振荡ζ1 单调爬升没有超调。ωn 只影响速度不影响超调量——超调量只由 ζ 决定这条结论比报告里「自然频率越小响应幅值越大」的表述更准确。2.4 用 stepinfo 反推性能指标是否达标实验最后要求把 Tr0.56s、Tp1.29s、Ts5.46s、超调≤5% 四条同时满足。手工读图误差太大用stepinfo直接取数。G tf(45,[1 10 45]); % wnsqrt(45)≈6.708, zeta5/sqrt(45)≈0.745 S stepinfo(G); fprintf(Tr%.3fs Tp%.3fs Ts%.3fs Overshoot%.2f%%\n, ... S.RiseTime, S.SettlingTime, S.SettlingTime, S.Overshoot); % 验证解析式核对超调量 zeta 5/sqrt(45); sigma exp(-pi*zeta/sqrt(1-zeta^2))*100; fprintf(理论超调量 %.2f%%\n, sigma);stepinfo的RiseTime默认按 10%→90% 定义SettlingTime默认 2% 误差带老版本是 5%看 MATLAB 版本要留意。ζ0.745 时理论超调约 3%Tp≈0.70sTs≈0.8s四条全过。如果直接拿stepinfo里的RiseTime去和 0.56 比发现超了先确认误差带设定再看是不是把RiseTimeThreshold改了默认值。3. 根轨迹rlocus/rlocfind 求分离点、虚轴交点与临界增益3.1 从开环到闭环分母展开用 conv 更稳实验二给的开环是 $G(s)\frac{K(s2)}{(s^24s5)^2}$手写展开分母很容易少一项。用conv做多项式卷积既不出错又能看出结构。num [1 2]; den conv([1 4 5],[1 4 5]); % 平方直接卷积得到 [1 8 26 40 25] G tf(num, den); disp(den)conv本质上就是多项式乘法[1 4 5]自卷一次得到四次多项式。如果后续还要加极点直接再conv一次即可改成conv(conv([1 4 5],[1 4 5]),[1 10])就多了一个 s-10 的极点用来观察增加极点对根轨迹的拉扯效果。3.2 rlocus 与 rlocfind分离点和虚轴交点怎么定figure; rlocus(G); % 绘制根轨迹 axis equal; grid on; % 交互式取点鼠标在根轨迹上点选 [k, poles] rlocfind(G); fprintf(选中点 K %.4f\n, k); disp(poles);rlocfind靠鼠标点选手抖一下 K 能差好几个量级。原报告里分离点写成-2.0095±1.0186i、K0.0017带虚部说明取的并不是真正的分离点——分离点必然落在实轴上或者共轭对称地成对出现在复平面之外。想精确求解用rlocus配合find找实轴上的重合点或者直接对特征方程关于 K 求导联合求解更稳。虚轴交点可以用解析法交叉验证把 $sj\omega$ 代进特征方程实部虚部分别为零。也可以让margin帮你算。[Gm, Pm, Wcg, Wcp] margin(G); fprintf(临界增益 Kcr %.4f, 穿越频率 wcg %.4f rad/s\n, Gm, Wcg); % 与 rlocfind 手动点出的 65.8411 对照margin返回的Gm是线性增益裕度含义就是「当前开环再放大多少倍到达临界」。所以Gm数值上就等于临界增益 $K_{cr}$这里是 65.84 左右和手动点选吻合。Wcg是相位穿越频率也就是虚轴交点的频率 $\omega$约 3.6 rad/s和交点 $\pm3.6025j$ 对得上。3.3 用闭环极点验证稳定性别只看曲线判稳定性最直接的办法是把 K 代进去看闭环极点实部符号。Kcr 65.8411; sys_cl feedback(Kcr*G, 1); % 单位负反馈闭环 p pole(sys_cl); fprintf(最大实部 %.3e\n, max(real(p))); % 应接近 0说明处在临界线上 K_safe 0.8*Kcr; % 打八折留裕度 sys_cl2 feedback(K_safe*G,1); max(real(pole(sys_cl2))) % 应为负数闭环稳定feedback(G,1)是单位负反馈的标准写法第二个参数写成具体的 H(s) 就是非单位反馈。K 取临界值时最大实部会是一个极小量级1e-15 上下这才是「临界稳定」的数学含义而不是报告里那句「奈奎斯特曲线不包围 (-1,j0) 点」——那是频域判据的说法两者可以互证但不能混着写。3.4 sisotool 交叉校核与版本差异实验要求用交互界面取分离点和虚轴交点和前面结果比对。sisotool(G);关键参数指令法结果交互界面结果分离点处 K0.00170.000169临界增益 Kcr65.841171.8两列数据差得比较明显通常是界面取点精度和坐标轴缩放造成的。新版 MATLABR2016a 之后已经把sisotool标记为待淘汰推荐改用controlSystemDesigner命令名变了但底层的根轨迹/伯德图编辑逻辑一致。如果打开sisotool报「Undefined function」先确认装了 Control System Toolbox再用新命令试。界面上拖动闭环极点小红方块观察阶跃响应的做法很有价值把极点沿根轨迹从开环极点位置往左推响应从单调变振荡再变回单调能直观看到实轴上的主导极点是怎么接管动态的。报告给出的 K 区间是 (0, 71.8)对应衰减振荡和欠阻尼振荡同时成立的范围。4. 频率响应与稳定判据bode/margin/nyquist 三件套4.1 Nyquist 判据 ZP-R 的工程读法判据本身是 $ZP-R$P 是开环在右半平面的极点数R 是奈奎斯特曲线绕 $(-1,j0)$ 逆时针包围的圈数顺时针为负Z 是闭环右半平面极点数。Z0 就稳定。这里最容易混的是符号约定MATLAB 的nyquist画出来的图按顺时针读包围方向手算时按逆时针为正两边要统一。实验里那 8 个开环函数P 全是 0没有右半平面开环极点问题就退化成「曲线绕不绕 -1 点」。序号开环传递函数K1分母向量分子向量P结论11/[(s1)(2s1)][2 3 1][1]0稳定21/[(s1)(2s1)(3s1)][6 11 6 1][1]0稳定31/[s(s1)][1 1 0][1]0稳定4(s1)/[s(s1)(2s1)][2 3 1 0][1 1]0稳定51/[s²(s1)][1 1 0 0][1]0临界6(2s1)/[s²(s1)][1 1 0 0][2 1]0临界7(s1)/[s²(2s1)][2 1 0 0][1 1]0临界8(2s²3s1)/s²[1 0 0][2 3 1]0需算特征方程第 8 组值得单独说开环 $G(s)(2s^23s1)/s^2$ 有两个积分环节看起来像临界但闭环特征方程 $1G0$ 展开是 $3s^23s10$两根实部为 -0.5是稳定的。光看奈奎斯特曲线形状容易误判写特征方程roots一下最快。4.2 批量跑 Bode 与 Nyquist 的脚本骨架sysList { tf([1],[2 3 1]); tf([1],[6 11 6 1]); tf([1],[1 1 0]); tf([1 1],[2 3 1 0]); tf([1],[1 1 0 0]); tf([2 1],[1 1 0 0]); tf([1 1],[2 1 0 0]); tf([2 3 1],[1 0 0]); }; for i 1:numel(sysList) G sysList{i}; figure(Name,sprintf(Case %d,i)); subplot(1,2,1); margin(G); grid on; subplot(1,2,2); w logspace(-3,3,800); % 手动指定频率范围避免自动取点太稀疏 nyquist(G,w); grid on; p pole(G); P sum(real(p) 0); fprintf(Case %d: P%d, 开环极点%s\n, i, P, mat2str(round(p,3))); endmargin(G)会直接在图上标出幅值裕度和相位裕度返回值是[Gm, Pm, Wcg, Wcp]Gm是线性值要转 dB 得自己算20*log10(Gm)。nyquist(G,w)手动给频率向量很关键自动取点时高频段容易画得太稀看着像曲线没闭合其实只是采样不够。4.3 曲线不封闭怎么补奈奎斯特完整曲线包含 $\omega$ 从 $-\infty$ 到 $\infty$ 的走向MATLAB 默认只画正半轴负半轴要自己按共轭对称补。报告里要求「用文字说明所缺部分曲线的走向或在图上补全」实际做法有两种一种是把频率范围放宽到logspace(-4,4,2000)让曲线在图上自然收拢到原点附近读者能看出它从哪个方向进来、往哪个方向出去。另一种是显式画镜像w logspace(-3,3,600); [re,im] nyquist(G,w); re squeeze(re); im squeeze(im); figure; plot(re,im,b-,re,-im,b--,-1,0,r); axis equal; grid on; legend(正频段,负频段(镜像),-1j0);squeeze是必须的nyquist返回的数组带一个长度为 1 的维度不压掉画图会报错。红色十字标出 $(-1,j0)$曲线与它的几何关系一目了然判稳定时就靠这张图说话。4.4 幅值裕度与相位裕度的读取边界margin给出的两个裕度不是万能的。系统含有多个穿越频率时margin只返回最保守的那一组剩下的要自己从 Bode 图上读。做法是把bode的返回值和频率向量都取出来找相位曲线的穿越点。[mag,phase,wout] bode(G); mag squeeze(mag); phase squeeze(phase); idx find(diff(sign(phase 180)) ~ 0); % 相位穿越 -180 度的位置 for k idx fprintf(w%.3f rad/s 处相位%.2f 度, 幅值%.4f\n, ... wout(k), phase(k), mag(k)); endbode返回的mag是绝对值不是 dB要转 dB 同样乘 20log10。多穿越频率的系统比如含有谐振峰的高阶对象在串联校正时会频繁遇到靠单次margin读数容易漏掉不稳定区间。5. 串联校正参数整定与 docx 实验报告的交付细节5.1 超前与滞后校正的仿真对照实验四给的两组校正装置形式都很典型。超前校正 $G_{c2}(s)\frac{0.055s1}{0.005s1}$零点在 -18.2、极点在 -200零点在前极点在后的结构负责抬相位滞后校正 $G_{c2}(s)\frac{s1}{11s1}$极点在前零点在后用来压低高频增益、改善稳态精度。G tf(10,[1 1 0]); % 待校正对象 Gc_lead tf([0.055 1],[0.005 1]); % 超前环节 Gc_lag tf([1 1],[11 1]); % 滞后环节 G_open_lead 2*Gc_lead*G; % 含附加增益 2 G_open_lag 10*Gc_lag*G; figure; subplot(1,2,1); margin(G_open_lead); grid on; title(超前校正后); subplot(1,2,2); margin(G_open_lag); grid on; title(滞后校正后); % 闭环阶跃对比 sys1 feedback(G_open_lead,1); sys2 feedback(G_open_lag,1); figure; step(sys1,b,sys2,r,2); grid on; legend(超前校正,滞后校正); stepinfo(sys1).Overshoot stepinfo(sys1).SettlingTime2*Gc_lead*G里的系数 2 来自电路级的附加增益漏掉它整条幅频曲线会平移 6dB裕度读数全变。超前校正能把相位裕度提高十到几十度代价是高频增益上升、抗噪变差滞后校正基本不动中频相位靠降低剪切频率换稳定代价是响应变慢。对比stepinfo的超调量和调节时间就能看出这笔买卖划不划算。实际调参时我一般用controlSystemDesigner(G)打开设计器在根轨迹或 Bode 图上直接拖零极点实时看阶跃响应变化比反复改脚本快得多。5.2 docx 报告的公式与图表落地仿真跑通只是第一步交上去的是 docx。几个反复踩到的点MATLAB 图不要用CtrlC截图用exportgraphics(gcf,fig1.png,Resolution,300)存 300dpi 位图再插入缩放到 A4 宽度不会糊公式用 Word 自带公式编辑器插入直接从 MATLAB 命令窗复制文本贴进去等宽字体和正斜体会乱WPS 里如果默认新建 docx 的模板被改过会出现「新建文档样式丢失、粘贴公式变图片」的情况稳妥做法是直接打开原始 docx 另存为新文件而不是走「新建 → docx 文档」那条路。注意exportgraphics需要 R2020a 及以上版本旧版本用print(gcf,-dpng,-r300,fig1.png)替代效果基本一致。把这些环节串起来跑一遍一份实验报告从数据到成文的时间能压到两小时以内——这个效率在课程设计和毕业设计连着来的时候差别相当明显。本文还有配套的精品资源点击获取