首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《自动控制原理》 - 第六章 线性系统的校正方法

《自动控制原理》 - 第六章 线性系统的校正方法

作者头像
啊阿狸不会拉杆
发布2026-01-21 11:41:59
发布2026-01-21 11:41:59
1210
举报

6-1 系统的设计与校正问题

        控制系统的设计与校正是指根据给定的性能指标,对系统进行分析并添加适当的校正装置,以改善系统性能的过程。系统的性能指标通常包括稳态性能指标(如稳态误差)和动态性能指标(如超调量、调节时间等)。

系统校正的基本概念

  • 校正装置:为改善系统性能而引入的附加装置。
  • 校正方式:根据校正装置在系统中的连接方式,可分为串联校正、反馈校正、前馈校正和复合校正等。
  • 性能指标:包括时域性能指标(如超调量、调节时间)和频域性能指标(如相位裕度、增益裕度)。

系统设计的一般步骤

  1. 分析原系统的性能,确定需要改善的方面。
  2. 根据性能指标要求,选择合适的校正方式和校正装置。
  3. 设计校正装置的参数。
  4. 验证校正后系统的性能是否满足要求。

Python 实现示例

下面我们使用 Python 分析一个系统的性能,并确定需要校正的方面:

代码语言:javascript
复制
import control
import matplotlib.pyplot as plt
import numpy as np

# 设置中文显示
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题

# 定义原系统开环传递函数
# G(s) = 10 / (s(s+1)(s+5))
num = [10]
den = [1, 6, 5, 0]
sys_open = control.TransferFunction(num, den)

# 计算原系统闭环传递函数
sys_closed = control.feedback(sys_open, 1)

# 分析原系统性能
# 1. 稳态性能分析
# 计算静态误差系数
Kp = control.dcgain(sys_open)  # 位置误差系数
Kv = control.dcgain(sys_open * control.TransferFunction([1, 0], [1]))  # 速度误差系数
Ka = control.dcgain(sys_open * control.TransferFunction([1, 0, 0], [1]))  # 加速度误差系数

print("原系统稳态性能分析:")
print(f"位置误差系数 Kp = {Kp:.4f}")
print(f"速度误差系数 Kv = {Kv:.4f}")
print(f"加速度误差系数 Ka = {Ka:.4f}")

# 2. 动态性能分析
# 计算阶跃响应
t, y = control.step_response(sys_closed)

# 计算超调量
def calculate_overshoot(y):
    max_value = np.max(y)
    steady_state = y[-1]
    return (max_value - steady_state) / steady_state * 100

# 计算调节时间(2%误差带)
def calculate_settling_time(t, y):
    steady_state = y[-1]
    for i in range(len(y)):
        if np.all(np.abs(y[i:] - steady_state) <= 0.02 * steady_state):
            return t[i]
    return t[-1]

overshoot = calculate_overshoot(y)
settling_time = calculate_settling_time(t, y)

print("\n原系统动态性能分析:")
print(f"超调量: {overshoot:.2f}%")
print(f"调节时间: {settling_time:.2f}s")

# 3. 稳定性分析
gm, pm, wg, wc = control.margin(sys_open)
print("\n原系统稳定性分析:")
print(f"相位裕度: {pm:.2f}°")
print(f"增益裕度: {20*np.log10(gm):.2f} dB")

# 绘制原系统阶跃响应
plt.figure(figsize=(10, 6))
plt.plot(t, y)
plt.title('原系统阶跃响应')
plt.xlabel('时间 (s)')
plt.ylabel('输出')
plt.grid(True)
plt.show()

# 绘制原系统Bode图
plt.figure(figsize=(10, 8))
control.bode(sys_open, dB=True, deg=True, plot=True)
plt.title('原系统Bode图')
plt.tight_layout()
plt.show()

        这个示例展示了如何使用 Python 分析系统的性能。我们定义了一个三阶系统,计算了其稳态性能指标(静态误差系数)、动态性能指标(超调量、调节时间)和稳定性指标(相位裕度、增益裕度),并绘制了阶跃响应和 Bode 图。通过这些分析,我们可以确定系统需要校正的方面。

6-2 常用校正装置及其特性

        常用的校正装置包括超前校正装置、滞后校正装置和滞后 - 超前校正装置。这些校正装置可以通过改变系统的频率特性来改善系统的性能。

Python 实现示例

下面我们使用 Python 绘制这些校正装置的 Bode 图,分析其频率特性:

代码语言:javascript
复制
import control
import matplotlib.pyplot as plt
import numpy as np

# 设置中文显示
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题

# 定义频率范围
omega = np.logspace(-2, 2, 1000)  # 频率范围从0.01到100 rad/s

# 超前校正装置参数
T_lead = 1  # 时间常数
alpha = 0.2  # 小于1的常数
num_lead = [T_lead, 1]
den_lead = [alpha * T_lead, 1]
sys_lead = control.TransferFunction(num_lead, den_lead)

# 滞后校正装置参数
T_lag = 10  # 时间常数
beta = 10  # 大于1的常数
num_lag = [T_lag, 1]
den_lag = [beta * T_lag, 1]
sys_lag = control.TransferFunction(num_lag, den_lag)

# 滞后-超前校正装置参数
T1 = 1  # 超前部分时间常数
T2 = 10  # 滞后部分时间常数
beta_lag_lead = 10  # 大于1的常数
num_lag_lead = [(T1 * T2), (T1 + T2), 1]
den_lag_lead = [(beta_lag_lead * T1 * T2 / beta_lag_lead), (beta_lag_lead * T1 + T2 / beta_lag_lead), 1]
sys_lag_lead = control.TransferFunction(num_lag_lead, den_lag_lead)

# 绘制Bode图
plt.figure(figsize=(15, 10))

# 超前校正装置Bode图
plt.subplot(3, 2, 1)
mag_lead, phase_lead, _ = control.bode(sys_lead, omega, dB=True, deg=True, plot=False)
plt.semilogx(omega, 20 * np.log10(mag_lead))
plt.title('超前校正装置 幅频
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6-1 系统的设计与校正问题
    • 系统校正的基本概念
    • 系统设计的一般步骤
  • 6-2 常用校正装置及其特性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档