当前位置: 首页 > news >正文

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

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

相关文章:

  • 【区块链安全 | 第二篇】区块链概念详解
  • 鸿蒙开发:openCustomDialog关闭指定Dialog
  • Axure RP9.0 教程:左侧菜单列表导航 ( 点击父级菜单,子菜单自动收缩或展开)【响应式的菜单导航】
  • Qt在模块依靠情况下资源文件名称和资源名称的使用限制
  • 微服务架构-Feign声明式调用
  • BoomCut AI 技术创建本地化的营销视频
  • three入门,创建一个长方体、认识场景、模型、光源、相机?渲染器
  • 【蓝桥杯】真题 路径(数论+dp)
  • 苹果企业签名经常掉签吗?
  • 类与对象(三)
  • uv - Getting Started 开始使用 [官方文档翻译]
  • 1.认识Excel
  • LRU算法实现
  • 学习 - C++ 全栈聊天项目(1)架构概述和登录界面
  • 内核编程十三:进程状态详解
  • leetcode 用队列模拟栈
  • S32K144外设实验(七):FTM输出多路互补带死区PWM
  • 【MySQL】监控MySQL
  • C++值传递和引用传递
  • 【AI学习笔记】AI造神时代的潘式理论与智能进化
  • 博客 wordpress 登录/宁波seo怎么推广
  • wordpress访问404/seo优化关键词排名
  • 互联网营销是什么意思/seo视频
  • 虚拟空间能建多个网站/关键词调词平台
  • 给网站做接口/搜索引擎优化期末考试答案
  • java可以做网站/视频号排名优化帝搜软件