概述
基于MATLAB的模糊pi控制器的设计
% 模糊规则隶属函数的建立
a=newfis(‘fuzzypid’);
% 添加第一个输入变量e
a=addvar(a,‘input’,‘e’,[-1,1]);
a=addmf(a,‘input’,1,‘N’,‘zmf’,[-1,-1/3]);
a=addmf(a,‘input’,1,‘Z’,‘trimf’,[-2/3,0,2/3]);
a=addmf(a,‘input’,1,‘P’,‘smf’,[1/3,1]);
% 添加第二个输入变量ec
a=addvar(a,‘input’,‘ec’,[-1,1]);
a=addmf(a,‘input’,2,‘N’,‘zmf’,[-1,-1/3]);
a=addmf(a,‘input’,2,‘Z’,‘trimf’,[-2/3,0,2/3]);
a=addmf(a,‘input’,2,‘P’,‘smf’,[1/3,1]);
% 添加第一个输出变量kp
a=addvar(a,‘output’,‘kp’,1/3*[-10,10]);
a=addmf(a,‘output’,1,‘N’,‘zmf’,1/3*[-10,-3]);
a=addmf(a,‘output’,1,‘Z’,‘trimf’,1/3*[-5,0,5]);
a=addmf(a,‘output’,1,‘P’,‘smf’,1/3*[3,10]);
% 添加第二个输出变量ki
a=addvar(a,‘output’,‘ki’,1/30*[-3,3]);
a=addmf(a,‘output’,2,‘N’,‘zmf’,1/30*[-3,-1]);
a=addmf(a,‘output’,2,‘Z’,‘trimf’,1/30*[-2,0,2]);
a=addmf(a,‘output’,2,‘P’,‘smf’,1/30*[1,3]);
% 添加模糊规则
rulelist=[
1 1 1 2 1 1;
1 2 1 2 1 1;
1 3 1 2 1 1;
2 1 1 3 1 1;
2 2 3 3 1 1;
2 3 3 3 1 1;
3 1 3 2 1 1;
3 2 3 2 1 1;
3 3 3 2 1 1
];
% 将模糊规则加入到a中
a=addrule(a,rulelist);
% 解模糊
a=setfis(a,‘defuzzmethod’,‘centroid’);
% 保存到系统磁盘中
writefis(a,‘fuzzypid’);
% 读取模糊推理系统
a=readfis(‘fuzzypid’);
% 作图
figure(1);
plotmf(a,‘input’,1);
figure(2);
plotmf(a,‘input’,2);
figure(3);
plotmf(a,‘output’,1);
figure(4);
plotmf(a,‘output’,2);
figure(5);
plotfis(a);
showrule(a)
ruleview fuzzypid;
% 模糊pid主控程序
% 加载模糊规则
a=readfis(‘fuzzypid’);
% 建立控制对象的模型
ts=0.001; %设定步长
sys=tf(133,[1,25,0]); %将连续型传递函数通过z变换为离散型
dsys=c2d(sys,ts,‘z’); %离散化
[num,den]=tfdata(dsys,‘v’); %获得离散建模的分子分母
% 设定系统相关参数的初值
u_1=0;u_2=0;
y_1=0;y_2=0;
e_1=0;ec_1=0;ei=0;
kp0=0;ki0=0;
for k=1:1:1000
time(k)=k*ts; %设定步数
rin(k)=1;
k_pid=evalfis([e_1,ec_1],a);
%离散化后提取分子、分母
kp(k)=kp0+k_pid(1);
ki(k)=ki0+k_pid(2);
u(k)=kp(k)*e_1+ki(k)*ei;
yk=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
e(k)=rin(k)-y(k);
u_2=u_1;
u_1=u(k);
y_2=y_1;
y_1=y(k);
ei=ei+e(k)*ts;
ec(k)=(e(k)-e_1)/ts;
e_1=e(k);
ec_1=ec(k);
end
figure(1);
plot(time,rin,‘r’,time,y,‘b’,‘linewidth’,1);
xlabel(‘time(s)’);
ylabel(‘yd,y’);
legend(‘ideal position’,‘position tracking’);
figure(2);
plot(time,kp,‘r’,‘linewidth’,1);
xlabel(‘time(s)’);
ylabel(‘kp’);
figure(3);
plot(time,ki,‘k’,‘linewidth’,1);
xlabel(‘time(s)’);
ylabel(‘ki’);
figure(4);
plot(time,u,‘r’,‘linewidth’,1);
xlabel(‘time(s)’);
ylabel(‘control input’);
结果显示:
最后
以上就是寂寞鼠标为你收集整理的基于MATLAB的模糊pi控制器的设计的全部内容,希望文章能够帮你解决基于MATLAB的模糊pi控制器的设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复