đồ án lý thuyết điều khiển tự động
Trang 1KHOA CÔNG NGHỆ TỰ ĐỘNG
Đồ án :
LÝ THUYẾT ĐIỀU KHIỂN TỰ ĐỘNG
SV thực hiện
Gv hướng dẫn
Số thứ tự
: : :
Nguyễn Hữu Ngọ Ths Phạm Thị Hương Sen
43
Hà nội, 11/2009
Trang 2Đề tài : Cho hệ thống có sơ đồ:
WPID(P) WĐT(P)
_
Đối tượng là khâu quán tính bậc 1 có trễ :
1 +
−
Tp
e Tp
Bộ điều khiển PID có hàm truyền đạt :
Với Kp ,Ti ,Td có thể xác định được
Yêu cầu :
1 Tính toán các tham số Kp ,Ti ,Td để đảm bảo tính ổn định và chất lượng của hệ thông theo
Zigler – Nichol
)
1 1 ( )
p T K p
i p PID = + +
2 Xét tính ổn định của hệ thống tìm các điểm cực và điểm không
3 Khảo sát chất lượng và chọn các tham số với các quy luật điều khiển P, PI, PID để đảm bảo
cho hệ thống có chất lượng tốt nhất(chỉnh bằng tay)
4 Tính tham số tối ưu của bộ điều khiển PID dùng hàm Least-Quares(sai số bình phương bé
nhất)
Với các tham số τ và T cho trước : T = 45; τ/T = 0.6
1 45
27
+
−
p
e p
Với T = 45; τ/T = 0.6 ta có :
Đối tượng là khâu quán tính bậc 1 có trễ :
A;) Tính toán các tham số Kp ,Ti ,Td để đảm bảo tính ổn định và chất lượng của hệ thông theo
Zigler – Nichol
_
Trang 3Phương pháp này thay bộ điều khiển PID trong hệ kín bằng bộ khuyếch đại , sau đó tăng K cho đến
khi hệ nằm ở biên giới ổn định tức hệ kín trở thành khâu dao động điều hoà, lúc đó Kgh, và chu kỳ
dao động Tgh Tham số chọn ở bảng:
PI 0.45*Kgh
Tgh
* 2 1
Ta xác định Kgh va Tgh ; bằng matlap;
>> T=45; t=0.6*T; n=3;
>> [a,b] = pade(t,n);
>> Wtr = tf(a,b);
>> W1 = tf(1,[T 1]);
>> sys = Wtr*W1;
>> rlocus(sys);%ve qui dao nghiem
>> [k,p] = rlocfind(sys)
Select a point in the graphics window
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
Root Locus
Real Axis
Trang 4selected_point =
-0.0053 + 0.0671i
k =
2.6963
p =
-0.1980 + 0.2660i
-0.1980 - 0.2660i
-0.0054 + 0.0673i
-0.0054 - 0.0673i
>> [Gm,Pm,Wg,Wp] = margin(k*sys) % dự trử biên pha
Gm = % dự trử biên
1.2201
Pm = % dự trử pha
25.6988
Wg = % tần số đảo pha
0.0696
Wp = % tần số cắt biên
0.0556
>> Tgh = 2*pi/Wg
Tgh =
90.2191
>> Kp = 1.61778;
>> Ti = 45.1;
>> Ki =
Ti
Kp
= 0.035951;
>> Td = 11.3;
Trang 5>> Kd = Kp*Td = 18.200025;
>> s = tf('s');
>> Wpid = (Kp+(Ki/s)+Kd*s);
>> Who = Wpid* W1* Wtr;
>> W = feedback(Who,1);
>> Step(W);
Step Response
Time (sec)
0 20 40 60 80 100 120 140 160 180 200
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
System: W Rise Time (sec): 40.6
System: W Peak amplitude: 1.09 Overshoot (%): 8.83
At time (sec): 58.7
System: W Settling Time (sec): 143
Ta thấy
T gian tăng(Rise time) = 40.6;
T gian quá độ(Settling time) = 143;
Vọt lố(Overshoot) = 8.38;
Sai số xác lập(Steady-state err.)
một hệ thống đáp ứng không có vọt lố, thời gian tăng trưởng nhanh và không tồn tại sai số xác lập thì hệ ấy đảm bảo chất lượng;
nên ta hiệu chỉnh làm sao sai số xác lập là nhỏ nhất và độ vọt lố giảm, thời gian tăng trưởng nhanh
ta điều chỉnh một lượng nhỏ 3 thông số KP, KD và KI để được đáp ứng tốt hơn
>> % ta chon cac thong so 1 luong nho
>> Kp = 1.7999;
>> Wpid = (Kp+(Ki/s)+Kd*s);
Trang 6>> Who = Wpid* W1* Wtr;
>> W = feedback(Who,1);
>> Step(W);
Step Response
Time (sec)
0 20 40 60 80 100 120 140 160 180
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
System: W Peak amplitude: 1.16 Overshoot (%): 16.4
At time (sec): 58.3 System: W
Rise Time (sec): 39.3
System: W Settling Time (sec): 130
T gian tăng(Rise time) = 39.3
T gian quá độ(Settling time) = 130
Vọt lố(Overshoot) = 16.4
Sai số xác lập(Steady-state err.)
Ta thấy thời gian tăng (Rise time) giảm 39.3, nhưng Vọt lố(Overshoot) lại tăng 16.4, thời gian tăng trưởng giảm, T gian quá độ(Settling time) = 130 giảm
>> Ki = 0.035951;Kd = 18.200025; Kp = 1.9999;
>> Wpid = (Kp+(Ki/s)+Kd*s);
>> Who = Wpid* W1* Wtr;
>> W = feedback(Who,1);
>> Step(W);
Trang 7Step Response
Time (sec)
0 20 40 60 80 100 120 140 160 180
-1
-0.5
0
0.5
1
1.5
System: W Peak amplitude: 1.25 Overshoot (%): 24.8
At time (sec): 56.8
System: W Rise Time (sec): 38.1
System: W Settling Time (sec): 112
T gian tăng(Rise time) = 38.1
T gian quá độ(Settling time) = 112
Vọt lố(Overshoot) = 24.8
Sai số xác lập(Steady-state err.)
>> Ki = 0.025951;
>> Wpid = (Kp+(Ki/s)+Kd*s);
>> Who = Wpid* W1* Wtr;
>> W = feedback(Who,1);
>> Step(W);
Trang 8Step Response
Time (sec)
0 50 100 150 200 250 300 350 400 450 500
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
System: W Settling Time (sec): 181
System: W Peak amplitude: 1.17 Overshoot (%): 17.1
At time (sec): 55.7 System: W
Rise Time (sec): 38.4
T gian tăng(Rise time) = 38.4
T gian quá độ(Settling time) = 181
Vọt lố(Overshoot) = 17.1
Sai số xác lập(Steady-state err.)
>> Kd = 22.200025;
>> Wpid = (Kp+(Ki/s)+Kd*s);
>> Who = Wpid* W1* Wtr;
>> W = feedback(Who,1);
>> Step(W);
Trang 9Step Response
Time (sec)
-1
-0.5
0
0.5
1
1.5
System: W Peak amplitude: 1.18 Overshoot (%): 17.8
At time (sec): 51.3
System: W Rise Time (sec): 36
System: W Settling Time (sec): 169
T gian tăng(Rise time) = 36
T gian quá độ(Settling time) = 169
Vọt lố(Overshoot) = 17.8
Sai số xác lập(Steady-state err.)
Ta thấy hàm có thời gian tăng trưởng nhanh , không có sai số xác lập, vọt lố giảm
>> Kd =17.225;
>> Wpid = (Kp+(Ki/s)+Kd*s);
>> Who = Wpid* W1* Wtr;
>> W = feedback(Who,1);
>> Step(W);
Trang 10Step Response
Time (sec)
0 50 100 150 200 250 300 350
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
System: W Peak amplitude: 1.17 Overshoot (%): 17.3
At time (sec): 55.8 System: W
Rise Time (sec): 39
System: W Settling Time (sec): 185
B;) Xét tính ổn định của hệ thống tìm các điểm cực và điểm không
>> pzmap(W)
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4
-0.2
-0.15
-0.1
-0.05
0
0.05
0.1
0.15
0.2
Pole-Zero Map
Real Axis
>> [p,z] = pzmap(W)
p =
Trang 11-0.8169
-0.0253 + 0.0803i
-0.0253 - 0.0803i
-0.0798
-0.0123
z =
0.1362 + 0.1300i
0.1362 - 0.1300i
0.1720
-0.1012
-0.0149
C;) Khảo sát chất lượng và chọn các tham số với các quy luật điều khiển P, PI, PID để đảm bảo cho
hệ thống có chất lượng tốt nhất(chỉnh bằng tay)
đối với hệ ban đầu chưa có tham số điều khiển P,PI,PID
>> T=45; t=0.6*T; n=3;
>> [a,b] = pade(t,n);
>> Wtr = tf(a,b);
>> W1 = tf(1,[T 1]);
>> sys = Wtr*W1;
>> W = feedback(sys,1);
>> step(W);
Step Response
Time (sec)
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
System: W Peak amplitude: 0.577 Overshoot (%): 15.4
At time (sec): 76.9
System: W Rise Time (sec): 25.7
System: W Settling Time (sec): 146
vì vậy với tín hiệu vào đơn vị thì giá trị ngõ ra la 0.5
Trang 12thời gian tăng trưởng khoảng 25.7s, thời gian quá độ khoảng 146s Vọt lố 15.4 Vậy ta cần thiết kế
bộ điều khiển nhằm làm giảm thời gian tăng trưởng và thời gian quá độ, đồng thời triệt tiêu sai số xác lập
Việc hiệu chỉnh phù hợp 3 thông số KP, KI và KD sẽ làm tăng chất lượng điều khiển Ảnh hưởng của 3 thông số này lên hệ thống như sau:
Đ ứng vòng
kín(C.L response)
T gian tăng(Rise time)
Vọt lố(Overshoot)
T gian quá độ(Settling time)
Sai số xác lập(Steady-state err.)
Như bảng phân tích phía trên, thành phần Kp làm giảm thời gian tăng trưởng, tăng độ vọt lố và làm giảm sai số xác lập Hàm truyền hệ kín của hệ trên với bộ điều khiển tỉ lệ là:
>> Kp = 3;
>> Wp = Kp;
>> Who = Wtr*W1*Wp;
>> W = feedback(Who,1);
>> step(W);
Step Response
Time (sec)
0 500 1000 1500 2000 2500
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
System: W Rise Time (sec): 13.1
System: W Peak amplitude: 1.49 Overshoot (%): 98.2
At time (sec): 64.1
System: W Settling Time (sec): 1.58e+003
Ta thấy thời gian tăng trưởng nhanh 13.1 nhưng vọt lố tăng 98.2 thời gian quá độ cũng tăng nên hệ kém ổn định :
Ta giảm Kp
>> Kp = 1.5;
>> Wp = Kp;
Trang 13>> W = feedback(Who,1);
>> step(W);
Step Response
Time (sec)
0 50 100 150 200 250 300
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
System: W Rise Time (sec): 19.9
System: W Peak amplitude: 0.811 Overshoot (%): 35.2
At time (sec): 70.3
System: W Settling Time (sec): 195
Đồ thị trên cho thấy bộ điều khiển tỉ lệ làm giảm cả thời gian tăng trưởng lẫn sai số xác lập nhưng lại làm tăng độ vọt lố,
Bộ điều khiển tỉ lệ - tích phân PI
Trước khi khảo sát bộ PID, ta hãy xét một bộ PI Theo bảng trên, thành phần Ki làm giảm thời gian tăng trưởng và triệt tiêu sai số xác lập Đối với hệ trên, hàm truyền hệ kín khi có bộ điều khiển PI là:
>> % chon Kp tang len
>> Kp = 1.998;Ki = 0.0256;
>> s = tf('s');
>> Wpi = (Kp + Ki/s);
>> Who = Wtr*W1*Wpi;
>> W = feedback(Who,1);
>> step(W);
Trang 14Step Response
Time (sec)
0 50 100 150 200 250 300 350 400 450 500
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
System: W Rise Time (sec): 21.1
System: W Peak amplitude: 1.4 Overshoot (%): 39.8
At time (sec): 75.5 System: W
Settling Time (sec): 363
thời gian tăng trưởng nhanh hơn 21.1 nhưng độ vọt lố tăng lên 39.8; thời gian quá độ tăng lên 363
Ta tăng thành phần Kp vì bộ điều khiển tích phân cũng làm giảm thời gian tăng trưởng và làm tăng
độ vọt lố (tác động kép) Đồ thị trên cho thấy bộ điều khiển tích phân đã triệt tiêu sai số xác lập
Bộ điều khiển PID
Xét bộ PID, hàm truyền hệ kín khi có bộ điều khiển PID;
>> Kp = 1.998; Ki = 0.0256; Kd = 30;
>> Wpid = (Kp + Ki/s + Kd*s);
>> Who = Wtr*W1*Wpid;
>> W = feedback(Who,1);
>> step(W);
Trang 15Step Response
Time (sec)
0 50 100 150 200 250 300 350
-2
-1.5
-1
-0.5
0
0.5
1
1.5
System: W Rise Time (sec): 31.6
System: W Settling Time (sec): 209
>> Kp = 1.7793;Ki = 0.0213;Kd = 17.5445;
>> Wpid = (Kp + Ki/s + Kd*s);
>> Who = Wtr*W1*Wpid;
>> W = feedback(Who,1);
>>step(W);
Ta thấy
Step Response
Time (sec)
0 50 100 150 200 250 300 350 400 450 -0.8
-0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 1.2
System: W Peak amplitude: 1.04 Overshoot (%): 4.37
At time (sec): 54.8 System: W
Rise Time (sec): 40.6
System: W Settling Time (sec): 196
Trang 16T gian tăng trưởng (Rise time) tăng 31.6, không có lọt vố T gian quá độ(Settling time) tăng lên
209
vậy ta cần hiệu chỉnh cho thời gian tăng trưởng nhanh Độ vọt lố tối thiểu Không tồn tại sai số hệ thống
Tính bộ tham số tối ưu của bộ điều khiển PID dùng hàm Least-Quares(sai số bình phương bé nhất)
Ta co mo hinh simulink
ra 1 trang thai bh
tich phan
1 s nguon
khoi 3 Kd khoi 2 Ki
khoi 1
Kp
hien thi
ham tre ham
1
45 s+1 dia chi 1
dia chi dao ham
du /dt
bo han che
Ta đánh các lệnh sau
function [Kp,Ki,Kd] = ng_pro
baicuango;
pid0 = [0.889 0.015951 0.009];
options = optimset( 'LargeScale' , 'off' , 'Display' , 'iter' ,
'TolX' ,0.0001, 'TolFun' ,0.0001);
pid = lsqnonlin(@ngo_pr, pid0, [], [], options);
Kp = pid(1); Ki = pid(2); Kd = pid(3);
function F = ngo_pr(pid)
Kp = pid(1);
Ki = pid(2);
Kd = pid(3);
simopt = simset( 'solver' , 'ode5' ,
'SrcWorkspace' , 'Current' );
[tout,xout,yout] = sim( 'baicuango' ,[0 100],simopt);
F = yout-1;
end
end
sau đó ta thực hiện lệnh ta được kết quả
>> [Kp,Ki,Kd] = ng_pro
Directional
Iteration Func-count Residual Step-size derivative Lambda
0 4 42.5698
1 11 42.4494 1 0.00432 42.4447
2 18 42.4494 1 8.73e-006 21.4154
3 27 42.4494 3.14 -7.13e-007 11.1016
4 35 42.4493 2.22 -2.75e-010 1.52327
5 43 42.4492 1.65 -1.1e-006 0.473249
6 50 42.4492 1.22 -2.94e-006 0.177382
7 57 42.4492 0.0929 3.41e-007 0.0765399
8 64 42.4492 0.444 -6.53e-008 0.0765624
Trang 1710 78 42.4492 0.157 1.1e-007 0.00957799
11 88 42.4492 0.00629 9.87e-008 0.00957874
12 96 42.4492 0.124 1e-007 0.00996699
13 105 42.4492 0.0139 1.34e-007 0.00996794
14 112 42.4492 0.258 1.33e-007 0.0101424
15 121 42.4492 0.0153 1.3e-007 0.0101428
Optimization terminated: directional derivative along
search direction less than TolFun and infinity-norm of
gradient less than 10*(TolFun+TolX)
Kp =
1.7503
Ki =
0.0192
Kd =
17.5437