第180篇 一阶/二阶系统响应——理解动态特性的基础

📅 2026/8/19 14:03:45
第180篇 一阶/二阶系统响应——理解动态特性的基础
上篇讲了传递函数把微分方程从时域搬到了s域分析起来方便多了。这篇我们来看两种最基本的系统——一阶系统和二阶系统——它们的阶跃响应长什么样有哪些关键指标为什么搞懂这两个系统就能理解几乎所有的动态特性。讲真控制理论里80%的问题都可以归结为一阶或二阶系统的响应。你把这两个搞透了后面遇到高阶系统、复杂系统无非就是拆解成一阶二阶的组合来分析。一阶系统最简单的动态一阶系统的传递函数长这样G(s) K / (Ts 1)K是稳态增益T是时间常数。就这两个参数决定了一阶系统的全部行为。给一阶系统一个阶跃输入响应是什么样的输出从0开始按指数曲线上升最终趋向K稳态值。没有超调、没有振荡就是平滑地爬上去。import numpy as np import matplotlib.pyplot as plt # 一阶系统阶跃响应 K 1.0 # 稳态增益 T 1.0 # 时间常数 t np.linspace(0, 5, 500) y K * (1 - np.exp(-t/T)) # 关键时间点 print(ftT时: y {K*(1-np.exp(-1)):.3f} (稳态值的63.2%)) print(ft3T时: y {K*(1-np.exp(-3)):.3f} (稳态值的95%)) print(ft5T时: y {K*(1-np.exp(-5)):.3f} (稳态值的99.3%))一阶系统只有两个关键指标时间常数T输出达到稳态值63.2%所需的时间。T越小系统响应越快。工程上一般认为经过3T到5T系统就到达稳态了。稳态增益K输出最终的稳态值跟输入幅值的比值。K1说明输出完全跟踪了输入。一阶系统的典型例子RC电路电容充放电、温度计测量环境温度、一阶低通滤波器。你给温度计一个突然的温度变化它不会瞬间跳到新温度而是按指数曲线慢慢逼近——这就是一阶响应。为什么一阶系统不会超调直觉上理解一阶系统没有惯性。它的当前变化率只取决于当前状态和输入的差距。越接近目标变化率越小所以永远不会冲过头。你可以把它想象成一个永远不会刹不住车的司机——离目的地越近他开得越慢到了就刚好停下。而二阶系统有惯性——就像一辆高速行驶的车即使到了目标位置速度还没降下来就会冲过头。这就是为什么二阶系统会有超调和振荡。二阶系统控制理论的核心二阶系统的传递函数G(s) ωn² / (s² 2ζωn*s ωn²)两个关键参数ωn自然频率和ζ阻尼比。跟一阶系统不同二阶系统的响应要丰富得多。根据阻尼比ζ的不同二阶系统有四种完全不同的响应模式ζ 1过阻尼响应缓慢地爬升到稳态值没有超调。就像一扇装了强力阻尼器的门慢慢关上去。ζ 1临界阻尼最快到达稳态且没有超调。这是工程上最理想的情况——又快又不 overshoot。0 ζ 1欠阻尼响应会冲过稳态值产生超调然后来回震荡几次才稳定。这是最常见的情况也是面试考得最多的。ζ 0无阻尼永远等幅振荡永远到不了稳态。import numpy as np # 二阶系统阶跃响应对比 wn 2.0 # 自然频率 zetas [0.1, 0.3, 0.707, 1.0, 2.0] # 不同阻尼比 t np.linspace(0, 10, 1000) for zeta in zetas: if zeta 1: wd wn * np.sqrt(1 - zeta**2) # 阻尼振荡频率 y 1 - np.exp(-zeta*wn*t) * (np.cos(wd*t) zeta/np.sqrt(1-zeta**2) * np.sin(wd*t)) elif zeta 1: y 1 - (1 wn*t) * np.exp(-wn*t) else: s1 -zeta*wn wn*np.sqrt(zeta**2 - 1) s2 -zeta*wn - wn*np.sqrt(zeta**2 - 1) y 1 (s1*np.exp(s2*t) - s2*np.exp(s1*t)) / (s2 - s1) overshoot np.max(y) - 1.0 if zeta 1 else 0 print(fζ{zeta:.3f}: 超调量{overshoot*100:.1f}%)二阶系统的关键指标欠阻尼二阶系统0 ζ 1有几个非常重要的性能指标面试中几乎必考上升时间tr响应从0第一次到达稳态值的时间。tr ≈ π / (ωn * sqrt(1-ζ²))。自然频率越大、阻尼比越小上升时间越短。超调量σ%响应超过稳态值的最大幅度。σ% exp(-ζπ / sqrt(1-ζ²)) × 100%。阻尼比越小超调越大。当ζ0.707时超调量约4.3%。峰值时间tp响应达到最大超调的时间。tp π / (ωn * sqrt(1-ζ²))。调节时间ts响应进入并保持在稳态值±2%或±5%范围内的时间。ts ≈ 4 / (ζωn)2%准则。# 计算二阶系统性能指标 wn 5.0 # 自然频率 zeta 0.3 # 阻尼比 # 超调量 overshoot np.exp(-zeta * np.pi / np.sqrt(1 - zeta**2)) * 100 # 峰值时间 tp np.pi / (wn * np.sqrt(1 - zeta**2)) # 调节时间 (2%准则) ts 4 / (zeta * wn) # 上升时间 tr np.pi / (wn * np.sqrt(1 - zeta**2)) print(f超调量: {overshoot:.1f}%) print(f峰值时间: {tp:.3f}s) print(f调节时间: {ts:.3f}s) print(f上升时间: {tr:.3f}s)这些公式你不需要全记住但你必须知道它们之间的关系。比如面试官问怎么减小超调量你要知道增大阻尼比ζ就行。怎么加快响应速度增大自然频率ωn。又要快又要超调小怎么办这就是控制设计的核心矛盾了——后面讲PID调参时会详细聊。面试实战面试官问二阶系统通常这么考阻尼比0.707有什么特殊意义这个数叫最佳阻尼比。在这个阻尼比下系统的响应速度和超调量达到了一个比较好的平衡——超调量只有4.3%调节时间也比较短。工程上设计控制系统时经常把闭环极点配置在阻尼比0.707附近。一阶系统和二阶系统的本质区别是什么一阶系统不可能有超调和振荡因为它的极点只有一个实数极点。二阶系统有两个极点当极点是共轭复数时对应欠阻尼系统才会振荡。振荡的本质是能量在两种形式之间来回转换——比如弹簧势能和动能的交替。之前面试一家做伺服电机的公司面试官问客户说电机响应太慢你怎么分析我说先看电机闭环传递函数的自然频率ωn——ωn太小了响应就慢。可以通过增大控制器增益来提高ωn但增益太大会降低阻尼比导致超调。所以通常的做法是先增大增益让ωn上去如果超调太大了再加微分项增大阻尼比。分享一个我在项目中调试二阶系统响应的经验。当时做机械臂关节的位置控制闭环系统可以近似为一个二阶系统。一开始调参时把P增益设得很大ωn上去了响应很快但超调量到了30%以上——机械臂到位后会弹一下再回来这在精密装配场景是不可接受的。后来我加了D项来增大阻尼比把阻尼比从0.3调到了0.707超调量从30%降到了4.3%同时响应速度只慢了约20%。这个trade-off在面试时候很好用——我把阻尼比调到0.707用20%的速度换取了超调量从30%降到4%面试官一听就知道你调过参。另外实际系统往往不是理想的二阶系统高频未建模动态比如减速器的柔性会在响应曲线上叠加高频振荡这时候需要在D项上加低通滤波器来抑制。下一篇讲稳定性分析——怎么判断一个系统会不会发散。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第179篇 传递函数——用拉普拉斯变换理解系统特性下一篇预告第181篇 稳定性分析——系统会不会发散的判定方法有任何问题欢迎评论区留言我会尽量回复。