%Integration separation PID Controller
clear all
close all
ts=5
%delay plant
sys=tf([1],[30,1],'inputdelay',10)
dsys=c2d(sys,ts,'zoh')
[num,den]=tfdata(dsys,'v')
u_1=0u_2=0u_3=0u_4=0u_5=0
y_1=0y_2=0y_3=0
error_1=0error_2=0
ei=0
for k=1:1:200
time(k)=k*ts
%delay plant
yout(k)=-den(2)*y_1+num(2)*u_5
%I separation
rin(k)=40
error(k)=rin(k)-yout(k)
ei=ei+error(k)*ts
M=2
if M==1 %using integration separation
if abs(error(k))>=30&abs(error(k))<=40
beta=0.3
elseif abs(error(k))>=20&abs(error(k))<御乎核=30
beta=0.6
elseif abs(error(k))>=10&abs(error(k))<=20
beta=0.9
else
beta=1.0
end
elseif M==2
beta=1.0 %not using integration separation
end
kp=0.80
ki=0.005
kd=3.0
u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+beta*ki*ei
if u(k)>=110
u(k)=110
end
if u(k)<=-110
u(k)=110
end
u_5=u_4u_4=u_3u_3=u_2u_2=u_1u_1=u(k)
y_3=y_2y_2=y_1y_1=yout(k)
error_2=error_1
error_1=error(k)
end
figure(1)
plot(time,rin,'b',time,yout,'r')
xlabel('镇掘time(s)')ylabel('rin,yout')
figure(2)
plot(time,u,'r')
xlabel('顷源time(s)')ylabel('u')
这是专家式PID控制的程序,详细可见刘告芹金坤《新型PID控制及其仿真》第三章腊饥。%Expert PID Controller
clear all
close all
ts=0.001
sys=tf(5.235e005,[1,87.35,1.047e004,0])
dsys=c2d(sys,ts,'z')
[num,den]=tfdata(dsys,'v')
u_1=0.0u_2=0.0u_3=0.0
y_1=0y_2=0y_3=0
x=[0,0,0]'
x2_1=0
kp=0.6
ki=0.03
kd=0.01
error_1=0
for k=1:1:500
time(k)=k*ts
rin(k)=1.0 %Tracing Jieyue Signal
u(k)=kp*x(1)+kd*x(2)+ki*x(3)%PID Controller
%Expert control rule
if abs(x(1))>0.8 %Rule1:Unclosed control firstly
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 x(1)*x(2)>0|(x(2)==0) %Rule2
if abs(x(1))>=0.05
u(k)=u_1+2*kp*x(1)
else
u(k)=u_1+0.4*kp*x(1)
end
end
if (x(1)*x(2)<0&x(2)*x2_1>0)|(x(1)==0) %Rule3
u(k)=u(k)
end
if x(1)*x(2)<0&x(2)*x2_1<0 %Rule4
if abs(x(1))>=0.05
u(k)=u_1+2*kp*error_1
else
u(k)=u_1+0.6*kp*error_1
end
end
if abs(x(1))<=0.001 %Rule5:Integration separation PI control
u(k)=0.5*x(1)+0.010*x(3)
end
%Restricting the output of controller
if u(k)>=10
u(k)=10
end
if u(k)<=-10
u(k)=-10
end
%Linear model
yout(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
error(k)=rin(k)-yout(k)
%----------Return of PID parameters------------%
u_3=u_2u_2=u_1u_1=u(k)
y_3=y_2y_2=y_1y_1=yout(k)
x(1)=error(k) % Calculating P
x2_1=x(2)
x(2)=(error(k)-error_1)/ts % Calculating D
x(3)=x(3)+error(k)*ts % Calculating I
error_1=error(k)
end
figure(1)
plot(time,rin,'b',time,yout,'r')
xlabel('time(s)')ylabel('rin,yout')
figure(2)
plot(time,rin-yout,'r')
xlabel('time(s)')ylabel('error')
给你一个全MATLAB仿真的程序,没用到SIMULINKclose all
clear all
a=newfis('fuzzf')
f1=1
a=addvar(a,'input','e',[-3*f1,3*f1])
a=addmf(a,'input',1,'NB','zmf',[-3*f1,-1*f1])
a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0])
a=addmf(a,'input',1,'NS','trimf',[-3*f1,-1*f1,1*f1])
a=addmf(a,'input',1,'Z','trimf',[-2*f1,0,2*f1])
a=addmf(a,'input',1,'PS','trimf',[-1*f1,1*f1,3*f1])
a=addmf(a,'input',1,'PM','trimf',[0,2*f1,3*f1])
a=addmf(a,'input',1,'PB'纤信岁,'smf',[1*f1,3*f1])
f2=1
a=addvar(a,'input','ec',[-3*f2,3*f2])
a=addmf(a,'input',2,'NB','zmf',[-3*f2,-1*f2])
a=addmf(a,'input',2,'NM','trimf',[-3*f2,-2*f2,0])
a=addmf(a,'input',2,'NS','trimf',[-3*f2,-1*f2,1*f2])
a=addmf(a,'input',2,'Z','trimf',[-2*f2,0,2*f2])
a=addmf(a,'input',2,'PS','trimf',[-1*f2,1*f2,3*f2])
a=addmf(a,'input',2,'PM','trimf',[0,2*f2,3*f2])
a=addmf(a,'input',2,'PB','smf',[1*f2,3*f2])
f3=1.5
a=addvar(a,'output','u',[-3*f3,3*f3])
a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3])
a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0])
a=addmf(a,'output',1,'NS','trimf',[-3*f3,-1*f3,1*f3])
a=addmf(a,'output',1,'Z','trimf',[-2*f3,0,2*f3])
a=addmf(a,'output',1,'PS','trimf',[-1*f3,1*f3,3*f3])
a=addmf(a,'output',1,'PM','坦链trimf',[0,2*f3,3*f3])
a=addmf(a,'毁睁output',1,'PB','smf',[1*f3,3*f3])
rulelist=[1 1 1 1 1
1 2 1 1 1
1 3 2 1 1
1 4 2 1 1
1 5 3 1 1
1 6 3 1 1
1 7 4 1 1
2 1 1 1 1
2 2 2 1 1
2 3 2 1 1
2 4 3 1 1
2 5 3 1 1
2 6 4 1 1
2 7 5 1 1
3 1 2 1 1
3 2 2 1 1
3 3 3 1 1
3 4 3 1 1
3 5 4 1 1
3 6 5 1 1
3 7 5 1 1
4 1 2 1 1
4 2 3 1 1
4 3 3 1 1
4 4 4 1 1
4 5 5 1 1
4 6 5 1 1
4 7 6 1 1
5 1 3 1 1
5 2 3 1 1
5 3 4 1 1
5 4 5 1 1
5 5 5 1 1
5 6 6 1 1
5 7 6 1 1
6 1 3 1 1
6 2 4 1 1
6 3 5 1 1
6 4 5 1 1
6 5 6 1 1
6 6 6 1 1
6 7 7 1 1
7 1 4 1 1
7 2 5 1 1
7 3 5 1 1
7 4 6 1 1
7 5 6 1 1
7 6 7 1 1
7 7 7 1 1]
a=addrule(a,rulelist)
a1=setfis(a,'DefuzzMethod','mom')%Defuzzy
writefis(a1,'fuzzf')
a2=readfis('fuzzf')
Ulist=zeros(7,7)
for i=1:7
for j=1:7
e(i)=-4+i
ec(j)=-4+j
Ulist(i,j)=evalfis([e(i),ec(j)],a2)
end
end
figure(1)
plotfis(a2)
figure(2)
plotmf(a,'input',1)
figure(3)
plotmf(a,'input',2)
figure(4)
plotmf(a,'output',1)
这里简单说明一下:首先是编写2个输入,1个输出的隶属度函数;接下来的是模糊规则,一共49条;然后用解模糊函数得出控制量U,这里输出的U就直接是精确量了,解模糊用到得规则是取隶属度最大的那个数即MOM算法。
显示的三个图形窗口分别是:模糊控制器内部原理图,以及2个输入,1个输出的隶属度函数图。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)