深入理解根轨迹:从理论构建到实战分析

作为一名控制系统的工程师或学生,你一定遇到过这样的挑战:在设计一个反馈控制系统时,如何直观地判断当系统的某个参数(通常是增益 $K$)发生变化时,系统的稳定性会如何改变?单纯地解微分方程往往既繁琐又难以洞察全局。这时候,根轨迹 就是我们手中最强大的武器之一。

在这篇文章中,我们将不仅学习如何绘制根轨迹,更重要的是理解其背后的物理意义。我们将一起探索幅角条件与幅值条件的奥秘,掌握 9 条核心构建规则,并通过实际的 Python 代码示例来模拟这一过程。无论你是为了应对考试,还是为了在实际工程中优化 PID 控制器,这篇深入浅出的指南都将为你提供坚实的理论基础和实战工具。

什么是根轨迹?

在控制理论中,我们非常关心闭环传递函数的特征方程的根(即闭环极点),因为它们直接决定了系统的动态性能(如超调量、调节时间)和稳定性。

根轨迹是一种图解方法,用于在 s 平面(复平面)上绘制特征方程的根随系统参数变化(通常是从 0 变化到无穷大)时的轨迹。

简单来说,当我们在实验台上慢慢旋大放大器的增益旋钮时,系统的特性会从欠阻尼(震荡)变为过阻尼(迟缓),甚至可能变得不稳定(发散)。根轨迹图就是这一过程的“地图”。

#### 我们为什么要关注它?

  • 可视化稳定性:一眼就能看出在什么增益范围内系统是稳定的。
  • 预测瞬态响应:极点的位置决定了阻尼比 ($\zeta$) 和固有频率 ($\omega_n$),从而决定了系统的响应速度。
  • 设计补偿器:通过添加极点和零点来改变根轨迹的走向,使其满足我们的设计要求。

幅角条件和幅值条件:构建的基石

在开始画图之前,我们必须理解为什么根轨迹会是那个样子。它的数学基础源于特征方程:

$$ 1 + G(s)H(s) = 0 $$

这可以改写为:

$$ G(s)H(s) = -1 $$

因为 $s$ 是复变量,这个等式实际上包含两个部分:幅角幅值。这就是著名的埃文斯条件。

#### 1. 幅角条件

方程 $G(s)H(s) = -1$ 意味着在复平面上,向量 $G(s)H(s)$ 必须指向负实轴。换句话说,其相角必须等于 $180^\circ$(或 $\pi$ 弧度)的奇数倍。

$$ \angle G(s)H(s) = \pm 180^\circ (2k + 1), \quad k = 0, 1, 2, \dots $$

实际意义:这是判断任意点 $s_1$ 是否在根轨迹上的充要条件。如果 s 平面上的某个点,所有开环零点到该点的向量角度之和,减去所有开环极点到该点的向量角度之和,结果是 $180^\circ$ 的奇数倍,那么这个点就在根轨迹上。

#### 2. 幅值条件

除了角度要对,向量的长度也必须满足要求,即模值为 1。

$$

G(s)H(s)

= 1 $$

或者写成增益 $K$ 的形式:

$$ K = \frac{\prod

s – pi

}{\prod

s – z
i

} $$

实际意义:幅值条件通常不用于确定轨迹的形状(那是幅角条件的工作),而是用于确定轨迹上某个特定点 $s_1$ 所对应的增益值 $K$。当我们根据幅角条件画好轨迹后,如果想知道在极点 A 处增益是多少,就要用尺子量距离,代入幅值公式计算。

根轨迹的构建规则:从入门到精通

虽然现在计算机可以瞬间画出完美的根轨迹,但作为工程师,掌握手绘规则的近似画法对于快速判断系统趋势至关重要。让我们遵循以下 9 条黄金规则。

#### 规则 1:起点与终点

  • 起点:根轨迹起始于开环极点。这对应于增益 $K=0$ 的情况。特征方程 $1 + K \cdot \text{zeros}/\text{poles} = 0$ 在 $K=0$ 时即为极点为 0。
  • 终点:根轨迹终止于开环零点(包括无穷远处的零点)。这对应于 $K \to \infty$ 的情况。

> 注意:如果极点数 $P$ 大于零点数 $Z$,那么会有 $P – Z$ 条轨迹分支趋向于无穷远处。

#### 规则 2:分支数

根轨迹的分支数等于特征方程中最高阶次,通常由开环极点数 $P$ 和零点数 $Z$ 中的较大者决定:

$$ N = \max(P, Z) $$

#### 规则 3:实轴上的轨迹

实轴上的某一段是否存在根轨迹,取决于该线段右侧的开环极点和零点总数。

  • 判定方法:如果在实轴的某一段上,其右侧的开环极点与零点个数之和为 奇数,则该段是根轨迹的一部分。

这是最常考也是最易出错的规则,请记住“右侧奇数个”。

#### 规则 4:渐近线(质心与角度)

当 $K \to \infty$ 时,那些趋向于无穷远的根轨迹分支会沿着直线(渐近线)延伸。我们需要确定这些直线的位置和角度。

  • 渐近线倾角

$$ \phi_A = \frac{(2k + 1)180^\circ}{P – Z}, \quad k = 0, 1, \dots, P-Z-1 $$

  • 渐近线交点(质心)

渐近线在实轴上的交点 $\sigma_A$ 由下式给出:

$$ \sigma_A = \frac{\sum \text{实部极点} – \sum \text{实部零点}}{P – Z} $$

这个交点其实就是所有极点和零点的“重心”。

#### 规则 5:分离点与会合点

根轨迹从实轴上的极点出发,往往会先相遇,然后离开实轴进入复平面;或者从复平面返回实轴并在此相遇。

  • 分离点:根轨迹离开实轴的点(对应重根,阻尼比 $\zeta = 1$)。
  • 会合点:根轨迹返回实轴的点。
  • 求解方法:由特征方程 $1 + G(s)H(s) = 0$ 得出 $K = -\frac{\text{Den}(s)}{\text{Num}(s)}$。对 $K$ 关于 $s$ 求导并令其为 0:

$$ \frac{dK}{ds} = 0 $$

解出的实数根必须位于实轴的根轨迹段上才是有效的分离/会合点。

#### 规则 6:出射角与入射角

对于复平面上的开环极点和零点,轨迹离开和进入的角度很关键。

  • 出射角(从复数极点出发):

$$ \theta_{dep} = 180^\circ – (\sum \text{其他极点到该点的角度} – \sum \text{零点到该点的角度}) $$

  • 入射角(进入复数零点):

$$ \theta_{arr} = 180^\circ – (\sum \text{其他零点到该点的角度} – \sum \text{极点到该点的角度}) $$

#### 规则 7:与虚轴的交点

这是判断系统稳定性的关键。根轨迹穿过虚轴意味着系统从稳定变为不稳定(临界稳定)。我们将 $s = j\omega$ 代入特征方程,或者使用劳斯判据 令 $s^1$ 行为零来求解增益 $K$ 和频率 $\omega$。

实战演练:Python 绘制根轨迹

理论说得再多,不如看一段代码。我们将使用 Python 的 control 库来演示如何快速构建和分析根轨迹。这种方法在工程调试和算法验证中非常实用。

#### 环境准备

首先,你需要安装 control 库(通常配合 numpy 和 scipy 使用)。

#### 示例 1:基础二阶系统

让我们考虑一个经典的二阶开环传递函数:

$$ G(s) = \frac{K}{s(s+2)} $$

import numpy as np
import matplotlib.pyplot as plt
import control as ctl

# 定义传递函数分子和分母
# 代表 K / (s^2 + 2s)
num = [1]   # 分子系数
den = [1, 2, 0] # 分母系数,对应 s^2 + 2s + 0

# 创建传递函数对象
sys = ctl.TransferFunction(num, den)

# 绘制根轨迹
plt.figure(figsize=(8, 6))
# control 库会自动处理增益 K 从 0 到无穷大的变化
roots, gains = ctl.root_locus(sys, kvect=np.linspace(0, 100, 1000))

plt.title(‘示例 1: G(s) = K / (s(s+2)) 的根轨迹‘)
plt.grid(True)
plt.show()

代码解析

  • 我们定义了极点在 $s=0$ 和 $s=-2$。根据规则 1,轨迹将从这两点出发。
  • 因为没有有限零点,根据规则 4,两条分支都将趋向于无穷远。
  • 实轴上 $(-2, 0)$ 之间的右侧极点+零点数为 1(奇数),所以存在根轨迹。
  • 分离点应该在 $s=-1$ 处。你可以运行代码验证这一点。

#### 示例 2:添加零点的影响(PID 设计基础)

在实际工程中,我们经常会添加零点来改善性能。让我们看看加上 $s+1$ 这个零点会发生什么。

$$ G(s) = \frac{K(s+1)}{s(s+2)} $$

import numpy as np
import matplotlib.pyplot as plt
import control as ctl

# 分子:(s+1) -> [1, 1]
# 分母:s(s+2) -> [1, 2, 0]
num_z = [1, 1]
den_z = [1, 2, 0]

sys_z = ctl.TransferFunction(num_z, den_z)

plt.figure(figsize=(8, 6))
roots_z, gains_z = ctl.root_locus(sys_z, kvect=np.linspace(0, 50, 500))
plt.title(‘示例 2: 添加零点后的根轨迹 G(s) = K(s+1) / (s(s+2))‘)
plt.grid(True)
plt.show()

深入分析

你会发现,添加了这个左半平面的零点后,根轨迹的形状发生了剧烈变化(通常被称为“弯曲”轨迹)。

  • 这就是 PD 控制 的原理:零点吸引根轨迹,使其向更稳定、阻尼更大的区域弯曲。
  • 在示例 1 中,随着 $K$ 增大,极点逐渐趋向垂直线(虚部增大),系统稳定性变差。而在示例 2 中,极点可能会被“拉”向实轴,形成圆弧状轨迹,系统在大增益下依然保持良好的阻尼特性。

#### 示例 3:高阶系统与稳定性判据

让我们看一个更复杂的三阶系统,并找出它与虚轴交点处的增益。

$$ G(s) = \frac{K}{s(s+2)(s+4)} $$

import numpy as np
import matplotlib.pyplot as plt
import control as ctl

# 分母展开: s(s+2)(s+4) = s^3 + 6s^2 + 8s
den_h = [1, 6, 8, 0]
num_h = [1]

sys_h = ctl.TransferFunction(num_h, den_h)

# 为了更清楚地看到虚轴交点,我们可以自定义增益范围
# 或者使用 control 库的自动计算功能
# 这里我们绘制并手动估算临界增益
figure, ax = plt.subplots(figsize=(8, 6))
roots_h, gains_h = ctl.root_locus(sys_h, kvect=np.linspace(0, 50, 1000), plot=True)

# 添加虚轴参考线
ax.axvline(x=0, color=‘r‘, linestyle=‘--‘)
ax.axhline(y=0, color=‘r‘, linestyle=‘--‘)

plt.title(‘示例 3: 三阶系统的稳定性分析‘)
plt.grid(True)
print("提示:观察根轨迹穿过虚轴的位置,那是对应的临界 K 值")

实际应用见解

对于这个三阶系统,你会发现当 $K$ 超过某个特定值(例如 48 左右)时,根轨迹穿过虚轴进入右半平面。这意味着:

  • $0 < K < 48$:系统稳定。
  • $K > 48$:系统不稳定。
  • 这在工程设计中非常重要,它定义了你的安全操作裕度。

添加开环极点和零点的影响总结

通过上述代码实验,我们可以总结出一些实战经验:

  • 添加极点

* 将根轨迹推向右侧。

* 倾向于降低系统的稳定性(因为极点向虚轴靠近)。

* 在积分控制(I 控制)中添加积分环节相当于在原点添加极点,这虽然能消除稳态误差,但会降低稳定性,因此通常需要配合 PD 补偿。

  • 添加零点

* 将根轨迹拉向左侧。

* 倾向于增加系统的稳定性。

* 可以显著改善系统的瞬态响应(减少超调,加快调节)。这就是为什么微分控制(D 控制)能有效抑制震荡的原因。

常见问题与最佳实践

Q: 我计算机算出的根轨迹和手绘的不完全一样,谁是对的?

A: 相信计算机。手绘规则是近似估算,特别是渐近线在远离中心区域时才准确。但在初始阶段,手绘规则能极快地帮你判断极点的大致走向。

Q: 如果分离点方程的解不是实数怎么办?

A: 那意味着在该参数配置下,根轨迹没有实轴上的分离点,或者它们会直接在复平面上分叉。

Q: 如何处理延迟环节 $e^{-Ts}$?

A: 传统的根轨迹方法很难直接处理延迟,因为 $e^{-Ts}$ 是超越函数,会有无穷多个极点零点。这种情况下,建议使用 Padé 近似将 $e^{-Ts}$ 转化为有理函数,或者直接使用频率响应法(Bode 图)进行分析。

结语

根轨迹不仅仅是一张图,它是连接数学模型与物理世界动态行为的桥梁。通过理解幅角条件和幅值条件,利用我们讨论的 9 条规则,以及结合 Python 等现代工具进行仿真,你可以自信地面对任何控制系统的设计挑战。

希望这篇文章不仅帮你理清了根轨迹的构建步骤,更让你体会到了控制设计的艺术。下一次当你需要调整 PID 参数时,不妨试着在脑海中画出根轨迹的走向,预测一下你的调整会让系统变得更“驯服”还是更“狂野”。祝你调试顺利!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/38864.html
点赞
0.00 平均评分 (0% 分数) - 0