Giáo trình kỹ thuật điều khiển 19 doc

10 348 0
Giáo trình kỹ thuật điều khiển 19 doc

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

Thông tin tài liệu

187 » cd C:\ » mkdir matlab_test » !copy *.bat matlab_test AUTOEXEC.BAT 1 file(s) copied. » cd matlab_test » dir AUTOEXEC.BAT » − Command History: các lệnh chúng ta gõ vào cửa sổ lệnh sẽ được ghi vào cửa sổ Command History cùng với nhãn thời gian đánh dấu thời điểm bắt đầu và kết thúc của mỗi phiên làm việc. Chúng ta có thể mở cửa sổ này để xem lại các lệnh đã thực hiện và copy những dòng lệnh vào cửa sổ lệnh hay chương trình soạn thảo. − Launch Pad: cung cấp giao diện đồ họa để người sử dụng có thể mở các bộ công cụ (toolboxes), các chương trình demo và các tài liệu trợ giúp của MATLAB một cách thuận tiện. − Chương trình soạn thảo và debug (Editor/Debugger): được sử dụng để soạn thảo và debug các M-files, là những chương trình có thể thực hiện được như những hàm của MATLAB. Để tạo một M-file mới, chọn File/New/M-file trên menu của MATLAB Desktop hoặc gõ lệnh edit trong cửa sổ lệnh. Để mở một M-file đã có, chọn File/Open trên menu của MATLAB Desktop hay gõ lệnh edit <xxxx.m> trong cửa sổ lệnh, ở đó xxxx là tên của M-file và .m là phần mở rộng của M-file. Để chạy một M-file từ cửa sổ lệnh, gõ vào tên của M-file (không có phần mở rộng). Hình A.1. MATLAB Desktop 188 A.2.3. Sử dụng lệnh help và lookfor của MATLAB Chúng ta có thể xem tài liệu trợ giúp của MATLAB bằng cách sử dụng Help menu của MATLAB Desktop hoặc gõ lệnh help trong cửa sổ lệnh. Để xem hướng dẫn sử dụng một hàm của MATLAB bằng lệnh help, gõ help <tên hàm>. Nếu không nhớ được tên hàm mà chỉ nhớ một số từ khóa gắn với hàm cần tìm, chúng ta có thể tìm kiếm những thông tin cần thiết bằng cách gõ lệnh lookfor <từ khóa>. A.2.4. Biến trong MATLAB MATLAB lưu giữ các biến dưới dạng các ma trận có kích thước M×N, ở đó M là số hàng và N là số cột của ma trận. Ma trận kích thước 1×1 là một giá trị vô hướng. Ma trận kích thước 1× N là một vector hàng, còn ma trận kích thước M×1 là một vector cột. Các phần tử của ma trận có thể là một số thực hay số phức. Đơn vị ảo 1− được ký hiệu là i hoặc j, trừ phi người sử dụng đã định nghĩa lại các biến này. Các phần tử của một ma trận được viết trong cặp [ ], với các phần tử của các cột tách nhau bởi dấu cách hoặc dấu phảy, và các hàng tách nhau bằng dấu chấm phảy. Ví dụ dưới đây là các phép gán giá trị cho một biến x: » x = 5; % giá trị thực » x = 5+10i; % giá trị ảo » x = 5+10j; % tương đương dòng trên » x = [1 2 3]; % vector hàng » x = [1; 2; 3]; % vector cột » x = [1 2 3; 4 5 6; 7 8 9]; % ma trận 3×3 Chú ý: chúng ta có thể viết một giá trị ảo là 5+10i, nhưng không thể viết là 5+i10. Các cách viết khác là 5+10*i hay 5+i*10 đều được chấp nhận. Dấu % được sử dụng cho các chú giải trong dòng lệnh. Còn dấu ; được đặt cuối lệnh nếu chúng ta không muốn MATLAB in ngay ra trạng thái thực hiện của dòng lệnh trong cửa sổ lệnh. Ví dụ, nếu ta không đặt ; cuối các lệnh gán thì trên cửa sổ lệnh sẽ hiển thị như sau: » x = 5 x = 5 » x = [1 2 3] x = 1 2 3 » x = [1; 2; 3] x = 1 2 3 Để xem giá trị của một biến, chỉ việc gõ tên biến vào cửa sổ lệnh, hoặc dùng lệnh disp. Ví dụ: 189 » x = [1 2 3]; » x x = 1 2 3 » disp(x) 1 2 3 A.2.5. Các phép toán với số phức Ví dụ sau thể hiện các hàm quan trọng đối với các biến phức: » x = 3+4i % gán giá trị phức cho x x = 3.0000 + 4.0000i » real(x) % phần thực của x ans = 3 » imag(x) % phần ảo của x ans = 4 » abs(x) % độ lớn (magnitude) của x ans = 5 » angle(x) % góc pha của x, tính bằng radian ans = 0.9273 » conj(x) % liên hợp phức của x ans = 3.0000 − 4.0000i Nếu x là một ma trận, các hàm sẽ được thực hiện với từng phần tử của ma trận. Ví dụ: » x = [3+4i 5−10i] x = 3.0000 + 4.0000i 5.0000 − 10.0000i » real(x) ans = 3 5 » imag(x) 4 −10 A.2.6. Sinh vector Trong MATLAB, để vẽ được đồ thị của một hàm f(x) trong một khoảng giá trị [ x 1 , x 2 ] của x, chúng ta cần phải có một vector các giá trị rời rạc của f(x) trong khoảng [ x 1 , x 2 ]. Để làm được việc đó, trước hết phải rời rạc hóa khoảng giá trị [ x 1 , x 2 ] của x, sau đó tính các giá trị của f(x) cho các giá trị của x trong khoảng [ x 1 , x 2 ].Các lệnh và hàm sinh vector thường được sử dụng cho mục đích rời rạc hóa một khoảng giá trị của x. Cách sử dụng các lệnh và hàm này như sau: 190 − Lệnh [x1:s:x2]: sinh một vector x bao gồm các giá trị cách đều nhau trong khoảng [ x 1 , x 2 ] với bước là s. Ví dụ: » x = [0:0.5:10]; % sinh vector x có 21 giá trị từ 0 đến 10, bước 0,5 − Hàm linspace(x1,x2,N): sinh một vector gồm N giá trị cách đều nhau trong khoảng [ x 1 , x 2 ]. Ví dụ: » x = linspace(0,10,21); % kết quả giống như ví dụ trên − Hàm logspace(d1,d2,N): sinh một vector gồm N giá trị cách đều nhau theo thang logarithm (cơ số 10) trong khoảng [10 d 1 ,10 d 2 ], trừ phi d 2 bằng pi (π), khi đó khoảng giá trị sẽ là [10 d 1 , π]. Ví dụ: » x = logspace(0,3,4) x = 1 10 100 1000 » x = logspace(0,pi,4) x = 1.0000 1.4646 2.1450 3.1416 A.2.7. Truy nhập tới các phần tử của ma trận Các phần tử của ma trận được truy nhập tới bằng các chỉ số (indexes) của hàng và cột. Trong MATLAB, chỉ số bắt đầu từ 1. Ví dụ: » A = [1 2 3; 4 5 6; 7 8 9]; % ma trận 3×3 » x = A(3,1) % phần tử ở hàng 3, cột 1 x = 7 Để truy nhập tới một ma trận con của ma trận, người ta thường sử dụng tới ký hiệu :, ví dụ: » x = A(:,2) % toàn bộ cột thứ 2 của A x = 2 5 8 » x = A(2:3,1:3) % ma trận con của A gồm hàng 2-3, cột 1-3 x = 4 5 6 7 8 9 A.2.8. Các phép tính ma trận − Cộng ma trận: A+B − Trừ ma trận: A−B − Nhân ma trận: A*B − Chia ma trận: có hai phép chia ma trận được định nghĩa như sau, nếu A*x = B thì x = A\B (phép chia trái, ký hiệu là \), còn nếu x*A = B thì x = B/A 191 (phép chia phải, ký hiệu là /) với điều kiện ma trận A lấy nghịch đảo được và kích thước các ma trận phù hợp. − Lấy mũ: A^k (tương đương A*A* *A, tất cả k lần) − Chuyển vị liên hợp: A' hoặc ctranspose(A) − Nhân các phần tử tương ứng của 2 ma trận cùng kích thước: A.*B, kết quả là một ma trận cùng kích thước, phần tử ở hàng i cột j bằng A(i,j)*B(i,j) − Chia các phần tử tương ứng của 2 ma trận cùng kích thước: Phép chia phải: A./B, kết quả là một ma trận cùng kích thước, phần tử ở hàng i cột j bằng A(i,j)/B(i,j) Phép chia trái: A.\B, kết quả là một ma trận cùng kích thước, phần tử ở hàng i cột j bằng B(i,j)/A(i,j) − Lấy mũ các phần tử của ma trận: A.^k, kết quả là một ma trận cùng kích thước, phần tử ở hàng i cột j bằng A(i,j)^k A.2.9. Các phép toán quan hệ − Lớn hơn: > − Lớn hơn hoặc bằng: >= − Nhỏ hơn: < − Nhỏ hơn hoặc bằng: <= − Bằng nhau: == − Không bằng nhau: ~= Kết quả của một phép toán quan hệ sẽ là 1 (đúng) hoặc 0 (sai). Nếu phép toán quan hệ được thực hiện cho hai ma trận (kích thước bằng nhau), kết quả sẽ là một ma trận gồm các giá trị 0 và 1, bao gồm kết quả các phép so sánh giữa các phần tử tương ứng của hai ma trận. Ví dụ: » [1 2; 3 4] >= [2 1; 3 2] ans = 0 1 1 1 A.2.10. Các lệnh điều kiện MATLAB có các cấu trúc tương tự các ngôn ngữ lập trình bậc cao khác, như các lệnh if, for, while và các phép toán logic and (hay &), or (hay |), not (hay ~). Hãy sử dụng lệnh help để tìm hiểu cách sử dụng các lệnh này. A.2.11. Các hàm toán học MATLAB cung cấp một số lớn các hàm toán học cơ sở. Các hàm thường dùng là sin, cos, tan, asin, acos, atan, exp (lấy mũ của e), log (logarithm tự nhiên), log10 (logarithm cơ số 10), sqrt (căn bậc 2), abs (giá trị tuyệt đối). Khi biến vào của các hàm nay là các ma trận, chúng sẽ được thực hiện cho từng phần tử của ma trận. 192 A.2.12. M-files MATLAB là một ngôn ngữ biên dịch, nghĩa là lệnh được gõ vào cửa sổ lệnh sẽ được dịch trong phạm vi của phiên làm việc hiện tại của MATLAB. Để lập trình trong MATLAB, chúng ta có thể dùng hai dạng: script và hàm. Cả hai dạng này đều sử dụng M-files.  Script Một script la một chuỗi các dòng lệnh MATLAB được ghi vào một M-file (phần mở rộng của M-file là .m). Khi M-file được chạy, MATLAB sẽ thực hiện từng lệnh trong script tương tự như lệnh đó được gõ vào cửa sổ lệnh. Phạm vi của các lệnh trong script là toàn bộ phiên làm việc hiện tại của MATLAB chứ không phải chỉ trong phạm vi của M-file, nghĩa là các lệnh trong script có thể sử dụng các biến đã đượ c định nghĩa trước khi M-file được gọi. Vì vậy, nếu các lệnh trong script không cần dùng tới các biến đã định nghĩa trước đó, cần dùng lệnh clear ở đầu script để tránh những hiệu ứng không mong muốn. Sau đây là một script làm ví dụ: % script file: vidu.m % vẽ đồ thị của hàm số x = te -t cos(2 π t) trong khoảng [0,8] clear all % xóa tất cả các biến và hàm % do người dùng định nghĩa trước trước đó t = linspace(0,8,401); x = t.*exp(–t).*cos(2*pi*t); plot(t,x)  Hàm M-files chứa hàm được bắt đầu bằng một định nghĩa hàm như sau: function [output1, output2, ] = function_name(input1, input2, ) Tiếp theo định nghĩa hàm là các lệnh MATLAB như trong scripts. Tuy nhiên, các lệnh đó chỉ có phạm vi bên trong hàm và các biến được định nghĩa trong phạm vi hàm là các biến cục bộ trừ phi chúng được khai báo là biến toàn cục bằng cách sử dụng lệnh global. Sau đây là một ví dụ về hàm: % file: f1.m % tính s = f 1 (a,b) = e a+2|b| function s = f1(a,b) if b > 0, k = a+2*b; else k = a−2*b; end s = exp(k); A.2.13. Nhật ký Như đã nói tới ở phần trên, các lệnh được gõ vào cửa sổ lệnh đều được ghi vào cửa sổ Command History của MATLAB desktop. Chúng ta cũng có thể yêu cầu MATLAB lưu nhật ký các lệnh được gọi trong mỗi phiên làm việc ra file bằng 193 cách sử dụng lệnh diary. Để mở một file nhật ký và bắt đầu ghi, thực hiện lệnh sau: » diary <tên file> Các lệnh được gõ vào cửa sổ lệnh sau đó sẽ được ghi vào file có tên đã được chỉ ra trong lệnh trên. Để kết thúc việc ghi nhật ký và đóng file nhật ký, gõ lệnh sau: » diary off A.2.14. Vẽ đồ thị Các lệnh vẽ đồ thị 2-D đơn giản trong MATLAB: − plot: vẽ đồ thị dưới dạng đường liên tục − stem: vẽ đồ thị dưới dạng các điểm rời rạc − loglog: tương tự plot, nhưng hai trục tọa độ X và Y đều chia theo thang logarithm (cơ số 10) − semilogx: tương tự plot, nhưng trục tọa độ X chia theo thang logarithm (cơ số 10) − semilogy: tương tự plot, nhưng trục tọa độ Y chia theo thang logarithm (cơ số 10) − bar: vẽ biểu đồ cột − histogram: vẽ biểu đồ tần suất − polar: vẽ đồ thị trong hệ tọa độ cực Các lệnh liên quan đến trình bày đồ thị: − xlabel: gắn nhãn cho trục X − ylabel: gắn nhãn cho trục Y − title: gắn tiêu đề cho đồ thị − grid: hiển thị lưới tọa độ − text: đặt xâu ký tự vào đồ thị − axis: điều chỉnh thang và thuộc tính của các trục tọa độ − figure: tạo một cửa sổ mới cho lệnh vẽ, hàm sẽ trả về số hiệu của cửa sổ mới được tạo. Nếu lệnh figure có tham số − figure(n), cửa sổ vẽ có số hiệu n sẽ được kích hoạt và lệnh vẽ tiếp theo sẽ vẽ vào cửa sổ này. − hold on: cho phép giữ lại hệ tọa độ và đồ thị đang hiển thị khi có lệnh vẽ mới trong cùng cửa sổ. Các lệnh vẽ mới sẽ chỉ vẽ thêm đồ thị, các trục tọa độ và thuộc tính của chúng vẫn giữ nguyên − hold off: xóa bỏ tác dụng của lệnh trên, mỗi khi có lệnh vẽ mới, hình vẽ đang hiển thị trong cùng cửa số sẽ bị xóa − close(n): đóng cửa sổ vẽ có số hiệu n − subplot: lấy một phần của đồ thị đang hiển thị Sau đây là một ví dụ sử dụng các hàm vẽ đồ thị: % vẽ đồ thị của các hàm số x 1 = te -t cos(2 π t) và x 2 = te -t sin(2 π t) % trong khoảng [0,8] t = linspace(0,8,401); x1 = t.*exp(–t).*cos(2*pi*t); 194 x2 = t.*exp(–t).*sin(2*pi*t); plot(t,x1); hold on plot(t, x2); xlabel('Time (s)'); ylabel('Amplitude'); A.3. Thiết lập các mô hình hệ thống bằng Control System Toolbox A.3.1. Thiết lập các mô hình tuyến tính bất biến theo thời gian Control System Toolbox (CST) có các hàm cho phép thiết lập các mô hình của các hệ thống tuyến tính bất biến (linear time-invariant systems hay LTI), bao gồm các mô hình hàm chuyển, điểm không-điểm cực-gia số (zero-pole-gain) hay các mô hình trong không gian trạng thái (mô hình biến trạng thái).  Hàm chuyển Mô hình hàm chuyển của một hệ thống tuyến tính G(s) = Y(s)/X(s) trong CST được thiết lập bằng hàm tf(X,Y), ở đó X là vector biểu diễn đa thức X(s) và Y là vector biểu diễn đa thức Y(s). Đa thức P(s) = a 1 s n + a 2 s n-1 + a 3 s n-2 + + a n s + a n+1 được biểu diễn bằng vector P = [a 1 a 2 a 3 a n a n+1 ]. Ví dụ, hệ thống có hàm chuyển G(s) = s/(s 2 + 2s + 10) được thiết lập bằng lệnh sau: » G = tf([1 0],[1 2 10]) Transfer function: s s^2 + 2 s + 10  Zero-pole-gain Các mô hình zero-pole-gain sử dụng hàm chuyển được biểu diễn dưới dạng: )) ()(( )) ()(( )( 21 21 n m pspsps zszszs ksG −−− − − − = ở đó, gia số k (gain) là một giá trị, z i (i = 1 m) là các điểm không (zeros) của G(s) và p j (j = 1 n) là các điểm cực (poles) của G(s). Vì vậy, các mô hình zero-pole- gain được biểu diễn bằng giá trị k và hai vector Z = [z 1 z 2 z m ] và P = [p 1 p 2 p n ], thiết lập bởi hàm zpk(Z,P,k). Ví dụ: » G = zpk(3,[–1 –2],2) Zero/pole/gain: 2 (s-3) (s+1) (s+2) » G = zpk(0,[–1+3i –1–3i],1) Zero/pole/gain: s (s^2 + 2s + 10) 195  Mô hình trong không gian trạng thái (mô hình biến trạng thái) Các mô hình trong không gian trạng thái sử dụng các phương trình vi phân mô tả động lực của hệ thống dưới dạng: DuCxy BuAx x += += dt d ở đó, x là vector chứa các biến trạng thái, u là vector chứa các biến vào và y là vector chứa các biến ra. A, B, C, D là các ma trận hệ số của hệ phương trình. Kích thước của các ma trận này như sau: A có kích thước N x ×N x , B có kích thước N x ×N u , C có kích thước N y ×N x , D có kích thước N y ×N u , ở đó N x là số biến trạng thái, N u là số biến vào và N y là số biến ra. Một mô hình trong không gian trạng thái được thiết lập bởi lệnh ss(A,B,C,D). Ví dụ, một hệ thống được mô tả bởi phương trình sau: I dt d dt d 352 2 2 =++ θ θθ Chuyển phương trình này sang dạng ở trên, chúng ta có x = [ θ ; dt d θ ], u = I, dt d θ =y , A = [0 1; −5 −2], B = [0 ; 3], C = [0 1] và D = 0. Mô hình này được thiết lập bằng lệnh sau: » sys = ss([0 1 ; −5 −2],[0 ; 3],[0 1], 0) a = x1 x2 x1 0 1 x2 −5 −2 b = u1 x1 0 x2 3 c = x1 x2 y1 0 1 d = u1 y1 0 Continuous-time model. Mô hình trong không gian trạng thái có thể được biểu diễn ở dạng tổng quát hơn như sau: 196 DuCxy BuAx x E += += dt d ở đó E là một ma trận có kích thước N x ×N x . Để thiết lập mô hình này ta dùng lệnh dss(A,B,C,D,E).  Các mô hình theo thời gian rời rạc Các mô hình được thiết lập bởi các hàm đã trình bày ở trên đều là các mô hình theo thời gian liên tục. Để thiết lập các mô hình theo thời gian rời rạc, chúng ta vẫn dùng các hàm đó, nhưng thêm một tham số là khoảng thời gian lấy mẫu t s (tính bằng giây). Các hàm thiết lập các mô hình theo thời gian rời rạc sẽ là: tf(X,Y,ts), zpk(Z,P,k,ts), ss(A,B,C,D,ts) và dss(A,B,C,D,E,ts). Ví dụ: » G = tf([1 0],[1 2 10],0.1) Transfer function: z z^2 + 2 z + 10 Sampling time: 0.1 A.3.2. Chuyển đổi giữa các loại mô hình Các hàm tf, zpk và ss cũng được dùng để chuyển đổi từ một loại mô hình sang một loại mô hình khác. Ví dụ: » G = tf([1 3],[1 –3 2]) % mô hình hàm chuyển Transfer function: s + 3 s^2 - 3 s + 2 » G = zpk(G) % chuyển sang mô hình zero-pole-gain Zero/pole/gain: (s+3) (s-2) (s-1) » sys = ss(G) % chuyển sang mô hình trong không gian trạng thái a = x1 x2 x1 2 1.118 x2 0 1 b = u1 x1 0 x2 2 c = x1 x2 y1 2.236 0.5 . lệnh vào cửa sổ lệnh hay chương trình soạn thảo. − Launch Pad: cung cấp giao diện đồ họa để người sử dụng có thể mở các bộ công cụ (toolboxes), các chương trình demo và các tài liệu trợ giúp. của MATLAB một cách thuận tiện. − Chương trình soạn thảo và debug (Editor/Debugger): được sử dụng để soạn thảo và debug các M-files, là những chương trình có thể thực hiện được như những hàm. B thì x = AB (phép chia trái, ký hiệu là ), còn nếu x*A = B thì x = B/A 191 (phép chia phải, ký hiệu là /) với điều kiện ma trận A lấy nghịch đảo được và kích thước các ma trận phù hợp.

Ngày đăng: 10/07/2014, 03:20

Tài liệu cùng người dùng

Tài liệu liên quan