快捷搜索: 王者荣耀 脱发

对PID控制器三个参数的认识

P I D m PID PID控制器三个参数的认识

声明:本文代码思路参考了(B站ID:DR_CAN或知乎ID:小潘是个工程师),又或者自己在看二人的帖子或视频后,自己做了相应的改进。奈何时间有点长了,再次整理时实在无法回忆起细节,若有读者发现了代码的起源处,烦请告知,我会补上相应的引用链接。

本文尝试演示了 P m P P、 I m I I、 D m D D三个参数对控制器性能的影响,并给出了相应的实现代码。需要指出的是:在实际的控制系统中,依靠简单的控制变量法无法直接获取满意的控制器参数,一组最优控制器参数的获取并非易事。实际控制中,相较于 P I D m PID PID, P I m PI PI控制器可能更常见,这在一定程度上削弱了调参的难度。本文仅作为参考,帮助读者对PID控制器的三个参数产生一个感性的认识。蓝色虚线框中的内容不同造就了三段不同的演示代码。

P m P P对控制器性能的影响

MATLAB代码

clear
figure
Gs = tf(2,conv([3,1],[2,1]));           %Gs是传递函数,conv是可以理解为因式分解(3s+1)(2s+1)
Kp = [0.5,2,5,10];                      %取不同的比例系数,类似数组
for m = 1:4
    sys = feedback(Kp(m)*Gs,1);         %feedback(G,H),(G,H需事先设定)。
                                        %其中G是传递函数,H为反馈函数,表示一个控制系统G,对其进行负反馈H(要求正反馈用-H)。这里前面写上比例环节与系统的串联,后面的1表示负反馈
    step(sys);                          %求阶跃响应,可以用形如step(feedback(G,H))
    hold on;
end

%% 格式控制
lgd = legend({
          
   Kp=0.5,Kp=2,Kp=5,Kp=10},FontSize,10.5,FontName,Times New Roman);
set(gcf,unit,centimeters,position,[30 15 15 10]);%设置画布大小和位置
set(gca,FontName,Times New Roman,FontSize,10.5,FontWeight,bold ,XColor,[0 0 0] ,YColor,[0 0 0]);%坐标轴数字大小,坐标轴数字是灰色,故加color代码
xlabel(Time,FontName,Times New Roman,FontWeight,Bold,FontSize,10.5);
ylabel(Amplitude,FontName,Times New Roman,FontWeight,Bold,FontSize,10.5);
grid on
set(gca,gridlinestyle,:,Gridalpha,1)

代码效果

I m I I对控制器性能的影响

MATLAB代码

figure
clear
Gs = tf(2,conv([3,1],[2,1]));
Kp = 2;
Ti = [2,4,8,12];
for m = 1:4
G1 = tf([Kp,Kp/Ti(m)],[1,0]);              %这里也是(KpS+Kp/Ti)/s
sys = feedback(G1*Gs,1);
step(sys); 
hold on;
end

%% 格式控制
lgd = legend({
          
   Ti=2,Ti=4,Ti=8,Ti=12},FontSize,12,FontName,Times New Roman);
set(gcf,unit,centimeters,position,[30 15 15 9]);%设置画布大小和位置
set(gca,FontName,Times New Roman,FontSize,10.5,FontWeight,bold ,XColor,[0 0 0] ,YColor,[0 0 0]);%坐标轴数字大小,坐标轴数字是灰色,故加color代码
xlabel(Time,FontName,Times New Roman,FontWeight,Bold,FontSize,10.5);
ylabel(Amplitude,FontName,Times New Roman,FontWeight,Bold,FontSize,10.5);
grid on
set(gca,gridlinestyle,:,Gridalpha,1)

代码效果

D m D D对控制器性能的影响

MATLAB代码

figure
clear
Gs = tf(2,conv([3,1],[2,1]));
Kp = 10;
Td = [0,0.4,1,4];
for m = 1:4
G1 = tf([Kp*Td(m),Kp],[0,1]);            %这个地方要注意 (Kp*Td(m)*S+Kp)/1=Kp(1+TdS)
sys = feedback(G1*Gs,1);                 %前面是微分环节与系统的串联,负反馈
step(sys);
hold on;
end

%% 格式控制
lgd = legend({
          
   Td=0,Td=0.4,Td=1,Td=4},FontSize,10.5,FontName,Times New Roman);
set(gcf,unit,centimeters,position,[30 15 15 9]);%设置画布大小和位置
set(gca,FontName,Times New Roman,FontSize,10.5,FontWeight,bold ,XColor,[0 0 0] ,YColor,[0 0 0]);%坐标轴数字大小,坐标轴数字是灰色,故加color代码
xlabel(Time,FontName,Times New Roman,FontWeight,Bold,FontSize,10.5);
ylabel(Amplitude,FontName,Times New Roman,FontWeight,Bold,FontSize,10.5);
grid on
set(gca,gridlinestyle,:,Gridalpha,1)

代码效果

经验分享 程序员 微信小程序 职场和发展