简介:这份资源是吴麒教授编著的《自动控制原理》第二版配套课件,面向自动化、电子工程、航空航天等专业的本科生与考研学习者,帮助系统掌握控制系统的建模、分析与设计方法。压缩包共收录140个文件,以102个MATLAB脚本(.m)、23个PPT讲义、10个Flash动画、3份Word文档及2个Simulink模型(.mdl)为主,整体约16.48MB,兼顾理论讲解与仿真验证。课件内容覆盖控制系统定义与分类、微分方程与传递函数建模、劳斯判据与根轨迹稳定性分析、伯德图与尼奎斯特频率响应、PID及状态反馈控制器设计、超前滞后校正、非线性系统描述函数与相平面法、离散系统Z变换以及最优控制与模糊控制等现代控制理论,并配有飞机自动驾驶、机器人控制、电力系统等工程案例。目前已有598人学习下载,适合课堂同步复习、考研梳理知识框架及仿真练习,是一份体系完整、便于检索的经典学习资料。
1. 自动控制原理课件(吴麒):从“看不懂框图”到能自己推一遍
很多人第一次翻自动控制原理的课件,卡住的地方不是微积分,而是那张方框图——信号从哪进、从哪出、反馈点在哪、为什么一个负号就能决定系统稳不稳定。自动控制原理课件(吴麒)这类资料的价值,不在于它替你考试,而在于它把“时域—复域—频域”三条线串成了一条能自己动手推的路径。它适合两类人:一类是正在学这门课、需要把课堂笔记补成可复现推导的学生;另一类是做嵌入式控制、机器人或过程控制,想把 PID 调参背后的稳定性判据重新捡起来的工程师。这篇笔记不讲空泛的学科意义,只讲怎么把这份课件当成一套可执行的学习材料:先立住传递函数和稳定性这两根柱子,再落到根轨迹、频域校正和离散化,最后给出能自己验算的步骤和参数。
2. 先立住两根柱子:传递函数与稳定性判据
自动控制原理课件(吴麒)里出现频率最高的两个东西,一个是传递函数,一个是稳定性判据。很多人把这两块当成两个独立章节背,结果一到综合题就不知道从哪下手。实际做法是:把传递函数当成系统的“身份证”,把稳定性判据当成“体检标准”,两者必须一起用。
2.1 传递函数到底在描述什么
传递函数 G(s)=Y(s)/U(s) 在零初始条件下成立,它描述的是系统本身的动态特性,和输入大小无关。课件里通常会先给微分方程,再拉氏变换,再整理成比值。这一步的关键不是算,而是理解“为什么可以忽略初始条件”——因为研究的是系统结构对输入的响应形状,而不是某一次具体运行的绝对数值。
我一般会让学生做一件事:拿到一个 RLC 电路或者弹簧阻尼系统,先自己列微分方程,再对照课件里的传递函数,看分母阶数对应几个储能元件。这个对应关系一旦建立,后面看到三阶系统就不会慌。
import sympy as sp s, R, L, C = sp.symbols('s R L C') # RLC 串联电路:输入电压 U,输出电容电压 Y # 分压关系:Y/U = (1/(sC)) / (R + sL + 1/(sC)) G = (1/(s*C)) / (R + s*L + 1/(s*C)) G_simplified = sp.simplify(G) print(G_simplified) # 输出:1/(C*L*s**2 + C*R*s + 1)这段代码用符号运算把 RLC 电路的传递函数整理成标准二次形式。参数说明:R 是电阻,L 是电感,C 是电容,分母的 s² 项系数是 LC,s 项系数是 RC,常数项是 1。逻辑说明:分母阶数等于独立储能元件个数,这里 L 和 C 各一个,所以是二阶。课件里如果直接给结果,建议自己用这段代码验一遍,避免抄错符号。
2.2 稳定性判据怎么选、怎么用
课件里常见的稳定性判据有三类:劳斯判据、根轨迹法、奈奎斯特判据。选哪个不是随意的:劳斯判据适合已知特征方程系数、判断右半平面根个数;根轨迹适合看某个参数(通常是开环增益 K)从 0 到无穷变化时闭环极点的走向;奈奎斯特适合开环频率特性已知、要判断闭环稳定性的场合。
一个常见的翻车点是:用劳斯判据时只看了第一列符号变化,却忘了处理某行全为零的情况。课件里通常会提“辅助方程”,但很多人跳过。实际做法是:遇到全零行,用上一行系数构造辅助方程,求导后替换该行,再继续。
| 判据 | 适用场景 | 关键输出 | 常见误用 |
|---|---|---|---|
| 劳斯 | 特征方程系数已知 | 右半平面根个数 | 忽略全零行 |
| 根轨迹 | 开环传递函数已知,看 K 变化 | 闭环极点轨迹 | 把开环极点当闭环极点 |
| 奈奎斯特 | 开环频率特性已知 | 包围 (-1, j0) 圈数 | 忘记补相角 |
注意:劳斯判据只能判断绝对稳定性,不能直接给稳定裕度。要裕度就转频域。
3. 根轨迹与频域校正:从“会画”到“会调”
课件里根轨迹和频域校正往往是分开讲的,但实际调参时两者是连着的:根轨迹告诉你极点往哪走,频域告诉你带宽和相位裕度够不够。这一章把这两块接起来。
3.1 根轨迹的手绘规则与代码验算
根轨迹有 8 条左右的手绘规则,课件里一般会列全。但手绘容易在渐近线交点和分离点上出错。我一般会先用规则画个大概,再用 Python 算精确值对照。
import numpy as np import matplotlib.pyplot as plt from control import tf, rlocus # 开环传递函数 G(s) = K / (s*(s+2)*(s+4)) sys = tf([1], [1, 6, 8, 0]) rlocus(sys) plt.title('Root Locus of K/(s(s+2)(s+4))') plt.show() # 分离点:解 dK/ds = 0,即特征方程对 s 求导 import sympy as sp s = sp.symbols('s') K = - (s*(s+2)*(s+4)) dK = sp.diff(K, s) print(sp.solve(dK, s)) # 输出:[-0.845, -3.155] 取在根轨迹上的 -0.845这段代码用 control 库画根轨迹,用 sympy 求分离点。参数说明:开环极点 0、-2、-4,渐近线交点 (-2, 0),角度 ±60°、180°。逻辑说明:分离点是 K 的极值点,对特征方程求导后解出的 s 要验证是否在根轨迹上。课件里如果只给图,建议自己跑一遍,确认分离点位置。
3.2 频域校正:超前、滞后、超前滞后怎么选
频域校正的核心是改开环频率特性,让闭环满足相位裕度和截止频率要求。超前校正提相位裕度、增带宽;滞后校正降高频增益、提低频精度;超前滞后兼顾两者。选型看需求:如果原系统相位裕度不够且截止频率偏低,用超前;如果稳态误差大但相位裕度够,用滞后。
from control import tf, margin, bode import numpy as np # 原系统 G0 = 10/(s*(s+1)*(s+2)) G0 = tf([10], [1, 3, 2, 0]) gm, pm, wg, wp = margin(G0) print(f'原系统相位裕度: {pm:.2f} deg, 截止频率: {wp:.2f} rad/s') # 超前校正器 Gc = (a*T*s + 1)/(T*s + 1),取 a=5, T=0.1 a, T = 5, 0.1 Gc = tf([a*T, 1], [T, 1]) G_open = G0 * Gc gm2, pm2, wg2, wp2 = margin(G_open) print(f'校正后相位裕度: {pm2:.2f} deg, 截止频率: {wp2:.2f} rad/s')参数说明:a 决定最大超前相位,T 决定中心频率。逻辑说明:先算原系统裕度,再试校正器参数,直到裕度落在 45°~60°、截止频率满足响应速度。课件里通常给公式,但实际调参要迭代,这段代码就是迭代工具。
提示:超前校正的最大相位角 φm = arcsin((a-1)/(a+1)),a 越大相位越多,但高频增益也越大,噪声敏感。
4. 离散化与状态空间:课件里最容易跳过的两章
很多课件把离散化和状态空间放在最后,课时紧就跳过。但实际做嵌入式控制,这两块绕不开。离散化决定采样周期怎么选,状态空间决定多变量系统怎么描述。
4.1 离散化:采样周期不是随便定的
离散化的核心是采样定理和保持器。课件里一般讲零阶保持器(ZOH)和双线性变换(Tustin)。选哪个看场景:ZOH 适合实际 DAC 输出,Tustin 适合频域特性保持。
from control import tf, c2d import numpy as np # 连续系统 G(s) = 1/(s+1) G = tf([1], [1, 1]) Ts = 0.1 # 采样周期 # 零阶保持器离散化 G_zoh = c2d(G, Ts, method='zoh') print('ZOH:', G_zoh) # 双线性变换离散化 G_tustin = c2d(G, Ts, method='tustin') print('Tustin:', G_tustin)参数说明:Ts 是采样周期,一般取系统带宽的 10 倍以上。逻辑说明:ZOH 在低频段接近连续,Tustin 在截止频率附近更准。课件里如果只给公式,建议用这段代码对比两种方法在同一 Ts 下的差异。
4.2 状态空间:从传递函数到能控能观
状态空间表达式 x_dot = Ax + Bu, y = Cx + Du 在课件里通常从传递函数转换来。能控性和能观性是判断系统能不能用状态反馈和观测器的前提。
from control import tf, tf2ss, ctrb, obsv import numpy as np # G(s) = (s+2)/(s^2+3s+2) G = tf([1, 2], [1, 3, 2]) A, B, C, D = tf2ss(G.num[0][0], G.den[0][0]) print('A:', A) print('B:', B) print('C:', C) # 能控性矩阵 Wc = ctrb(A, B) print('能控性矩阵秩:', np.linalg.matrix_rank(Wc)) # 能观性矩阵 Wo = obsv(A, C) print('能观性矩阵秩:', np.linalg.matrix_rank(Wo))参数说明:tf2ss 把传递函数转成能控标准型。逻辑说明:能控性矩阵满秩才能设计状态反馈,能观性矩阵满秩才能设计观测器。课件里如果只给定义,建议用这段代码验证一个具体系统。
5. 避坑与排查:课件学习中最容易翻车的 5 个点
这一章按“现象 → 原因 → 解决”写,都是实际学习中最常遇到的。
现象一:劳斯表第一列出现零,但符号变化数算不对。原因:零元素导致下一行无法计算,直接跳过会漏掉右半平面根。 解决:用上一行系数构造辅助方程,求导后替换全零行,再继续算符号变化。
现象二:根轨迹分离点算出来不在根轨迹上。原因:dK/ds=0 的解只是候选点,还要验证该点是否满足相角条件。 解决:把候选点代入开环传递函数,看相角是否为 180°+k·360°。
现象三:频域校正后相位裕度够了,但阶跃响应超调很大。原因:相位裕度和超调不是一一对应,还和闭环带宽、谐振峰值有关。 解决:同时看 Mr 和带宽,必要时加低通滤波或调整校正器零点位置。
现象四:离散化后系统不稳定,但连续系统是稳的。原因:采样周期太大,离散化引入的相位滞后超过裕度。 解决:减小 Ts,或改用 Tustin 并预畸变关键频率。
现象五:状态反馈后系统能控但响应不对。原因:能控性只保证极点可配置,不保证配置后的动态满足要求。 解决:用极点配置或 LQR 时,先明确期望闭环极点位置,再验算。
注意:课件里的例题通常参数干净,实际系统有饱和、延迟、噪声。学课件时就要养成“加扰动再验一遍”的习惯。
6. 把课件变成自己的工具:一个可复用的验算模板
学完课件最怕的是“当时会了,过两周忘了”。我的习惯是:每学完一章,写一个最小验算脚本,把该章的核心公式跑一遍。下面这个模板覆盖传递函数、稳定性、根轨迹、频域、离散化五个环节,改参数就能复用。
import numpy as np import sympy as sp from control import tf, margin, c2d, rlocus, ctrb, obsv import matplotlib.pyplot as plt def analyze_system(num, den, Ts=None): """ 输入:传递函数分子 num、分母 den,可选采样周期 Ts 输出:稳定性、裕度、离散化结果 """ G = tf(num, den) # 1. 稳定性:求闭环极点(单位负反馈) G_cl = G / (1 + G) poles = G_cl.poles() print('闭环极点:', poles) print('稳定:' , np.all(np.real(poles) < 0)) # 2. 频域裕度 gm, pm, wg, wp = margin(G) print(f'相位裕度: {pm:.2f} deg, 截止频率: {wp:.2f} rad/s') # 3. 根轨迹 rlocus(G) plt.title('Root Locus') plt.show() # 4. 离散化 if Ts: G_zoh = c2d(G, Ts, method='zoh') print('ZOH 离散化:', G_zoh) # 5. 能控能观(转状态空间) A, B, C, D = tf2ss(G.num[0][0], G.den[0][0]) print('能控性秩:', np.linalg.matrix_rank(ctrb(A, B))) print('能观性秩:', np.linalg.matrix_rank(obsv(A, C))) # 示例:G(s) = 10/(s(s+1)(s+2)) analyze_system([10], [1, 3, 2, 0], Ts=0.05)参数说明:num 和 den 按降幂排列,Ts 可选。逻辑说明:这个模板把课件里分散的判据串成一条流水线,改一组参数就能看全貌。我一般会把它存成control_check.py,每次遇到新系统先跑一遍,再翻课件对答案。
一个具体技巧:如果相位裕度在 30° 到 40° 之间,阶跃响应通常有 20% 以上超调,这时候不要急着加校正,先看是不是截止频率太低。把截止频率提上去,裕度往往自然改善。这个经验在课件里不会写,但调过几个实际系统就能体会到。
最后说个我自己的教训:早年学这门课,我把根轨迹规则背得很熟,但第一次调实际电机速度环时,发现按课件算出来的 K 值一加上去就振荡。后来才明白,课件里的模型没有考虑 PWM 延迟和电流环带宽。从那以后,我养成了一个习惯:任何课件里的参数,先打七折上机,再根据响应慢慢加。希望这个习惯也能帮到你。
本文还有配套的精品资源,点击获取