模糊自适应整定PID控制

一、实验要求

被控对象: G p ( s ) = 133 s 2 + 25 s G_p(s)=\frac{133}{ s^2+25s } Gp(s)=s2+25s133
采样时间为1ms,位置指令为幅值为1.0的阶跃信号。设计模糊自适应PI控制器。

模糊器结构
PID离散化公式

二、实验过程

2.1 条件

模糊规则表
暂无
隶属度函数隶属度函数

2.2 实验流程

因为采样时间为1ms,所以需要对被控对象进行离散化。位置指令为幅值为1.0的阶跃信号,所以输入为幅值为1.0的阶跃信号。仿真时,先运行模糊推理系统设计程序,实现模糊推理系统d=fuzzypid.fis,并将此模糊推理系统调入内存中,然后运行模糊控制程序。
根据自适应模糊PID的控制结构设计模糊控制器。
模糊控制器工作流程图
根据要求建立如下图所示的模糊控制系统:
模糊控制系统
模糊控制系统的实现流程:

  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的隶属度函数

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

阶跃响应曲线

在这里插入图片描述

控制器参数调整曲线

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值