当前位置: 首页>后端>正文

自适应索引淘汰规则 自适应pi


模糊自适应整定PID控制

  • 一、实验要求
  • 二、实验过程
  • 2.1 条件
  • 2.2 实验流程
  • 2.3 总结
  • 代码


一、实验要求

被控对象:自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_控制系统,第1张
采样时间为1ms,位置指令为幅值为1.0的阶跃信号。设计模糊自适应PI控制器。

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_稳态误差_02,第2张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_算法_03,第3张

二、实验过程

2.1 条件

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_自适应索引淘汰规则_04,第4张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_算法_05,第5张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_自适应_06,第6张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_自适应_07,第7张

2.2 实验流程

因为采样时间为1ms,所以需要对被控对象进行离散化。位置指令为幅值为1.0的阶跃信号,所以输入为幅值为1.0的阶跃信号。仿真时,先运行模糊推理系统设计程序,实现模糊推理系统d=fuzzypid.fis,并将此模糊推理系统调入内存中,然后运行模糊控制程序。

根据自适应模糊PID的控制结构设计模糊控制器。

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_稳态误差_08,第8张

根据要求建立如下图所示的模糊控制系统:

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_控制系统_09,第9张

模糊控制系统的实现流程:

  1. 确定模糊控制器的结构
    控制器的输入为e(误差),ec(误差变化率)。控制器的输出为kp,ki。
  2. 定义输入、输出的模糊集
    ec定义为3个模糊集:N、Z、P;
    e定义为3个模糊集:N、Z、P;
    kp定义为3个模糊集:N、Z、P;
    ki定义为3个模糊集:N、Z、P;
  3. 定义隶属函数
    e和ec模糊集相同,采用相同的隶属函数。
  4. 建立模糊控制规则
  5. 建立模糊控制集
  6. 模糊推理
  7. 仿真实例

误差e的隶属度函数

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_算法_10,第10张


误差变化率ec的隶属度函数

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_稳态误差_11,第11张


控制器参数Kp的隶属度函数

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_稳态误差_12,第12张


控制器参数Ki的隶属度函数

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_自适应_13,第13张


模糊自适应PID的控制系统结构图

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_自适应_14,第14张


可视化模糊控制规则图 取kp=0,ki=0,控制效果较好,模糊自适应PID整定效果如下图所示::

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_稳态误差_15,第15张


阶跃响应曲线

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_自适应索引淘汰规则_16,第16张


控制器参数调整曲线

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_稳态误差_17,第17张


输入曲线 取kp=0,ki=-1,系统存在稳定误差,模糊自适应PID整定效果如下图所示:

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_算法_18,第18张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_稳态误差_19,第19张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_控制系统_20,第20张

取kp=10,ki=10,存在超调和震荡,模糊自适应PID整定效果如下图所示:

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_算法_21,第21张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_算法_22,第22张

自适应索引淘汰规则 自适应pi,自适应索引淘汰规则 自适应pi_控制系统_23,第23张

2.3 总结

比例系数Kp的作用是加快系统的响应速度,提高系统的调节精度,Kp加大,将使系统响应速度加快,Kp偏大时,系统振荡次数增多,调节时间加长;Kp太小又会使系统的响应速度缓慢。
积分系数Ti的作用是消除系统的稳态误差,Ti越大,系统的稳态误差消除越快,但是当Ti过大时,会引起响应过程的较大超调;若Ti过小,将使系统的稳态误差难以消除,影响系统的调节精度。

代码

模糊控制器生成代码,自然是用于生成模糊控制器。

clear all;
close all;
a = newfis('FuzzyAdaptivePID');
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]);
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]);
a = addvar(a,'output','kp',[-10/3,10/3]);
a = addmf(a,'output',1,'N','zmf',[-10/3,-1]);
a = addmf(a,'output',1,'Z','trimf',[-5/3,0,5/3]);
a = addmf(a,'output',1,'P','smf',[1,10/3]);
a = addvar(a,'output','ki',[-1/10,1/10]);
a = addmf(a,'output',2,'N','zmf',[-1/10,-1/30]);
a = addmf(a,'output',2,'Z','trimf',[-2/30,0,2/30]);
a = addmf(a,'output',2,'P','smf',[1/30,1/10]);
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 = addrule(a,rulelist);
a1=setfis(a,'DefuzzMethod','centroid');
writefis(a1,'FuzzyAdaptivePID');
a2=readfis('FuzzyAdaptivePID');
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);
fuzzy FuzzyAdaptivePID;%定义该模糊系统的名称。
ruleview FuzzyAdaptivePID;

PID整定过程代码,自然是用于整定PID。PS:需先运行上述代码生成模糊控制器,才能整定PID

clear all;
close all;
warning off;
a = readfis('FuzzyAdaptivePID');
ts = 0.001;
sys = tf(133,[1,25,0]);
dsys = c2d(sys,ts,'z');%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; % 设置初始的p
ki0 = -1;  % 设置初始的i
for k = 1:1:1000
    time(k) = k *ts;
    r(k) = 1;
    k_pid = evalfis([e_1,ec_1],a);%模糊化e_1,ec_1得到?kp,?ki
    kp(k) = kp0 + k_pid(1);%修正kp,计算kp
    ki(k) = ki0 + k_pid(2);%修正ki,计算ki
    u(k) = kp(k)*e_1 + ki(k)*ei;
    y(k) = -den(2)*y_1-den(3)*y_2+ num(2)*u_1 + num(3)* u_2;
    e(k) = r(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;
    e_1 = e(k);
    ec_1 = ec(k);
end
figure(1);
plot(time,r,'r',time,y,'b:','linewidth',2);
xlabel('time(s)');
ylabel('r,y');
legend('Ideal position','Practical position');
figure(2);
subplot(211);
plot(time,kp,'r','linewidth',2);
xlabel('time(s)');
ylabel('kp');
subplot(212);
plot(time,ki,'r','linewidth',2);
xlabel('time(s)');
ylabel('ki');
figure(3);
plot(time,u,'r','linewidth',2);
xlabel('time(s)');
ylabel('Control input');

PPS:如果复制到matlab中发现注释乱码,可以先复制到记事本中,再复制记事本中代码到matlab



https://www.xamrdz.com/backend/3vt1931255.html

相关文章: