模糊PID控制

1.建立模糊控制器 

%Fuzzy Tunning PID control
clear all
close all
a=newfis('fuzzpid')

%参数e
et=1/3
a=addvar(a,'input','e',et*[-3,3]);
a=addmf(a,'input',1,'NB','zmf',et*[-3,-2]);%‘zmf’,‘trimf’为对应的隶属函数
a=addmf(a,'input',1,'NM','trimf',et*[-3,-2,-1]);
a=addmf(a,'input',1,'NS','trimf',et*[-2,-1,0]);
a=addmf(a,'input',1,'ZO','trimf',et*[-1,0,1]);
a=addmf(a,'input',1,'PS','trimf',et*[0,1,2]);
a=addmf(a,'input',1,'PM','trimf',et*[1,2,3]);
a=addmf(a,'input',1,'PB','smf',et*[2,3]);

%参数ec
ect=4
a=addvar(a,'input','ec',ect*[-3,3]);
a=addmf(a,'input',2,'NB','zmf',ect*[-3,-2]);
a=addmf(a,'input',2,'NM','trimf',ect*[-3,-2,-1]);
a=addmf(a,'input',2,'NS','trimf',ect*[-2,-1,0]);
a=addmf(a,'input',2,'ZO','trimf',ect*[-1,0,1]);
a=addmf(a,'input',2,'PS','trimf',ect*[0,1,2]);
a=addmf(a,'input',2,'PM','trimf',ect*[1,2,3]);
a=addmf(a,'input',2,'PB','smf',ect*[2,3]);

%参数dkp
dp=5;
a=addvar(a,'output','dkp',dp*[-3,3]);
a=addmf(a,'output',1,'NB','zmf',dp*[-3,-2]);
a=addmf(a,'output',1,'NM','trimf',dp*[-3,-2,-1]);
a=addmf(a,'output',1,'NS','trimf',dp*[-2,-1,0]);
a=addmf(a,'output',1,'ZO','trimf',dp*[-1,0,1]);
a=addmf(a,'output',1,'PS','trimf',dp*[0,1,2]);
a=addmf(a,'output',1,'PM','trimf',dp*[1,2,3]);
a=addmf(a,'output',1,'PB','smf',dp*[2,3]);

%参数dkd
dd=1;
a=addvar(a,'output','dkd',dd*[-3,3]);
a=addmf(a,'output',2,'NB','zmf',dd*[-3,-2]);
a=addmf(a,'output',2,'NM','trimf',dd*[-3,-2,-1]);
a=addmf(a,'output',2,'NS','trimf',dd*[-2,-1,0]);
a=addmf(a,'output',2,'ZO','trimf',dd*[-1,0,1]);
a=addmf(a,'output',2,'PS','trimf',dd*[0,1,2]);
a=addmf(a,'output',2,'PM','trimf',dd*[1,2,3]);
a=addmf(a,'output',2,'PB','smf',dd*[2,3]);

% %参数dki
di=0.1;
a=addvar(a,'output','dki',di*[-3,3]);
a=addmf(a,'output',3,'NB','zmf',di*[-3,-2]);
a=addmf(a,'output',3,'NM','trimf',di*[-3,-2,-1]);
a=addmf(a,'output',3,'NS','trimf',di*[-2,-1,0]);
a=addmf(a,'output',3,'ZO','trimf',di*[-1,0,1]);
a=addmf(a,'output',3,'PS','trimf',di*[0,1,2]);
a=addmf(a,'output',3,'PM','trimf',di*[1,2,3]);
a=addmf(a,'output',3,'PB','smf',di*[2,3]);

% %规则2,对应表格中的规则2,对应文献中的规则作为参考
rulelist2=[
          %第一位表示e(输入1),第二位表示ec(输入2),
          %第三位表示输出dkp(输出1),第四位表示输出dkd(输出2),第5位表示dki(输出3)
          1,1,7,5,1,1,1;
          1,2,7,3,1,1,1;
          1,3,6,1,2,1,1;
          1,4,6,1,2,1,1;
          1,5,5,1,3,1,1;
          1,6,4,2,4,1,1;
          1,7,4,5,4,1,1;
          
          2,1,7,5,1,1,1;
          2,2,7,3,1,1,1;
          2,3,6,1,2,1,1;
          2,4,5,2,3,1,1;
          2,5,5,2,3,1,1;
          2,6,4,3,4,1,1;
          2,7,3,4,4,1,1;
          
          3,1,6,4,1,1,1;
          3,2,6,3,2,1,1;
          3,3,6,2,3,1,1;
          3,4,5,2,3,1,1;
          3,5,4,3,4,1,1;
          3,6,3,3,5,1,1;
          3,7,3,4,5,1,1;
          
          4,1,6,4,2,1,1;
          4,2,6,3,2,1,1;
          4,3,5,3,3,1,1;
          4,4,4,3,4,1,1;
          4,5,3,3,5,1,1;
          4,6,2,3,6,1,1;
          4,7,2,4,6,1,1;
          
          5,1,6,6,2,1,1;
          5,2,5,4,3,1,1;
          5,3,4,4,4,1,1;
          5,4,3,4,5,1,1;
          5,5,3,4,5,1,1;
          5,6,2,4,6,1,1;
          5,7,2,4,7,1,1;
          
          6,1,5,5,4,1,1;
          6,2,4,7,4,1,1;
          6,3,3,3,5,1,1;
          6,4,2,5,5,1,1;
          6,5,2,5,6,1,1;
          6,6,2,5,7,1,1;
          6,7,1,7,7,1,1;
          
          7,1,4,4,4,1,1;
          7,2,4,6,4,1,1;
          7,3,2,6,5,1,1;
          7,4,2,6,6,1,1;
          7,5,2,5,6,1,1;
          7,6,1,5,7,1,1;
          7,7,1,7,7,1,1;
         ];
     a=addrule(a,rulelist2);%对应规则2
     a=setfis(a,'DefuzzMethod','centroid');%重心法解模糊
     writefis(a,'cablefz');
     
     a=readfis('cablefz');

1)其中常用隶属度函数:

trimf(三角形) ,trapmf(梯形), gbellmf(钟形), gaussmf(高斯型),zmf(z型)

2)模糊PID对应的规则

2.模糊PID控制器的simulink程序

1).通过比例、积分、微分项作为PID的输入

2).通过误差e和误差导数ec作为模糊控制器的输入项,进行模糊运算,得到模糊输出,进行解模糊处理后得到输出deta_kp,deta_ki,deta_kd

3).将上述1)u ,2)kpid中的内容输入PID控制器

4)PID控制器:给定初始KP0,KI0,KD0; 

                          KP=KP0+deta_kp;

                          KD=KD0+deta_kd;

                          KI=KI0+deta_ki;

                          

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值