1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

9 30 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 166,03 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

MỤ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 2

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

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 3

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:

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 4

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

Trang 5

d2 = 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 6

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 s-function

Trang 7

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)

Trang 8

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 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 9

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 )

Ngày đăng: 16/11/2021, 14:07

TỪ KHÓA LIÊN QUAN

w