自适应PID参数调整动图及调整过程,真实可用的matlab代码
PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。
顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法。
该控制算法出现于20世纪30至40年代,适用于对被控对象模型了解不清楚的场合。实际运行的经验和理论的分析都表明,运用这种控制规律对许多工业过程进行控制时,都能得到比较满意的效果。
PID控制的实质就是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出。
PID有串级PID和并级PID之分,也有模拟式PID和数字式PID。
在实际应用过程中,一定要有P项,可以没有I或者D项。积分环节的作用主要用于消除静差,微分环节的作用能反映偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。
下面是一个PID控制结构图
大伙记得点个赞啊,支持一下作者,才能出更多精品文章。
clc
close all
clear all
p=0:8/1000:8; %比例系数Kp从0到8.5
d=0:1/1000:1; %微分系数Kd从0到1
i=0:1/1000:1;
n=length(p);
p1=3.5*ones(n,1);
p2=8.5:-5/1000:3.5;
i1=0.76*ones(n,1);
a = zeros(n,1);
PID=[p',a,a; p2',a,a; p1,i',a; p1,i1,d']; %初始化PID参数
grid on
for pid=1:1:4*n
ts=0.005; %采样时间=0.005s
sys=tf(0.998,[0.021,1]); %建立被控对象传递函数
dsys=c2d(sys,ts,'z'); %离散化
[num,den]=tfdata(dsys,'v');
e_1=0; %前一时刻的偏差
Ee=0; %累积偏差
u_1=0.0; %前一时刻的控制量
y_1=0; %前一时刻的输出
%PID参数
kp=PID(pid,1);
ki=PID(pid,2);
kd=PID(pid,3);
u=zeros(1,5000);
time=zeros(1,5000);
for k=1:1:5000
time(k)=k*ts; %时间参数
r(k)=1500; %给定量
y(k)=-1*den(2)*y_1+num(2)*u_1+num(1)*u(k);
e(k)=r(k)-y(k); %偏差
u(k)=kp*e(k)+ki*Ee+kd*(e(k)-e_1);
Ee=Ee+e(k);
u_1=u(k);
y_1=y(k);
e_1=e(k);
end
p1=plot(time,r,time,y);xlim([0,0.25]);ylim([0,2200])
title(['Kp=',num2str(kp),' Ki=',num2str(ki),' Kd= ',num2str(kd)]);
drawnow
pause(0.00001);
end
xlabel('时间t/s');
ylabel('输出量');
legend('r(t)给定值','y(t)输出函数');