一实验要求:学习PID控制器的基本原理,掌握PID参数的物理调节规律,通过仿真验证PID调节过程。选择例题中的任意两个实验进行仿真研究,改变参数后观察系统的动态性能和稳态性能的变化,确认是否和理论分析一致。 二实验内容实验一:选择chap-9.m作为pid调节。 1代码: %PID Controller with changing integration rate
clear all;
close all;
%Big time delay Plant
ts=20;
sys=tf([1],[60,1],'inputdelay',80);
dsys=c2d(sys,ts,'zoh');
[num,den]=tfdata(dsys,'v');
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
error_1=0;error_2=0;
ei=0;
for k=1:1:200
time(k)=k*ts;
rin(k)=1.0; %Step Signal
%Linear model
yout(k)=-den(2)*y_1+num(2)*u_5;
error(k)=rin(k)-yout(k);
kp=0.45;kd=12;ki=0.0048;
A=0.4;B=0.6;
%T type integration
ei=ei+(error(k)+error_1)/2*ts;
M=1;
if M==1 %Changing integration rate
if abs(error(k))<=B
f(k)=1;
elseif abs(error(k))>B&abs(error(k))<=A+B
f(k)=(A-abs(error(k))+B)/A;
else
f(k)=0;
end
elseif M==2 %Not changing integration rate
f(k)=1;
end
u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*f(k)*ei;
if u(k)>=10
u(k)=10;
end
if u(k)<=-10
u(k)=-10;
end
%Return of PID parameters
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
error_2=error_1;
error_1=error(k);
end
figure(1);
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
figure(2);
plot(time,f,'r');
xlabel('time(s)');ylabel('Integration rate f');
2实验结果 在没有更改代码的情况下,实验的效果如图一所示。
 图一
改变kp(1)增大kp,理论上可以看到pid调节的更快更陡。实际效果如图2。Kp=3.  图2 实际上产生了自激震荡,说明kp不能调的过大,否则系统会不稳定。 (2)减小kp,理论上系统调节缓慢,会产生超调量,调节曲线不平滑,有毛刺。Kp=0.1 图3 实际上也证明比例系数太小,系统变化时调节相对缓慢。 改变kd(1)增大kd,理论上系统稳定时波动很大,精度不高,且有很多毛刺与抖动。Kd=30. 图4 实际上系统开始调节时会有些尖峰,调节曲线不平滑。 (2)减小kd,理论上系统调节稳定时变化缓慢,会有些超调量。Kd=3. 图5 实际上也可以看出减小kd对系统影响不大,只是在系统刚进入稳定状态时有一个小小的超调量。 改变ki(1)增大ki,积分变大,系统系统变得不稳定,抖动波动很厉害。 图6 实际上可以其变化幅度大,超调量很高,系统很不稳定。 (2)减小ki,系统调节变慢,系统可能无法调节。 图7 系统无法达到设定的稳态值,无法调节。 实验二:选择char2_1.m作为实验 1代码: %Series System Control
clear all;
close all;
ts=2;
sys1=tf(1,[10,1]);
dsys1=c2d(sys1,ts,'z');
[num1,den1]=tfdata(dsys1,'v');
sys2=tf(1,[10,1]);
dsys2=c2d(sys2,ts,'z');
[num2,den2]=tfdata(dsys2,'v');
dph=1/zpk('z',ts);
Gc2=dph/(dsys2*(1-dph));
[nump,denp]=tfdata(Gc2,'v');
u1_1=0.0;u2_1=0.0;
y1_1=0;y2_1=0;
e2_1=0;ei=0;
for k=1:1:2000
time(k)=k*ts;
r1(k)=1;
%Linear model
y1(k)=-den1(2)*y1_1+num1(2)*y2_1; %Main plant
y2(k)=-den2(2)*y2_1+num2(2)*u2_1; %Assistant plant
error(k)=r1(k)-y1(k);
ei=ei+error(k);
u1(k)=1.2*error(k)+0.02*ei; %Main Controller
e2(k)=u1(k)-y2(k); %Assistant Controller
u2(k)=-denp(2)*u2_1+nump(1)*e2(k)+nump(2)*e2_1;
d2(k)=0.01*rands(1);
u2(k)=u2(k)+d2(k);
%----------Return of PID parameters------------
u1_1=u1(k);
u2_1=u2(k);
e2_1=e2(k);
y1_1=y1(k);
y2_1=y2(k);
end
figure(1); %Assistant Control
plot(time,u1,'b',time,y2,'r');
xlabel('time(s)');ylabel('u1,y2');
figure(2); %Main Control
plot(time,r1,'b',time,y1,'r');
xlabel('time(s)');ylabel('r1,y1');
figure(3);
plot(time,d2,'r');
xlabel('time(s)');ylabel('disturbance');
2实验效果 在没有更改远代码的情况下,实验的结果如下所示 图8 第3个图是随机数的随时间的分布。 同理,改变kp,ki的值,系统会发生改变。 改变kp (1)增大kp,系统变化会更快,会有超调量。Kp=3. 图9 实际没有发现系统有超调量,但在系统开始调节得时候会会产生尖峰脉冲,系统调节很快。 (2)减小kp,系统调节缓慢,但系统稳定。 图10 结果可以看出系统调节很稳定,但调节时间有点长。 该变kd (1)增大ki,系统很快达到稳定,调节速度快.ki=0.2 图11 结果显示系统在转换开始时系统产生了尖峰脉冲,然后很快地达到稳定。 (2)减小ki,系统会很慢的达到稳定.ki=0.005。 如图12 结果显示系统经过相当漫长的时间达到了稳定状态。 三实验感想通过此在MATLAB上运用pid,对pidd的实际作用有了基本了解。对于kp,要选取的合适,不能过大,否则会产生震荡,过小可能会产生超常量,调节缓慢。对于kd,太大了产生毛刺抖动,太小了会有些超常量。对于ki,太大了调节很快,但会产生过冲,尖峰脉冲,太小了调节很慢,可能无法调试达到稳定状态。 总结这三点,在调试pid时,kp应从小到大调试,kd从小到大调试,ki从小到大调试。每次只调一个参数,直到最满意的时候,再调下个参数。
|