PID控制器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PID控制器设计
一、PID控制的基本原理和常用形式及数学模型
具有比例-积分-微分控制规律的控制器,称PID控制器。这种组合具有三种基本规律各自的特点,其运动方程为:
dt
t
de
dt
t e
t e
t
m K
K
K
K
K d
p
t
i
p
p
)(
)(
)(
)(
+
+
=⎰ (1-1)相应的传递函数为:
⎪
⎪
⎭
⎫
⎝
⎛
+
+
=S
S
s K
K
K
G d
i
p
c
1
)
(
S
S
S K
K
K d
i
p
1
2+
+
•
=
(1-2)
PID控制的结构图为:
若1
4<
T i
τ,式(1-2)可以写成:
=
)
(s
G c()()
S
S
S
K
K i
P
1
1
2
1
+
+
•
τ
τ
由此可见,当利用PID控制器进行串联校正时,除可使系统的型别提高一级外,还将提供两个负实零点。与PI控制器相比,PID控制器除了同样具有提高系统的稳态性能的优点外,还多提供一个负实零点,从而在提高系统动态性能方面,具有更大的优越性。因此,在工业过程控制系统中,广泛使用PID控制器。PID控制器各部分参数的选择,在系统现场调试中最后确定。通常,应使积分部分发生在系统频率特性的低频段,以提高系统的稳态性能;而使微分部分发生在系统频率特性的中频段,以改善系统的动态性能。
二、实验内容一:
自己选定一个具体的控制对象(Plant),分别用P 、PD 、PI 、PID 几种控制方式设计校正网络(Compensators ),手工调试P 、I 、D 各个参数,使闭环系统的阶跃响应(Response to Step Command )尽可能地好(稳定性、快速性、准确性) 控制对象(Plant)的数学模型:
()()⎪⎪⎭
⎫ ⎝⎛++=115.01
)(S S S G
2
322++=S S 实验1中,我使用MATLAB 软件中的Simulink 调试和编程调试相结合的方法 不加任何串联校正的系统阶跃响应:
(1) P 控制方式:
P 控制方式只是在前向通道上加上比例环节,相当于增大了系统的开环增益,减小了系统的稳态误差,减小了系统的阻尼,从而增大了系统的超调量和振荡性。
P 控制方式的系统结构图如下:
取Kp=1至15,步长为1,进行循环
测试系统,将不同Kp 下的阶跃响应曲线绘制在一张坐标图下:
MATLAB源程序:
%对于P控制的编程实现
clear;
d=[2];
n=[1 3 2];
t=[0::10];
for Kp=1:1:15
d1=Kp*d;
g0=tf(d1,n);
g=feedback(g0,1);
y=step(g,t);
plot(t,y);
if ishold~=1 ,hold on,end
end
grid
由实验曲线可以看出,随着Kp值的增大,系统的稳态误差逐渐减小,稳态性能得到很好的改善,但是,Kp的增大,使系统的超调量同时增加,系统的动态性能变差,稳定性下降。这就是P控制的一般规律。
由于曲线过于密集,我将程序稍做修改,使其仅仅显示出当系统稳态误差小于10%的最小Kp值,并算出此时系统的稳态值和超调量。
新的程序为:
%修改后对于P控制的编程实现
clear;
d=[2];
n=[1 3 2];
t=[0::10]; for Kp=1:1:15 d1=Kp*d; g0=tf(d1,n);
g=feedback(g0,1); y=step(g,t); plot(t,y); dc=dcgain(g) if dc>,
plot(t,y),disp(Kp),disp(dc),break,end;%显示出稳态误差小于10%的最小Kp 值,并算出稳态值
if ishold~=1 ,hold on,end end grid
我们就采用使系统稳态误差小于10%的最小Kp 值10,并计算出此时系统的超调量为%,稳态误差为=。这些结果是我们能接受的。 (2)PD 控制方式
PD 控制方式是在P 控制的基础上增加了微分环节,由图可见,系统的输出量同时受到误差信号及其速率的双重作用。因而,比例—微分控制是一种早期控制,可在出现误差位置前,提前产生修正作用,从而达到改善系统性能的目的。
控制系统的传递函数为:
2
3222+++S S Kp
KpKdS
Kp=10时系统的阶跃响应曲线
PD控制框图
保持Kp=10不变,调试取Kd=1、、2时的系统阶跃响应曲线并与P控制做比较:
MATLAB源程序为:
%编程实现PD控制与P控制的比较
clear;
t=[0::10];
d0=[20];
n=[1 3 2];
s0=tf(d0,n);
s=feedback(s0,1);
k=step(s,t);
plot(t,k);
Kp=10;
if ishold~=1,hold on,end;
for Kd=1::2
d=[2*Kd*Kp,2*Kp];
g0=tf(d,n);
g=feedback(g0,1);
y=step(g,t);
plot(t,y);