实例:模糊PID控制系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

被控对象:

Ts = 0.1;

Plant = c2d(zpk([],[-1 -3 -5],1),Ts); %零极点模型,并离散化

根据对象Plant,确定PID参数:

C0 = pid(1,1,1,'Ts',Ts,'IF','B','DF','B'); % 定义PID结构

C = pidtune(Plant,C0) %对PID参数进行优化[Kp, Ki, Kd] = piddata(C); % 输出参数

得出PID结构及其参数值:

接下来根据求出的PID参数确定GCE、GE 、GCU 和GU的取值:由模糊PID控制结构可得如下等式:

Kp = GCU * GCE + GU * GE

Ki = GCU * GE

Kd = GU * GCE

形式转换如下:

GE = 10; %根据模糊控制的论语直接确定GCE = GE*(Kp-sqrt(Kp^2-4*Ki*Kd))/2/Ki=3.4285; GCU = Ki/GE=2.8631;

GU = Kd/GCE=2.0138;

模糊PID控制系统结构(连续模糊控制器):

模糊控制器输入输出结构:

模糊控制器输入输出隶属度函数:

模糊控制器规则表:

模糊控制器规则曲面图:

连续模糊PID控制器,仿真结果:

模糊PID控制系统结构(离散模糊控制器):

离散模糊控制器查询表:

离散模糊PID控制器,仿真结果:

主要代码如下:

(1)、对象模型:

Ts = 0.1;

Plant = c2d(zpk([],[-1 -3 -5],1),Ts);

(2)、PID参数优化:

C0 = pid(1,1,1,'Ts',Ts,'IF','B','DF','B');

C = pidtune(Plant,C0)

[Kp, Ki, Kd] = piddata(C);

(3)、比例因子确定:

GE = 10;

GCE = GE*(Kp-sqrt(Kp^2-4*Ki*Kd))/2/Ki;

GCU = Ki/GE;

GU = Kd/GCE;

(4)、连续模糊PID控制建立:

FIS = newfis('FIS','sugeno');

%%

% 定义输入E:

FIS = addvar(FIS,'input','E',[-10 10]);

FIS = addmf(FIS,'input',1,'Negative','gaussmf',[7 -10]);

FIS = addmf(FIS,'input',1,'Positive','gaussmf',[7 10]); %%

% 定义输入CE:

FIS = addvar(FIS,'input','CE',[-10 10]);

FIS = addmf(FIS,'input',2,'Negative','gaussmf',[7 -10]); FIS = addmf(FIS,'input',2,'Positive','gaussmf',[7 10]); %%

% 定义输出u:

FIS = addvar(FIS,'output','u',[-20 20]);

FIS = addmf(FIS,'output',1,'Min','constant',-20);

FIS = addmf(FIS,'output',1,'Zero','constant',0);

FIS = addmf(FIS,'output',1,'Max','constant',20);

% 定义规则:

%

% # If |E| is Negative and |CE| is Negative then |u| is -20 % # If |E| is Negative and |CE| is Positive then |u| is 0

% # If |E| is Positive and |CE| is Negative then |u| is 0

% # If |E| is Positive and |CE| is Positive then |u| is 20 ruleList = [1 1 1 1 1;... % Rule 1

1 2 2 1 1;... % Rule 2

2 1 2 1 1;... % Rule 3

2 2

3 1 1]; % Rule 4

FIS = addrule(FIS,ruleList);

gensurf(FIS) %生成模糊控制器

(5)、离散模糊控制器查询表:

Step = 2;

E = -10:Step:10;

CE = -10:Step:10;

N = length(E);

LookUpTableData = zeros(N);

for i=1:N

for j=1:N

% compute output u for each combination of break points LookUpTableData(i,j) = evalfis([E(i) CE(j)],FIS);

end

end

更多资料请访问:

徐文力新浪博客

/mybigdata

相关文档
最新文档