简介:《自动控制原理》(第六版)第六章“线性系统的校正方法”配套课件,面向自动控制原理课程学习者、考研复习者及相关专业师生,内容聚焦常用校正装置及其特性,与教材章节对应紧密。PPT围绕无源校正网络展开,分别讲解无源超前网络、无源滞后网络和无源滞后-超前网络的电路结构、传递函数推导、零极点分布与相角特性,并结合分度系数 a、b 和时间常数 T 说明参数选择对校正效果的影响,能帮助读者理解不同网络在提高系统稳定性、消除高频噪声等方面的实际作用。资源包共包含1个PPT文件,压缩包约304KB,体量轻便但知识点覆盖完整,适合配合教材进行章节复习或教学讲义补全。目前已有86人学习下载,可作第六章校正方法学习的浓缩参考,也适合作为课堂辅助演示材料。
1. 线性系统的校正方法:从频域开环特性到闭环性能的工程桥
一个调试现场常见的画面:被控对象模型已经到手,负反馈闭环也搭好了,但测试结果总差那么一口气——要么稳态精度不够,要么响应超调偏大,要么相位裕度小得让人不放心。直接改控制器增益往往按下葫芦浮起瓢,改大了系统振荡,改小了响应拖沓。真正工程上解决问题的路径,是在原系统上串入校正网络,用频域设计的语言重塑开环Bode图。这就是《自动控制原理》第6章「线性系统的校正方法2」在讲的事情:给一个既有系统搭配超前、滞后或滞后-超前校正环节,让相位裕度、截止频率和稳态精度同时落在合理区间。这一篇面向学过反馈控制基础、拿到系统模型却不知道怎么调参数的工程师,把三种基础校正手段的原理、参数计算和仿真验证过程完整走一遍,顺便说出那些课本不会明说的工程边界与常见坑。
2. 超前校正:用相位裕度换截止频率,相位抬升的代价看噪声
2.1 为什么先看相位裕度而不是先调增益
对线性时不变系统做设计,核心指标有三个:稳态误差系数、相位裕度、截止频率。稳态误差由开环增益和系统型别决定,但直接把增益调大通常会把截止频率推高,随之而来的是相位裕度下降,系统趋向振荡。超前校正的核心思想很简单:在保证增益不变的前提下,用校正网络的相位超前特性把中频段的相位抬起来,让系统在更高的截止频率处仍然保有足够的相位裕度。
超前校正的传递函数标准形式是:
Gc(s) = Kc · (1 + αTs) / (1 + Ts),其中 α > 1
这个网络的幅频特性在低频段是 0dB,高频段是 20lgα,它本质是一个高通滤波器。Bode 图上幅值曲线在 1/(αT) 到 1/T 之间有一个上升的斜率段,相位曲线在这段频率范围内出现正的相位峰。最大超前角出现在几何中心频率 ωm = 1/(T·√α) 处,对应的最大超前角为:
φm = arcsin((α - 1) / (α + 1))
从公式可以看出 α 越大,能提供的超前角越大,但代价是高频增益放大倍数也越大。α 取 10 时 φm 约是 54.9°,取 20 时 φm 约 64.8°,越往后收益越有限,而噪声放大的问题却越来越明显,所以工程上一般不会把 α 做超过 20。
2.2 超前校正设计步骤:从 Bode 图读数到参数落地
设计超前校正网路的工程方法,常见做法是以下六步:
- 根据稳态误差要求确定开环增益 K;
- 绘制未校正系统在增益 K 下的 Bode 图,量出相位裕度 γ0;
- 计算期望相位裕度 γ 与 γ0 的差值,再加上 5°~12° 的余量,得到需要补偿的最大超前角 φm;
- 由 φm = arcsin((α-1)/(α+1)) 反解 α;
- 在未校正系统的幅频曲线上找到增益为 -10lgα 的频率点,取该频率为校正后截止频率 ωc,令 ωm = ωc;
- 由 T = 1/(ωm·√α) 计算时间常数,写出完整校正网络传递函数。
余量之所以要加 5°~12°,是因为校正网络相位曲线不是理想的矩形峰,它在新的截止频率处实际贡献的相位会比 φm 略小。若原系统在剪切频率附近斜率较陡,余量取上限。
2.2.1 用 Python 控制库实现超前校正计算
下面给出一段可以直接运行的最小计算脚本,使用control库做频域分析。假设被控对象为 G(s) = 20 / [s(s+1)(0.1s+1)],要求稳态速度误差系数 Kv ≥ 20,相位裕度不低于 45°。
import control as ct import numpy as np # 被控对象:G(s) = 20 / [s(s+1)(0.1s+1)] s = ct.tf('s') G = 20 / (s * (s + 1) * (0.1 * s + 1)) # 绘制未校正 Bode 图并读取相位裕度 # margin() 返回增益裕度、相位裕度、对应频率 gm, pm, wgm, wpm = ct.margin(G) print(f"未校正:增益裕度 {gm:.2f} dB,相位裕度 {pm:.2f}°,穿越频率 {wpm:.2f} rad/s") # 期望相位裕度 45°,加 10° 余量 target_pm = 45 phi_m = target_pm - pm + 10 phi_m_rad = np.deg2rad(phi_m) alpha = (1 + np.sin(phi_m_rad)) / (1 - np.sin(phi_m_rad)) print(f"需要补偿最大超前角:{phi_m:.2f}°,对应 α = {alpha:.2f}") # 找幅值为 -10lg(alpha) 的频率点 gain_to_find = -10 * np.log10(alpha) freqs = np.logspace(-2, 2, 10000) mag, phase, omega = ct.frequency_response(G, freqs) # frequency_response 返回的 mag 是幅值,转成 dB mag_db = 20 * np.log10(mag.squeeze()) idx = np.argmin(np.abs(mag_db - gain_to_find)) omega_c = omega[idx] print(f"新的截止频率取 ωc = {omega_c:.3f} rad/s,此时幅值 {mag_db[idx]:.2f} dB") # 计算校正网络参数 T = 1 / (omega_c * np.sqrt(alpha)) print(f"T = {T:.4f},校正网络传递函数 (1+{alpha*T:.4f}s)/(1+{T:.4f}s)") # 组合校正后的开环传递函数,验证相位裕度 Gc = (1 + alpha * T * s) / (1 + T * s) G_open = G * Gc gm2, pm2, wgm2, wpm2 = ct.margin(G_open) print(f"校正后:增益裕度 {gm2:.2f} dB,相位裕度 {pm2:.2f}°,穿越频率 {wpm2:.2f} rad/s")这段代码里的ct.frequency_response返回的是复数响应对象,mag.squeeze()是为了消除单输入单输出系统下多余的维度。np.argmin(np.abs(mag_db - gain_to_find))是在离散频率点上找最接近目标增益的下标,频率点取密一点可以提高定位精度,这也意味着算出的 ωc 精度受频率扫描分辨率限制。如果嫌这个近似不够精细,可以用二分法在相邻两个频点之间插值,工程上扫描 10000 个点已经足够。
2.3 超前校正的边界条件与常见失误
超前校正最容易被忽略的问题在高频段。由于网络增益在高频处是 20lgα,如果系统本身存在高频测量噪声或未建模谐振,校正后噪声会被放大,反映在输出上就是控制量抖动加剧。这一点在 α 较大的时候尤其明显。
另一类常见失误是把 ωm 放到了未校正系统幅频曲线斜率最陡的地方。斜率越陡,同样的频率偏移带来的相位变化越大,校正后相位裕度的实测值和设计值偏差就越大。我一般会刻意让 ωm 落在幅频曲线斜率为 -20dB/dec 的区间,如果系统本身在这个频段斜率是 -40dB/dec 甚至更陡,需要重新评估是否应该先用滞后校正把截止频率压低,而不是硬做超前。
还有一个细节是 α 和 T 的匹配。计算得到 α 后,如果 T 太小,校正网络的作用频段整体右移,对原系统的相位补偿落在高频区,实际效果微弱;如果 T 太大,则相位补偿点过低,白白牺牲了响应速度。判断标准很简单,画出校正前后 Bode 图对比,看相位曲线在中频段是否出现了明显的抬升。只算参数不画图,等于没有设计。
3. 滞后校正:拉低截止频率换相位裕度,低频特性一个不掉
3.1 滞后校正的数学模型与设计思路
滞后校正传递函数为:
Gc(s) = (1 + bTs) / (1 + Ts),其中 b < 1
它的幅频特性低频段是 0dB,高频衰减到 20lgb,即是一个低通滤波器。滞后校正的核心逻辑和超前完全相反:不追求在原有截止频率处抬相位,而是利用滞后网络的高频衰减特性,把整个开环幅频曲线压下来,让穿越频率向左移动到一个相位相对充裕的频段。因为穿越频率变低,系统在这个更低频率处的相位裕度自然就大了。
这里要澄清一个常见误解:滞后校正提供相位补偿的说法并不精确。滞后网络的相位曲线在转折频率附近其实是负的,它真正有用的属性是高频衰减。设计者用它的衰减能力,让开环增益曲线在更低频率处穿越 0dB 线,从而躲开原系统相位快速下降的高频区。这也是为什么滞后校正会让系统带宽下降、响应变慢——代价就是时间响应迟钝一些,换来了稳定性和稳态精度的保留。
滞后校正设计步骤:
- 根据稳态误差要求确定开环增益 K,画出 Bode 图;
- 找到未校正系统相位裕度刚好等于目标裕度加 5°~12° 的频率点,记为期望截止频率 ωc';
- 在 ωc' 处读未校正系统幅值 L(ωc'),令滞后网络的高频衰减量 20lgb 抵消这个幅值,即 b = 10^(L(ωc')/20);
- 选择转折频率系数,令 1/T = ωc' / 10 左右,让滞后网络的相位滞后远离期望截止频率;
- 验证校正后相位裕度是否达标,不达标就微调 T。
设计思路里最精巧的是第 4 步。选择 1/T 比 ωc' 低十倍频程,是为了让滞后网络在 ωc' 处产生的相位滞后尽量小。如果这个条件满足,滞后网络在交叉频率处只引入约 5°~6° 的负相位,这个量正好被设计时预留的余量所覆盖。
3.2 滞后校正参数计算的完整示例
沿用上一章节同一被控对象 G(s) = 20 / [s(s+1)(0.1s+1)],目标变为:稳态速度误差系数 Kv ≥ 20,相位裕度不低于 45°,同时希望校正后系统带宽不要过低。先看未校正系统的相位裕度,再计算滞后参数。
import control as ct import numpy as np s = ct.tf('s') G = 20 / (s * (s + 1) * (0.1 * s + 1)) # 目标相位裕度 45°,加 8° 余量 target_pm = 45 pm_margin = 8 target_phase = -180 + (target_pm + pm_margin) # 找相位等于 target_phase 的频率作为期望截止频率 freqs = np.logspace(-2, 1, 50000) mag, phase, omega = ct.frequency_response(G, freqs) phase_deg = phase.squeeze() * 180 / np.pi idx = np.argmin(np.abs(phase_deg - target_phase)) omega_c_new = omega[idx] print(f"期望截止频率取 ωc' = {omega_c_new:.3f} rad/s") # 读取该频率处的幅值,计算 b mag_db_at_new_wc = 20 * np.log10(mag.squeeze()[idx]) b = 10 ** (mag_db_at_new_wc / 20) print(f"ωc' 处幅值 {mag_db_at_new_wc:.2f} dB,对应 b = {b:.4f}") # 选择 1/T = ωc' / 10 T = 10 / omega_c_new print(f"T = {T:.3f} s,滞后网络传递函数 (1+{b*T:.3f}s)/(1+{T:.3f}s)") # 验证校正效果 Gc_lag = (1 + b * T * s) / (1 + T * s) G_open_lag = G * Gc_lag gm3, pm3, wgm3, wpm3 = ct.margin(G_open_lag) print(f"滞后校正后:相位裕度 {pm3:.2f}°,穿越频率 {wpm3:.2f} rad/s")代码里target_phase = -180 + (target_pm + pm_margin)是关键,它把相位裕度要求转换成相位角目标值。找到的频率点是未校正系统相位曲线上满足目标的最高频率,如果这个频率取得比原有穿越频率低,说明校正有效;如果计算出来的 ωc' 和原穿越频率相差无几,说明系统本身的相位储备尚可,不太需要滞后校正。
3.3 滞后校正参数选择中的核心权衡
滞后校正中 b 的取值决定了高频段衰减量。b 越小,衰减越强,同样的目标相位裕度下 ωc' 可以选得越高,带宽损失越小。但 b 太小会带来另一个问题:转折频率 1/(bT) 会被推得很低,网络在此处的相位滞后会延续到很宽的频带,导致校正后系统在中低频段产生明显的相位凹陷。这个凹陷若不处理,在闭环响应的特定频段会造成谐振峰抬高。
工程经验上 b 一般取 0.1~0.5 之间,对应衰减 -20dB 到 -6dB。如果算出的 b 小于 0.05,说明单独用滞后校正的代价太大,带宽会被压缩得过于厉害,这时候应该考虑滞后-超前校正,把频率点重新往高处挪。
另一个容易被忽略的点是滞后网络的 T 值不能无限放大。T 太大时,校正网络引入了一个极低频的慢极点,闭环系统会多出一个几乎与零极点对消的慢动态,体现在阶跃响应上就是输出要经过很长时间才结束缓慢漂移,给人一种「系统还在慢慢爬」的感觉。判别方法是在校正后闭环阶跃响应曲线上看是否存在拖尾,如果有,就把 1/T 的位置提高,但要重新验证相位裕度。
4. 反馈校正与复合校正:从串联走向结构,工程现场的频率法组合拳
4.1 反馈校正:用局部闭环重塑对象特性
串联网路结构简单、计算直观,但有一个天然弱点:它对被控对象参数漂移没有抑制能力。当对象本身的模型不够精确、增益随时间变化时,串联校正的效果也会跟着漂移。反馈校正在这里体现出优势。图 1 是一个典型的局部反馈结构,前向通路为 G1(s),被包围的环节为 G2(s),反馈支路为 H(s)。
内回路闭环传递函数为:
Φ(s) = G2(s) / (1 + G2(s)·H(s))
当 G2(s)·H(s) 的幅值远大于 1 时,Φ(s) 近似等于 1/H(s),即内环特性只由反馈支路决定。这意味着把对象参数的变化影响大幅削弱了。工程上做反馈校正最常见的手法是把一个微分反馈(测速机或 tacho 反馈)包围在惯性环节或者振荡环节外面,用内环阻尼去抑制对象谐振峰。
频率法设计内环的思路是:先画出 G2(s)·H(s) 的开环 Bode 图,确定内环穿越频率和相位裕度,保证内环本身稳定;然后计算 Φ(s),把内环闭环传函当作新的被控对象,再去设计外环串联校正。两步走的顺序不能颠倒,否则外环设计结果会被内环的动态拖累。
4.1.1 反馈校正参数的频率法验算示例
import control as ct import numpy as np s = ct.tf('s') G1 = 10 / (s + 1) G2 = 2 / (s * (0.5 * s + 1)) # 反馈支路:微分+增益,H(s) = 0.1s H = 0.1 * s # 内环开环传函 inner_loop_open = G2 * H gm_in, pm_in, _, _ = ct.margin(inner_loop_open) print(f"内环开环相位裕度:{pm_in:.2f}°") # 内环闭环传函 inner_loop_closed = G2 / (1 + inner_loop_open) print(f"内环闭环传函:{inner_loop_closed}") # 整个校正后系统开环传函 G_open_fb = G1 * inner_loop_closed gm_fb, pm_fb, _, _ = ct.margin(G_open_fb) print(f"反馈校正后系统相位裕度:{pm_fb:.2f}°")内环相位裕度是一个关键设计值。如果反馈支路 H(s) 中含微分环节,内环开环在低频段幅值较小,在高频段幅值增大,这种特性天然有利于抑制低频干扰而让高频信号通过。但微分环节也会放大高频噪声,所以 H(s) 在工程实现时通常会加上一个小惯性滤波,例如 0.1s/(0.01s+1),把无用的高频增益压掉。
4.2 复合校正:前馈通道绕过闭环的稳定性限制
串联校正和反馈校正的本质都是在闭环回路内做文章,因此它们都受制于稳定性与性能之间的基本矛盾:相位裕度给得足,带宽必然受限制。复合校正在回路之外另开一条前馈通道,直接补偿输入信号对输出的影响,它的核心优势在于可以在不损失相位裕度的情况下改善稳态跟踪精度。
按输入补偿的前馈结构里,前馈通路传函 F(s) 与闭环回路并联。联合系统对输入的误差传递函数变为:
Φe(s) = E(s) / R(s) = (1 - F(s)·P(s)) / (1 + P(s)·C(s))
其中 P(s) 为对象传函,C(s) 为反馈控制器。当 F(s) = 1/P(s) 时误差理论上完全为零,这个条件被称为完全不变性条件。实际系统不可能精确实现逆模型,工程上通常取 F(s) 为 P(s) 的近似逆,用来消除主导极点的影响。
复合校正多用于随动系统、雷达天线伺服这类对跟踪速度要求很高的场景。值得注意的是,前馈通道的引入不影响闭环特征方程,因为反馈回路的极点结构没有变,稳定性分析仍然只针对闭环回路进行。这个特性让复合校正成为了工程师手里少数几个「免费午餐」:补偿了动态误差,却不消耗相位裕度。
4.3 三种校正策略的适用性对照
| 校正方式 | 改善指标 | 主要代价 | 适用场景 |
|---|---|---|---|
| 超前校正 | 相位裕度、截止频率 | 高频噪声放大 | 原系统稳定性尚可、需要提速 |
| 滞后校正 | 相位裕度、稳态精度 | 带宽降低、响应变慢 | 原系统稳态精度满足、稳定性不足 |
| 滞后-超前 | 综合提升 | 参数多、调校复杂 | 对精度和速度都有要求的系统 |
| 反馈校正 | 对象参数漂移抑制 | 额外硬件、噪声敏感 | 对象模型不确定性强 |
| 复合校正 | 跟踪精度、动态误差 | 需要前馈模型 | 随动系统、高精度伺服 |
实际项目里没有哪张表能直接给出答案,但频率法的设计习惯是固定的:先看稳态指标定增益,再看中频段相位裕度,最后检查截止频率和噪声。校正方式选错通常是因为前一步没有做扎实。
5. 滞后-超前校正的两步合成法:从串联到并联的验证收尾
5.1 用 Bode 图验证参数是否真的落在设计点
校正设计做到最后,验证环节往往比计算环节更重要。我一般会固定做三个检查:第一,重新绘制校正后开环 Bode 图,量取相位裕度和截止频率,和设计值对比;第二,看闭环阶跃响应的超调量和调节时间,确认时域指标落在预期范围;第三,扫一遍控制量曲线,确认没有高频抖振。这三个检查做完,设计才算真正闭环。
这里给出一个滞后-超前校正的两步设计实现,它综合了两章前面的设计结果。滞后-超前网络的传函为:
Gc(s) = (1 + α·T1·s) / (1 + T1·s) · (1 + β·T2·s) / (1 + T2·s)
其中 α > 1,β < 1。常见做法是先用滞后部分压低截止频率并保留低频增益,再用超前部分抬高新截止频率处的相位。下面用仿真脚本直接验证组合效果。
import control as ct import numpy as np import matplotlib.pyplot as plt s = ct.tf('s') G = 20 / (s * (s + 1) * (0.1 * s + 1)) # 滞后参数:源于第 3 章计算结果 beta = 0.125 T_lag = 10.0 Gc_lag = (1 + beta * T_lag * s) / (1 + T_lag * s) # 超前参数:基于滞后后的系统重新设计 G_after_lag = G * Gc_lag alpha = 5.0 omega_m = 3.0 T_lead = 1 / (omega_m * np.sqrt(alpha)) Gc_lead = (1 + alpha * T_lead * s) / (1 + T_lead * s) Gc_comb = Gc_lag * Gc_lead G_open_comb = G * Gc_comb gm_c, pm_c, wgm_c, wpm_c = ct.margin(G_open_comb) print(f"滞后-超前校正:相位裕度 {pm_c:.2f}°,截止频率 {wpm_c:.2f} rad/s") # 闭环阶跃响应对比 T_orig = G / (1 + G) T_comb = G_open_comb / (1 + G_open_comb) t, y_orig = ct.step_response(T_orig, np.linspace(0, 20, 2000)) t2, y_comb = ct.step_response(T_comb, np.linspace(0, 20, 2000)) plt.figure(figsize=(8, 5)) plt.plot(t, y_orig, label='未校正', linewidth=1.5) plt.plot(t2, y_comb, label='滞后-超前校正', linewidth=1.5) plt.legend() plt.grid(True, alpha=0.3) plt.xlabel('时间 (s)') plt.ylabel('输出幅值') plt.savefig('step_compare.png', dpi=150)这段脚本里有一个值得注意的细节:先做滞后再做超前,顺序不是随意的。滞后网络把截止频率拉低之后,被控对象在新截止频率附近的幅频斜率会变得相对平缓,此时超前网络需要补偿的相位量较小,α 值可以取低,噪声放大也相应变小。相反,如果先做超前,高频增益已经被抬高,再加滞后虽然也能压回来,但超前网络对高频噪声的放大已经在物理层面发生了。
5.2 验证环节的三个高频踩坑点
相位裕度达标的判定要同时看幅值裕度。滞后-超前网络参数组合不当,可能出现相位裕度正常但幅值裕度不足 6dB 的情况,这在高阶对象上尤其明显。幅值裕度的低意味着闭环系统对增益变化的容忍度差,实际运行时对象增益稍有增加就可能导致临界振荡。
第二个坑是仿真验证时只看闭环阶跃响应,不看开环 Bode 图的低频段特性。滞后-超前校正如果参数配比不当,低频段增益被超前部分的零点抬高,虽然不影响相位裕度,但会让系统对低频干扰的抑制能力下降。检查方法是在低频段(低于 0.01 rad/s)读一下开环幅值,对比未校正系统的值是否符合预期。
第三个坑是数字实现时的离散化误差。校正网络在模拟域设计完,接入数字控制器时要做双线性变换或零极点匹配变换,变换后频率响应会在接近 Nyquist 频率时产生畸变,尤其是超前网络的高频抬升部分。保守做法是让校正后截止频率低于 Nyquist 频率的十分之一,并配合抗混叠滤波器使用。仿真验证通过不等于实物验证通过,差别往往就在这些离散化边界上。
5.3 一个更精细的调参技巧:用闭环频率响应峰值微调相位裕度
经典书上只说相位裕度设计要求,但从不提相位裕度选多少是「够」的。这里给出一个在工程上更直接的关联:闭环幅频响应峰值 Mr 与相位裕度 γ 之间存在近似关系 Mr ≈ 1 / sinγ,γ 取 45° 时对应 Mr 约 1.41,即闭环谐振峰约 3dB。若系统对谐振峰有明确上限,可以直接反推所需的相位裕度。
调参时如果发现阶跃响应超调虽在允许范围内但振荡次数多,通常是因为相位裕度偏大而幅值裕度偏小,此时不要动超前网络的 α,而应该微调滞后网络的 β 值,让两个裕度同时回到平衡区间。这个调参思路比对着一堆时域指标盲目试错要高效得多。
本文还有配套的精品资源,点击获取