MATLAB Program of Fuzzy Logic Controller
MATLAB Program of Fuzzy Logic Controller
end
%Rule 2
if (er>=3)&(er<=6)&(de>=-5)&(de<=-2)
w1=(er-3)/3;
w2=(de+5)/3;
w(2)=min([w1 w2]);
du(2)=4;
elseif (er>=3)&(er<=6)&(de>=-2)&(de<=1)
w1=(er-3)/3;
w2=-(de-1)/3;
w(2)=min([w1 w2]);
du(2)=4;
elseif (er>=6)&(de>=-5)&(de<=-2)
w(2)=(de+5)/3;
du(2)=4;
elseif (er>=6)&(de>=-2)&(de<=1)
w(2)=-(de-1)/3;
du(2)=4;
else
w(2)=0;
du(2)=0;
end
%Rule 3
if (er>=1)&(er<=4)&(de>=-6)&(de<=-4)
w1=(er-1)/3;
w2=(de+7)/3;
w(3)=min([w1 w2]);
du(3)=0;
elseif (er>=1)&(er<=4)&(de>=-4)&(de<=-1)
w1=(er-1)/3;
w2=-(de+1)/3;
w(3)=min([w1 w2]);
du(3)=0;
elseif (er>=4)&(er<=6)&(de>=-6)&(de<=-4)
w1=-(er-7)/3;
w2=(de+7)/3;
w(3)=min([w1 w2]);
du(3)=0;
elseif (er>=4)&(er<=6)&(de>=-4)&(de<=-1)
w1=-(er-7)/3;
w2=-(de+1)/3;
w(3)=min([w1 w2]);
du(3)=0;
else
w(3)=0;
du(3)=0;
end
%Rule 4
if (er>=-1)&(er<=2)&(de>=-6)&(de<=-4)
w1=(er+1)/3;
w2=(de+7)/3;
w(4)=min([w1 w2]);
du(4)=-2;
elseif (er>=-1)&(er<=2)&(de>=-4)&(de<=-1)
w1=(er+1)/3;
w2=-(de+1)/3;
w(4)=min([w1 w2]);
du(4)=-2;
elseif (er>=2)&(er<=5)&(de>=-6)&(de<=-4)
w1=-(er-5)/3;
w2=(de+7)/3;
w(4)=min([w1 w2]);
du(4)=0;
elseif (er>=2)&(er<=5)&(de>=-4)&(de<=-1)
w1=-(er-5)/3;
w2=-(de+1)/3;
w(4)=min([w1 w2]);
du(4)=-2;
else
w(4)=0;
du(4)=0;
end
%Rule 5
if (er>=-3)&(er<=0)&(de>=-6)&(de<=-4)
w1=(er+3)/3;
w2=(de+7)/3;
w(5)=min([w1 w2]);
du(5)=-4;
elseif (er>=-3)&(er<=0)&(de>=-4)&(de<=-1)
w1=(er+3)/3;
w2=-(de+1)/3;
w(5)=min([w1 w2]);
du(5)=-4;
elseif (er>=0)&(er<=3)&(de>=-6)&(de<=-4)
w1=-(er-3)/3;
w2=(de+7)/3;
w(5)=min([w1 w2]);
du(5)=-4;
elseif (er>=0)&(er<=3)&(de>=-4)&(de<=-1)
w1=-(er-3)/3;
w2=-(de+1)/3;
w(5)=min([w1 w2]);
du(5)=-4;
else
w(5)=0;
du(5)=0;
end
%Rule 6
if (er>=-5)&(er<=-2)&(de>=-5)&(de<=-2)
w1=(er+5)/3;
w2=(de+5)/3;
w(6)=min([w1 w2]);
du(6)=-4;
elseif (er>=-5)&(er<=-2)&(de>=-2)&(de<=1)
w1=(er+5)/3;
w2=-(de-1)/3;
w(6)=min([w1 w2]);
du(6)=-4;
elseif (er>=-2)&(er<=1)&(de>=-5)&(de<=-2)
w1=-(er-1)/3;
w2=(de+5)/3;
w(6)=min([w1 w2]);
du(6)=-4;
elseif (er>=-2)&(er<=1)&(de>=-2)&(de<=1)
w1=-(er-1)/3;
w2=-(de-1)/3;
w(6)=min([w1 w2]);
du(6)=-4;
else
w(6)=0;
du(6)=0;
end
%Rule 7
if (er>=-6)&(er<=-4)&(de>=-3)&(de<=0)
w1=(er+7)/3;
w2=(de+3)/3;
w(7)=min([w1 w2]);
du(7)=-4;
elseif (er>=-6)&(er<=-4)&(de>=0)&(de<=3)
w1=(er+7)/3;
w2=-(de-3)/3;
w(7)=min([w1 w2]);
du(7)=-4;
elseif (er>=-4)&(er<=-1)&(de>=-3)&(de<=0)
w1=-(er+1)/3;
w2=(de+3)/3;
w(7)=min([w1 w2]);
du(7)=-4;
elseif (er>=-4)&(er<=-1)&(de>=0)&(de<=3)
w1=-(er+1)/3;
w2=-(de-3)/3;
w(7)=min([w1 w2]);
du(7)=-4;
else
w(7)=0;
du(7)=0;
end
%Rule 8
if (er>=-5)&(er<=-2)&(de>=-1)&(de<=2)
w1=(er+5)/3;
w2=(de+1)/3;
w(8)=min([w1 w2]);
du(8)=0;
elseif (er>=-5)&(er<=-2)&(de>=2)&(de<=5)
w1=(er+5)/3;
w2=-(de-5)/3;
w(8)=min([w1 w2]);
du(8)=0;
elseif (er>=-2)&(er<=1)&(de>=-1)&(de<=2)
w1=-(er-1)/3;
w2=(de+1)/3;
w(8)=min([w1 w2]);
du(8)=0;
elseif (er>=-2)&(er<=1)&(de>=2)&(de<=5)
w1=-(er-1)/3;
w2=-(de-5)/3;
w(8)=min([w1 w2]);
du(8)=0;
else
w(8)=0;
du(8)=0;
end
%Rule 9
if (er>=-3)&(er<=0)&(de>=-3)&(de<=0)
w1=(er+3)/3;
w2=(de+3)/3;
w(9)=min([w1 w2]);
du(9)=0;
elseif (er>=-3)&(er<=0)&(de>=0)&(de<=3)
w1=(er+3)/3;
w2=-(de-3)/3;
w(9)=min([w1 w2]);
du(9)=0;
elseif (er>=0)&(er<=3)&(de>=-3)&(de<=0)
w1=-(er-3)/3;
w2=(de+3)/3;
w(9)=min([w1 w2]);
du(9)=0;
elseif (er>=0)&(er<=3)&(de>=0)&(de<=3)
w1=-(er-3)/3;
w2=-(de-3)/3;
w(9)=min([w1 w2]);
du(9)=0;
else
w(9)=0;
du(9)=0;
end
%Rule 10
if (er>=3)&(er<=6)&(de>=-6)&(de<=-4)
w1=(er-3)/3;
w2=(de+7)/3;
w(10)=min([w1 w2]);
du(10)=2;
elseif (er>=3)&(er<=6)&(de>=-4)&(de<=-1)
w1=(er-3)/3;
w2=-(de+1)/3;
w(10)=min([w1 w2]);
du(10)=2;
elseif (er>=6)&(de>=-6)&(de<=-4)
w(10)=(de+7)/3;
du(10)=2;
elseif (er>=6)&(de>=-4)&(de<=-1)
w(10)=-(de+1)/3;
du(10)=2;
else
w(10)=0;
du(10)=0;
end
%Rule 11
if (er>=3)&(er<=6)&(de<=-6)
w(11)=-(er-3)/3;
du(11)=0;
elseif (er>=3)&(er<=6)&(de>=-6)&(de<=-3)
w1=(er-3)/3;
w2=-(de+3)/3;
w(11)=min([w1 w2]);
du(11)=0;
elseif (er>=6)&(de<=-6)
w(11)=1;
du(11)=0;
elseif (er>=6)&(de>=-6)&(de<=-3)
w(11)=-(de+3)/3;
du(11)=0;
else
w(11)=0;
du(11)=0;
end
%Rule 12
if (er>=1)&(er<=4)&(de<=-6)
w(12)=(er-1)/3;
du(12)=-2;
elseif (er>=1)&(er<=4)&(de>=-6)&(de<=-3)
w1=(er-1)/3;
w2=-(de+3)/3;
w(12)=min([w1 w2]);
du(12)=-2;
elseif (er>=4)&(er<=6)&(de<=-6)
w(12)=-(er-7)/3;
du(12)=-2;
elseif (er>=4)&(er<=6)&(de>=-6)&(de<=-3)
w1=-(er-7)/3;
w2=-(de+3)/3;
w(12)=min([w1 w2]);
du(12)=-2;
else
w(12)=0;
du(12)=0;
end
%Rule 13
if (er>=-1)&(er<=2)&(de<=-6)
w(13)=(er+1)/3;
du(13)=-4;
elseif (er>=-1)&(er<=2)&(de>=-6)&(de<=-3)
w1=(er+1)/3;
w2=-(de+3)/3;
w(13)=min([w1 w2]);
du(13)=-4;
elseif (er>=2)&(er<=5)&(de<=-6)
w(13)=-(er-5)/3;
du(13)=-4;
elseif (er>=2)&(er<=5)&(de>=-6)&(de<=-3)
w1=-(er-5)/3;
w2=-(de+3)/3;
w(13)=min([w1 w2]);
du(13)=-4;
else
w(13)=0;
du(13)=0;
end
%Rule 14
if (er>=-3)&(er<=0)&(de<=-6)
w(14)=(er+3)/3;
du(14)=-6;
elseif (er>=-3)&(er<=0)&(de>=-6)&(de<=-3)
w1=(er+3)/3;
w2=-(de+3)/3;
w(14)=min([w1 w2]);
du(14)=-6;
elseif (er>=0)&(er<=3)&(de<=-6)
w(14)=-(er-3)/3;
du(14)=-6;
elseif (er>=0)&(er<=3)&(de>=-6)&(de<=-3)
w1=-(er-3)/3;
w2=-(de+3)/3;
w(14)=min([w1 w2]);
du(14)=-6;
else
w(14)=0;
du(14)=0;
end
%Rule 15
if (er>=-5)&(er<=-2)&(de<=-6)
w(15)=(er+5)/3;
du(15)=-6;
elseif (er>=-5)&(er<=-2)&(de>=-6)&(de<=-3)
w1=(er+5)/3;
w2=-(de+3)/3;
w(15)=min([w1 w2]);
du(15)=-6;
elseif (er>=-2)&(er<=1)&(de<=-6)
w(15)=-(er-1)/3;
du(15)=-6;
elseif (er>=-2)&(er<=1)&(de>=-6)&(de<=-3)
w1=-(er-1)/3;
w2=-(de+3)/3;
w(15)=min([w1 w2]);
du(15)=-6;
else
w(15)=0;
du(15)=0;
end
%Rule 16
if (er>=-6)&(er<=-4)&(de>=-6)&(de<=-4)
w1=(er+7)/3;
w2=(de+7)/3;
w(16)=min([w1 w2]);
du(16)=-6;
elseif (er>=-6)&(er<=-4)&(de>=-4)&(de<=-1)
w1=(er+7)/3;
w2=-(de+1)/3;
w(16)=min([w1 w2]);
du(16)=-6;
elseif (er>=-4)&(er<=-1)&(de>=-6)&(de<=-4)
w1=-(er+1)/3;
w2=(de+7)/3;
w(16)=min([w1 w2]);
du(16)=-6;
elseif (er>=-4)&(er<=-1)&(de>=-4)&(de<=-1)
w1=-(er+1)/3;
w2=-(de+1)/3;
w(16)=min([w1 w2]);
du(16)=-6;
else
w(16)=0;
du(16)=0;
end
%Rule 17
if (er<=-6)&(de>=-5)&(de<=-2)
w(17)=(de+5)/3;
du(17)=-6;
elseif (er<=-6)&(de>=-2)&(de<=1)
w(17)=-(de-1)/3;
du(17)=-6;
elseif (er>=-6)&(er<=-3)&(de>=-5)&(de<=-2)
w1=-(er+3)/3;
w2=(de+5)/3;
w(17)=min([w1 w2]);
du(17)=-6;
elseif (er>=-6)&(er<=-3)&(de>=-2)&(de<=1)
w1=-(er+3)/3;
w2=-(de-1)/3;
w(17)=min([w1 w2]);
du(17)=-6;
else
w(17)=0;
du(17)=0;
end
%Rule 18
if (er<=-6)&(de>=-3)&(de<=0)
w(18)=(de+3)/3;
du(18)=-6;
elseif (er<=-6)&(de>=0)&(de<=3)
w(18)=-(de-3)/3;
du(18)=-6;
elseif (er>=-6)&(er<=-3)&(de>=-3)&(de<=0)
w1=-(er+3)/3;
w2=(de+3)/3;
w(18)=min([w1 w2]);
du(18)=-6;
elseif (er>=-6)&(er<=-3)&(de>=0)&(de<=3)
w1=-(er+3)/3;
w2=-(de-3)/3;
w(18)=min([w1 w2]);
du(18)=-6;
else
w(18)=0;
du(18)=0;
end
%Rule 19
if (er>=-6)&(er<=-4)&(de>=-1)&(de<=2)
w1=(er+7)/3;
w2=(de+1)/3;
w(19)=min([w1 w2]);
du(19)=-2;
elseif (er>=-6)&(er<=-4)&(de>=2)&(de<=5)
w1=(er+7)/3;
w2=-(de-5)/3;
w(19)=min([w1 w2]);
du(19)=-2;
elseif (er>=-4)&(er<=-1)&(de>=-1)&(de<=2)
w1=-(er+3)/3;
w2=(de+1)/3;
w(19)=min([w1 w2]);
du(19)=-2;
elseif (er>=-4)&(er<=-1)&(de>=2)&(de<=5)
w1=-(er+1)/3;
w2=-(de-5)/3;
w(19)=min([w1 w2]);
du(19)=-1;
else
w(19)=0;
du(19)=0;
end
%Rule 20
if (er>=-5)&(er<=-2)&(de>=1)&(de<=4)
w1=(er+5)/3;
w2=(de-1)/3;
w(20)=min([w1 w2]);
du(20)=2;
elseif (er>=-5)&(er<=-2)&(de>=4)&(de<=6)
w1=(er+5)/3;
w2=-(de-7)/3;
w(20)=min([w1 w2]);
du(20)=2;
elseif (er>=-2)&(er<=1)&(de>=1)&(de<=4)
w1=-(er-1)/3;
w2=(de-1)/3;
w(20)=min([w1 w2]);
du(20)=2;
elseif (er>=-2)&(er<=1)&(de>=4)&(de<=6)
w1=-(er-1)/3;
w2=-(de-7)/3;
w(20)=min([w1 w2]);
du(20)=2;
else
w(20)=0;
du(20)=0;
end
%Rule 21
if (er>=-3)&(er<=0)&(de>=-1)&(de<=2)
w1=(er+3)/3;
w2=(de+1)/3;
w(21)=min([w1 w2]);
du(21)=2;
elseif (er>=-3)&(er<=0)&(de>=2)&(de<=5)
w1=(er+3)/3;
w2=-(de-5)/3;
w(21)=min([w1 w2]);
du(21)=2;
elseif (er>=0)&(er<=3)&(de>=-1)&(de<=2)
w1=-(er-3)/3;
w2=(de+1)/3;
w(21)=min([w1 w2]);
du(21)=2;
elseif (er>=0)&(er<=3)&(de>=2)&(de<=5)
w1=-(er-3)/3;
w2=-(de-5)/3;
w(21)=min([w1 w2]);
du(21)=2;
else
w(21)=0;
du(21)=0;
end
%Rule 22
if (er>=-1)&(er<=2)&(de>=-3)&(de<=0)
w1=(er+1)/3;
w2=(de+3)/3;
w(22)=min([w1 w2]);
du(22)=2;
elseif (er>=-1)&(er<=2)&(de>=0)&(de<=3)
w1=(er+1)/3;
w2=-(de-3)/3;
w(22)=min([w1 w2]);
du(22)=2;
elseif (er>=2)&(er<=5)&(de>=-3)&(de<=0)
w1=-(er-5)/3;
w2=(de+3)/3;
w(22)=min([w1 w2]);
du(22)=2;
elseif (er>=2)&(er<=5)&(de>=0)&(de<=3)
w1=-(er-5)/3;
w2=-(de-3)/3;
w(22)=min([w1 w2]);
du(22)=2;
else
w(22)=0;
du(22)=0;
end
%Rule 23
if (er>=-1)&(er<=2)&(de>=-5)&(de<=-2)
w1=(er+1)/3;
w2=(de+5)/3;
w(23)=min([w1 w2]);
du(23)=0;
elseif (er>=-1)&(er<=2)&(de>=-2)&(de<=1)
w1=(er+1)/3;
w2=-(de-1)/3;
w(23)=min([w1 w2]);
du(23)=0;
elseif (er>=2)&(er<=5)&(de>=-5)&(de<=-2)
w1=-(er-5)/3;
w2=(de+5)/3;
w(23)=min([w1 w2]);
du(23)=0;
elseif (er>=2)&(er<=5)&(de>=-2)&(de<=1)
w1=-(er-5)/3;
w2=-(de-1)/3;
w(23)=min([w1 w2]);
du(23)=0;
else
w(23)=0;
du(23)=0;
end
%Rule 24
if (er>=-5)&(er<=-2)&(de>=-3)&(de<=0)
w1=(er+5)/3;
w2=(de+3)/3;
w(24)=min([w1 w2]);
du(24)=-2;
elseif (er>=-5)&(er<=-2)&(de>=0)&(de<=3)
w1=(er+5)/3;
w2=-(de-3)/3;
w(24)=min([w1 w2]);
du(24)=-2;
elseif (er>=-2)&(er<=1)&(de>=-3)&(de<=0)
w1=-(er-1)/3;
w2=(de+3)/3;
w(24)=min([w1 w2]);
du(24)=-2;
elseif (er>=-2)&(er<=1)&(de>=0)&(de<=3)
w1=-(er-1)/3;
w2=-(de-3)/3;
w(24)=min([w1 w2]);
du(24)=-2;
else
w(24)=0;
du(24)=0;
end
% Defuzzification
a=sum(w);
if a==0
Deltau=0;
else
Deltau = ( w*du')/(sum(w));
end
% The applied Control signal
u(k)=u(k-1)+Kout*Deltau;
end
subplot(211),plot(t,yref,t,y)
title('System and reference response')
subplot(212),plot(t,u),xlabel('Time(s)')
title('Control signal')