Tải bản đầy đủ (.docx) (9 trang)

Bài tập điều khiển số HUST

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (126.68 KB, 9 trang )

MỤC LỤC
1. Mơ hình đối tượng........................................................................................2
a.

Xây dựng mơ hình tố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

1


1. 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
a. Xây dựng mô hình tốn học cho hệ thống
F1
F2

Hệ thống

h


Phương trình cân bằng vật chất:
(1)
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:
(2)

Trừ vế của (1) – (2) ta được:
Đặt: ; ;
Phương trình trở thành:

2


Tạ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:
b. Mơ phỏng đối tượng bình mức bằng khối Single-Tank trên matlab
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:

3


Nhậ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
4


d2 = a1a2 = 0.929
Vậy ta có bộ điều khiển :
Tính tố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ừ 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.
5


4. #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 sfunction
6


43.}
44.// 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)

7



global 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 tồ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

8


Nhậ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 )

9



×