智能控制课后仿真

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《智能控制》课后仿真报告

院(系):电气与控制工程学院专业班级:自动化1301班

*名:***

学号:**********

题目2-3:

求二阶传递函数的阶跃相应S

S S G 25133

2p +=)

(取采样时间为

1ms 进行离散化。参照专家控制仿真程序,设计专家PID 控制器,并进行MATLAB 仿真。

专家PID 控制MATLAB 仿真程序清单:

%Exoert PID Controller clear all ;%清理数据库中所有数据 close all ;%关闭所有界面图形 ts=0.001;%对象采样时间,1ms

sys=tf(133,[1,25,0]);%受控对象的传递函数 dsys=c2d(sys,ts,'z');%连续系统转化为离散系统

[num,den]=tfdata(dsys,'v');%离散化后参数,得num 和den 值 u_1=0;u_2=0;%设定初值,u_1是第(k-1)步控制器输出量 y_1=0;y_2=0;%设定初值,y_1是第(k-1)步系统对象输出量 x=[0,0,0]';%设定误差x1误差导数x2误差积分x3变量初值 x2_1=0;%设定误差导数x2_1的初值 kp=0.6;%设定比例环节系数 ki=0.03;%设定积分环节系数 kd=0.01;%设定微分环节系数

error_1=0;%设定误差error_1的初值

for k=1:1:5000%for 循环开始,k 从1变化到500,每步的增量为1 time(k)=k*ts;%仿真时长[0.001 0.5]s r(k)=1.0;%Tracing Step Signal 系统输入信号

u(k)=kp*x(1)+kd*x(2)+ki*x(3);%PID ControllerPID 控制器 %Expert control rule

%Rule1:Unclosed control rule 规则1:开环控制

if abs(x(1))>0.8%if 循环开始,产生式规则,if...then...;误差的绝对值大于 u(k)=0.45;%控制器输出量等于 elseif abs(x(1))>0.40 u(k)=0.40;

elseif abs(x(1))>0.20 u(k)=0.12;

elseif abs(x(1))>0.01 u(k)=0.10; end %if 循环结束 %Rule2规则2

if x(1)*x(2)>0|(x(2)==0)%if 循环开始,如果误差增大或不变 if abs(x(1))>=0.05%内嵌if 循环开始,如果误差绝对值大于 u(k)=u_1+2*kp*x(1);%控制器输出量施加较强控制

else%否则

u(k)=u_1+0.4*kp*x(1);%控制器输出量施加一般控制

end%内嵌if循环结束

end%if循环结束

%Rule3规则3

if (x(1)*x(2)<0&x(2)*x2_1>0)|(x(1)==0)%if循环开始,如果误差减小或消除

u(k)=u(k);%控制器输出量不变

end%if循环结束

%Rule4规则4

if x(1)*x(2)<0&x(2)*x2_1<0%if循环开始,如果误差处于极值状态

if abs(x(1))>=0.05%内嵌if循环开始,如果误差绝对值大于

u(k)=u_1+2*kp*error_1;%控制器输出量施加较强控制

else%否则

u(k)=u_1+0.6*kp*error_1;%控制器输出量施加一般控制

end%内嵌if循环结束

end%if循环结束

%Rule5:Integration separation PI control规则5;运用PI控制来消除误差

if abs(x(1))<=0.001 %if循环开始如果误差绝对值小于(很小)

u(k)=0.5*x(1)+0.010*x(3);%控制器输出量用比例和积分输出

end%if循环结束

%Restricting the output of controller对控制输出设限

if u(k)>=10

u(k)=10;%设控制器输出量上限值

end

if u(k)<=-10

u(k)=-10;%设控制器输出量下限值

end

%Linear model Z变化后系统的线性模型

y(k)=-den(2)*y_1-den(3)*y_2+num(1)*u(k)+num(2)*u_1+num(3)*u_2;

error(k)=r(k)-y(k);%系统误差error的表达式,等于系统输入减去输出

%--------Return of parameters--------%每步计算时的参数更新

u_2=u_1;u_1=u(k);%u(k)代替u_1

y_2=y_1;y_1=y(k);%y(k)代替y_1

x(1)=error(k);%Calculating P 赋误差error值于x1

x2_1=x(2);%赋值前步计算时的误差导数X2的值等于X2_1

x(2)=(error(k)-error_1)/ts;% Calculating D 求误差导数x2,用于下一步的计算x(3)=x(3)+error(k)*ts;% Calculating I 求误差积分x3

error_1=error(k);%赋误差error值于error_1

end%for循环结束,整个仿真时长计算全部结束

figure(1);%图形1

plot(time,r,'b',time,y,'r');%画图,以时间为横坐标,分别画出系统输入、输出随时间的变化曲线

xlabel('time(s)');ylabel('r,y');%标注坐标

figure(2);%图形2

相关文档
最新文档