【精品课设】经典PID与专家PID控制的对比与分析(二)

2024-01-19 00:50

本文主要是介绍【精品课设】经典PID与专家PID控制的对比与分析(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【精品课设】经典PID与专家PID控制的对比与分析(二)

目录

  • 【精品课设】经典PID与专家PID控制的对比与分析(二)
    • 1经典PID控制的设计与仿真
      • 1.1 被控对象传递函数的设计
      • 1.2 经典PID控制的仿真
    • 2专家PID控制的设计
      • 2.1 专家PID控制律的设计
      • 2.2 专家PID控制的仿真结果
    • 3仿真对比与分析


写在前面-研究背景:

 1.本代码基于MATLAB2019a版本,低版本或者不同版本可能会报错,mdl文件或slx文件打开可能会失败;
 2.如果运行时间过长,请观察设置参数是否一致。
 3.本博客附上算法运行图并详细介绍,如果转载请注明出处;
 4.如果本博客恰巧与您的研究有所关联,欢迎您的咨询qq1366196286


1经典PID控制的设计与仿真

   经典PID控制的设计与仿真可参照上一篇博客,【精品课设】经典PID与模糊PID控制的对比与分析(一)

1.1 被控对象传递函数的设计

   被控对象的传递函数为:

在这里插入图片描述

1.2 经典PID控制的仿真

Traditional_PID.m

clc,
close all;
clear all; %#ok<CLALL>
warning off;rin = 1.0; % 设定系统的参考输入量-单位阶跃响应
ts=0.001; %设置系统采样的时间--运行时间1.0ssys=tf(5.235e005,[1, 87.35, 1.047e004, 0]); %设置被控对象的传递函数dsys=c2d(sys,ts,'tustin');    %离散化处理-Z域
[num,den]=tfdata(dsys,'v');u_1=0.0;u_2=0.0;u_3=0.0; % 系统初始值的0初始化
y_1=0;y_2=0;y_3=0;x=[0,0,0]';  %中间变量的初始化
e_1=0; %对误差的初始化
ec_1=0;%% 未进行整定
kp0=0.90; % PID控制参数的大小
ki0=0.05;
kd0=0.2;% 对系统进行建模
for k=1:1:1000time(k)=k*ts;
% r(k)=sign(sin(2*pi*k*ts)); %%脉冲输入
r(k)=rin; %%单位阶跃输入u(k)=kp0*x(1)+ki0*x(2)+kd0*x(3);% if k==300     % Adding disturbance(1.0v at time 0.3s)施加干扰量
%    u(k)=u(k)+1.0;
% endy(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;
e(k)=r(k)-y(k);
%%%%%%%%%%%%%%Return of PID parameters%%%%%%%%%%%%%%%u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=y(k);x(1)=e(k);            % Calculating Px(2)=e(k)-e_1;        % Calculating Dx(3)=x(3)+e(k)*ts;    % Calculating Iec_1=x(2);e_2=e_1;e_1=e(k);
end
%% 绘制响应输出
clf,
figure(1);
plot(time,r,'b',time,y,'r');
xlabel('time(s)');ylabel('rin,yout');

程序运行结果图如下:
在这里插入图片描述


2专家PID控制的设计

2.1 专家PID控制律的设计

   专家系统主要由知识库和推理机构成,专家系统的结构如图1所示。

在这里插入图片描述
图1 专家系统的结构图

   专家PID控制实质是:基于受控对象和控制规律的各种知识,无须知道被控对象的精确模型,利用专家经验来设计PID参数。专家PID控制是一种直接型专家控制器。其中,直接型专家控制器,如图2所示。

在这里插入图片描述
图2 直接型专家控制器的结构图

   具体实现过程可参照《智能控制》书中P12-P13页。

在这里插入图片描述

2.2 专家PID控制的仿真结果

在这里插入图片描述
图3 PID控制阶跃响应的输出曲线

在这里插入图片描述
图4 误差响应曲线


3仿真对比与分析

  将专家PID控制与传统PID控制的输出响应进行对比,可得:

在这里插入图片描述

  将专家PID控制、模糊PID控制与传统PID控制的输出响应进行对比,可得:

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

这篇关于【精品课设】经典PID与专家PID控制的对比与分析(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620793

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.