专家PID的控制算法-MATLAB实现

专家PID的控制算法-MATLAB实现

PID控制,实际应用中多是PI控制和PD控制,就是根据系统的误差,利用比例,积分和微分计算出控制量进行控制的。PID专家控制的实质,是基于受控对象和控制规律的各种知识,利用专家经验设计一些规则并结合的PID参数进行控制,无需知道被控对象的精确模型。

控制对象设置

采用专家控制对一个3阶的传递函数进行控制,Gp(s)=523500/(sss+87.35ss+10470s),其中,对象的采样时间为1ms,即控制周期时间设置为1ms。现需要先进行离散化,然后在结合专家PID控制规则进行控制实现。

简单专家思想及规则

根据误差的变化范围不同,改变控制器输出,进而设计专家PID控制规则,实现专家PID控制。

专家PID控制MATLAB程序如下

%%
%%专家PID控制
clc
clear all; %删除workspace变量
close all; %关掉显示图形窗口

ts = 0.001; %采样时间
sys = tf(5.235e005,[1,87.35,1.047e004,0]); %传递函数
dsys = c2d(sys,ts,‘z’); %连续模型离散化
[num,den] = tfdata(dsys,‘v’); %获得分子分母

u_1=0;u_2=0;u_3=0;
y_1=0;y_2=0;y_3=0;

x = [0,0,0]’;
x2_1 = 0;
%比例积分微分参数
kp = 0.6;
ki = 0.03;
kd =0.01;

error_1 = 0;
for k = 1:1:500; %运行时间0.5s
time(k)=k*ts;

r(k) = 1.0; %第k次控制器输出
u(k) = kpx(1) +kdx(2) + ki*x(3);

%控制误差输出的绝对值,避免超调
if abs(x(1))>0.8
u(k) = 0.45;
elseif abs(x(1))>0.4
u(k) = 0.40;
elseif abs(x(1))>0.2
u(k) = 0.12;
elseif abs(x(1))>0.01
u(k) = 0.10;
end
%规则2:误差为某一参数,未发生变化
if x(1)x(2)>0 | (x(2)==0)
if abs(x(1))>=0.05;
u(k)=u_1+ 2
kpx(1);
else
u(k)=u_1+ 0.4
kpx(1);
end
end
%规则3: 误差的绝对值朝小的方向变化
if (x(1)x(2)<0 & x(2)x2_1>0)|(x(1)==0)
u(k)=u(k);
end
%误差处于极值状态
if x(1)x(2)<0 & x(2)x2_1<0
if abs(x(1))>=0.05;
u(k)=u_1+2
kp
error_1;
else
u(k)=u_1+0.6
kp
error_1;
end
end
%误差的绝对值很小
if abs(x(1))<=0.001 %Pi控制
u(k)=0.5
x(1)+0.01*x(3);
end
if u(k)<=-10
u(k)=-10;
end
if u(k)>=10
u(k)=10;
end

%线性变换 Z变换
y(k) = -den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;
error(k) = r(k) - y(k);

%Return of parameter
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=y(k);

x(1)=error(k); %计算P
x2_1=x(2);
x(2)=(error(k)-error_1)/ts; %计算D
x(3)= x(3)+error(k)*ts; %计算 I

error_1=error(k);
end

figure(1);
plot(time,r,‘b’,time,y,‘r’);
xlabel(‘time(s)’);ylabel(‘r,y’);
grid on
title(‘PID控制阶跃响应曲线’)
figure(2);
plot(time,r-y,‘r’);
xlabel(‘times(s)’);ylabel(‘error’);
grid on
title(‘误差响应曲线’)

输出结果

专家PID的控制算法-MATLAB实现
专家PID的控制算法-MATLAB实现
专家PID的优势之一,是在于系统收敛速度较快,能够较快的逼近控制系统,使得系统区域稳定状态。

写在最后

希望能帮到大家,可能存在漏洞,敬请批评指正。本文仅供新手学习交流与讨论使用,不用于任何商业用途,谢谢阅读。