%PID Controller with changing integration rate clear all; close all; %Big time delay Plant ts=20; sys=tf([1],[60,1],'inputdelay',80); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); u_1=0;u_2=0;u_3=0;u_4=0;u_5=0; y_1=0;y_2=0;y_3=0; error_1=0;error_2=0; ei=0; for k=1:1:200 time(k)=k*ts; yd(k)=1.0; %Step Signal %Linear model y(k)=-den(2)*y_1+num(2)*u_5; error(k)=yd(k)-y(k); kp=0.45;kd=12;ki=0.0048; A=0.4;B=0.6; %T type integration ei=ei+(error(k)+error_1)/2*ts; M=2; if M==1 %Changing integration rate if abs(error(k))<=B f(k)=1; elseif abs(error(k))>B&abs(error(k))<=A+B f(k)=(A-abs(error(k))+B)/A; else f(k)=0; end elseif M==2 %Not changing integration rate f(k)=1; end u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*f(k)*ei; if u(k)>=10 u(k)=10; end if u(k)<=-10 u(k)=-10; end %Return of PID parameters u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_3=y_2;y_2=y_1;y_1=y(k); error_2=error_1; error_1=error(k); end figure(1); plot(time,yd,'r',time,y,'k:','linewidth',2); xlabel('time(s)');ylabel('yd,y'); legend('Ideal position signal','Position tracking'); figure(2); plot(time,f,'r','linewidth',2); xlabel('time(s)');ylabel('Integration rate f');详细注释一下这段代码

时间: 2023-12-07 14:04:57 浏览: 31
这段代码是一个使用PID控制器的闭环控制系统,用于跟踪一个步进信号。接下来对代码进行详细注释: 首先,导入所需的库和清空变量: ```matlab clear all; close all; ``` 然后,定义系统模型,使用输入延迟80和60的一阶传递函数: ```matlab ts=20; sys=tf([1],[60,1],'inputdelay',80); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); ``` 接下来,定义初始化变量: ```matlab u_1=0;u_2=0;u_3=0;u_4=0;u_5=0; y_1=0;y_2=0;y_3=0; error_1=0;error_2=0; ei=0; ``` 然后,开始进行控制循环: ```matlab for k=1:1:200 time(k)=k*ts; yd(k)=1.0; %Step Signal %Linear model y(k)=-den(2)*y_1+num(2)*u_5; error(k)=yd(k)-y(k); %PID Parameters kp=0.45;kd=12;ki=0.0048; A=0.4;B=0.6; %T type integration ei=ei+(error(k)+error_1)/2*ts; %Changing integration rate M=2; if M==1 if abs(error(k))<=B f(k)=1; elseif abs(error(k))>B&abs(error(k))<=A+B f(k)=(A-abs(error(k))+B)/A; else f(k)=0; end %Not changing integration rate elseif M==2 f(k)=1; end %PID Control u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*f(k)*ei; %Limit output if u(k)>=10 u(k)=10; end if u(k)<=-10 u(k)=-10; end %Return of PID parameters u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_3=y_2;y_2=y_1;y_1=y(k); error_2=error_1; error_1=error(k); end ``` 循环中,首先计算当前的时间和期望输出信号`yd`。然后使用线性模型计算当前的实际输出信号`y`和误差`error`。接下来,定义PID控制器的参数,并使用T型积分计算当前积分误差`ei`。然后根据选择的积分变化模型,计算当前的积分率`f`。最后,使用PID控制计算当前的控制量`u`,并限制在-10到10之间。最后,更新历史参数并进行下一次循环。 最后,使用两个图形窗口绘制输出信号和积分率变化: ```matlab figure(1); plot(time,yd,'r',time,y,'k:','linewidth',2); xlabel('time(s)');ylabel('yd,y'); legend('Ideal position signal','Position tracking'); figure(2); plot(time,f,'r','linewidth',2); xlabel('time(s)');ylabel('Integration rate f'); ``` 第一个图形绘制期望输出信号和实际跟踪信号,第二个图形绘制积分率变化。

相关推荐

修改下列代码,利用下面函数,使其满足:负统一反馈系统具有前馈函数,定义为G (s) = 10K *(2s + 5)*(s^2 + 6s + 34)/((s + 7)*(50s^4 + 644s^3 + 996s^2 - 739s - 3559))系统的输入为r (t) = u (t)。你将需要提供一个Matlab代码来画出三个系统的输出响应,包括无补偿、被动PD和被动PID。 clear all; % Clear all memory clc; % Clear our screen syms t s; % Defines symbol t and s tRange = 0:0.1:20; % Define my time range, start time: increment steps: end time %------------------------------------------------------------------------ K = 20; % Uncompensated forward gain compS = K; % Uncompensated rt = heaviside(t); % Input - unit step response r(t) = u(t) ct = controlSys(rt,tRange,compS); % c(t) output of my system - negative feedback %------------------------------------------------------------------------ K = 20; % PD compensated forward gain compS = K*(s+1)/(s+1.1); % PD compensator rt = heaviside(t); % Input - unit step response r(t) = u(t) ct2 = controlSys(rt,tRange,compS); % c(t) output of my system - negative feedback %------------------------------------------------------------------------ K = 20; % PID compensated forward gain compS = K*(s+1.1)/(s+1.2); % PID compensator rt = heaviside(t); % Input - unit step response r(t) = u(t) ct3 = controlSys(rt,tRange,compS); % c(t) output of my system - negative feedback plot(tRange,real(ct),tRange,real(ct2),tRange,real(ct3),'LineWidth',3) % Plot our output function legend('Uncompensated','PD compensated','PID compensated') ylabel('Output response','fontSize',14) xlabel('Time (t)','fontSize',14) grid on function [ctOut] = controlSys(rt,trange,compS) syms s t; plant = (10*(2*s+5)*(34+6*s+s^2))/((s+7)*(50*s^4+644*s^3+996*s^2-739*s-3559)); gS = compS*plant; hS = 1; rS = laplace(rt); tS = gS / (1+gS*hS); cS = rS*tS; ct = ilaplace(cS,s,t); ctOut = vpa(subs(ct, t, trange));

最新推荐

recommend-type

西门子 博途 PID SCL 源代码

西门子 博途 PID SCL 源代码 300、400 FB41
recommend-type

python实现PID算法及测试的例子

今天小编就为大家分享一篇python实现PID算法及测试的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

PID库(Arduino PID Library)使用说明

Arduino PID Library - Version 1.2.1 by Brett Beauregard &lt;br3ttb@gmail.com&gt; brettbeauregard.com This Library is licensed under the MIT License
recommend-type

PID算法之我见,详细讲解PID认知,让你上升一个新台阶

对于想使用PID算法对一个控制对象(可以是倒立摆)进行稳定控制,除了需要对PID算法有比较清晰的理解,还需要一些单片机编程的基础,对于一个新手,面对这样一个任务可能会感觉有些捉襟见肘,不知如何下手。...
recommend-type

Linux下/var/run/目录下的pid文件详解及pid文件作用

linux系统中/var/run/目录下的*.pid文件是一个文本文件,其内容只有一行,即某个进程的PID。这篇文章主要介绍了Linux下/var/run/目录下的pid文件详解及pid文件作用,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

云原生架构与soa架构区别?

云原生架构和SOA架构是两种不同的架构模式,主要有以下区别: 1. 设计理念不同: 云原生架构的设计理念是“设计为云”,注重应用程序的可移植性、可伸缩性、弹性和高可用性等特点。而SOA架构的设计理念是“面向服务”,注重实现业务逻辑的解耦和复用,提高系统的灵活性和可维护性。 2. 技术实现不同: 云原生架构的实现技术包括Docker、Kubernetes、Service Mesh等,注重容器化、自动化、微服务等技术。而SOA架构的实现技术包括Web Services、消息队列等,注重服务化、异步通信等技术。 3. 应用场景不同: 云原生架构适用于云计算环境下的应用场景,如容器化部署、微服务
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。