简介:这份资料是自动化专业《自动控制原理》课程设计的完整报告,面向正在做温度控制系统校正题目的本科生与课程设计指导教师,可直接作为选题参考与写作模板。压缩包内含1个doc文档,约317KB,篇幅紧凑,正文按引言、系统开环传递函数分析、Matlab传递函数分析、超前校正装置设计、校正后系统仿真等章节展开,任务书与目录结构齐全。内容围绕某温箱开环传递函数展开,逐项拆解比例、积分、惯性、延迟四个环节,并用Matlab绘制波特图与奈奎斯特图、计算相角裕度和幅值裕度,再设计超前校正装置使相角裕度提高10度,最后给出阶跃响应仿真曲线,读者可据此掌握从建模、分析到校正、验证的完整流程。目前已有1088人学习下载,适合需要快速理清设计思路、核对计算步骤与报告撰写框架的同学参考借鉴。
1. 温箱温度控制:一个纯延迟系统为什么会让超前校正卡住
实验室里那台温箱,加热丝通电后不会立刻见效,热量传到传感器要花时间。课程设计给的模型把这个过程抽象成 Gp(s)=e^{-2s}/[s(5s+1)],积分环节来自热容积累,惯性环节来自热阻,纯延迟 e^{-2s} 则对应 2 秒的传输滞后。任务看起来直白:用 Matlab 画 Bode 图和 Nyquist 图,算出相角裕度,再设计超前校正把相角裕度抬 10 度。但把参数代进去跑一遍,未校正系统的相角裕度是 -27.6°,幅值裕度只有 0.54,闭环响应会剧烈振荡。纯延迟的相位是 -2ω 弧度,随频率线性下降,超前网络能提供的最大相角又受分度系数 a 限制,补偿角不够时怎么调都过不了。这份记录适合正在做自动控制原理课程设计、需要复现 Bode/Nyquist/Simulink 全流程的人,也适合想看清纯延迟系统校正边界的人。
2. 开环传递函数拆解:积分、惯性、延迟三件套的频域手算
2.1 四个环节的幅频与相频表达式
传递函数 Gp(s)=e^{-2s}/[s(5s+1)] 可以拆成比例 1、积分 1/s、惯性 1/(5s+1)、延迟 e^{-2s}。比例环节的幅频是 1,相频是 0°;积分环节幅频 1/ω,相频 -90°;惯性环节幅频 1/√(1+25ω²),相频 -arctan(5ω);延迟环节幅频仍是 1,相频 -2ω 弧度,换成角度就是 -114.6ω。把各环节幅频相乘、相频相加,得到总幅频 A(ω)=1/[ω√(1+25ω²)],总相频 φ(ω)=-90°-arctan(5ω)-114.6ω°。这里有个容易记混的点:延迟环节不改变幅值,只在相频上“扣分”,所以 Bode 幅频曲线和没有延迟时一模一样,但相频曲线会被拉下去。
| 环节 | 传递函数 | 幅频 A(ω) | 相频 φ(ω) | 关键特征 |
|---|---|---|---|---|
| 比例 | 1 | 1 | 0° | 与频率无关 |
| 积分 | 1/s | 1/ω | -90° | 斜率 -20dB/dec |
| 惯性 | 1/(5s+1) | 1/√(1+25ω²) | -arctan(5ω) | 转折频率 0.2 rad/s |
| 延迟 | e^{-2s} | 1 | -114.6ω° | 相位随频率线性下降 |
2.2 低频段渐近线与转折频率
画渐近幅频曲线时,先找交接频率。惯性环节的转折频率是 1/5=0.2 rad/s,积分环节已经决定了低频斜率。因为系统含一个积分环节,低频渐近线斜率是 -20dB/dec,并且穿过 ω=1、L=0dB 的点。在 ω=0.2 处,积分环节贡献 -20lg0.2=13.98dB,惯性环节还没开始衰减,所以低频段渐近线经过 (0.2, 13.98dB)。ω≥0.2 之后,惯性环节开始起作用,斜率再减 20dB/dec,变成 -40dB/dec。延迟环节不参与幅频,所以幅频渐近线到 -40dB/dec 就结束,但实际曲线在转折频率附近会有 3dB 左右的误差,需要修正。
相频曲线要逐点算。取 ω=0.1 rad/s,积分贡献 -90°,惯性贡献 -arctan(0.5)=-26.6°,延迟贡献 -11.46°,总相角约 -128°。取 ω=0.3 rad/s,惯性 -arctan(1.5)=-56.3°,延迟 -34.4°,总相角约 -180.7°,已经越过 -180° 线。取 ω=0.45 rad/s,总相角约 -207.6°,这也解释了后面相角裕度为负的原因。手算时建议列一张频率-相角表,从 0.01 到 1 rad/s 取 8 到 10 个点,画出来的相频曲线和 Matlab 差不了多少。
2.3 用 Matlab 验证手算相频
Matlab 的 bode 函数直接处理 e^{-2s} 会报错或忽略延迟,常见做法是先用有理部分算幅频和相频,再手动把延迟相位减掉。下面这段脚本把 ω 从 0.01 到 10 rad/s 取 100 个对数点,计算幅值和相角,然后合成带延迟的相频。
num = [1]; % 分子为 1 den = conv([1 0], [5 1]); % 分母 s(5s+1) 展开为 5s^2 + s w = logspace(-2, 1, 100); % 频率范围 0.01 到 10 rad/s [mag, phase, w] = bode(num, den, w); % 有理部分的幅值和相角 phase1 = phase - w * 57.3 * 2; % 减去延迟相角,2 为延迟时间秒 subplot(2,1,1); semilogx(w, 20*log10(mag)); grid on; ylabel('幅值 (dB)'); subplot(2,1,2); semilogx(w, phase1); grid on; ylabel('相角 (度)'); xlabel('频率 (rad/s)');这段代码里conv([1 0], [5 1])得到的是多项式 5s²+s,对应分母 s(5s+1)。w*57.3*2是把延迟相位从弧度换成角度,2 就是 e^{-2s} 里的延迟时间。如果延迟时间改成 1 秒,这里系数改成 1 即可。跑完可以打开数据游标,在 ω=0.45 附近读相角,应该在 -207° 左右。手算和程序对不上时,先检查phase是否已经是角度制,bode 输出的相角默认是度,不要再乘 180/π。
3. Matlab 画 Bode/Nyquist 与裕度计算:别直接调 bode 就完事
3.1 延迟环节的相频修正法
Matlab 经典控制工具箱里的bode、nyquist、margin都只接受有理传递函数,e^{-2s} 不是有理函数,直接写成tf([1],[5 1 0],'InputDelay',2)在旧版本里也无法进入bode的相频计算。课程设计里常用的绕法是把延迟从模型里拿掉,用bode算有理部分的幅频和相频,再按 φ_delay=-ωT 把相角减掉。幅频不用动,因为 |e^{-jωT}|=1。这个操作在 Nyquist 图上同样适用,但要注意极坐标角度也要换成弧度:phase1 = phase*pi/180 - w*2。如果延迟时间不是 2 秒,把乘数换掉。margin 函数可以接受修正后的相频向量,用法是[gm,pm,wcg,wcp]=margin(mag,phase1,w),这样得到的 pm 和 wcp 才对应真实系统。
3.2 绘制 Bode 图并读取截止频率
把第 2 章的脚本扩展一下,加上幅频和相频的坐标轴设置,就能得到图 2-1 那样的 Bode 图。关键是确定截止频率 ωc,也就是幅频曲线穿过 0dB 的频率。从程序里可以读出 ωc≈0.45 rad/s,此时相角约 -207.6°,相角裕度 γ=180°+φ(ωc)=180°-207.6°=-27.6°。负的相角裕度说明闭环系统在低频段就已经不满足收敛条件。为了验证,用 margin 函数再算一遍。
num = [1]; den = conv([1 0], [5 1]); w = logspace(-2, 1, 100); [mag, phase, w] = bode(num, den, w); phase1 = phase - w * 57.3 * 2; [gm, pm, wcg, wcp] = margin(mag, phase1, w); pm = pm'; gm = gm'; fprintf('截止频率 wcp = %.4f rad/s\n', wcp); fprintf('相角裕度 pm = %.4f 度\n', pm); fprintf('穿越频率 wcg = %.4f rad/s\n', wcg); fprintf('幅值裕度 gm = %.4f\n', gm);运行后得到 wcp=0.4254 rad/s,pm=-23.5870°,wcg=0.2965 rad/s,gm=0.5305。手工计算截止频率时取的是 0.45 rad/s,与程序差 0.02 rad/s,原因是手算时直接用了渐近线交点,而程序用了精确幅频。这个误差在课程设计里可以接受,但报告里最好注明取点依据。margin 返回的 gm 是幅值裕度的倒数形式,这里 gm=0.5305 小于 1,表示幅值裕度为负,系统不收敛。如果按 h=1/|G(jωg)| 计算,h=1.849,1/h=0.541,和程序基本一致。
| 指标 | 手算结果 | Matlab margin 结果 | 判据 |
|---|---|---|---|
| 截止频率 ωc | 0.45 rad/s | 0.4254 rad/s | 幅频穿过 0dB |
| 相角裕度 γ | -27.6° | -23.587° | 负值,系统振荡 |
| 穿越频率 ωg | 0.30 rad/s | 0.2965 rad/s | 相频穿过 -180° |
| 幅值裕度 h | 0.541 | 0.5305 | 小于 1,不满足 |
3.3 绘制 Nyquist 图:螺旋线成因
Nyquist 图直接画有理部分会得到一条普通曲线,加上延迟相位后,极坐标角度会随频率线性减小。代码里用polar函数时要注意,polar现在可能被polarplot替代,但老版本课程设计常用polar。下面这段脚本把有理部分的相角先转成弧度,再减去延迟相位,然后以极坐标画图。
num = [1]; den = conv([1 0], [5 1]); w = logspace(-1, 2, 100); [mag, phase, w] = bode(num, den, w); phase1 = phase * pi / 180 - w * 2; % 延迟 2 秒,角度转弧度 polar(phase1, mag); grid on;跑出来的曲线不是闭合环,而是围绕原点不断旋转的螺旋线。原因是延迟环节让相角随 ω 增大而无限下降,而幅值随频率升高趋近于 0,所以轨迹一边缩小半径一边打转。奈氏判据用这种螺旋线时要看它包围 (-1, j0) 点的圈数,未校正系统幅频在相角 -180° 时对应的幅值大于 1,所以 (-1, j0) 点被包围,闭环系统不收敛。这个现象在纯延迟系统里很典型,延迟越大,螺旋越密。
3.4 裕度判定:为什么系统不收敛
把数字摆在一起看:相角裕度 -23.6°,幅值裕度 0.53。相角裕度是负的,意味着在幅频降到 0dB 之前,相频已经越过 -180°,负反馈变成了正反馈;幅值裕度小于 1,意味着相频在 -180° 时,幅频还大于 0dB,系统有足够的增益继续放大振荡。两个条件同时不满足,闭环阶跃响应会出现等幅或发散振荡。课程设计要求的“相角裕度增加 10 度”,目标是把 -27.6° 抬到 -17.6°,但即便如此仍然是负值,所以超前校正的任务不是让系统变成理想状态,而是让它先满足题目给定的裕度指标。理解这一点,后面设计校正函数时就不会对“为什么 pm 还是负的却算通过”感到奇怪。
4. 超前校正装置设计:从 φm=15° 到 23° 的两次试错
4.1 无源超前网络的传递函数与分度系数
无源超前校正网络由电阻 R1、R2 和电容 C 组成,传递函数经过推导为 Gc(s)=a^{-1}(aTs+1)/(Ts+1),其中 T=R1R2C/(R1+R2),a=(R1+R2)/R2,a 叫分度系数。这个网络在频率 1/(aT) 到 1/T 之间提供超前相角,最大超前角 φm 出现在两个转折频率的几何中点 ωm=1/(T√a)。最大超前角与 a 的关系是 a=(1+sinφm)/(1-sinφm)。因为无源网络会带来 1/a 的幅值衰减,实际使用时通常在后面加一个放大器,把开环增益补回来,这时校正装置的传递函数写成 Gc(s)=(aTs+1)/(Ts+1),不再含 a^{-1} 因子。课程设计里的计算都按带附加放大器的形式处理。
设计步骤可以固定成四步:先根据未校正相角裕度 γ0 和目标相角裕度 γ1 算出需要的补偿角,通常加一个 5° 到 15° 的余量 ε;然后由 φm=γ1-γ0+ε 求 a;再算超前网络在 ωm 处的幅值 10lg a,让校正后系统在 ωm 处幅频为 0dB,从而解出 ωm;最后算转折频率 ω1=ωm/√a、ω2=ωm√a,得到 Gc(s)。题目要求“相角裕度增加 10 度”,未校正 γ0=-27.6°,所以 γ1=-17.6°。第一次试算取 ε=5°,φm=-17.6-(-27.6)+5=15°。
4.2 第一次估算:ε=5°,a=1.70,检验失败
由 φm=15°,a=(1+sin15°)/(1-sin15°)=1.70。超前网络在 ωm 处的幅值是 10lg1.70=2.30dB。校正后系统在 ωm 处要满足开环幅值为 0dB,也就是未校正系统在该频率的幅值等于 -2.30dB。未校正幅频近似为 20lg[1/(ω√(1+25ω²))],令它等于 -2.30dB,解得 ωm≈0.49 rad/s。然后算转折频率:ω1=ωm/√a=0.49/√1.70=0.377 rad/s,ω2=ωm√a=0.49×√1.70=0.637 rad/s。于是 Gc(s)=(s+0.377)/(s+0.637),乘以 a 后写成 aGc(s)=(2.661s+1)/(1.565s+1)。校正后开环传递函数为 Gp'(s)=(2.661s+1)e^{-2s}/[s(5s+1)(1.565s+1)]。
把校正后的分子分母填进 Matlab,用同样的延迟修正法算相角裕度。
num = [2.661 1]; % 校正后分子 den = conv(conv([1 0], [5 1]), [1.565 1]); % 校正后分母 s(5s+1)(1.565s+1) w = logspace(-2, 1, 100); [mag, phase, w] = bode(num, den, w); phase1 = phase - w * 57.3 * 2; [gm, pm, wcg, wcp] = margin(mag, phase1, w); pm = pm'; fprintf('pm = %.4f 度, wcp = %.4f rad/s\n', pm, wcp);运行结果是 pm=-19.2024°,比目标 -17.6° 还低,说明 5° 的补偿余量不够。原因在于延迟环节的相位随 ω 线性下降,而超前网络在把截止频率右移的同时,也把系统推到了延迟相位更大的区域。第一次失败不是计算错误,而是纯延迟系统里“补偿角被延迟吃掉”的典型现象。
4.3 加大补偿角:ε=13°,a=2.283,通过
第二次把补偿角余量加到 ε=13°,φm=-17.6-(-27.6)+13=23°。a=(1+sin23°)/(1-sin23°)=2.283,10lg2.283=3.59dB。令未校正幅频等于 -3.59dB,解得 ωm≈0.532 rad/s。转折频率 ω1=0.532/√2.283=0.352 rad/s,ω2=0.532×√2.283=0.804 rad/s。于是 Gc(s)=(s+0.352)/(s+0.804),aGc(s)=(2.841s+1)/(1.244s+1)。校正后开环传递函数为 Gp''(s)=(2.841s+1)e^{-2s}/[s(5s+1)(1.244s+1)]。再用 Matlab 验算。
num = [2.841 1]; den = conv(conv([1 0], [5 1]), [1.244 1]); w = logspace(-2, 1, 100); [mag, phase, w] = bode(num, den, w); phase1 = phase - w * 57.3 * 2; [gm, pm, wcg, wcp] = margin(mag, phase1, w); pm = pm'; fprintf('pm = %.4f 度, wcp = %.4f rad/s\n', pm, wcp);这次得到 pm=-17.3382°,比目标 -17.6° 高,满足“相角裕度增加 10 度”的要求。两次结果的对比可以做成表格,方便写报告。
| 尝试 | 补偿角 ε | φm | a | 10lg a | ωm | 转折频率 | 校正函数 | 检验 pm |
|---|---|---|---|---|---|---|---|---|
| 第一次 | 5° | 15° | 1.70 | 2.30dB | 0.49 | 0.377 / 0.637 | (2.661s+1)/(1.565s+1) | -19.2024° |
| 第二次 | 13° | 23° | 2.283 | 3.59dB | 0.532 | 0.352 / 0.804 | (2.841s+1)/(1.244s+1) | -17.3382° |
4.4 校正装置参数:R1、R2、C 怎么选
算出 T 和 a 之后,要落到无源网络的元件值。由 ωm=1/(T√a) 可得 T=1/(ωm√a)=1/(0.532×√2.283)=1.244。设电容 C=0.01F,则 T=R1R2C/(R1+R2)=1.244,a=(R1+R2)/R2=2.283。把两式联立,先由 a 得 R1=(a-1)R2=1.283R2,再代入 T 的表达式:T=[1.283R2·R2·C]/(1.283R2+R2)=[1.283R2·C]/2.283。代入 C=0.01、T=1.244,解出 R2≈221.4Ω,R1≈284.0Ω。注意这里的单位是欧姆,电容是法拉,实际搭电路时 0.01F 太大,通常换成 10μF 并把电阻放大 1000 倍,保持乘积不变。
C = 0.01; T = 1.244; a = 2.283; syms R1 R2 eq1 = (R1 + R2)/R2 == a; eq2 = R1*R2*C/(R1 + R2) == T; sol = solve([eq1, eq2], [R1, R2]); double(sol.R1) double(sol.R2)这段符号运算得到的数值和手工一致。如果换用 C=10μF,也就是 10e-6F,R1 和 R2 都会变成原来的 1000 倍,约 284kΩ 和 221.4kΩ,这个量级在实际电路里更常见。选电阻时还要注意标称值,221.4Ω 离 220Ω 很近,284Ω 可以用 280Ω 或 300Ω 微调,重新验算 pm 看是否仍在 -17.6° 以上。
5. Simulink 仿真与阶跃响应:校正前后到底差在哪
5.1 搭建带 Transport Delay 的仿真模型
在 Matlab 命令窗口输入simulink打开库浏览器,新建一个 Model。从 Continuous 库拖入 Integrator 和 Transfer Fcn,从 Continuous 库拖入 Transport Delay,从 Sources 拖入 Step,从 Sinks 拖入 Scope。校正后的系统 Gp''(s)=(2.841s+1)e^{-2s}/[s(5s+1)(1.244s+1)] 可以拆成三部分:积分器 1/s、惯性环节 1/(5s+1)、超前环节 (2.841s+1)/(1.244s+1),再加上 Transport Delay。连接顺序建议 Step → 积分器 → 惯性环节 → 超前环节 → Transport Delay → Scope。Transfer Fcn 的 Numerator 填[1]、Denominator 填[5 1]表示惯性环节;另一个 Transfer Fcn 的 Numerator 填[2.841 1]、Denominator 填[1.244 1]表示超前环节。Transport Delay 的 Time delay 参数设为 2,Initial output 保持 0。Step 模块的 Step time 设为 0,Final value 设为 1。仿真时间从 0 到 50 秒,因为系统响应较慢。
搭建时容易出错的地方是积分器和惯性环节的顺序。积分环节 1/s 单独用 Integrator 实现时,初始条件设为 0。如果把 1/s 和 1/(5s+1) 合并成一个 Transfer Fcn,分母写[5 1 0],分子写[1],也能得到同样效果。Transport Delay 必须放在最后,因为延迟环节在物理上对应传感器和传输通道,放在反馈点之前更符合温箱模型。运行仿真后双击 Scope,能看到校正后系统的阶跃响应曲线,上升时间大约在 10 秒到 20 秒之间,超调量不大,最终趋于 1。
5.2 阶跃响应对比与判据
要看校正前后的差别,可以分别搭两个模型,或者把校正前后的传递函数并联到同一个 Scope。未校正系统 Gp(s)=e^{-2s}/[s(5s+1)] 的阶跃响应会持续振荡,幅值不衰减;校正后系统因为相角裕度提高了 10 度,振荡幅度减弱,虽然仍然有轻微波动,但已经满足课程设计给定的裕度要求。分析阶跃响应时重点看三个量:上升时间、超调量、调节时间。校正后的截止频率从 0.4254 rad/s 提高到约 0.532 rad/s,带宽增加,响应变快;但延迟环节依然存在,所以调节时间不会因为超前校正而大幅缩短。
如果手头没有 Simulink 或者想快速验证,可以用 Pade 近似把延迟环节有理化,再用step命令画阶跃响应。下面这段代码用 4 阶 Pade 近似 e^{-2s},然后构造闭环系统。
num = [1]; den = conv([1 0], [5 1]); sys_open = tf(num, den); % 未校正开环,无延迟 [num_d, den_d] = pade(2, 4); % 4 阶 Pade 近似延迟 2 秒 delay_approx = tf(num_d, den_d); % 延迟近似传递函数 sys_open_delay = sys_open * delay_approx; % 未校正开环含延迟 sys_correct_num = [2.841 1]; sys_correct_den = conv(conv([1 0], [5 1]), [1.244 1]); sys_correct = tf(sys_correct_num, sys_correct_den) * delay_approx; % 校正后开环 sys_cl = feedback(sys_correct, 1); % 单位负反馈闭环 step(sys_cl, 50); grid on;Pade 近似的阶数越高,延迟相位越接近真实,但高阶近似会引入额外的极点,可能让阶跃响应出现高频抖动。4 阶通常在 0.1 到 10 rad/s 范围内够用。step(sys_cl,50)里的 50 是仿真终止时间,和 Simulink 设置保持一致。对比step(feedback(sys_open_delay,1),50)和step(sys_cl,50)两条曲线,能直观看到校正后振荡收敛得更快。
5.3 超前校正不够时的退路:滞后-超前校正
超前校正靠提高截止频率来增加相角裕度,但截止频率右移会让延迟相位 -ωT 变得更大,a 也得跟着变大。当目标相角裕度要求更高,比如从 -27.6° 抬到 0° 以上,单独用超前网络需要的 a 可能超过 10,网络对高频噪声的放大很严重,实际电路里电阻电容的误差也会让相位偏离。这时常见做法是改用串联滞后校正,利用滞后网络在低频段的高增益来降低截止频率,让系统在延迟相位较小的区域穿越 0dB。滞后校正的代价是响应变慢,如果温箱对升温速度有要求,单用滞后也不合适。课程设计答辩里提到的思路是串联滞后-超前校正:先用滞后部分把截止频率压下来,再用超前部分补相角,两者结合能在不牺牲太多带宽的前提下把裕度做上去。实际调参时,先把滞后网络的转折频率设在截止频率的 1/10 附近,再按超前校正的步骤算补偿角,最后用 margin 反复验算。如果换用 C=0.1F,电阻按同比例缩小到 28.4Ω 和 22.14Ω,搭电路时要注意运放偏置电流和电阻热噪声,低阻值下这些非理想因素会更容易影响实际相位。
本文还有配套的精品资源,点击获取