拓冰建站拓冰建站
首页 / 资讯中心 / 正文

纯延迟温箱系统Matlab Bode/Nyquist与超前校正设计

简介这份资料是自动化专业《自动控制原理》课程设计的完整报告面向正在做温度控制系统校正题目的本科生与课程设计指导教师可直接作为选题参考与写作模板。压缩包内含1个doc文档约317KB篇幅紧凑正文按引言、系统开环传递函数分析、Matlab传递函数分析、超前校正装置设计、校正后系统仿真等章节展开任务书与目录结构齐全。内容围绕某温箱开环传递函数展开逐项拆解比例、积分、惯性、延迟四个环节并用Matlab绘制波特图与奈奎斯特图、计算相角裕度和幅值裕度再设计超前校正装置使相角裕度提高10度最后给出阶跃响应仿真曲线读者可据此掌握从建模、分析到校正、验证的完整流程。目前已有1088人学习下载适合需要快速理清设计思路、核对计算步骤与报告撰写框架的同学参考借鉴。1. 温箱温度控制一个纯延迟系统为什么会让超前校正卡住实验室里那台温箱加热丝通电后不会立刻见效热量传到传感器要花时间。课程设计给的模型把这个过程抽象成 Gp(s)e^{-2s}/[s(5s1)]积分环节来自热容积累惯性环节来自热阻纯延迟 e^{-2s} 则对应 2 秒的传输滞后。任务看起来直白用 Matlab 画 Bode 图和 Nyquist 图算出相角裕度再设计超前校正把相角裕度抬 10 度。但把参数代进去跑一遍未校正系统的相角裕度是 -27.6°幅值裕度只有 0.54闭环响应会剧烈振荡。纯延迟的相位是 -2ω 弧度随频率线性下降超前网络能提供的最大相角又受分度系数 a 限制补偿角不够时怎么调都过不了。这份记录适合正在做自动控制原理课程设计、需要复现 Bode/Nyquist/Simulink 全流程的人也适合想看清纯延迟系统校正边界的人。2. 开环传递函数拆解积分、惯性、延迟三件套的频域手算2.1 四个环节的幅频与相频表达式传递函数 Gp(s)e^{-2s}/[s(5s1)] 可以拆成比例 1、积分 1/s、惯性 1/(5s1)、延迟 e^{-2s}。比例环节的幅频是 1相频是 0°积分环节幅频 1/ω相频 -90°惯性环节幅频 1/√(125ω²)相频 -arctan(5ω)延迟环节幅频仍是 1相频 -2ω 弧度换成角度就是 -114.6ω。把各环节幅频相乘、相频相加得到总幅频 A(ω)1/[ω√(125ω²)]总相频 φ(ω)-90°-arctan(5ω)-114.6ω°。这里有个容易记混的点延迟环节不改变幅值只在相频上“扣分”所以 Bode 幅频曲线和没有延迟时一模一样但相频曲线会被拉下去。环节传递函数幅频 A(ω)相频 φ(ω)关键特征比例110°与频率无关积分1/s1/ω-90°斜率 -20dB/dec惯性1/(5s1)1/√(125ω²)-arctan(5ω)转折频率 0.2 rad/s延迟e^{-2s}1-114.6ω°相位随频率线性下降2.2 低频段渐近线与转折频率画渐近幅频曲线时先找交接频率。惯性环节的转折频率是 1/50.2 rad/s积分环节已经决定了低频斜率。因为系统含一个积分环节低频渐近线斜率是 -20dB/dec并且穿过 ω1、L0dB 的点。在 ω0.2 处积分环节贡献 -20lg0.213.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(5s1) 展开为 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(5s1)。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);运行后得到 wcp0.4254 rad/spm-23.5870°wcg0.2965 rad/sgm0.5305。手工计算截止频率时取的是 0.45 rad/s与程序差 0.02 rad/s原因是手算时直接用了渐近线交点而程序用了精确幅频。这个误差在课程设计里可以接受但报告里最好注明取点依据。margin 返回的 gm 是幅值裕度的倒数形式这里 gm0.5305 小于 1表示幅值裕度为负系统不收敛。如果按 h1/|G(jωg)| 计算h1.8491/h0.541和程序基本一致。指标手算结果Matlab margin 结果判据截止频率 ωc0.45 rad/s0.4254 rad/s幅频穿过 0dB相角裕度 γ-27.6°-23.587°负值系统振荡穿越频率 ωg0.30 rad/s0.2965 rad/s相频穿过 -180°幅值裕度 h0.5410.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. 超前校正装置设计从 φm15° 到 23° 的两次试错4.1 无源超前网络的传递函数与分度系数无源超前校正网络由电阻 R1、R2 和电容 C 组成传递函数经过推导为 Gc(s)a^{-1}(aTs1)/(Ts1)其中 TR1R2C/(R1R2)a(R1R2)/R2a 叫分度系数。这个网络在频率 1/(aT) 到 1/T 之间提供超前相角最大超前角 φm 出现在两个转折频率的几何中点 ωm1/(T√a)。最大超前角与 a 的关系是 a(1sinφm)/(1-sinφm)。因为无源网络会带来 1/a 的幅值衰减实际使用时通常在后面加一个放大器把开环增益补回来这时校正装置的传递函数写成 Gc(s)(aTs1)/(Ts1)不再含 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)515°。4.2 第一次估算ε5°a1.70检验失败由 φm15°a(1sin15°)/(1-sin15°)1.70。超前网络在 ωm 处的幅值是 10lg1.702.30dB。校正后系统在 ωm 处要满足开环幅值为 0dB也就是未校正系统在该频率的幅值等于 -2.30dB。未校正幅频近似为 20lg[1/(ω√(125ω²))]令它等于 -2.30dB解得 ωm≈0.49 rad/s。然后算转折频率ω1ωm/√a0.49/√1.700.377 rad/sω2ωm√a0.49×√1.700.637 rad/s。于是 Gc(s)(s0.377)/(s0.637)乘以 a 后写成 aGc(s)(2.661s1)/(1.565s1)。校正后开环传递函数为 Gp(s)(2.661s1)e^{-2s}/[s(5s1)(1.565s1)]。把校正后的分子分母填进 Matlab用同样的延迟修正法算相角裕度。num [2.661 1]; % 校正后分子 den conv(conv([1 0], [5 1]), [1.565 1]); % 校正后分母 s(5s1)(1.565s1) 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°a2.283通过第二次把补偿角余量加到 ε13°φm-17.6-(-27.6)1323°。a(1sin23°)/(1-sin23°)2.28310lg2.2833.59dB。令未校正幅频等于 -3.59dB解得 ωm≈0.532 rad/s。转折频率 ω10.532/√2.2830.352 rad/sω20.532×√2.2830.804 rad/s。于是 Gc(s)(s0.352)/(s0.804)aGc(s)(2.841s1)/(1.244s1)。校正后开环传递函数为 Gp(s)(2.841s1)e^{-2s}/[s(5s1)(1.244s1)]。再用 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 度”的要求。两次结果的对比可以做成表格方便写报告。尝试补偿角 εφma10lg aωm转折频率校正函数检验 pm第一次5°15°1.702.30dB0.490.377 / 0.637(2.661s1)/(1.565s1)-19.2024°第二次13°23°2.2833.59dB0.5320.352 / 0.804(2.841s1)/(1.244s1)-17.3382°4.4 校正装置参数R1、R2、C 怎么选算出 T 和 a 之后要落到无源网络的元件值。由 ωm1/(T√a) 可得 T1/(ωm√a)1/(0.532×√2.283)1.244。设电容 C0.01F则 TR1R2C/(R1R2)1.244a(R1R2)/R22.283。把两式联立先由 a 得 R1(a-1)R21.283R2再代入 T 的表达式T[1.283R2·R2·C]/(1.283R2R2)[1.283R2·C]/2.283。代入 C0.01、T1.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)这段符号运算得到的数值和手工一致。如果换用 C10μF也就是 10e-6FR1 和 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.841s1)e^{-2s}/[s(5s1)(1.244s1)] 可以拆成三部分积分器 1/s、惯性环节 1/(5s1)、超前环节 (2.841s1)/(1.244s1)再加上 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 参数设为 2Initial output 保持 0。Step 模块的 Step time 设为 0Final value 设为 1。仿真时间从 0 到 50 秒因为系统响应较慢。搭建时容易出错的地方是积分器和惯性环节的顺序。积分环节 1/s 单独用 Integrator 实现时初始条件设为 0。如果把 1/s 和 1/(5s1) 合并成一个 Transfer Fcn分母写[5 1 0]分子写[1]也能得到同样效果。Transport Delay 必须放在最后因为延迟环节在物理上对应传感器和传输通道放在反馈点之前更符合温箱模型。运行仿真后双击 Scope能看到校正后系统的阶跃响应曲线上升时间大约在 10 秒到 20 秒之间超调量不大最终趋于 1。5.2 阶跃响应对比与判据要看校正前后的差别可以分别搭两个模型或者把校正前后的传递函数并联到同一个 Scope。未校正系统 Gp(s)e^{-2s}/[s(5s1)] 的阶跃响应会持续振荡幅值不衰减校正后系统因为相角裕度提高了 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 反复验算。如果换用 C0.1F电阻按同比例缩小到 28.4Ω 和 22.14Ω搭电路时要注意运放偏置电流和电阻热噪声低阻值下这些非理想因素会更容易影响实际相位。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门