ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

LTspice奈奎斯特图实战:从原理到绘制,深入分析系统稳定性

2026/8/6 1:18:01 拓冰建站 浏览量
LTspice奈奎斯特图实战:从原理到绘制,深入分析系统稳定性

1. 从频域到复平面:为什么我们需要奈奎斯特图?

如果你和我一样,长期在模拟电路设计、电源环路分析或者控制系统领域工作,那么“稳定性”这个词一定是你设计生涯中挥之不去的核心命题。一个电路,功能再强大,性能再优越,如果它在某些条件下会振荡、会自激,那一切就都归零了。我们评估稳定性的工具有很多,最经典的就是波特图(Bode Plot),它能直观地展示增益和相位随频率的变化。但今天,我想和你深入聊聊另一个同样强大、甚至在某些场景下更具洞察力的工具——奈奎斯特图(Nyquist Plot)。

奈奎斯特图,简单来说,就是把一个系统的开环频率响应(通常表示为传递函数 H(jω))在复平面上画出来。横轴是实部(Re),纵轴是虚部(Im),频率 ω 作为隐变量,从 0 变化到无穷大,轨迹就在复平面上描绘出一条曲线。这条曲线之所以重要,是因为它直接关联到著名的奈奎斯特稳定性判据(Nyquist Stability Criterion)。这个判据绕过了直接求解闭环系统特征方程的困难,通过分析开环频率响应的奈奎斯特曲线环绕复平面上 (-1, j0) 这个“临界点”的情况,就能判断闭环系统的稳定性。环绕的圈数、方向,直接决定了闭环系统有多少个不稳定的极点。

那么,为什么在有了直观的波特图之后,我们还需要奈奎斯特图呢?这里有几个关键点。首先,对于条件稳定系统,波特图可能会“说谎”。一个系统可能在低频和高频时相位裕度都很大,但在中频段相位急剧下降,甚至超过 -180°,然后又恢复。在波特图上,你可能看到相位曲线穿过了 -180° 线,但增益已经小于 0dB,按照常规的增益/相位裕度判据,你会误以为系统是稳定的。但实际上,奈奎斯特曲线可能已经环绕了 (-1, j0) 点,系统实际上是不稳定的。奈奎斯特图能一眼看穿这种“相位回绕”带来的陷阱。其次,它提供了关于相对稳定性的更丰富信息。曲线距离 (-1, j0) 点的“最近距离”(即幅值裕度和相位裕度的几何综合体现)可以更直观地评估稳定性的“强壮”程度。最后,在分析包含延时环节的系统时,奈奎斯特图也更为方便。

既然奈奎斯特图这么有用,我们怎么得到它呢?传统上,你可能需要先用仿真软件(如SPICE)进行交流(AC)分析,导出增益和相位数据,然后用数学软件(如MATLAB、Python with Matplotlib)进行复数计算和绘图。这个过程繁琐且割裂。而今天我们要探讨的,是如何利用一款强大、免费且被业界广泛使用的SPICE仿真软件——LTspice,来一站式地完成从电路仿真到奈奎斯特图生成与分析的全过程。这对于快速迭代设计、直观理解电路稳定性特性,具有极高的实践价值。

2. LTspice的AC分析与数据导出:构建奈奎斯特图的基石

在LTspice中绘制奈奎斯特图,其核心数据来源于标准的交流小信号分析(.AC分析)。因此,正确设置AC分析是第一步,也是确保后续数据可用的关键。

2.1 搭建待测电路与设置激励源

首先,你需要搭建你的待分析电路。对于稳定性分析,这通常是一个开环配置。以最常见的运算放大器环路增益分析为例,常用的方法是“中断环路法”。你需要在反馈环路中插入一个大的电感(例如,1G亨)来阻断直流通路但允许交流信号通过,并插入一个大的电容(例如,1F)来提供直流通路但阻断交流信号,从而在某个点将环路打开。然后在断开处注入一个交流测试信号源。

这个测试信号源就是AC分析的核心。在LTspice中,你需要放置一个电压源或电流源(取决于你的注入点),并关键地设置其AC幅度。通常,我们将其设置为1(例如,AC 1)。这个“1”代表1V或1A的交流幅度,它作为参考,仿真输出的电压或电流值就直接代表了该点的增益(传递函数)。相位信息则由仿真结果中的相位角给出。

注意:这里的AC幅度设置(如AC 1)是用于小信号线性化分析的。它并不意味着实际施加一个1V的交流信号,而是告诉仿真器在进行.AC分析时,以此作为输入参考。实际仿真中,电路工作点由直流偏置决定,AC分析是在此工作点上的线性化扰动。

2.2 配置.AC分析指令

放置好“.ac”指令卡。点击菜单栏的“Simulate” -> “Edit Simulation Cmd”,选择“AC Analysis”标签页。这里有几个关键参数:

  • Type of Sweep: 选择扫描类型。Octave(倍频程)或Decade(十倍频程)是最常用的,因为它们在对数频率轴上均匀分布点。Linear(线性)在分析宽频带时会导致低频点过疏、高频点过密,通常不推荐用于稳定性分析。
  • Number of points per octave/decade: 每倍频/十倍频的点数。这个值决定了曲线的分辨率。值太小(如10),曲线可能不够光滑,错过关键细节;值太大(如1000),仿真速度会变慢,数据文件也会巨大。一个经验值是设置为50到100之间,这能在精度和速度之间取得良好平衡。对于初步分析,50足够;当需要精细观察相位裕度或奈奎斯特曲线在 (-1, j0) 点附近的形状时,可以提高到100或200。
  • Start FrequencyStop Frequency: 起始和终止频率。这个范围必须覆盖你关心的所有频段,特别是增益穿越0dB(单位增益)的频率(增益交界频率)以及相位发生剧烈变化的频率。对于大多数运放和电源环路,从1Hz(甚至0.1Hz)到10MHz或100MHz是一个合理的起始范围。你可以先进行一个宽频带扫描(如1Hz to 100MHz),然后根据结果缩小范围进行更精细的扫描。

2.3 运行仿真与理解原始数据

设置完成后,运行仿真。LTspice会弹出波形查看器。通常,我们会先添加增益(dB)和相位(度)的波形。例如,如果你在输出节点V(out)和注入点V(inj)测量,你可以输入表达式20*log10(V(out)/V(inj))来查看增益(dB),输入phase(V(out))-phase(V(inj))或更简单地,直接右键点击V(out)/V(inj)的波形,选择“View” -> “Phase”来查看相位。

此时,你看到的是经典的波特图。你可以从中初步读出增益交界频率、相位裕度、增益裕度等信息。但我们的目标是奈奎斯特图,所以我们需要的是复数形式的数据。实际上,LTspice在内部计算并存储了每个频率点的复数电压/电流值。要获取这些数据,我们需要将其导出。

2.4 导出复数数据:为奈奎斯特图准备原料

LTspice波形查看器本身不直接支持绘制复平面图(即实部-虚部图)。因此,我们需要将数据导出,然后用其他工具处理,或者利用LTspice的一些高级功能进行“内部”绘制(后续章节会讲)。导出数据是最通用、最灵活的方法。

  1. 在波形查看器窗口,确保你显示了感兴趣的电压或电流波形。例如,显示V(out)/V(inj)
  2. 在波形图区域单击鼠标右键,选择“File” -> “Export data as text”。
  3. 在弹出的对话框中,你可以选择导出哪些数据。关键点在于:不要只导出幅度和相位。为了得到奈奎斯特图所需的实部和虚部,你需要确保导出的是复数数据。一个可靠的方法是:
    • 在“Expression(s) to Export”框中,直接输入你的复数表达式,例如V(out)/V(inj)
    • 或者,在左侧“Select Steps”和“Select Waveforms”列表中,找到对应的复数变量(通常带有[Complex]标识)。
  4. 选择保存路径和文件名(例如loop_gain_data.txt),点击保存。

用文本编辑器打开导出的文件,你会看到类似如下的数据列:

Freq Re(V(out)/V(inj)) Im(V(out)/V(inj)) 1 0.999 -0.001 1.122 0.998 -0.002 ...

这里,Freq是频率,Re(...)是传递函数的实部,Im(...)是虚部。这三列数据,就是绘制奈奎斯特图的直接原料。每一行对应一个频率点,(实部, 虚部)构成了复平面上的一个点,所有点连起来就是奈奎斯特曲线。

3. 在LTspice内部“间接”绘制奈奎斯特曲线

虽然LTspice没有原生的“Nyquist Plot”按钮,但利用其强大的波形运算和绘图能力,我们可以巧妙地“模拟”出奈奎斯特图。这个方法不需要导出数据到外部软件,可以在仿真后快速进行可视化检查,非常适合快速迭代。

其核心思路是:将奈奎斯特曲线的实部(X轴)和虚部(Y轴)作为两个独立的波形绘制出来,形成一幅参数曲线图,其中参数就是频率ω

具体操作步骤如下:

  1. 运行标准的.AC分析:按照第2章的方法,正确设置并运行AC分析,得到电路的频率响应。
  2. 在波形查看器中绘制实部和虚部
    • 在波形查看器的空白处单击鼠标右键,选择“Add Trace”。
    • 在弹出的对话框中,你需要输入两个表达式来分别定义X轴和Y轴。但LTspice的“Add Trace”默认是绘制Y轴波形,X轴是频率。为了绘制参数曲线,我们需要一点技巧。
    • 首先,添加第一个波形作为Y轴(虚部)。在表达式框内输入传递函数的虚部。例如,如果你的开环传递函数是T(s) = V(out)/V(inj),那么虚部表达式是imag(V(out)/V(inj))。点击“OK”,此时会生成一幅以频率为X轴,以传递函数虚部为Y轴的图。
  3. 更改X轴变量,绘制参数曲线
    • 现在,我们需要把X轴从频率改为传递函数的实部
    • 在波形查看器窗口的X轴坐标刻度区域双击,会弹出“Axis Settings”对话框。
    • 在对话框底部,有一个“Fourier axis”或“Quantity Plotted”的选项(不同版本LTspice表述可能略有不同)。取消勾选“Fourier”或类似选项。
    • 此时,会出现一个“Plot Settings”选项卡或类似的区域。在这里,你可以手动定义X轴表达式。
    • 在“X-Axis”或“Quantity Plotted”的表达式框中,输入传递函数的实部表达式,例如real(V(out)/V(inj))
    • 点击“OK”应用更改。

神奇的事情发生了:原来的波形图消失了,取而代之的是一幅新的图形,其X轴是real(V(out)/V(inj)),Y轴是imag(V(out)/V(inj))。这正是我们想要的奈奎斯特图!曲线上的每一个点对应一个特定的频率,但频率值没有直接显示在图上。

  1. 添加频率标记与(-1, j0)点
    • 为了解读曲线,我们需要知道关键频率点(如增益交界频率、相位-180°的频率)在曲线上的位置。
    • 你可以通过添加光标来实现。在波形图上按住Ctrl键并单击鼠标左键,可以放置一个光标。移动光标,波形查看器底部的状态栏会显示当前光标所在点的X、Y坐标(即实部和虚部),但不会显示频率
    • 为了关联频率,一个实用的技巧是:同时打开两个波形查看窗口。一个窗口显示刚才制作的奈奎斯特图,另一个窗口显示传统的波特图(增益和相位 vs 频率)。在波特图上移动光标找到关键频率点,然后在奈奎斯特图上大致估计对应的位置。
    • 此外,为了快速判断稳定性,你需要在图上标出临界点(-1, j0)。LTspice没有直接添加参考点的方法,但你可以通过添加一条简单的“曲线”来近似。右键点击图形,选择“Add Trace”,输入一个常数表达式,比如-1,但这只会添加一个Y轴常数线。更好的方法是利用其“绘制数据点”的功能,但这需要预先准备数据。一个视觉辅助方法是:调整X轴和Y轴的显示范围,确保(-1, 0)点位于图形中心或显眼位置。你可以通过拖动图形或设置坐标轴范围来实现。

实操心得:这种方法生成的奈奎斯特图,其坐标轴比例通常是自动缩放的,可能不是1:1。一个圆可能看起来像椭圆,这会影响你对曲线与(-1, j0)点距离的直观判断。为了获得准确的几何视角,你需要手动设置X轴和Y轴具有相同的刻度范围。双击坐标轴,在设置中手动输入相同的“Top”和“Bottom”(对于Y轴)、“Right”和“Left”(对于X轴)值,例如从-2到2。这样,图形就是等比例的,一个单位距离在X和Y方向上是等长的,方便评估稳定性裕度。

4. 利用导出的数据在外部工具中绘制专业奈奎斯特图

虽然LTspice内部方法快捷,但在进行正式分析、报告或需要更精细控制时,使用外部专业的数据处理和绘图工具是更好的选择。这里我以最常用的Python(搭配Matplotlib和NumPy)为例,展示一个完整的工作流。这个方法也适用于MATLAB、Excel或其他科学计算软件。

4.1 数据预处理与加载

首先,确保你从LTspice导出的文本文件格式规整。如前所述,它应包含FreqRe(...)Im(...)三列,以制表符或空格分隔。

import numpy as np import matplotlib.pyplot as plt # 加载数据,假设数据以制表符分隔,没有表头 # 如果你的文件有表头(如 Freq Re Im),可以使用 `skiprows=1` data = np.loadtxt('loop_gain_data.txt', delimiter='\t') # 也可能是空格 ' ' freq = data[:, 0] # 第一列:频率 real_part = data[:, 1] # 第二列:实部 imag_part = data[:, 2] # 第三列:虚部 # 计算幅度和相位(可选,用于辅助分析) magnitude = np.sqrt(real_part**2 + imag_part**2) phase = np.degrees(np.arctan2(imag_part, real_part)) # arctan2 返回弧度,再转为度

4.2 基础奈奎斯特图绘制

使用Matplotlib的plot函数,将实部作为X,虚部作为Y。

plt.figure(figsize=(8, 8)) plt.plot(real_part, imag_part, 'b-', linewidth=2, label='Nyquist Curve') plt.scatter(real_part[0], imag_part[0], color='green', s=100, zorder=5, label=f'Start (f={freq[0]:.2e} Hz)') plt.scatter(real_part[-1], imag_part[-1], color='red', s=100, zorder=5, label=f'End (f={freq[-1]:.2e} Hz)') # 标记临界点 (-1, j0) plt.scatter(-1, 0, color='black', s=150, marker='x', linewidths=3, zorder=10, label='Critical Point (-1, j0)') # 设置图形属性 plt.axhline(y=0, color='k', linestyle='-', alpha=0.3) # 实轴 plt.axvline(x=0, color='k', linestyle='-', alpha=0.3) # 虚轴 plt.grid(True, which='both', linestyle='--', alpha=0.5) plt.xlabel('Real Part') plt.ylabel('Imaginary Part') plt.title('Nyquist Plot of Loop Gain') plt.axis('equal') # 关键!确保X轴和Y轴比例相同,图形不变形 plt.legend() plt.show()

这段代码会生成一个标准的奈奎斯特图,用绿点和红点分别标记曲线的起点(低频)和终点(高频),并用黑色“X”标出临界点(-1, j0)。plt.axis('equal')命令至关重要,它保证了图形的纵横比一致,使得距离的度量是准确的。

4.3 添加频率标注与稳定性判据分析

基础的曲线和临界点还不够,我们需要知道曲线上关键频率点的位置。

# 找到增益交界频率(单位增益,即 |T(jω)| = 1 或 0dB)附近的点 # 由于数据是离散的,我们找幅度最接近1的点 idx_unit_gain = np.argmin(np.abs(magnitude - 1.0)) f_unit_gain = freq[idx_unit_gain] re_unit = real_part[idx_unit_gain] im_unit = imag_part[idx_unit_gain] # 找到相位为 -180° 附近的点(用于计算增益裕度) idx_phase_180 = np.argmin(np.abs(phase + 180)) f_phase_180 = freq[idx_phase_180] re_180 = real_part[idx_phase_180] im_180 = imag_part[idx_phase_180] # 在图上标注这些点 plt.figure(figsize=(8, 8)) plt.plot(real_part, imag_part, 'b-', linewidth=2) plt.scatter(-1, 0, color='black', s=150, marker='x', linewidths=3, zorder=10, label='(-1, j0)') plt.scatter(re_unit, im_unit, color='orange', s=120, zorder=5) plt.annotate(f'f={f_unit_gain:.2e} Hz\n(|T|=1)', xy=(re_unit, im_unit), xytext=(10, 10), textcoords='offset points', color='orange', fontweight='bold') plt.scatter(re_180, im_180, color='purple', s=120, zorder=5) plt.annotate(f'f={f_phase_180:.2e} Hz\n(Phase=-180°)', xy=(re_180, im_180), xytext=(10, -15), textcoords='offset points', color='purple', fontweight='bold') # 计算并显示相位裕度 (PM) 和增益裕度 (GM) # 相位裕度:在增益交界频率处,相位距离 -180° 的差值 PM = phase[idx_unit_gain] + 180 # 因为 phase 已经是度,且负值 # 增益裕度:在相位为 -180° 的频率处,幅度的倒数(以dB表示) GM_dB = -20 * np.log10(magnitude[idx_phase_180]) if magnitude[idx_phase_180] > 0 else np.inf # 将裕度信息以文本框形式显示在图上 textstr = f'Phase Margin: {PM:.1f}°\nGain Margin: {GM_dB:.1f} dB' props = dict(boxstyle='round', facecolor='wheat', alpha=0.8) plt.text(0.05, 0.95, textstr, transform=plt.gca().transAxes, fontsize=10, verticalalignment='top', bbox=props) plt.axhline(y=0, color='k', linestyle='-', alpha=0.3) plt.axvline(x=0, color='k', linestyle='-', alpha=0.3) plt.grid(True, which='both', linestyle='--', alpha=0.5) plt.xlabel('Real Part') plt.ylabel('Imaginary Part') plt.title('Nyquist Plot with Key Frequency Points and Margins') plt.axis('equal') plt.legend() plt.show()

现在,你的奈奎斯特图不仅显示了曲线和临界点,还清晰地标出了单位增益点和相位-180°点,并直接计算和显示了相位裕度和增益裕度。这使得稳定性分析一目了然。

4.4 处理多参数扫描(.step)数据

LTspice的.step指令非常强大,可以用于蒙特卡洛分析、参数扫描等。导出的数据会包含多组运行结果。处理这类数据需要额外步骤。

假设你使用.step param Rload 1k 10k 1k扫描了负载电阻,导出的文本文件会为每个Rload值生成一组数据列(Freq,Re_1,Im_1,Re_2,Im_2, ...)。在Python中,你需要先识别数据的结构。

# 加载所有数据 all_data = np.loadtxt('stepped_data.txt', delimiter='\t') # 假设第一列是频率,之后每两列为一组(实部,虚部) freq_stepped = all_data[:, 0] num_steps = (all_data.shape[1] - 1) // 2 plt.figure(figsize=(8, 8)) for i in range(num_steps): re_col = all_data[:, 1 + 2*i] im_col = all_data[:, 2 + 2*i] plt.plot(re_col, im_col, linewidth=1.5, label=f'Step {i+1}') plt.scatter(-1, 0, color='black', s=150, marker='x', linewidths=3, zorder=10) plt.axhline(y=0, color='k', linestyle='-', alpha=0.3) plt.axvline(x=0, color='k', linestyle='-', alpha=0.3) plt.grid(True, linestyle='--', alpha=0.5) plt.xlabel('Real Part') plt.ylabel('Imaginary Part') plt.title('Nyquist Plot with Parameter Step') plt.axis('equal') plt.legend() plt.show()

这样,你可以在同一张图上看到参数变化时奈奎斯特曲线的变化趋势,直观评估参数对稳定性的影响。

5. 实战案例:分析一个带补偿的运算放大器环路

让我们通过一个具体电路,将上述流程串起来。假设我们有一个同相放大器电路,使用一个通用运放,在反馈网络中加入了电容以引入极点,可能导致稳定性问题。

  1. 电路搭建:在LTspice中,放置运放模型(如UniversalOpamp2),配置成增益为10的同相放大电路(R1=1k, R2=9k)。在R2上并联一个电容Ccomp(例如100pF),这会在反馈网络中引入一个极点。采用“中断环路法”,在运放输出端与R1之间插入大电感(Lbreak=1GH)和大电容(Cbreak=1F),并在断开处注入AC 1的电压源Vtest。
  2. AC分析设置:设置.ac dec 100 1 100Meg,进行十倍频程扫描,每十倍频100个点。
  3. 内部绘图法快速检查:仿真后,在波形窗口添加V(out)/V(test)的波形。然后,添加其虚部imag(V(out)/V(test))作为Y轴波形。接着,双击X轴,将X轴表达式改为实部real(V(out)/V(test))。调整坐标轴范围为等比例(如X和Y都从-3到1),观察曲线是否环绕(-1, j0)点。快速判断:如果曲线从右侧(实部>0)开始(低频),随着频率增加,曲线是顺时针还是逆时针运动?它是否包围了(-1,0)点?在这个例子中,由于补偿电容的存在,曲线可能会向左弯曲,靠近临界点。
  4. 导出数据与外部分析:导出V(out)/V(test)的复数数据。用Python脚本加载数据,绘制带标注的奈奎斯特图。脚本会自动计算并显示相位裕度和增益裕度。你会发现,由于100pF电容,相位裕度可能较小(例如45°),增益裕度尚可。曲线可能非常接近(-1,0)点但未包围。
  5. 参数迭代:回到LTspice,将Ccomp改为更小的值(如10pF)或更大的值(如1nF),重新运行仿真和绘图。观察奈奎斯特曲线的变化:电容变小,极点频率升高,曲线向右移动,远离(-1,0)点,相位裕度增大;电容变大,曲线向左移动并可能包围(-1,0)点,系统变得不稳定。通过奈奎斯特图,你可以清晰地看到这种“包围”或“不包围”的几何关系,比波特图更直观地理解条件稳定性。

踩坑实录:在一次电源模块的环路分析中,波特图显示有超过60度的相位裕度,看起来非常稳定。但负载瞬态测试时却出现了振荡。后来使用奈奎斯特图分析导出的数据,发现曲线在极高频段(仿真范围之外)有一个小的“钩子”,顺时针绕(-1,0)点了一圈。这是因为输出电容的ESL和PCB寄生电感在极高频率下产生了一个额外的谐振极点,导致相位急剧下降。波特图因为扫描频率上限设置不够高,漏掉了这个细节。而奈奎斯特图虽然也受数据范围限制,但其曲线形态暗示了在无穷远处可能发生的行为(根据奈奎斯特路径)。这个教训是:AC分析的频率上限必须设置得足够高,要远超过你关心的主要带宽,以捕捉所有可能影响稳定性的极点/零点。对于开关电源,至少要到开关频率的10倍以上;对于高速运放,要到其单位增益带宽的10倍以上。

6. 奈奎斯特图解读进阶与常见误区

掌握了绘制方法,正确解读图形才是最终目的。这里分享几个进阶解读要点和常见误区。

6.1 曲线方向与频率增加方向

在标准的奈奎斯特图中,频率ω从0增加到∞。曲线起点的位置(ω=0)和终点的位置(ω→∞)有特定含义。对于大多数最小相位系统(开环无右半平面极点),起点通常在正实轴上的某个点(对应直流增益)。随着频率增加,曲线通常顺时针旋转。你需要确认你绘图时点的顺序是否与频率增加顺序一致。在Python中,plt.plot()会按数组顺序连接点,所以确保你的数据是从低频到高频排列的。

6.2 如何数“环绕”圈数?

奈奎斯特稳定性判据的核心是:开环传递函数 G(jω)H(jω) 的奈奎斯特曲线,逆时针环绕 (-1, j0) 点的圈数 N,等于闭环系统在右半平面的极点数 P(开环不稳定极点)与 Z(闭环不稳定极点)之差,即 N = P - Z。对于稳定的闭环系统,要求 Z = 0,因此需要 N = P。

  • 数圈数:想象你站在(-1, j0)点,看着曲线随着频率增加而移动。曲线逆时针绕你转一圈,N就+1;顺时针绕一圈,N就-1。
  • 确定P:P是开环传递函数在右半平面(RHP)的极点数。对于绝大多数设计良好的放大器、电源环路,开环系统本身是稳定的,即P = 0。在这种情况下,稳定性判据简化为:奈奎斯特曲线不能包围(-1, j0)点。只要曲线不包围该点,闭环系统就是稳定的。
  • “包围”的定义:曲线不需要直接穿过(-1,0)点才叫包围。只要(-1,0)点位于曲线所围成的闭合区域内,就算被包围。对于不闭合的曲线(从实轴一点开始,终于原点或实轴另一点),需要补上从终点到起点、半径无穷大的圆弧来构成闭合曲线,再判断。

6.3 条件稳定性(Conditional Stability)的识别

这是奈奎斯特图相比波特图最大的优势之一。条件稳定系统在波特图上,增益曲线可能多次穿越0dB线,相位曲线也可能多次穿越-180°线,单纯看增益裕度和相位裕度会得出错误结论。但在奈奎斯特图上,条件稳定表现为曲线多次穿过负实轴(Re轴),并且在(-1,0)点附近形成一个或多个“环”。如果这个环包含了(-1,0)点,但在整体上,曲线从起点到终点对(-1,0)点的净环绕圈数为0(对于P=0的系统),那么系统仍然是稳定的,但这种稳定性对增益变化非常敏感。一旦增益因温度、老化等原因发生变化,曲线就可能移动并包围(-1,0)点,导致不稳定。奈奎斯特图能清晰地揭示这种脆弱性。

6.4 与波特图裕度的关联

  • 增益裕度(Gain Margin, GM):在奈奎斯特图上,找到曲线与负实轴(Im=0, Re<0)的交点。设该交点坐标为(a, 0),其中a为负实数。则增益裕度 GM = -20*log10(|a|) dB。因为当开环增益为|a|时,相位为-180°,此时若|a|>1(即|a|的绝对值>1,a < -1),则闭环不稳定。GM就是衡量|a|距离1有多远。
  • 相位裕度(Phase Margin, PM):在奈奎斯特图上,找到曲线与单位圆(|G(jω)|=1)的交点。该交点与原点连线的角度,就是该频率下的相位角φ。相位裕度 PM = φ - (-180°) = φ + 180°。在图上,就是从该交点到(-1,0)点所张的圆心角。

6.5 常见误区与验证

  • 误区一:曲线穿过(-1,0)点就等于不稳定。不完全对。如果曲线恰好穿过(-1,0)点,意味着在某个频率下,开环增益为1且相位为-180°,系统处于临界振荡状态。在实际中,由于元件容差,这通常被视为不稳定。
  • 误区二:只看曲线是否“接近”(-1,0)点。接近度确实反映了相对稳定性,但稳定性的严格判据是“包围”,而不是“距离”。一个曲线可能离(-1,0)点很远,但如果它以一种奇怪的方式(比如在无穷远处)包围了该点,系统仍然不稳定。因此,必须考虑完整的奈奎斯特路径。
  • 验证:对于复杂的曲线,判断是否包围有时比较困难。一个实用的方法是,从(-1,0)点向任意方向(比如向右)画一条射线。数一数这条射线与奈奎斯特曲线的净交点数量(从上方穿过减从下方穿过)。对于P=0的系统,如果净交点数为0,则稳定;否则不稳定。这等价于计算环绕数。

最后,再分享一个我个人常用的技巧:在利用Python绘制奈奎斯特图后,我通常会用虚线叠加画出单位圆。这能非常直观地看到曲线与单位圆的交点(用于求相位裕度),以及曲线整体在单位圆内外的分布情况。

# 在绘图代码中添加单位圆 theta = np.linspace(0, 2*np.pi, 100) x_circle = np.cos(theta) y_circle = np.sin(theta) plt.plot(x_circle, y_circle, 'r--', alpha=0.5, linewidth=1, label='Unit Circle (|T|=1)')

将这条命令添加到你的绘图代码中,红色的虚线单位圆会与奈奎斯特曲线叠加显示,相位裕度对应的点就是曲线与这个圆的交点,一目了然。