预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

模糊控制算法PID算法比较分析 电气学院控制理论与控制工程专业徐磊学号:10310070 一:题目 对于已知系统的传递函数为:,假设系统给定为阶跃值R=1,系统的初始值R(0)=0,试分析设计 常规的PID控制器 常规的模糊控制器 比较两种控制器的控制效果 当通过改变模糊控制器的比例因子时,分析系统响应有什么变化? 二:思路 对于模糊控制,采用二维输入,分别是误差e和误差变化率e,然后通过增益放大,输入到模糊控制器中,然后模糊控制器输出也通过增益放大。模糊控制器的输入、输出论域取值为[-6,6],隶属度均匀划分为五个区域,隶属度函数采用梯形和三角形函数。 µ NBNSZE1PSPB -6-5-3-2-10123456 两个输入和一个输出的隶属度函数相同。 程序框图如下: 三:程序 clear; num=1; den=[10,1]; [a1,b,c,d]=tf2ss(num,den); x=[0];%状态变量初始 T=0.01;%采样周期 h=T; N=10000;%采样次数 td=0.5;%延时时间 Nd=50;%延时周期 R=1*ones(1,N);%输入信号 e=0;de=0;ie=0;%误差,误差导数,积分 kp=12.5;ki=0.8;kd=0.01; fork=1:N uu(1,k)=-(kp*e+ki*de+kd*ie);%PID输出序列 ifk<=Nd u=0; else u=uu(1,k-Nd); end %龙格库塔法仿真 k0=a1*x+b*u; k1=a1*(x+h*k0/2)+b*u; k2=a1*(x+h*k1/2)+b*u; k3=a1*(x+h*k2)+b*u; x=x+(k0+2*k1+2*k2+k3)*h/6; y=c*x+d*u; e1=e; e=y(1,1)-R(1,k); de=(e1-e)/T; ie=ie+e*T; yy1(1,k)=y; end %设计模糊控制器 a=newfis('Simple'); a=addvar(a,'input','e',[-6,6]); a=addmf(a,'input',1,'NB','trapmf',[-6-6-5-3]); a=addmf(a,'input',1,'NS','trapmf',[-5-3-20]); a=addmf(a,'input',1,'ZR','trimf',[-202]); a=addmf(a,'input',1,'PS','trapmf',[0235]); a=addmf(a,'input',1,'PB','trapmf',[3566]); a=addvar(a,'input','de',[-66]); a=addmf(a,'input',2,'NB','trapmf',[-6-6-5-3]); a=addmf(a,'input',2,'NS','trapmf',[-5-3-20]); a=addmf(a,'input',2,'ZR','trimf',[-202]); a=addmf(a,'input',2,'PS','trapmf',[0235]); a=addmf(a,'input',2,'PB','trapmf',[3566]); a=addvar(a,'output','u',[-66]); a=addmf(a,'output',1,'NB','trapmf',[-6-6-5-3]); a=addmf(a,'output',1,'NS','trapmf',[-5-3-20]); a=addmf(a,'output',1,'ZR','trimf',[-202]); a=addmf(a,'output',1,'PS','trapmf',[0235]); a=addmf(a,'output',1,'PB','trapmf',[3566]); %规则表 rr=[55443 54433 44332 43322 33221]; r1=zeros(prod(size(rr)),3);%初始化 %r1赋值 k=1; fori=1:size(rr,1) forj=1:size(rr,2) r1(k,:)=[i,j,rr(i,j)]; k=k+1; end end r2=ones(25,2); rulelist=[r1,r2];%得到规则表 a=addrule(a,rulelist); e=0;de=0;ie=0; x=[0]; ke=8.5;kd=0.5;ku=2.2;%增益,比例因子 ki=0.01; fork=1:N e1=ke*e; de1=kd*de; ife1>=6 e1=6; elseife1<=-6 e1=-6; end ifde1>=6 de1=6; elseifde1<=-6 de1=-6