Thiết kế điều khiển PID Thiết Kế Bộ Điều Khiển PID Ziegler Nichols đưa hai phương pháp thực nghiệm để xác định tham số điều khiển PID.Phương pháp thứ dùng mô hình xấp xỉ quán tính bậc có trễ đối tượng điều khiển: T delay G(s) ke 1 Ts s (1) Phương pháp thứ hai không cần đến mô hình toán học đối tượng áp dụng cho số lớp đối tượng định Phương pháp Zieger-Nichols thứ nhất: Phương pháp nhằm xác định tham số K P , K I , K D cho điều khiển PID sở xấp xỉ hàm truyền đạt thành khâu quán tính bậc (1) để hệ kín nhanh chóng chế độ xác lập độ điều chỉnh không 40% Đặc tính động học: Ở ta mô với giả thiết xấp xỉ hàm truyền hệ thống là: Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID G (s) 6.25 13.5s e 12.5s (Trên thực tế thông số Tdelay , T , k xác định từ đặc tính động học hệ hở) Nếu chọn tham số cho điều khiển PID theo phương pháp Z-N -1 ta có: Kp T T K KP 0.1481 , K I 0.0055 , K D delay p kTdelay 2Tdelay 2 Phương pháp Zieger-Nichols thứ hai: Phương pháp Zieger-Nichols thứ hai 1( t ) _ k G s y( t ) Phương pháp thay điều khiển PID hệ kín khuyếch đại,sau tăng k hệ nằm biên giới ổn định tức hệ kín trở thành khâu dao động điều hòa.Lúc ta có Kgh chu kỳ dao động Tgh.Tham số cho điều khiển PID chọn theo bảng sau: Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID Bộ điều khiển P PI Kp Ti Td 0,5*Kgh 0,45* Kgh 0 PID 0,6*Kgh ∞ * Tgh 1.2 0,5*Tgh 0,125*Tgh >> [num_delay,den_delay]=pade(13.5,3); >> sys=tf(6.25,[12.5 1])*tf(num_delay,den_delay) Transfer function: -6.25 s^3 + 5.556 s^2 - 2.058 s + 0.3048 12.5 s^4 + 12.11 s^3 + 5.004 s^2 + 0.9389 s + 0.04877 >> rlocus(sys); >> [k,p]=rlocfind(sys) Select a point in the graphics window selected_point = 0.0000 + 0.1521i k = 0.3438 p = -0.3985 -0.3985 -0.0000 -0.0000 + + - 0.6092i 0.6092i 0.1523i 0.1523i Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID Root Locus 1.5 Imaginary Axis 0.5 0.5 1 1.5 0.5 0.5 1.5 Real Axis 1.6 1.4 1.2 0.8 0.6 0.4 0.2 0.2 50 Lưu Như Hòa – ĐKTĐ – KSTN – K50 100 150 Thiết kế điều khiển PID >>[Gm,Pm,Wg,Wp] = margin(k*sys) Gm = 1.0006 Pm = 0.1256 Wg = 0.1523 Wp = 0.1521 >> Tgh=2*pi/Wg Tgh = 41.2662 Chọn tham số cho điều khiển PID ta có: K K p 0.6* Kgh 0.2063 , K I P 0.01 , K D K pTD 1.0640 TI Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID 1.4 1.2 0.8 0.6 0.4 0.2 0 20 40 60 80 100 120 140 160 180 200 Phương pháp dựa vào điều kiện tối ưu chuẩn H : Chỉ tiêu tối ưu e (t ) Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID >> function [Kp,Ki,Kd] = run_pid() pid_model; pid0 = [0.2063 0.01 1.0640]; options = optimset('LargeScale','off','Display','iter', 'TolX',0.0001,'TolFun',0.0001); pid = lsqnonlin(@pid_lsq, pid0, [], [], options); [Kp Ki Kd] = pid; function F = pid_lsq(pid) [Kp Ki Kd] = pid; simopt = simset('solver','ode45','SrcWorkspace','Current'); [tout,xout,yout] = sim('pid_model',[0 200],simopt); F = yout-1; end end [kp,ki,kd]=run_pid Directional Iteration Func-count Residual Step-size derivative 5.81452 12 4.30085 1.25 -0.284 19 4.25474 0.948 -0.000296 27 4.24586 1.75 -1.05e-005 34 4.24396 1.01 -7.01e-008 42 4.24378 1.26 2.98e-009 49 4.24376 0.977 4.91e-010 56 4.24376 1.13 2.33e-010 63 4.24376 0.95 3.22e-011 Optimization terminated: directional derivative along search direction less than TolFun and infinity-norm of gradient less than 10*(TolFun+TolX) Lambda 4.44604 1.79785 1.806 0.65562 0.655853 0.327926 0.327929 0.163964 kp = 0.1132 ki = 0.0118 kd = 0.8467 Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID 1.4 1.2 0.8 0.6 0.4 0.2 0 20 40 60 80 Lưu Như Hòa – ĐKTĐ – KSTN – K50 100 120 140 160 180 200 ... Thiết kế điều khiển PID Root Locus 1.5 Imaginary Axis 0.5 0.5 1 1.5 0.5 0.5 1.5 Real Axis 1.6 1.4 1.2 0.8 0.6 0.4 0.2 0.2 50 Lưu Như Hòa – ĐKTĐ – KSTN – K50 100 150 Thiết kế điều khiển PID. .. khiển PID chọn theo bảng sau: Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID Bộ điều khiển P PI Kp Ti Td 0,5*Kgh 0,45* Kgh 0 PID 0,6*Kgh ∞ * Tgh 1.2 0,5*Tgh 0,125*Tgh >> [num_delay,den_delay]=pade(13.5,3);... Phương pháp dựa vào điều kiện tối ưu chuẩn H : Chỉ tiêu tối ưu e (t ) Lưu Như Hòa – ĐKTĐ – KSTN – K50 Thiết kế điều khiển PID >> function [Kp,Ki,Kd] = run _pid( ) pid_ model; pid0 = [0.2063 0.01