收藏 分享(赏)

基于Matlab的积分分离PID控制算法及仿真精品资料.doc

上传人:风样花鼓 文档编号:21124649 上传时间:2023-07-07 格式:DOC 页数:21 大小:136.33KB
下载 相关 举报
基于Matlab的积分分离PID控制算法及仿真精品资料.doc_第1页
第1页 / 共21页
基于Matlab的积分分离PID控制算法及仿真精品资料.doc_第2页
第2页 / 共21页
基于Matlab的积分分离PID控制算法及仿真精品资料.doc_第3页
第3页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、课程设计说明书(论文) 第 II 页基于Matlab的积分分离PID控制算法及仿真摘 要MATLAB是一种集数值计算、符号运算、可视化建模、仿真和图形处理等多种功能于一体的非常优秀的图形化语言此次论文运用MATLAB工具求解积分分离PID控制算法及仿真,为解决实际问题提供了很大的方便.关键词:MATLAB,PID控制,仿真目 录1 引言12 PID控制系统设计原理13 积分分离PID控制算法24 积分分离PID控制算法仿真实例3总 结8参考文献9课程设计说明书(论文) 第 19 页 1 引言在工程实际中,应用最为广泛的调解器控制规律为比例,积分,微分控制,简称PID控制.PID控制器以其结构简

2、单、稳定性好、工作可靠和调整方便而成为工业控制的主要技术之一.当被控对象的结构或参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以应用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便.PID控制及其控制器产品已经在工程实际中得到了广泛的应用,各大公司已经开发了具有PID参数自整定功能的智能调节器,其中PID控制器参数的自动调整是通过智能化调整或校正、自适应算法来实现的1. 2 PID控制系统设计原理在模拟控制系统中,控制器中最常用的控制规律是PID控制.模拟PID控制系统原理框图如图2.1所示.系统由模拟PID控制器和被控对象组成.比例微分

3、积分被控对象+-+图2.1 模拟PID控制系统原理框图PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差,即PID的控制规律为式中为比例系数;为积分时间常数;为微分时间常数.简单来说PID控制校正环节中积分环节的作用是用于消除静差,提高系统的无差度.积分作用的强弱取决于积分时间常数,越大,积分作用越弱,反之则强.3 积分分离PID控制算法积分分离控制基本思路是:当被控量与设定值偏差较大时,取消积分作用,以免由于积分作用使得系统稳定性降低,超调量增大;当被控量接近给定值时,引入积分控制,以便消除静差,提高控制精度.其具体实现步骤如下:根据实际情况,人为设定阀值;当时,采用PD控制

4、,可避免产生过大的超调,又使系统有较快的响应;当时,采用PID控制,以保证系统的控制精度.积分分离算法可表示为:式中,为采样时间;项为积分项的开关系数,且根据积分分离式PID控制算法得到其程序框图如图3.1所示.开始参数初始化采入及yout(k)计算偏差值error(k)error(k)e?PID控制PID控制计算控制器输出参数更新返回图3.1 积分分离式PID程序序算法控制框图4 积分分离PID控制算法仿真实例设被控对象为一延迟对象,即采样时间为20s,延迟时间为4个采样时间,即80s,被控对象离散化为取M=1,采用积分分离式PID控制器进行阶跃响应,对积分分离式PID控制算法进行改进,采用

5、分段积分分离方式,即根据误差绝对值的不同,采用不同的积分强度3. 仿真中指令信号为,控制器输出限制在-110,110,其阶跃式跟踪结果如图4.1所示.取M=2,采用普通PID控制,其阶跃式跟踪结果如图4.2所示.仿真程序如下2:clear all;close all;ts=20;sys=tf(1,60,1,inputdelay,80);dsys=c2d(sys,ts,zoh);num,den=tfdata(dsys,v);u1=0;u2=0;u3=0;u4=0;u5=0;y1=0;y2=0;y3=0;error1=0;erroe2=0;ei=0;for k=1:1:200 time(k)=k*

6、ts; yout(k)=-den(2)*y1+num(2)*u5; rin(k)=40; error(k)=rin(k)-yout(k); ei=ei+error(k)*ts;M=1;if M=1 if abs(error(k)=30&abs(error(k)=20&abs(error(k)=10&abs(error(k)=110 u(k)=110;endif u(k)a1,1ans =cellclassa1,2ans = 1 2 2a2,:ans =abcans = 9 5 6 b=a1,1b =cellclass元胞数组:元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所

7、不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。(1)元胞数组的创建 a=matlab,20;ones(2,3),1:10a = matlab 20 2x3 double 1x10 double b=matlab,20;ones(2,3),1:10b = matlab 20 2x3 double 1x10 double c=10c = 10c(1,2)=2c = 10 2c(2,2

8、)=5c = 10 2 5isequal(a,b)ans = 1whosName Size Bytes Class Attributesa 2x2 388 cell ans 1x1 1 logical b 2x2 388 cell c 2x2 208 cell 用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。 a=cell(1)a = b=cell(1,2)b = c=cell(3,3)c = d=cell(2,2,2)d(:,:,1) = d(:,:,2) = whosName Size Byte

9、s Class Attributesa 1x1 4 cell ans 1x1 1 logical b 1x2 8 cell c 3x3 36 cell d 2x2x2 32 cell (2)元胞数组的数据获得从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号。大括号中数值表示元胞的下标。如a1,2表示元胞数组中第一行第二列的元胞。 a=20,matlab;ones(2,3),1:3a = 20 matlab 2x3 double 1x3 doublestr=a(1,2)str = matlab

10、class(str)ans =cellstr=a1,2str =matlabclass(str)ans =char()和有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。a = 20 matlab 2x3 double 1x3 doublea2,1(2,2)ans = 0.9134a2,1(2,3)ans = 0.0975a1,2(2)ans =a使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。 a=1,2,3;4,5,6;7,8,9a = 1 2 3 4 5 6 7 8 9 b=a(2:3,2:3)b = 5 6 8 9 c=a(1:3,2:3)c =

11、 2 3 5 6 8 9本例使用元胞下标的方式创建了新的元胞数组b和c,通过结果看出b和c就是元胞数组a的一部分。(3)元胞数组的删除和重塑要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。a=20,matlab;ones(2,3),1:3a = 20 matlab 2x3 double 1x3 doublea(1,:)=a = 2x3 double 1x3 double a=20,matlab;ones(2,3),1:3;a1=a = matlab 2x3 double 1x3 doublea(1)=a = 2x3 double matlab 1x3 do

12、ublea(2)=a = 2x3 double 1x3 doublea(1,2)=? A null assignment can have only one non-colon index.a(1)=a = 1x3 double元宝数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。 a=cell(4,4)a = size(a)ans = 4 4 b=reshape(a,2,8)b = size(b)ans = 2 8(5)元胞数组中的操作函数 cell:创建空的元胞数组cellfun:为元胞数组的

13、每个元胞执行指定的函数celldisp:显示所有元胞的内容cellplot:利用图形方式显示元胞数组 cell2mat:将元胞数组转变成为普通的矩阵 mat2cell:将数值矩阵转变成为元胞数组 num2cell:将数值数组转变成为元胞数组 deal:将输入参数赋值给输出 cell2struct:将元胞数组转变成为结构 struct2cell:将结构转变为元胞数组iscell:判断输入是否为元胞数组 a=20,matlab,3-7i;ones(2,3),1:3,0a = 20 matlab 3.0000 - 7.0000i 2x3 double 1x3 double 0 b=cellfun(i

14、sreal,a)b = 1 1 0 1 1 1 c=cellfun(length,a)c = 1 6 1 3 3 1 d=cellfun(isclass,a,double)d = 1 0 1 1 1 1(函数的应用)cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。能在cellfun中使用的函数:isempty:若元胞元素为空,则返回逻辑真islogical:若元胞元素为逻辑类型,则返回逻辑真isreal:若元胞元素为实数,则返回逻辑真 length:元胞元素的长度ndims:元胞元素的维数prodo

15、fsize:元胞元素包含的元素个数(7)元胞数组的嵌套元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。 a=cell(1,2)a = a(1,2)=cell(2,2)a = 2x2 cella(1,1)=magic(3);a1,2(1,1)=1 2 3;4 5 6;7 8 9;a1,2(2,1)=2-i;4+7i;a1,2(2,2)=cell(1,2);a1,22,2(2)=5;cellplot(a)(8)元胞数组与数值数组间的转

16、化应用循环,可以将元胞数组转化为数值数组。2010-11-08 12:06:44zz: Matlab Cell功能最近完成模式分类的作业,需要大量使用matlab,期间发现了一个问题,是matlab代码的复用程度。在面向过程编程里,基本的复用单位是函数,程序的复杂度籍此下放到函数的接口上。设计好函数间的接口,基本上就成功了一半。在面向对象编程里,基本的复用单位是对象,对象使得数据具有了一定程度的自维护。而在matlab里,我很长时间都没有找到方向,因为我搞不清楚复用的单位是什么。matlab中,基本的单位是矩阵,针对矩阵系统有一大堆的函数供你调用。但是,想自己写程序还是有一定的麻烦的。for循

17、环语句在matlab里似乎是一个禁忌,所有老师都敦敦告诫,不要轻易使用for。而函数调用也是同样的低效,有兴趣的同学可以参见此文。那么我们应该基于什么模块进行复用呢?答案是Cell模式。 Cell是matlab的一个特色功能,将一段代码以%标记为cell以后,就可以重复执行了,相当于在命令行输入该代码块。以前,为了测试不同参数的结果,往往要用up arrow执行上一条指令。遇到需要多条指令的地方,就很容易出错。而算法又没有完善到可以封装成函数的地步,整天来回跑代码让人不堪其烦。通过cell模式,可以非常方便地在不同的代码块之间跳转,或重复执行一个代码块。对于我来说,matlab中的编程越来越趋向于bash编程,所用到的语言只是起到一个粘合剂的作用,负责把系统内置的高性能函数组合起来。这种对语句块的复用方式能够快速地调试出需要的功能,有点类似传统的goto,但是可以一直观察着执行的结果,事前无须编译,也不用考虑函数的接口问题。当算法稳定下来,就可以考虑用一个接口轻易地封装成函数了。同时也可以直接保存为mfile供以后使用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 其他相关文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报