1. Mô hình đối tượng 2 a. Xây dựng mô hình toán học cho hệ thống 2 b. Mô phỏng đối tượng bình mức bằng khối SingleTank trên matlab 3 2. Tìm tham số dựa theo tiêu chuẩn tối ưu module số 5 3. Thiết kế bộ điều khiển PI liên tục theo tối ưu đối xứng 5 4. Hàm sfunction Cmex 6 5. Hàm s function viết trên mfile 8 6. Mô phỏng trên simulink 9
Trang 1MỤC LỤC
1 Mô hình đối tượng 2
a Xây dựng mô hình toán học cho hệ thống 2
b Mô phỏng đối tượng bình mức bằng khối Single-Tank trên matlab 3
2 Tìm tham số dựa theo tiêu chuẩn tối ưu module số 5
3 Thiết kế bộ điều khiển PI liên tục theo tối ưu đối xứng 5
4 Hàm s-function C-mex 6
5 Hàm s function viết trên m-file 8
6 Mô phỏng trên simulink 9
Trang 21 Mô hình đối tượng
Tín hiệu vào là độ mở (hoặc lưu lượng) của van vào In Flow, tín hiệu ra là mức chất lỏng trong bình level còn nhiễu là độ mở của van ra Out Flow
F1
Phương trình cân bằng vật chất:
Trong đó: A là tiết diện cắt ngang của bình chứa (coi như đều từ trên xuống) Phương trình mô hình ở trạng thái xác lập:
Trừ vế của (1) – (2) ta được:
Đặt: ; ;
Phương trình trở thành:
(2)
Hệ thống
(1)
Trang 3Tại trạng thái ban đầu tất cả các biến chênh lệch đều y, u, d và đều bằng 0 Laplace 2 vế ta được
Do van là khâu quán tính bậc nhất nên hàm truyền của hệ thống sẽ có dạng:
Hệ số đối tượng:
Course=56
Class=7
Number=14
Cho tín hiệu tác động bậc thang ở đầu vào ta có đáp ứng của hàm quá độ có dạng quán tính bậc nhất
Từ lý thuyết và đồ thị ta xác định được các tham số của mô hình như sau: T=2.7
K=14/(10-2.7)=1.92
Để kiểm chứng mô hình ta dùng mô hình sau:
Trang 4Nhận thấy trên đồ thị mô phỏng và đồ thị nhận dạng có sự sai khác nhất định Để đạt được sai số tối thiểu, ta điều chỉnh các tham số K và T
Sau khi hiệu chỉnh:
T= 2.22
K= 2.9
Hàm truyền đối tượng:
2 Tìm tham số dựa theo tiêu chuẩn tối ưu module số
Đối tượng điều khiển:
Có dạng :
Với Vs=0.0241; b1 = 0.9759; a1 = -1; a2 = -0.929;
Bộ điều khiển PID sẽ có dạng:
Với
d1 = a1 + a2 = -1.929
Trang 5d2 = a1a2 = 0.929
Vậy ta có bộ điều khiển :
Tính toán tham số bộ PID ta có: Kp = 0.0241; Ti = 13.393; Td = 0.00672
3 Thiết kế bộ điều khiển PI liên tục theo tối ưu đối xứng
Đối tượng là khâu quán tính tích phân bậc nhất nên bộ điều khiển tối ưu đối xứng sẽ là bộ điều khiển PI:
Với các tham số xác định như sau:
- Xác định a từ độ quá điều chỉnh h cần có của hệ kín theo công thức:
Hoặc tự chọn a>1 từ yêu cầu chất lượng đề ra Giá trị a được chọn càng lớn, độ quá điều chỉnh quá nhỏ Nếu a≤1, hệ kín sẽ không ổn định
- Tính
- Tính
- Chọn hệ số a=9:
Hàm truyền bộ điều khiển PI:
Với bộ PI liên tục có được ta áp dụng gián đoạn hóa bộ điều khiển PID theo phương pháp đã học :
Với
Phần gián đoạn hóa này được thực hiện bằng hàm s-function
4 Hàm s-function C-mex
1 /*===== Ham S-function PIDSO======================*/
2 /*===== Nhom 8 - DKS Co Vu Thi Thuy Nga - 20141===*/
3
Trang 64 #define S_FUNCTION_NAME pidso
5 #define S_FUNCTION_LEVEL 2
6
7 #include <math.h>
8 #include "simstruc.h"
9
10.#define U(element) (*uPtrs[element]) //bien vao
11.//Dinh nghia cac tham so cua khoi
12.#define Kp mxGetPr(ssGetSFcnParam(S,0)) // He so ti le
13.#define Ti mxGetPr(ssGetSFcnParam(S,1)) // Hang so thoi gian tich phan
14.#define Td mxGetPr(ssGetSFcnParam(S,2)) // Hang so thoi gian vi phan
15.#define T mxGetPr(ssGetSFcnParam(S,3)) // Chu ky trich mau
16
17.//khoi tao kich co cho khoi
18.static void mdlInitializeSizes(SimStruct *S){
19 int_T nInputPorts = 1; //so luong cong vao la 1
20 int_T nOutputPorts = 1; //so luong cong ra la 1
21 ssSetNumSFcnParams(S,4); //thiet lap so tham so cho khoi la 4
22 if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S))
{return;}
23 //kiem tra so tham so dua vao
24 ssSetNumContStates(S, 0); // thiet lap so trang thai lien tuc
25 ssSetNumDiscStates(S, 0); // thiet lap so trang thai gian doan
26 if (!ssSetNumInputPorts(S, 1))return;
27 //neu khong thiet lap duoc so cong vao la 1 thi thoat ngay
28 ssSetInputPortWidth(S, 0, 1); //thiet lap be rong tin hieu cong vao
29
30 ssSetInputPortDirectFeedThrough(S, 0, 1); // trang thai xuyen suot
31 if (!ssSetNumOutputPorts(S,1))return;//kiem tra cong ra
32 ssSetOutputPortWidth(S, 0, 1); // thiet lap be rong tin hieu cong ra
33 ssSetNumSampleTimes(S,1); // thiet lap so thoi gian trich mau = 1
34
35 ssSetNumRWork( S, 0); //so vecto gia tri thuc
36 ssSetNumIWork( S, 0); //so vecto gia tri nguyen
37 ssSetNumPWork( S, 0); //so vecto con tro
38 ssSetNumModes( S, 0);
39 ssSetNumNonsampledZCs( S, 0);
40
41 ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);
42 //SS_OPTION_EXCEPTION_FREE_CODE tang toc do tinh toan s-function
Trang 744.// Khoi tao thoi gian
45.static void mdlInitializeSampleTimes(SimStruct *S){
46 ssSetSampleTime(S, 0, T[0]); //chu ky trich mau
47 ssSetOffsetTime(S, 0, 0.0); //sai lech = 0
48.}
49.//khoi tao trang thai ban dau (do khong co vecto trang thai nen co the bo qua)
50.#define MDL_INITIALIZE_CONDITIONS
51.static void mdlInitializeConditions(SimStruct *S){}
52
53.//Tinh toan dau ra
54.static void mdlOutputs(SimStruct *S, int_T tid){
55 real_T *y=ssGetOutputPortRealSignal(S,0); //dau ra la y
56 real_T *x=ssGetRealDiscStates(S); //lay trang thai x
57 InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
58 double k1,k2,k3,a,a1,e1,e2,e3; //khai bao cac tham so
59 //Cac tham so cua bo PID
60 k1=Kp[0]*(1+Td[0]/T[0]);
61 k2=Kp[0]*(-1+T[0]/Ti[0]-2*Td[0]/T[0]);
62 k3=Kp[0]*(Td[0]/T[0]);
63
64 a1=0; //gia tri khoi tao ban dau
65 e2=0; //ek_1
66 e3=0; //ek_2
67 e1=*uPtrs[0]; //e1 la sai lech dau vao
68 a=a1+k1*(e1)+k2*(e2)+k3*e3;//ham tinh dau ra
69 y[0]=a; //dau ra y
70 a1=a; //luu gia tri de tinh toan buoc tiep theo
71 e3=e2; //luu gia tri de tinh toan buoc tiep theo
72 e2=e1; //luu gia tri de tinh toan buoc tiep theo
73.}
74
75.//Ket thuc s-function luon su dung code sau
76.static void mdlTerminate(SimStruct *S){}
77.# ifdef MATLAB_MEX_FILE
78.# include "simulink.c"
79.# else
80.# include "cg_sfun.h"
81.# endif
5 Hàm s function viết trên m-file
function [sys, x0, str, ts] = dksoquoctruong1 (t, x, u, flag, Kp, Ti, Ttm)
Trang 8global Ki uk_1 ek_1 %nó là u(k-1)e(k-1) anh vi?t ntnay cho de nhé
switch flag
case 0, % initialize some:l?p giá tr? ban ??u
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes (sizes);
str = [];
ts = [Ttm 0];
x0=[];
uk_1 = 0; ek_1 = 0; Ki = Kp * Ttm / Ti; % initialize the controller parameters:kh?i t?o các tham s? dk nhé
case 3, % controller output calculation :tính toàn ??u ra ki?u khi?n(tính bi?n ra nhé)
ek = u; % for the error
uk = uk_1 + Kp * (ek - ek_1) + Ki * ek ; % PID control law
uk_1 = uk; ek_1 = ek;
sys = [uk];
case {1,2,4,9},
sys = [];
otherwise
error ([ 'Unhandled flag' , num2str (flag)]);
end
6 Mô phỏng trên simulink
Để chạy được file mô phỏng trên với s function đã viết ta tiến hành nhập vào command windows như sau :
Mex –setup
Sau đó chọn trình để compiler rồi tiếp tục nhập : mex –pidso.c
Ta được kết quả mô phỏng như sau :
a Đáp ứng với bộ điều khiển sử dụng tối ưu đối xứng
Trang 9Nhận xét:
- Độ quá điều chỉnh của hệ thống xấp xỉ bằng 0
- Thời gian xác lập của hệ thống là 25s Do hệ thống bình mức đáp ứng khá chậm với tác động đầu vào nên thời gian xác lập 25s là tương đối phù hợp
b Đáp ứng với bộ điều khiển tối ưu module số
Nhận xét :
- Sai lệch tĩnh bằng xấp xỉ 0
- Thời gian đáp ứng chậm ( khoảng 70s )