基于MWorks的采样控制系统动态响应分析——离散传递函数与阶跃响应特性详解
基于MWorks的采样控制系统动态响应分析——离散传递函数与阶跃响应特性详解
本文将详细介绍如何使用MWorks软件进行采样控制系统的动态响应分析。通过一个具体的单位阶跃输入案例,演示了离散传递函数的推导、代码实现、结果分析等关键步骤。
一、问题背景
在采样控制系统中,分析系统的动态响应(如超调量、调节时间等)是评估系统性能的关键。本文以单位阶跃输入下的离散传递函数为例,结合MWorks的ControlSystems和Plots工具包,详细演示如何通过代码实现动态响应分析。
二、离散传递函数推导
题目:如图一所示的采样控制系统,设K=1,T=1,单位阶跃输人,求系统的动态响应。
根据题目描述,系统参数为 K=1,T=1。假设原连续系统为:
通过零阶保持器(ZOH)离散化后,离散传递函数为:
对应分子分母系数:
分子(Numerator):[0.632,0]
分母(Denominator):[1,−0.736,0.368]
三、MWorks代码解析与实现
1.加载工具包
using ControlSystems
using Plots
ControlSystems:用于定义和仿真控制系统
Plots:用于绘制响应曲线,支持多种绘图风格
2.定义离散传递函数
num = [0.632, 0] # 分子多项式 0.632z + 0
den = [1, -0.736, 0.368] # 分母多项式 z² - 0.736z + 0.368
sys = tf(num, den, 1.0) # 创建离散系统,采样时间 T=1.0
tf(num, den, Ts):创建离散传递函数,Ts=1.0 表示采样时间为1秒
分子分母对齐:注意多项式系数按降幂排列,例如 z²对应 den[1]
3.计算阶跃响应
k = 0:50 # 时间序列 0到50个采样周期
y, t = step(sys, k) # 计算阶跃响应
y_vec = vec(y') # 将响应数据转为向量格式
step(sys, k):计算系统 sys 在时间序列 k 上的单位阶跃响应
vec(y'):将矩阵数据转为向量,便于后续绘图和分析
4.绘制响应曲线
p = plot(k, y_vec,
xlabel="k", ylabel="y(k)",
title="Unit Step Response",
grid=true, gridstyle=:dash,
linewidth=2, label="Response",
ylims=(0,1.5), xlims=(0,50),
seriestype=:steppost) # 阶梯式绘图模拟离散信号
# 添加自定义网格线
for yi in 0:0.2:1.4
hline!(p, [yi], color=:gray, style=:dash, label="")
end
for xi in 0:5:50
vline!(p, [xi], color=:gray, style=:dash, label="")
end
# 添加参考线
hline!(p, [1.0], color=:red, linestyle=:dash, label="Reference")
display(p)
seriestype=:steppost:阶梯图更符合离散系统的采样特性
网格线增强:通过循环添加水平和垂直虚线网格,提升可读性
参考线:红色虚线标记稳态值(1.0)
5.分析系统特性
peak = maximum(y_vec) # 峰值
steady_state = y_vec[end] # 稳态值
overshoot = (peak - steady_state)/steady_state * 100 # 超调量百分比
# 计算调节时间(±2%误差带)
settling_idx = findfirst(abs.(y_vec .- steady_state) .< 0.02*steady_state)
println("峰值: ", round(peak, digits=4))
println("稳态值: ", round(steady_state, digits=4))
println("超调量: ", round(overshoot, digits=2), "%")
println("调节时间: ≈", settling_idx, "个采样周期")
findfirst:查找首次进入±2%误差带的时间点。
超调量公式:
四、运行结果与结论
系统传递函数:
0.632z
G(z) = ----------------
z² - 0.736z + 0.368
系统响应特性:
峰值:1.2069
稳态值:1.0
超调量:20.69%
调节时间:≈ 5 个采样周期
结果解读:
超调量 20.69%:系统存在适度超调,表明动态响应较快但存在振荡
调节时间 5个周期:系统在5秒内进入稳态,动态性能良好
稳定性验证:计算系统极点 z = 0.368 ± 0.316i(模长≈0.48),位于单位圆内,系统稳定
运行结果图像:
时域特性改进:
对于存在20.69%超调量的系统,工程上可通过:增加阻尼比,调整控制器参数;改变采样周期,权衡响应速度与超调量;使用先进控制策略:Smith预估器、模糊控制等
五、总结
本文通过MWorks完整演示了采样控制系统的动态响应分析流程,涵盖离散传递函数建模、阶跃响应仿真、可视化及性能指标计算。读者可基于此框架扩展至更复杂的控制系统设计(如电机控制、数字滤波器设计),并通过调整参数优化系统动态性能。
附录:完整程序
using ControlSystems
using Plots
# 定义离散传递函数参数
num = [0.632, 0] # 0.632z
den = [1, -0.736, 0.368] # z² - 0.736z + 0.368
sys = tf(num, den, 1.0) # 采样时间为1.0
# 创建时间向量
k = 0:50
# 计算阶跃响应
y, t = step(sys, k)
# 确保数据是向量形式
y_vec = vec(y')
# 创建图形
p = plot(
k, y_vec,
xlabel="k",
ylabel="y(k)",
title="Unit Step Response",
grid=true,
gridstyle=:dash,
linewidth=2,
label="Response",
ylims=(0, 1.5),
xlims=(0, 50),
seriestype=:steppost # 使用阶梯式绘图
)
# 添加水平网格线
for yi in 0:0.2:1.4
hline!(p, [yi], color=:gray, style=:dash, label="")
end
# 添加垂直网格线
for xi in 0:5:50
vline!(p, [xi], color=:gray, style=:dash, label="")
end
# 添加参考线
hline!(p, [1.0], color=:red, linestyle=:dash, label="Reference")
# 显示图形
display(p)
# 计算系统特性
peak = maximum(y_vec)
steady_state = y_vec[end]
overshoot = (peak - steady_state) / steady_state * 100
# 计算调节时间(在±2%范围内)
settling_idx = findfirst(abs.(y_vec[2:end] .- steady_state) .< 0.02 * steady_state)
# 打印系统信息
println("\n系统传递函数:")
println(" 0.632z")
println("G(z) = ----------------")
println(" z² - 0.736z + 0.368")
println("\n系统响应特性:")
println("峰值:", round(peak, digits=4))
println("稳态值:", round(steady_state, digits=4))
println("超调量:", round(overshoot, digits=2), "%")
if !isnothing(settling_idx)
println("调节时间:≈ ", settling_idx, " 个采样周期")
end