计算机控制系统-最小拍控制器设计及仿真分析

1题目

 开环传递函数 G(s)= 2/(s(0.5s+1)) ,采样周期 T=0.5 秒,设计单位速度输入下的最小拍控制器

1.1 方法1

根据课本中的步骤,最小拍控制器的设计步骤如下:

1. 确定对象的离散传递函数G(z),并确定其零极点。

2. 确定输入信号类型,确定误差传递函数Φ_e(z)需要包含的因子。例如,对于速度输入,Φ_e(z)必须包含(1 - z^{-1})^2。

3. 确定Φ_e(z)的形式,考虑对象的零极点:

a. Φ_e(z)必须包含G(z)中单位圆外的零点作为零点。

b. Φ_e(z)必须包含G(z)中单位圆外的极点作为零点。

c. Φ_e(z)必须包含(1 - z^{-1})^m,其中m是输入信号类型(阶跃为1,速度2,加速度3等)。

4. 确定Φ(z) = 1 - Φ_e(z),其中Φ(z)必须包含G(z)中单位圆外的极点作为零点,以及可能的延迟项。

5. 解出Φ_e(z)和Φ(z),使得系统方程满足,并解出控制器D(z)。

1.2 方法2

最小拍控制器的设计步骤如下:

1. 确定被控对象G(z)的零点和极点,以及是否存在单位圆外的零极点,这可能会影响稳定性,需要特殊处理。

2. 根据输入类型,确定误差传递函数E(z)的结构。对于单位速度输入,E(z)必须包含(1 - z^{-1})^2的因子。

3. 设计闭环传递函数Φ(z) = 1 - E(z),使得闭环系统稳定且在有限拍内达到稳态。

4. 通过Φ(z)和G(z)求出控制器D(z) = Φ(z)/(G(z) * E(z))。不过可能更具体的公式可能需要调整。

或者,更准确地说,控制器D(z) = Φ(z)/(G(z)*(1 - Φ(z))),因为闭环传递函数Φ(z) = D(z)G(z)/(1 + D(z)G(z)),所以D(z) = Φ(z)/(G(z)(1 - Φ(z)))。

 1.3 方法3:于微波教材法

2代码

按照于老师教材设计

2.1 传递函数的零阶保持器的离散化GZ

% 系统参数
T = 0.5; % 采样周期
s = tf('s');

% 连续时间开环传递函数
Gc = 2/(s*(0.5*s + 1));

% 使用零阶保持法将连续传递函数转换为离散传递函数
Gd = c2d(Gc, T, 'zoh');

% 显示离散传递函数
disp('离散化后的开环传递函数 G(z):');
Gd
Gd =
 
    0.3679 z + 0.2642
  ----------------------
  z^2 - 1.368 z + 0.3679
 
采样时间: 0.5 seconds
离散时间传递函数。

2.2 闭环传递函数phiz

% 定义Φ(z)和Φ_e(z)
Phi = tf([0 2 -1], [1], T, 'Variable', 'z^-1'); % Φ(z) = 2z^{-1} - z^{-2}
Phi_e = tf([1 -2 1], [1], T, 'Variable', 'z^-1'); % Φ_e(z) = (1 - z^{-1})^2

% 计算控制器D(z)
D = Phi / (G_discrete * Phi_e)
% 简化控制器传递函数
D = minreal(D); % 消除公共零极点

% 显示控制器传递函数
disp('最小拍控制器 D(z):');
D

2.3 数字控制器DZ



D =

    5.437 - 10.15 z^-1 + 5.718 z^-2 - z^-3
  ------------------------------------------
  1 - 1.282 z^-1 - 0.4366 z^-2 + 0.7183 z^-3

采样时间: 0.5 seconds
离散时间传递函数。

我没有对其因数分解!

2.4 仿真分析

单位速度分析

% 验证闭环系统性能
closed_loop = feedback(D*G_discrete, 1)
t = 0:T:10; % 时间向量
r = t; % 单位速度输入
[y, t_out] = lsim(closed_loop, r, t);

% 绘制输入输出响应
figure;
plot(t_out, r, 'r--', t_out, y, 'b-');
xlabel('时间 (秒)');
ylabel('幅值');
legend('输入信号', '输出响应');
title('单位速度输入下的闭环响应');
grid on;

% 显示稳态误差
steady_state_error = r(end) - y(end);
disp(['稳态误差: ', num2str(steady_state_error)]);

我认为单位速度响应还不错,但教材说不行!

单位阶跃响应

[y, t] = step(closed_loop, 10); % 计算10秒内的脉冲响应
figure
stem(t/T, y, 'filled');
xlabel('采样周期')
ylabel('响应y(k)')

% 单位速度输入的Z变换

z = tf('z', T); % 声明 z 变量
Rz = T * z/(z - 1)^2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个码农都是奢望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值