线性系统校正方法:超前、滞后与滞后-超前设计及MATLAB验证
发布时间:2026/9/19 15:41:35 作者:尧图编辑部 阅读量:1,286

简介《自动控制原理》第六版课件第6章“线性系统的校正方法2”是一部面向自动化、电气类专业学生和考研者的教学PPT。它聚焦线性系统校正方法系统讲解无源超前网络、无源滞后网络和无源滞后-超前网络的电路结构、传递函数与零极点分布并结合相角计算和波特图分析各网络频率特性重点说明分度系数a、b以及时间常数T对网络微分、积分作用的影响帮助读者掌握改善系统稳定性与抗干扰能力的基本手段。资源包共1个PPT文件大小304KB轻巧便携适合课堂演示或课后自学。课件内容组织清晰从网络电路到公式推导、从相角极值到参数选择层层递进并给出滞后网络作为低通滤波器可抑制高频噪声的实际效果便于学习者边看边练。这类校正方法在机器人控制、过程控制等实际系统中可用于提高系统稳定性和滤除噪声具有较强工程参考价值。已有86人浏览学习可作为《自动控制原理》课件补充和考研重点专题复习资料。1. 第6章线性系统的校正方法先认识“K 调不上去”的那道坎自动控制原理的课讲到这里第6章线性系统的校正方法最容易让人卡住前面的时域分析、根轨迹和频域分析都在回答“系统稳不稳、指标是多少”校正却第一次逼你回答“指标不达标时往环路里加什么”。最典型的场景是课程设计里那个单位反馈系统为了把稳态误差压下去把开环增益 K 翻几倍一画 Bode 图就发现穿越频率附近的相角已经掉穿 -180°系统直接发散。只调 K 是死路因为稳态精度要的是低频增益动态性能要的是穿越频率附近的相角这两个需求拧在一起时就得靠校正装置去重构开环特性。这篇按频率法主线把超前、滞后、滞后-超前三种方式的选择逻辑、设计步骤、参数边界和 MATLAB 验证讲透适合正在啃教材的本科生也适合把课件内容重新拉通、准备课程设计的读者。2. 校正方法的三种基本形态与选型判据2.1 校正装置的本质在开环 Bode 图上“补一段形状”线性系统校正的本质并不复杂原对象 G0(s) 已经定死设计者能动的只有校正器 Gc(s) 和增益 K。把 Gc(s) 串进前向通路后整套开环特性变成 Gc(s)G0(s)Bode 图被局部改写。频域设计指标和 Bode 图各段是对应的稳态误差系数对应低频段幅值相角裕度对应穿越频率附近的相角穿越频率 ωc 决定带宽和响应速度高频段增益决定对测量噪声的抑制能力。课件里强调的“校正方法”其实就是在回答三个问题低频段要不要再抬中频段的相角够不够高频段会不会放噪声。超前、滞后、滞后-超前三种结构本质上是对这三个问题给出了三种不同的折中方案。选型之前先把原系统的 Bode 图用 margin 函数扫一遍看缺的是幅值还是相角这一眼判断比背任何规则都可靠。2.2 三种校正方式的频域特征对比三种校正器的传递函数形式和频域特征用一张表可以看得很清楚。注意滞后校正的写法各家教材略有差异我这里统一写成分子时间常数小、分母时间常数大的形式工程实现时更容易和 RC 网络对应。校正方式传递函数形式常用写法对 ωc 的影响对相角裕度的影响主要代价超前校正Gc (1 αTs) / (1 Ts)α 1提高 ωc带宽变大中频段提供正相角γ 增大高频增益放大噪声α 过大时相角提升饱和滞后校正Gc (1 Ts) / (1 βTs)β 1压低 ωc带宽变小靠避开相角恶化区间接改善 γ响应变慢β 过大会把系统拖得很钝滞后-超前两段转折频率低频滞后、高频超前可保持或适度提高 ωc低频段保精度中频段补相角参数多调试工作量最大超前校正的相角特性是正的。它的零点在 -1/(αT)极点在 -1/T零点离虚轴更远中频段相角抬起来同时高频段幅值比低频段高 20lgαdB。滞后校正正好反过来极点更靠原点高频段幅值被压到原来的 1/β代价是这段频率里的相角是负的所以它的转折频率必须躲开新的穿越频率。滞后-超前校正则可以看作两段拼起来低频段抬高或保持增益中频段再补一段超前角。2.3 选型判据先看缺多少相角再看允不允许降带宽选型有一条实用顺序。先求原系统在满足稳态指标的开环增益下的相角裕度 γ0如果 γ0 和目标值差 20° 到 55° 之间优先选单级超前校正如果 γ0 和目标差得很少甚至系统当前已经不稳定又允许穿越频率下降滞后校正更稳当如果要求稳态精度很高K 很大导致 γ0 很差同时带宽又不能牺牲那就只能上滞后-超前或两级超前。我一般会在选型时多问一句被控对象的高频段有没有明显噪声如果有转速测量纹波这类高频干扰超前校正会把噪声一起放大这时候宁可先用滞后把 ωc 压下来再用一个低增益超前做局部修正。选型不是套公式本质是在带宽、相角裕度和噪声抑制之间做取舍这个权衡思路课件里不会直接写但课程设计和实际工程里几乎每次都会遇到。3. 用频率法设计超前校正从指标到参数的完整算例3.1 设计指标与手算流程用一个贯穿全篇的算例来演示。单位反馈系统的开环传递函数为 G0(s) K/[s(s1)]要求系统在单位斜坡输入下的稳态误差 ess ≤ 0.1相角裕度 γ ≥ 45°校正后的穿越频率不低于原值。先由稳态误差确定开环增益对 I 型系统速度误差系数 Kv Kess 1/Kv 1/K ≤ 0.1所以取 K 10。原系统此时为 G0(s) 10/[s(s1)]用 margin 求指标穿越频率约 3.08 rad/s相角裕度只有约 18°。也就是说需要补的相角是 45° - 18° 27°考虑到校正后穿越频率会右移、原系统在新穿越频率处相角还会再掉一点通常再加 5° 到 12° 的余量。这里取总补偿角 φm 35°。由最大超前角公式反解分度系数 αα (1 sinφm) / (1 - sinφm) (1 sin35°) / (1 - sin35°) ≈ 3.69代入得 α ≈ 3.69。超前网络在最大超前角频率 ωm 处提供 10lgα dB 的幅值提升10lg3.69 ≈ 5.67dB。下一步在原系统幅频特性上找幅值为 -5.67dB 的频率这个频率就是校正后的新穿越频率。3.2 逐个参数说明α、T、ωm 是怎么定下来的新穿越频率约在 4.35 rad/s 处在这个频率点上原系统提供约 -5.67dB 的幅值超前网络刚好补偿 5.67dB合成幅值穿越 0dB同时超前网络在这里给出最大超前角 35°。最大超前角频率 ωm 与 α、T 的关系是ωm 1 / (T√α)T 1 / (ωm√α) 1 / (4.35 × √3.69) ≈ 0.12所以校正器为 Gc(s) (1 αTs) / (1 Ts) (1 0.44s) / (1 0.12s)。注意这里的 αT 0.44 是零点倒数T 0.12 是极点倒数零点比极点更远离原点这就是“超前”二字的相位来源。把 Gc(s) 串入前向通路后开环传递函数变成 Gc(s)G0(s)预期相角裕度在 47° 左右穿越频率约 4.35 rad/s。3.3 可复现的 MATLAB 脚本频率法自动算参数手动在 Bode 图上找点容易引入读数误差实际做课程设计时我一般直接跑脚本把手工计算过程固化成代码。下面的脚本可以在 MATLAB 或 Octave 里直接运行% 原系统 G0(s) 10 / [s(s1)] G0 tf(10, conv([1 0], [1 1])); [Gm, Pm, Wcg, Wcp] margin(G0); fprintf(原系统: γ %.2f deg, ωc %.2f rad/s\n, Pm, Wcp); % 目标相角裕度 45 度预留 8 度余量 gamma_target 45; phi_m gamma_target - Pm 8; alpha (1 sind(phi_m)) / (1 - sind(phi_m)); fprintf(补偿角: %.2f deg, α %.2f\n, phi_m, alpha); % 在幅频特性上找 -10lg(alpha) dB 对应的频率作为新的穿越频率 w logspace(-1, 2, 400); [mag, ~, w] bode(G0, w); mag_db 20 * log10(squeeze(mag)); target_db -10 * log10(alpha); idx find(mag_db target_db, 1, first); wm w(idx); % 由 wm 反解校正器时间常数 T 1 / (wm * sqrt(alpha)); Gc tf([alpha*T 1], [T 1]); % 验证校正后指标 sys Gc * G0; [Gm2, Pm2, Wcg2, Wcp2] margin(sys); fprintf(校正器: (1 %.3fs) / (1 %.3fs)\n, alpha*T, T); fprintf(校正后: γ %.2f deg, ωc %.2f rad/s\n, Pm2, Wcp2);脚本关键在两点用 margin 求原系统的相角裕度 Pm再用 find 在幅频曲线上精确寻找目标幅值对应的频率避免肉眼读数。这里的 alpha、T 和 wm 三个量互相耦合修改目标裕度时只需改 gamma_target 和余量值。余量给多少要看原系统在中频段的相角下降速度下降越快余量越要给足一般取 5° 到 12°超过 15° 说明原系统相角衰减太急单级超前可能不够。3.4 超前校正的参数边界α 不是越大越好超前角 φm 和 α 的关系是对数饱和的α 从 2 提到 4φm 从约 20° 涨到约 37°但 α 从 8 提到 16φm 只从约 51° 涨到约 62°。单级超前网络工程上建议把 α 控制在 2 到 10 之间对应最大超前角约 20° 到 55°。超过这个范围补偿角的提升越来越有限高频段 20lgα dB 的噪声放大却线性增加信噪比会明显恶化。αφm度10lgαdB219.53.0330.04.8541.87.0851.19.01054.910.0如果目标补偿角超过 60°常见做法是拆成两级超前校正每一级承担一半的补偿角两级之间用增益调整解耦。还有一种更容易犯的错余量取得太保守把 φm 加到 50° 以上计算出的 ωm 落在原系统中频段拐点附近校正后穿越频率被推得很高实际相角裕度反而不达标。参数算完先跑一遍 margin 验证是成本最低的纠错手段。4. 滞后校正与滞后-超前校正参数怎么设才不会过设计4.1 滞后校正的设计逻辑用带宽换相角滞后校正不直接提供正相角它靠压低穿越频率让系统在更“安全”的频率范围内工作。同一个算例 G0(s) 10/[s(s1)]如果目标仍然是 γ ≥ 45°但不再要求穿越频率保持 3 rad/s就可以用滞后校正。原系统相角从 -90° 随频率增大单调下降到趋近 -180°要在某个频率获得 45° 裕度需要让新的穿越频率出现在原系统相角约 -135° 以下的频率点。因为滞后网络在穿越频率附近还有几度负相角设计时必须预留余量我一般把目标裕度加上 10° 到 15° 再去找频率。这里取目标裕度 45° 12° 57°在原系统 Bode 图上找相角为 -123° 的频率约在 0.65 rad/s。这个频率处原系统幅值约 12.9滞后网络需要提供约 1/12.9 的增益所以滞后系数 β ≈ 12.9。4.2 转折频率的取值规则与 MATLAB 实现滞后网络的传递函数写成 Gc(s) (1 Ts) / (1 βTs)其中 1/T 是零点转折频率1/(βT) 是极点转折频率两个转折频率都必须远低于新的穿越频率否则滞后网络的负相角会直接吃掉设计裕度。工程上一般取 1/T ωc_new / 5 到 ωc_new / 10。取 1/T ≈ 0.08则 T ≈ 12.5βT ≈ 161。% 滞后校正设计先找原系统相角满足目标裕度的频率 G0 tf(10, conv([1 0], [1 1])); w logspace(-2, 2, 800); [mag, phase, w] bode(G0, w); phase_vec squeeze(phase); mag_vec squeeze(mag); % 目标裕度 45 度额外留 12 度给滞后网络的相位损失 target_phase -180 45 12; wc_new interp1(phase_vec, w, target_phase); mag_wc interp1(w, mag_vec, wc_new); % 滞后网络高频增益为 1/beta为把此处幅值压回 1beta 取该点幅值 beta mag_wc; T 10 / wc_new; % 1/T 取 wc_new 的 1/10 Gc tf([T 1], [beta*T 1]); sys Gc * G0; [Gm, Pm, Wcg, Wcp] margin(sys); fprintf(β %.2f, T %.2f, 校正后 γ %.2f deg, ωc %.2f rad/s\n, ... beta, T, Pm, Wcp);手算和脚本的逻辑一致先用 interp1 由相角反查频率再在该频率处求幅值得到 β最后按规则取 T。这里的 beta 是那个看起来反直觉的量因为滞后网络在高频段的增益是 1/β要把开环幅值从 12.9 压到 1β 就得等于 12.9不是 1/12.9。T 的取值决定了两个转折频率离 ωc_new 有多远取 10/ωc_new 已经是比较保守的做法若实际验证时相角裕度偏小可以把系数从 10 加到 15 再试。4.3 滞后校正先提 K 再恢复稳定的组合用法滞后校正自身不改变低频段增益所以单独使用它不能改善稳态误差。真正的组合套路是先把 K 提高到满足稳态指标让系统在 K 增大后变得不稳定或裕度很低再串入滞后网络把穿越频率压回安全区。这样低频段幅值保住了 K 带来的精度中频段靠避开相角恶化区获得裕度两组指标各取所需。课程设计里最常见的失败就是把滞后网络当“万能稳定器”直接串在已经稳定的系统上结果带宽被压掉一大截响应慢到无法接受。滞后校正的调试顺序我习惯先定 ωc_new再定 β最后才碰 T。ωc_new 决定响应速度β 决定衰减量T 决定相位损失三个参数按这个顺序调出问题能定位到具体参数。反过来先给一个看起来很合理的 β 再到处乱试调三天都不知道哪里不对。4.4 滞后-超前校正与单级结构的分工当稳态误差要求把 K 顶得很高、同时动态指标又要求 γ 和 ωc 都保住时单级滞后或超前都不够用。滞后-超前校正的典型结构是把一个滞后网络和一个超前网络级联滞后段负责压住中高频段幅值让系统能在较低频率取得足够裕度超前段负责在设定好的 ωc 附近补相角把响应速度拉回来。两个网络的转折频率不要相互重叠滞后段的两个转折频率放在 ωc 左侧 5 到 10 倍频程之外超前段的零点放在 ωc 附近、极点放在 ωc 右侧 3 到 5 倍频程处。我一般会先用滞后网络把系统稳定住并量出实际裕度再叠加超前网络按第 3 章的方法计算补偿角。这么拆成两步做比直接拿一个四参数校正器去拟合设计指标要可控得多。四个参数同时优化很容易算出“图上完美、实际发散”的结果因为它们在校正点附近的幅相特性互相影响一步到位反而难排错。5. 在 MATLAB 里验证校正效果并用 sisotool 补救5.1 margin 输出的四个量分别对应什么设计完成之后第一个验证动作永远是 margin不是 step。margin 返回的四个量里Pm 和 Wcp 对应设计时盯的相角裕度和穿越频率Gm 和 Wcg 则容易被忽略。Gm 是幅值裕度代表系统在相角到达 -180° 的频率处还能承受多少增益放大工程上一般要求不低于 6dB约等于 2 倍增益余量。很多校正器设计完 Pm 达标但 Gm 只有 2~3dB系统对参数漂移几乎没有抵抗能力这种情况下即使 Bode 图好看也必须回头改设计。看 margin 输出时还要检查 Wcp 和设计值差多少。超前校正如果算出 ωc 比目标高了 30% 以上通常是余量给得太大导致 α 偏大这时校正器高频增益放大得厉害抗噪性能会变差。滞后校正则相反如果 ωc_new 比预期低了一半说明 β 取大了系统响应会明显变钝。5.2 用 step 和 stepinfo 验证时域指标频域指标达标不代表时域表现一定合格反过来也一样。课程设计验收时通常要求超调量和调节时间这两个量可以从阶跃响应里直接读sys_c feedback(Gc * G0, 1); % 校正后闭环系统 sys_o feedback(G0, 1); % 校正前闭环系统 figure; step(sys_o, r--, sys_c, b-, 6); legend(校正前, 校正后, Location, southeast); grid on; info stepinfo(sys_c); fprintf(超调量: %.1f%%, 调节时间(2%%): %.2fs, 峰值时间: %.2fs\n, ... info.Overshoot, info.SettlingTime, info.PeakTime);同一个算例校正前后的阶跃响应差异非常直观校正前 K10 的系统虽然稳定但相角裕度只有 18°阶跃响应振荡明显超调量通常超过 50%串入超前校正后裕度到 47° 左右超调量会落到 20% 上下调节时间明显缩短。如果看到超调量降下来了但响应尾部拖着长尾巴就要怀疑超前校正把 ωc 推得太高高频增益放大导致轻微振铃这时与其继续调 α不如回到第 4 章的滞后结构重新权衡。5.3 验证不过时的排错表与 sisotool 手动微调margin 和 step 都跑完之后数据不达标的情形按下面的顺序排查大多数问题都能定位到具体的参数取值。症状可能原因处理方式校正后 γ 仍低于目标 5° 以上余量给太小或 Bode 插值点不足余量加 5°~10° 重算提高 bode 频率点数到 400 以上超调量达标但调节时间过长滞后校正 β 过大带宽被压太低提高 ωc_new减小 β或改滞后-超前γ 达标但 Gm 低于 6dB相角曲线在 Wcg 附近下降太陡检查是否有多余的惯性环节或适当减小 K 再重新校正step 响应高频振铃超前校正 ωc 推得太高放大高频噪声加大余量中的相位补偿或对测量信号加低通滤波这种时候我一般会打开 sisotool 做最后的微调sisotool(Gc * G0)左侧是开环 Bode 图右侧是闭环阶跃响应直接拖动校正器的零点和极点位置实时观察相角裕度和超调量的变化。拖动时盯着两个数Wcp 附近相角曲线的斜率以及 Gm 的读数。零点往右移会提升相角但抬高 ωc极点往右移会压低高频增益但可能把相角拖下来来回试几次就能理解参数和指标的耦合关系这比盲目重跑脚本更能积累手感。6. 从传递函数到可落地的校正器采样实现与验收清单6.1 数字实现用双线性变换把 Gc(s) 写进 MCU课程设计做完仿真下一步往往是把校正器真正跑起来。模拟电路里的 RC 网络可以直接实现一阶超前或滞后电阻电容参数由 T 和 α/β 换算得到但实际项目里更常见的是在 DSP 或 MCU 里用差分方程实现。把连续校正器离散化的标准做法是双线性变换Gd(z) Gc(s) 在 s (2/Ts)(z-1)/(z1) 下的映射。MATLAB 一条命令就能完成% 连续校正器 (1 0.44s) / (1 0.12s) Gc tf([0.44 1], [0.12 1]); Ts 0.005; % 采样周期 Gd c2d(Gc, Ts, tustin); [num, den] tfdata(Gd, v); % num [b0 b1], den [1 a1] % 对应差分方程 % u(k) b0*e(k) b1*e(k-1) - a1*u(k-1) fprintf(差分系数: b0%.4f, b1%.4f, a1%.4f\n, num(1), num(2), den(2));采样周期 Ts 的选取直接影响离散化精度。经验规则是采样频率至少是穿越频率的 20 到 40 倍算例中 ωc 约 4.35 rad/s对应的采样周期 Ts 0.005s 刚好落在 1/(20ωc) 附近。Ts 取太大双线性变换会把校正器零点推向不稳定区差分方程输出会发散Ts 取太小则白白增加 CPU 开销实际工程里取 10 到 20 倍 ωc 已经够用。把差分系数固化到代码后记得在 Simulink 里用 Discrete Transfer Fcn 做一次闭环仿真确认离散后的相角裕度比连续系统低不超过 2°再进硬件。6.2 验收清单课设答辩前逐项打勾设计完成不要直接交差按验收清单逐项过一遍每项对应一个可复现的验证动作比“看着系统能跑就提交”可靠得多。稳态误差用斜坡输入仿真验证相角裕度和幅值裕度用 margin 读超调量和调节时间用 stepinfo 读最后检查校正器自身在高频段有没有把噪声放大到不可接受。验收项验证方法合格线稳态误差对闭环系统加斜坡输入观测 10s 后误差ess 小于指标要求相角裕度margin(Gc*G0) 读 PmPm 比目标高 2° 以上幅值裕度margin 读 GmGm ≥ 6dB穿越频率margin 读 Wcp与设计值偏差在 20% 内超调量/调节时间stepinfo(feedback(Gc*G0,1))满足题目要求抗高频噪声在反馈回路叠加 10ωc 的正弦干扰看输出幅值无明显放大6.3 一个容易被忽略的验证细节先测原系统再谈校正最后补一个课件里容易跳过的细节所有设计都建立在原系统模型准确的假设上但实际被控对象往往带有未建模的高频惯性环节。设计前先用频率响应测试仪或扫频脚本把 G0(s) 的真实 Bode 图测出来和理论模型对比如果高频段幅值比模型衰减得更快校正器里的超前环节就要少补 5° 到 8° 的相角否则实际系统的裕度会比 margin 算出来的低一截。真到了课程设计现场发现校正后系统不稳定先别怀疑课本拿这个对比结果回去重新校一次参数。本文还有配套的精品资源点击获取