Bài giảng Giải tích mạch và mô phỏng trên máy tính - Trương Quang Sanh

d. Tín hiệu ra: - Xác định dạng tín hiệu ra khi khối này đƣợc sử dụng trong mô phỏng một pha. Thông số tín hiệu ra không cho phép khi khối không đƣợc sử dụng trong mô phỏng một pha. Mô phỏng một pha đƣợc tích cực bằng khối Powergui đặt trong mô hình này. - Đặt Complex để tín hiệu có dạng giá trị complex - Đặt Real-Imag là phần thực và ảo của dòng đo đƣợc. Tín hiệu ra là một vector hai thành phần. - Đặt Magnitude-Angle để ra biên độ và tần số của dòng đo. Tín hiệu ra là một vector hai thành phần. - Đặt Magnitude để xuất ra biên độ của dòng đo đƣợc. Tín hiệu ra là một giá trị đơn. e. Ví dụ: Demo sử dụng ba khối đo điện áp để đọc điện áp

pdf116 trang | Chia sẻ: linhmy2pp | Ngày: 18/03/2022 | Lượt xem: 217 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Giải tích mạch và mô phỏng trên máy tính - Trương Quang Sanh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
và function sẽ bị ngừng tại vị trí của break. Ví dụ: Viết chƣơng trình nhập vào một số n (n>=0) với các trƣờng hợp sau: a) Nếu n < 0 thì in thông báo bạn nhập sai b) Nếu n > 0 và lẽ thì tính tổng s1=1+3+5+...+n, n là số lẽ. c) Nếu n > 0 và chẵn thì s2=2+4+6+...+n, n chẵn. d) Nếu n = 0 dừng chƣơng trình lại. Giải: n=input('nhap n= '); % nhập số n du=rem(n,2); % kiểm tra số n là chẵn hay lẽ % nếu n lẽ =1, n chẵn dư = 0 if n<0 fprintf('Ban nhap sai') % xuất ra thông báo end if (n>0) & (du==1) % nếu n>0 và lẽ 54 i=1; % gán i=1; s1=1; %gán tổng s1=1 while i<n % thực hiện vòng lặp i=i+2; % tăng i lên 2 sau mỗi lần lặp s1=s1+i; % tính tổng s1 với giá trị i mới end s1 % in ra kết quả sau khi kết thúc vòng lặp end if (n>0) & (du==0) i=0; s2=0; while i<n i=i+2; s2=s2+i; end s2 end if n==0 % nếu n=0 break % lệnh kết thúc end Khi chạy chƣơng trình: » vidu nhap n= 5 s1 = 9 55 » vidu nhap n= 4 s2 = 6 » vidu nhap n= -6 Ban nhap sai » vidu nhap n= 0 4.5. Hàm tạm dừng Lệnh PAUSE a) Công dụng: Dừng chƣơng trình theo ý muốn. b) Cú pháp: pause on pause off pause (n) c) Giải thích: pause on: dừng chƣơng trình, và chờ nhấn 1 phím bất kỳ (trừ các phím điều khiển) chƣơng trình thực hiện tiếp.bre pause off: tắt chức năng pause. pause (n): dừng chƣơng trình tại n giây. d) Ví dụ: for n = 1 : 3; disp(„Press any key to continue‟) pause 56 end Press any key to continue Press any key to continue Press any key to continue 57 CÂU HỎI ÔN TẬP CHƢƠNG 4 Câu 1: Trình bày nội dung của lệnh if end trong trƣờng hợp bài toán có hai điều kiện thay đổi và có nhiều điều kiện thay đổi? Câu 2: Trình bày nội dụng của lệnh Switch end? Câu 3: Viết và giải thích cấu trúc của lệnh vòng lặp for end? Câu 4: Viết và giải thích cấu trúc của lệnh vòng lặp while end? 58 Chƣơng 5 HÀM DO NGƢỜI DÙNG TỰ LẬP 5.1. Hàm biểu thức inline Hàm inline sẽ cho phép chúng ta lập một hàm đơn giản ngay tại cửa sổ lệnh, ngƣời sử dụng sẽ ứng dụng trực tiếp hàm ngay tại cửa sổ lệnh. Với cú pháp nhƣ sau: inline(expr,arg1,arg2,...) Chƣơng trình sẽ xây dựng hàm đƣợc miêu tả bởi biểu thức -expr theo các đối số arg1, arg2. Ví dụ 5.1: Tạo hàm inline tính giá trị công suất tác dụng của mạch DC theo các giá trị điện áp U và dòng điện I Tại cửa sổ lệnh, chúng ta gõ: f = inline('U*I','U','I'). Chƣơng trình sẽ hiện thông báo: >>f = inline ('U*I','U','I') f = Inline function f(U,I) = U*I Sau đó, chúng ta gõ: f(100,50) Chƣơng trình sẽ cho kết quả nhƣ sau: >> f(100,50) ans = 5000 Hàm inline cũng có thể đƣợc sử dụng trong M- file, với cú pháp tƣơng tự nhƣ trên. Ví dụ 5.2: Tạo hàm inline tính công suất tác dụng theo ví dụ 5.1 trong M-file f=inline('U*I','U','I') 59 P=f(100,50) Chạy chƣơng trình sẽ cho cùng kết quả nhƣ ví dụ 5.1 5.2. Hàm m-file Một vấn đề đơn giản là, yêu cầu của bạn tại dấu nhắc của MATLAB trong cửa sổ lệnh là nhanh và hiệu quả. Tuy nhiên vì số lệnh tăng lên, hoặc khi bạn muốn thay đổi giá trị của một hoặc nhiều biến và thực hiện lại một số lệnh với giá trị mới, nếu cứ đánh lặp lại tại dấu nhắc của MATLAB thì sẽ trở lên buồn tẻ, do vậy MATLAB cung cấp một giải pháp cho vấn đề này là: nó cho phép bạn thay thế các lệnh của MATLAB bằng một file văn bản đơn giản, và yêu cầu MATLAB mở file và thực hiện lệnh chính xác nhƣ là đánh tại dấu nhắc của MATLAB tại cửa sổ lệnh, những file này gọi là script file, hoặc đơn giản là M_file. Danh từ "script" để chỉ rằng thực tế MATLAB đọc từ file kịch bản tìm thấy trong file. Danh từ "M_file" để chỉ rằng tên script file đó phải kết thúc bằng phần mở rộng là '.m' nh ví dụ example1.m. Để tạo một script M_file, chọn New trong bảng chọn file và chọn M_file. Thủ tục này sẽ tạo ra màn hình soạn thảo, và bạn có thể đánh đƣợc các lệnh của MATLAB trong đó. Ví dụ ƣớc lƣợng chiều cao ngôi nhà: function example1 % example1.m (Ví dụ ước lượng chiều cao ngôi nhà) h = 2 theta = 60 D = 50; building_height = h + D*tan(theta*pi/180) Bạn có thể ghi và lƣu giữ file này bằng cách chọn Save từ bảng chọn file. Khi bạn ghi lên file chú ý phải đánh tên file trùng với tên hàm (example) không cần đánh vào phần mở rộng, MATLAB tự gán vào cho nó. Khi đó từ dấu nhắc ta có thể đánh: >> example1 h= 60 2 theta= 60 building_height= 54.3599 Khi MATLAB diễn giải các trạng thái của example1 ở trên, MATLAB dùng các trạng thái của biến MATLAB hiện tại và tạo lên các lệnh của nó, bắt đầu bằng tên M_file. Nghĩa là, nếu example1 không phải là biến hiện tại, hoặc một lệnh MATLAB xây dựng lên, MATLAB mở file example1.m (nếu nó tìm thấy) và tính giá trị các lệnh tìm thấy chỉ khi chúng ta vào các thông số chính xác tại dấu nhắc của cửa sổ lệnh. Nhƣ đã thấy lệnh trong M_file truy cập đến tất cả các biến trong không gian làm việc của MATLAB, và tất cả các biến trong M_file trở thành một phần của không gian làm việc. 61 CÂU HỎI ÔN TẬP CHƢƠNG 5 Câu 1: Trình bày cấu trúc của hàm inline? Câu 2: Ý nghĩa của hàm m-file? 62 Chƣơng 6 ĐỒ HỌA TRONG MATLAB 6.1. Mở đầu Khuôn khổ của mọi thao tác xuất đồ hoạ trên nền Matlab là Figure. Có thể tạo ra cửa sổ nhƣ hình 2.2 bằng cách gọi lệnh figure và mỗi figure sẽ tự động đƣợc đánh số. >> figure Có thể gọi một figure đã có số bằng lệnh figure(number). Số của figure sẽ hiển thị nếu ta gọi gcf (Get hendle to Current figure). >> gcf ans = 1 Bằng lệnh subplots (row, column, counter), có thể chia đều một figure thành nhiều subplots (đồ hoạ con) đƣợc counter (bộ đếm) đánh số ở phía trên bên trái. Nếu việc đánh số chỉ cần một chữ số, chúng sẽ đƣợc viết tuần tự không cần dấu phẩy hay dấu cách. 63 Có thể xoá nội dung của một figure bằng lệnh clf (clear current figure), và lệnh delete figure(number) sẽ xoá chính figure. Tƣơng tự, lệnh close(number) sẽ đóng figure mang số number còn lệnh close all sẽ đóng tất cả các figures đang mở. Có thể xem đặc điểm của một figure bằng lệnh get, với lệnh set ta lại có thể lập đặc điểm cho figure. Việc lập trình đồ hoạ trong Matlab luôn phụ thuộc vào đối tƣợng cụ thể và vô cùng phong phú. Một công cụ làm nhẹ bớt công việc là trình soạn thảo đặc tính đồ hoạ (property editor) với cửa sổ giới thiệu ở hình sau: Việc phân chia thang bậc của trục thƣờng đƣợc Matlab tự động thực hiện. Tuy nhiên, ta có thể phân chia thủ công trong trƣờng hợp hai chiều (2-D) bằng lệnh axis([x_min,x_max,y_min,y_max]) và trong trƣờng hợp ba chiều (3-D) axis([x_min,x_max,y_min,y_max,z_min,z_max]). Lệnh axis(‟auto‟) sẽ trao quyền chia trục lại cho Matlab. Lệnh grid on sẽ tạo ra một lƣới toạ độ ứng với cách chia trục đã xác định. Đối với đồ hoạ 3-D ta có thêm lệnh box on để tạo khung bao cho 3-D-Plot. Để điền ký tự vào một đồ hoạ ta có nhiều khả năng khác nhau: Dùng xlabel(string), ylabel(string), zlabel(string) để điền tên cho trục; dùng title(string) để điền tên cho figure. Ngoài ra ta còn có thể viết các ký tự lên cao, tụt thấp hay các ký tự Hy Lạp. Bằng lệnh legend(string_1,string_2,, [position]) ta có thể điền thêm một số lời ghi chú vào đồ hoạ. Vị trí của lời ghi chú đƣợc xác định bởi số ghi trong [position], với ý nghĩa: 14 sẽ đặt lời ghi chú vào 4 góc, 0 đặt tự động và -1 đặt vào bên phải, cạnh đồ hoạ. Lệnh text(x_value,y_value,string) cho phép ta điền 64 một đoạn văn bản với nội dung string vào toạ độ bất kỳ x_value, y_value trong đồ hoạ. Sử dụng lệnh zoom on | off để dùng chuột cắt và co dãn mảng đó. Ngoài ra, cửa sổ figure còn có một vài nút cho phép dùng chuột điền đoạn văn bản, vẽ thêm nét hoặc mũi tên, và mở Property Editor. Có thể thêm thông tin chi tiết về xuất đồ hoạ ra mà hình bằng cách gọi help graph2d, help graph3d và help specgraph. 6.2. Đồ họa 2D Lệnh plot (x_value,y_value [,plotstyle]) vẽ đồ thị nối các điểm cho bởi cặp giá trị x_value, y_value. Thông thƣờng các điểm đó đƣợc nối bởi một nét liền. Nếu ta nạp luân phiên nhiều vector x/y, ta sẽ thu đƣợc nhiều nét nối độc lập với nhau. Nếu thiếu x_value, khi ấy các giá trị của y_value sẽ đƣợc vẽ theo thứ tự chỉ số của chúng. Nếu y_value là các giá trị phức, khi ấy đồ thị vẽ với hai trục ảo và trục thực. Lệnh stars cũng đƣợc viết với cú pháp tƣơng tự nhƣng sẽ tạo ra đồ thị bậc thang. Chuỗi ký tự plotstyle cấu tạo bởi hai thành phần: Thành phần thứ nhất là một chữ cái để chọn mầu và thành phần thứ hai là chuỗi ký hiệu đặc trƣng cho dạng chấm/ gạch nối tạo nên nét đồ thị. Mỗi lần gọi mới lệnh plot, các đồ thị đã có trong Figure (hoặc trong Subplot) hiện tại sẽ bị xoá. Có thể ngăn chặn các điều đó bằng cách gọi lệnh hold on sau lệnh plot đầu tiên. 65 Lệnh fplot(function, range) trong ví dụ trên minh họa khả năng vẽ trực tiếp các hàm tƣờng minh. Hai lệnh semilogx và semilogy cũng có cú pháp giống nhƣ plot với điểm khác duy nhất: Hai trục x và y đƣợc chia thang logarithm. Lệnh loglog có tác dụng chia đồng thời cả hai trục x và y theo thang logarithm. Đồ thị BODE vẽ bằng lệnh bode: 66 6.3. Đồ họa 3D 6.3.1. Các lệnh Plots Lệnh plot3 có tác dụng tƣơng tự nhƣ lệnh plot, điểm khác duy nhất là plot3 có thêm vector số liệu thứ ba dành cho trục z. 67 Để biểu diễn các hàm 2 chiều dƣới dạng mặt trong không gian ta sử dụng lệnh surf(x_value, y_value, z_value [, color]). Nếu x_value, y_value, z_value là các ma trận có số hàng và số cột giống nhau, khi ấy các điểm của đồ hoạ sẽ đƣợc vẽ và nối liền thành mặt. Nếu các điểm có một khoảng cách đều đặn về phía hai trục x và y, khi ấy x_value và y_value có thể chỉ là vector. Trong trƣờng hợp này, các giá trị x_value đƣợc chuẩn theo cột và y_value chuẩn theo hang của ma trận z_value. Hai lệnh mesh và waterfall có cú pháp giống nhƣ surf, nhƣng lại tạo ra mặt lƣới không điền đầy và đồ hoạ kiểu thác nƣớc. Ngƣợc lại contour lại vẽ nên các đƣờng “đẳng mức” (đƣờng nối các điểm có cùng z_value). Ngoài ra ta còn có thể thêm một ma trận color để xác định mầu cho đồ hoạ. Mỗi phần tử của color ứng với một phần tử của z_value. Các giá trị mầu sẽ đƣợc sử dụng trong một bảng mầu, và ta có thể thay đổi bảng đó nhờ lệnh colormap(name). Nếu không khai báo ma trận mầu, Matlab sẽ tự động gán color = z_value. Dải mầu có thể đƣợc co dãn thang nhờ lệnh caxis (color_min, color_max). 68 6.3.2. Phối cảnh trong đồ hoạ 3-D Có thể dùng lệnh view(horizontal,vertical) để phối cảnh cho đồ hoạ 3 chiều bằng cách khai các góc theo phƣơng nằm ngang và phƣơng thẳng đứng tính bằng độ (o, Degree). Góc chuẩn cho trƣớc là (-37.5o, 30o). Ngoài ra, cũng có thể tạo dựng hay thay đổi phối cảnh bằng cách nháy và kéo thả chuột, sau khi đã gọi lệnh rotate3d. 6.3.3. Nhập, xuất và in đồ hoạ Nếu cần phải gán một File đồ hoạ có sẵn vào khuôn hình của Figure, ta có thể sử dụng hai lệnh variable = imread(file,fmt) và image(variable). Bằng lệnh imread ta gán File đồ hoạ với định dạng fmt cho biến variable. Nếu variable nhận hình ảnh chỉ bao gồm gam màu xám, variable sẽ là một biến 2 chiều. Nếu đó là hình ảnh mầu RGB, variable sẽ là một mảng 3 chiều. Định dạng của đồ hoạ đƣợc khai báo bởi fmt. Lệnh image (variable) sẽ xuất đồ hoạ mới gán cho variable ra màn hành Figure có chứa ảnh với định dạng .jpg Đồ hoạ Figure của Matlab cũng có thể đƣợc xuất sang các định dạng khác. Lệnh print –fnumber sẽ in Figure mang số number ra máy in. Lệnh print –fnumber -dfmt file sẽ xuất Figure thành file với các định dạng đồ hoạ khác. Ví dụ: bmp (Windows bitmap), emf (Enhanced meta), eps (EPS level 1), jpg (JPEG image), pcx (Paintbrush 24-bit) hay tif (TIFF image, compressed). Để biết chi tiết hãy gọi lệnh help print. Nếu cần phải lƣu lại để sau này xử lý, có thể cất các đồ hoạ đã thu đƣợc thành File với định dạng fig của Matlab. Để cất hoặc ta đi theo menu File / Save as, hoặc gọi lệnh saveas(handle, „file‟ [,format]). Lệnh saveas cất handle (Figure hiện tại, có thể dùng gcf để hỏi) thành tệp có tên file với một trong các định dạng: „fig‟ (File nhị phân), „m‟ (gồm một File fig và một File Script). 69 6.4. Đồ họa chuyển động Ta có thể tạo ra hình chuyển động bằng 2 cách • Tạo và lƣu nhiều hình khác nhau và lần lƣợt hiển thị chúng. • Vẽ và xoá liên tục một đối tƣợng trên màn hình, mỗi lần vẽ lại có sự thay đổi. Với cách thứ nhất ta thực hiện hình chuyển động qua 3 bƣớc: • Dùng hàm moviein để dành bộ nhớ cho một ma trận đủ lớn nhằm lƣu các khung hình. • Dùng hàm getframes để tạo các khung hình. • Dùng hàm movie để hiển thị các khung hình. Sau đây là ví dụ sử dụng movie để quan sát hàm fft(eye(n)). Ta tạo chƣơng trình ct1_22.m nhƣ sau : axis equal M = moviein(16, gcf); set(gca, ʹNextPlotʹ, ʹreplacechildrenʹ) h = uicontrol(ʹstyleʹ, ʹsliderʹ, ʹpositionʹ,[100 10 500 20], ʹMinʹ, 1, ʹMaxʹ, 16) for j = 1:16 plot(fft(eye(j + 16))) set(h, ʹValueʹ, j) M(:, j) = getframe(gcf); end clf; axes(ʹPositionʹ, [0 0 1 1]); movie(M, 30) Bƣớc đầu tiên để tạo hình ảnh chuyển động là khởi gán ma trận. Tuy nhiên trƣớc khi gọi moviein, ta cần tạo ra các trục tọa độ có cùng kích thƣớc với kích thƣớc mà ta muốn hiển thị hình. 70 Do trong ví dụ này ta hiển thị các số liệu cách đều trên vòng tròn đơn vị nên ta dùng lệnh axis equal để xác định tỉ lệ các trục. Hàm moviein tạo ra ma trận đủ lớn để chứa 16 khung hình. Phát biểu: set(gca, ʹNextPlotʹ, ʹreplacechildrenʹ) Ngăn hàm plot đƣa tỉ lệ các trục về axis normal mỗi khi nó đƣợc gọi. Hàm getframe không đối số trả lại các điểm ảnh của trục hiện hành ở hình hiện có. Mỗi khung hình gồm các số liệu trong một vec tơ cột. Hàm getframe(gcf) chụp toàn bộ phần trong của một cửa sổ hiện hành. Sau khi tạo ra hình ảnh ta có thể chạy chúng một số lần nhất định ví dụ 30 lần nhờ hàm movie(M, 30) . Một phƣơng pháp nữa để tạo hình chuyển động là vẽ và xoá, nghĩa là vẽ một đối tƣợng đồ hoạ rồi thay đổi vị trí của nó bằng cách thay đổi toạ độ x, y và z một lƣợng nhỏ nhờ một vòng lặp. Ta có thể tạo ra các hiệu ứng khác nhau nhờ các cách xoá hình khác nhau. Chúng gồm: • None MATLAB không xoá đối tƣợng khi nó di chuyển • Background MATLAB xoá đối tƣợng bằng cách vẽ nó có màu nền • Xor MATLAB chỉ xoá đối tƣợng Ta tạo ra M‐file có tên là ct1_23.m nhƣ sau: A = [ ‐8/3 0 0; 0 ‐10 10; 0 28 ‐1 ]; y = [35 ‐10 ‐7]ʹ; h = 0.01; p = plot3(y(1), y(2), y(3),ʹ.ʹ, ... ʹEraseModeʹ, ʹnoneʹ, ʹMarkerSizeʹ, 5); axis([0 50 ‐25 25 ‐25 25]) hold on for i = 1:4000 71 A(1,3) = y(2); A(3,1) = ‐y(2); ydot = A*y; y = y + h*ydot; set(p, ʹXDataʹ, y(1), ʹYDataʹ, y(2), ʹZDataʹ, y(3)) % thay đổi tọa độ drawnow i = i + 1; end 6.5. Thiết kế giao diện đồ họa Tạo GUI bằng công cụ đồ hoạ: Trên đây ta đã xem xét cách tạo GUI bằng phƣơng pháp thủ công. Ta có thể tạo GUI bằng công cụ đồ hoạ. Khi nhập lệnh guide ta gọi trình đồ hoạ (Graphics User Interface Development Environment) để soạn thảo layout. Kết quả đầu tiên là ta có một layout rỗng. Việc đầu tiên là ta thiết kế giao diện mong muốn. Ta sẽ dùng chuột kéo các phần tử cần dùng từ bên trái và thả vào layout rỗng bên phải. Ta có thể dịch chuyển các phần tử này đế các vị trí mong muốn và cân chỉnh bằng công cụ Alignment. Với mỗi phần tử ta cấn xác định thuộc tính cho nó bằng cách bấm đúp vào phần tử hay 72 bấm vào công cụ soạn thảo thộc tính Sau khi thiết kế xong ta lƣu nó lại. Lúc này MATLAB tự động tạo ra file *.fig dùng lƣu giao diện vừa tạo và file *.m chƣa các mã lệnh cần thực hiện. Việc cuối cùng là viết các mã lệnh vào file *.m. Trong quá trình thiết kế ta có thể chạy thử xem sau mỗi bƣớc thiết kế đã đạt yêu cầu chƣa bằng cách bấm vào ô chạy thử Ví dụ tạo GUI: Đếm số lần bấm chuột: Ta thiết kế một giao diện nhƣ sau: Ta muốn là khi bấm chuột, số lần bấm sẽ đƣợc đếm và ghi lại. Trƣớc hết ta gọi guide và có đƣợc một layout rỗng. Vào Property Inspector (ô soạn thảo thuộc tính) và ghi vào Name chuỗi „ct1_52‟ và chấp nhận thuộc tích Tag mặc định của nó là figure1; dùng Font chữ mặc định, cỡ chữ 12, bold. Ta dùng ô Edit Text để ghi lại số lần bấm. Ta vào Property Inspector rồi chọn String. Ta nhập vào ô này chuỗi „So lan bam chuot: 0‟. Ta ghi vào ô Tag chuỗi „editmot‟ và cũng dùng Font chữ mắc định, cỡ chữ 12 và bold. Tiếp theo kéo Pushbutton vào layout và soạn thảo thuộc tính cho nó với Font chữ mặc định, cỡ chứ 12, bold. Trong thuôc tính String ghi chuỗi „Bam chuot‟; ghi và Tag chuỗi „pushbuttonmot‟. Nhƣ vậy là ta đã thiết kế xong. Bây giờ ta lƣu lại với tên là ct1_52.fig và ct1_52.m. Nhiệm vụ tiếp theo là ghi các lệnh cần thiết vào file ct1_52.m. File này đã đƣợc MATLAB tự động tạo ra. Ta phải thêm vào đó các mã lệnh để khi bấm chuột thì số lần bấm đƣợc thể hiện trên ô Edit Text. Ta sẽ ghi các mã lệnh này vào phần: function varargout = pushbuttonmot_Callback(h, eventdata, handles, varargin) 73 Do lệnh cần đƣợc thực hiện khi gọi pushbutton. Nội dung của ct1_52.m là: function varargout = Ct1_52(varargin) if nargin = = 0 fig = openfig(mfilename, „reuse‟); set(fig, „Color‟, get(0, „defaultUicontrolBackgroundColor‟)); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin{:}); catch disp(lasterr); end end function varargout = pushbuttonmot_Callback(h, eventdata, handles, varargin) persistent dem; %biến dem là persistent để nó tồn tại giữa lần gọi hàm if isempty(dem) dem = 0; end dem = dem + 1; str = sprintf(„So lan bam chuot: %d‟,dem); set(handles.editmot, „String‟,str); 74 CÂU HỎI ÔN TẬP CHƢƠNG 6 Câu 1: Trình bày cách tạo cửa sổ đồ họa để thực hiện thiết kế? Câu 2: Hãy giải thích cách sử dụng các lệnh sau: gcf, subplots, clf, delete figure(number), set? Câu 3: Trình bày cách chèn kí tự vào một đồ họa nhƣ tên cho trục, tên cho figure? Câu 4: Trình bày cấu trúc lệnh legend? Câu 5: Trình bày cấu trúc lệnh zoom on | off ? Câu 6: Đồ họa 2D là gì? Cấu trúc vẽ đồ họa 2D nhƣ thế nào? Cho ví dụ minh họa? Câu 7: Trình bày cấu trúc lệnh plot3 trong đồ họa 3D? Câu 8: Hãy nêu cách phối cảnh trong đồ họa? Câu 9: Hãy viết các lệnh để nhập, xuất, in đồ họa? Câu 10: Hãy nêu các cách tạo ra đồ họa chuyển động? Câu 11: Trình bày phƣơng pháp tạo GUI bằng công cụ đồ họa? 75 Chƣơng 7 CÁC BÀI TOÁN ĐẠI SỐ TUYẾN TÍNH VÀ PHƢƠNG TRÌNH VI PHÂN 7.1. Ma trận và ánh xạ tuyến tính 7.1.1. Ma trận 7.1.1.1. Khái niệm Các dữ liệu đƣa vào xử lý trong MATLAB đều dƣới dạng ma trận. Ma trận A có n hàng, m cột đƣợc gọi là ma trận cỡ n x m. Đƣợc ký hiệu Am x n, phần tử aij của ma trận Am x n là phần tử nằm ở hàng thứ i, cột j. Ta chú ý một số ma trận sau: - Ma trận đơn (số đơn lẻ) là ma trận 1 hàng 1 cột. - Ma trận hàng (1 x m) số liệu đƣợc bố trí trên một hàng. - Ma trận cột (n x 1) số liệu đƣợc bố trí trên 1 cột. a. Qui định để định nghĩa một ma trận trong Matlab Tên ma trận (có thể đến 31 ký tự), bắt đầu phải bằng chữ cái sau đó có thể là số, chữ cái, các ký tự đặc biệt ... Tên đặt bên trái dấu bằng, bên phải dấu bằng là các phần tử của ma trận, các phần tử của ma trận đƣợc đóng bằng dấu ngoặc vuông ([]), các phần tử trong trong cùng một hàng đƣợc cách nhau bởi ký tự trống hoặc dấu phẩy (, ), các phần tử thuộc các hàng khác nhau cách nhau bởi dấu (;). b. Các phƣơng pháp nhập một ma trận - Liệt kê trực tiếp, ví dụ lệnh: >> A = [1 2 3; 4 5 6; 7 8 9]  Kết quả cho ra một ma trận có 3 hàng, 3 cột - Nhập thông qua lệnh input, ví dụ lệnh: >> input('Nhap gia tri cho ma tran A = ')  Nhap gia tri cho ma tran A = [1 2 3; 4 5 6; 7 8 9]  ans = 1 2 3 76 4 5 6 7 8 9 c. Hiển thị lại ma trận Để hiển thị lại ma trận ta gõ tên ma trận sau ấn  , ví dụ: >> A  sẽ cho ta ma trận A A = 1 2 3 4 5 6 7 8 9 7.1.1.2 Xử lý trong ma trận a. Tạo ma trận véctơ Việc tạo ma trận véc tơ đƣợc thực hiện theo công thức sau: Biến = giới hạn đầu : bƣớc chạy : gới hạn cuối Trong đó: Giới hạn đầu, giới hạn cuối, bƣớc chạy: Là các số thực, bƣớc chạy có thể dƣơng hoặc âm. Ví dụ: Tạo 1 vectơ a chạy từ 0 đến 0.6 với bƣớc chạy tiến là 0.1 >> t = 0: 0.1:0.6  a = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 b. Gọi các phần tử trong ma trận MATLAB cho phép ta xử lý đến từng phần tử của ma trận, để truy cập đến từng phần tử của ma trận ta gọi chúng thông qua chỉ số của từng phần tử với các nội dung: Tên của ma trận (chỉ số hàng, chỉ số cột), ví dụ: >> A = [1:3; 4:6; 7:9]  (Tạo ma trận A có kích thƣớc 3x3) 77 A = 1 2 3 4 5 6 7 8 9 >> B = A (1, 1) (xuất phần tử ở hàng 1, cột1) B = 1 Chú ý: Trong trƣờng hợp ta muốn gọi tất cả các phần tử trong một hàng hoặc tất cả các phần tử trong một cột ta dùng toán tử hai chấm (:), ví dụ: >> C = A (2, :) (xuất các phần tử thuộc dòng 2 của ma trận A) C = 4 5 6 >> D = A (:, 2) (xuất các phần tử thuộc cột 2 của ma trận A) D = 2 5 8 7.1.2 Ánh xạ tuyến tính: Cho 2 không gian vector V và W trên trƣờng F, một biến đổi tuyến tính (còn gọi là ánh xạ tuyến tính) là một ánh xạ: T: V  W 78 Có tính kết hợp với phép cộng và phép nhân vô hƣớng: T(u + v) = T(u) + T(v), T(av) = aT(v) Với mọi vector u, v ∈ V và một vô hƣớng a ∈ F. 7.2 Hệ phƣơng trình đại số tuyến tính Trong toán học (cụ thể là trong đại số tuyến tính), một hệ phƣơng trình đại số tuyến tính hay đơn giản là hệ phƣơng trình tuyến tính là một tập hợp các phƣơng trình tuyến tính với cùng những biến số. Ví dụ: Là hệ gồm ba phƣơng trình với ba biến số x, y, z. Một nghiệm của hệ là một hệ thống tuyến tính thỏa mãn các phƣơng trình đã cho. Dạng tổng quát: Hình thức tổng quát của hệ phƣơng trình đại số tuyến tính gồm n phƣơng trình tuyến tính với k biến số: Hệ phƣơng trình trên có thể đƣợc viết theo dạng phƣơng trình ma trận: Ax=B Với A là ma trận chứa các hệ số ai,j (ai,j là phần tử ở hàng thứ i, cột thứ j của A); x là vector chứa các biến xj; B là vector chứa các hằng số bi. Tức là: 79 Nếu các biến số của hệ phƣơng trình tuyến tính nằm trong các trƣờng đại số vô hạn (ví dụ số thực hay số phức), thì chỉ có ba trƣờng hợp xảy ra:  Hệ không có nghiệm (vô nghiệm)  Hệ có duy nhất một nghiệm  Hệ có vô số nghiệm Nhƣ vậy việc giải hệ phƣơng trình tuyến tính thực chất là thực hiện phép toán về ma trận, ta có: 1 1 XBAB.. A Để giải hệ phƣơng trình này ta lần lƣợc thực hiện các bƣớc sau: - Lập ma trận A, B; - Lấy ma trận nghịch đảo A-1; - Nghiệm XAB 1. Áp dụng: Phân tích mạch tuyến tính ở chế độ xác lập. Bài toán: Các dữ liệu cho trƣớc bao gồm: - Sơ đồ mạch; - Các thông số của các phần tử (Điện trở, điện dung, điện cảm, hổ cảm); - Các thông số của nguồn áp, nguồn dòng (nếu có). Các thông số cần tính: - Dòng điện các nhánh; - Điện áp trên các phần tử; - Công suất tác dụng, công suất phản kháng. Xây dựng thuật toán phân tích mạch: Để xây dựng thuật toán giải bài toán mạch này, ta chuyển phƣơng trình mạch sang số phức, khi đó hệ phƣơng trình vi phân mô tả mạch sẽ trở thành hệ phƣơng trình đại số và dễ dàng giải đƣợc bằng Matlab. 80 Xét một mạch điện tổng quát gồm m nhánh, n nút. Ta sẽ lập đƣợc hệ gồm m phƣơng trình vi phân nhƣ sau: itk ( ) 0 nut di 1 (7.1) (.)R i Lk  i dt  e k k k k k nutdt Ck vong Chuyển hệ phƣơng trình (7.1) sang dạng số phức ta đƣợc: .  I  0 nut ...1 (7.2) (.)Rk I k j L k I k  I k  E k nutjC k vong Suy ra: .  I  0 nut 1 .. (7.3) [Rkk j ( L  )] Ikk  E nutCk vong Hay: .  I  0 nut .. (7.4) Z.k IEkk nut vong Trong đó: 1 Zk R k  j() L k  là tổng trở phức của nhánh k. Ck Hệ phƣơng trình (7.4) là hệ phƣơng trình đại số tuyến tính, dễ dàng giải đƣợc bằng cách lập trình trên Matlab. Trong trƣờng hợp mạch có hỗ cảm, ta cần nhập thêm các hệ số hổ cảm M, đồng thời trong phần tính toán cần tính thêm các tổng trở hỗ cảm ZM. 81 Lƣu đồ thuật toán tổng quát để giải bài toán lý thuyết mạch ở chế độ xác lập: Bắt đầu Nhập các thông số R, L, C, M(nếu có), E,  sai đúng Tính XL C = 0 (XM) XC = 0 XC = 1 Z R  j(X  X ) k k Lkk C Tính ma trận A, B Tính dòng điện trên các nhánh Tính điện áp trên các phần tử Tính công suất P, Q, S Kết thúc Ví dụ: Xét mạch điện tổng quát có ba nhánh hai nút nhƣ hình dƣới. Hãy lập chƣơng trình tính dòng điện các nhánh, điện áp trên các phần tử. 82 Giải: Theo phƣơng pháp dòng điện các nhánh, với giả thiết chiều dòng điện các nhánh nhƣ hình 11.2, ta viết đƣợc hệ ba phƣơng trình dƣới dạng số phức: ... (III1 23  )  0 ... ZIZIE1 1 3 3 1 ... ZIZIE2 2 3 3   2 Trong đó: Z1, Z2, Z3 là tổng trở phức các nhánh. Từ hệ phƣơng trình ta lập đƣợc các ma trận: 1 1 1 0  ZZ0 E -1 A = 13, B = 1 , C = A  0 ZZ23 E2 Ma trận dòng điện các nhánh là: I = C*B I là ma trận cột, mỗi dòng của ma trận là dòng điện của nhánh tƣơng ứng. Từ dòng điện ta tìm đƣợc các thông số trạng thái khác của mạch. Chƣơng trình đƣợc viết trên Matlab nhƣ sau: % Chương trình phân tích mạch ở chế độ xác lập disp('Hay nhap cac thong so cua mach dien, neu thong so nao khong co thi nhap bang khong') disp(' Don vi R(om) L(mH) C(10^-6F)' TS(rad/S)) disp('------------------------------------------------') disp('Nhanh so 1') 83 R1= input('nhap gia tri Dien tro R1= '); L1 = input('nhap gia tri Dien cam L1= '); C1 = input('nhap gia tri Dien dung C1= '); E1 = input('nhap gia tri E1 = '); anpha1 = input('nhap gia tri goc pha cua E1(don vi: do) anpha = '); anpha1 = anpha1*pi/180; % Đổi từ độ sang radian disp('Nhanh so 2') R2= input('nhap gia tri Dien tro R2= '); L2 = input('nhap gia tri Dien tro L2= '); C2 = input('nhap gia tri Dien tro C2= '); E2 = input('nhap gia tri E2 = '); anpha2 = input('nhap gia tri goc pha cua E2 (don vi: do) anpha = '); anpha2 = anpha2*pi/180; % Đổi từ độ sang radian disp('Nhanh so 3') R3 = input('nhap gia tri Dien tro R3= '); L3 = input('nhap gia tri Dien tro L3= '); C3 = input('nhap gia tri Dien tro C3= '); E3 = input('nhap gia tri E3 = '); anpha3 = input('nhap gia tri goc pha cua E3 (don vi do) anpha = '); anpha3 = anpha3*pi/180; % Đổi từ độ sang radian disp('Tan so goc') TS = input('nhap gia tri tan so goc TS= '); %Tính toán các thông số XL1 = 314*L1*10^-3 84 XL2 = 314*L2*10^-3 XL3 = 314*L3*10^-3 % chú ý nếu có trường hợp Ci=0 sẽ xãy ra lỗi chia cho 0 if (C1 ~= 0) XC1 = 1/(314*C1*10^-6) else XC1 = 0 end if (C2 ~= 0) XC2 = 1/(314*C2*10^-6) else XC2 = 0 end if C3 ~= 0 XC3 = 1/(314*C3*10^-6) else XC3=0 end % Tính toán phải sửa đổi cách tính tùy thuộc vào quan hệ điện trở song song hay nối tiếp với tụ và điện cảm Z1 = R1 + (XL1-XC1)*i Z2 = R2 + (XL2-XC2)*i Z3 = R3 + (XL3-XC3)*i E1= E1*cos(anpha1) + i*E1*sin(anpha1) E2 = E2*cos(anpha2) + i*E2*sin(anpha2) E3 = E3*cos(anpha3) + i*E3*sin(anpha3) 85 % Thuật toán phải sửa đổi dấu cho phù hợp với chiều dòng điện và E1, E2, E3 A = [1 1 -1; Z1 0 Z3; 0 Z2 Z3]; % Lập ma trận A C = inv(A); % Ma trận nghịch đảo của A B = [0; E1; E2]; % Lập ma trận B I = C*B % Ma trận dòng điện disp('dong dien I1') I1 = I(1,1) disp('dong dien I2') I2 = I(2,1) disp('dong dien I3') I3 = I(3,1) disp (' Diep ap roi tren cac phan tu ') UR1 = I1*R1 UL1 = i*XL1*I1 UC1 = -i*XC1*I1 UR2 = I2*R2 UL2 = i*XL2*I2 UC2 = -i*XC2*I2 UR3 = I3*R3 UL3 = i*XL3*I3 UC3 = -i*XC3*I3 7.3 Giải thuật giải phƣơng trình vi phân Phƣơng trình vi phân là biểu thức liên hệ giữa một biến độc lập, hàm phải tìm và các đạo hàm của nó. 86 Nếu phƣơng trình chứa nhiều biến độc lập cùng với hàm của các biến này cần phải tìm và các đạo hàm riêng của hàm theo các biến thì ta gọi đó là các phƣơng trình vi phân đạo hàm riêng (gọi tắt là phƣơng trình đạo hàm riêng). 7.3.1. Phƣơng trình vi phân cấp 1 - Đối với phƣơng trình vi phân không có điều kiện đầu ta sử dụng cú pháp: >> y = dsolve('phƣơng trình') dy Ví dụ 1: Giải phƣơng trình vi phân: y'  y tan( x )  cos( x ) dx Ta thực hiện lệnh: >> y dsolve('Dy  y*tan(x)  cos(x)','x') - Đối với phƣơng trình vi phân có điều kiện đầu ta sử dụng cú pháp: >> y = dsolve('phƣơng trình','điều kiện đầu') dy 2 Ví dụ 2: Giải phƣơng trình vi phân: yy'1   , với điều kiện đầu y(0) = 1 dx Ta thực hiện lệnh: >> y = dsolve(‘Dy=1+y^2’, ‘y(0) = 1’, ‘x’) 7.3.2. Phƣơng trình vi phân cấp 2 - Giải phƣơng trình vắng y‟, y‟‟ = cos(2x) - y, với điều kiện đầu y(0) = 1, y‟(0) = 0. >>y = dsolve(„D2y = cos(2*x) – y‟, „Dy(0) = 0‟, „y(0) = 1‟, „x‟) - Giải phƣơng trình vi phân y‟‟- 2y‟ – 3y = 0, với điều kiện đầu y(0) = 0 và y(1) = 1. >> y = dsolve(„D2y – D*y – 3*y‟, „y(0) = 0‟, „y(1) = 1‟, „x‟) 7.3.3. Áp dụng Cho mạch điện nhƣ hình vẽ khóa k ở vị trí 1 trong thời gian rất lâu, tại t = 0 chuyển khóa k sang vị trí 2. Tìm dòng điện i(t) tại t > 0. 87 - Phƣơng trình vi phân mô tả mạch điện là: di di R LRi  0   i  0 dt dt L - Xác định điều kiện đầu: Vì k ở vị trí 1 trong thời gian lâu nên dòng ban đầu nạp vào cuộn dây là: i(0-) = V/R Dòng điện không thay đổi tức thời trên cuộn dây nên tại t = 0 chuyển sang vị trí 2, ta có: i(0+) = i(0-) = V/R - Trong Matlab: >>i = dsolve(‘Dy+R/L*y = 0’, ‘y(0) = V/R’) 88 CÂU HỎI ÔN TẬP CHƢƠNG 7 Câu 1: Khái niệm ma trận? Những quy định để định nghĩa một ma trận là gì? Lấy ví dụ cụ thể? Câu 2: Trình bày các phƣơng pháp nhập một ma trận? Lấy ví dụ minh họa? Câu 3: Trình bày cách tạo ma trận véctơ? Và hãy gọi các phần tử trong ma trận đó? Cho ví dụ cụ thể? Câu 4: Hệ phƣơng trình đại số tuyến tính là gì? Viết hệ phƣơng trình đại số tuyến tính dạng tổng quát? Câu 5: Trình bày cách giải phƣơng trình vi phân? Câu 6: Viết chƣơng trình vẽ các đặc tính tần số, điện áp trên các phần tử của nhánh RLC nối tiếp, biết R = 15(  ), L = 100(mH), C = 1000(  F). Câu 7: Cho mạch điện sau: R1= 10(  ); C1= 1000(  F); R2= 20( ); L2= 200(mH); R3= 20( ); L3 =200(mH); R4= 10( ); L4= 100(mH);  = 100(rad/s) 0 e1= 20 2 2sin( t+50 ); 0 e2= 15 2 2sin( t +30 ) Tính dòng điện qua nhánh 4 bằng phƣơng pháp sơ đồ tƣơng đƣơng với nguồn áp, công suất tác dụng và công suất phản kháng của mạch. 89 Chƣơng 8 SIMULINK 8.1 Simulink mô phỏng hệ thống điện, điện tử, tự động 8.1.1 Tổng quan về Simulink: Để có thể làm việc với Simulink, trƣớc hết ta phải khởi động Matlab. Nếu chạy dƣới hệ điều hành Linux, sau khi thực hiện lệnh simulink3 ta sẽ đƣợc cửa sổ thƣ viện của Simulink. Nếu làm việc dƣới Windows, sau khi gọi simulink ta có cửa sổ tra cứu thƣ viện nhƣ sau: 90 Các thƣ viện con Source (các khối nguồn tín hiệu), Sinks (các khối xuất tín hiệu), Math (các khối ghép nối toán học) và Signals & Systems (các khối tín hiệu và hệ con) sẽ đƣợc giới thiệu trong phạm vi chƣơng này. 8.1.1.1 Tính chất của các khối chức năng Tất cả các khối chức năng đều đƣợc xây dựng theo một mẫu giống nhau nhƣ sau: Mỗi khối có một hay nhiều đầu vào/ra (trừ trƣờng hợp ngoại lệ: các khối thuộc hai thƣ viện con Source và Sinks), có tên và ở trung tâm của hình khối chữ nhật có biểu tƣợng thể hiện đặc điểm riêng của khối. Ngƣời sử dụng có thể tuỳ ý thay đổi tên của khối (nháy kép phím chuột trái vào vị trí tên), tuy nhiên, mỗi tên chỉ có thể sử dụng một lần duy nhất trong phạm vi cửa sổ mô hình mô phỏng. Khi nháy kép phím chuột trái trực tiếp vào khối ta sẽ mở cửa sổ tham số Block Parameters (trừ các khối Scope, Slider Gain, Subsystem) và có thể nhập thủ công các tham số đặc trƣng của khối. Khi nhập xong, nháy chuột trái vào nút OK hay nút Apply để Simulink chấp nhận các tham số vừa nhập. Nếu nháy kép phím chuột trái vào nút Help ta sẽ mở cửa sổ của tiện ích trợ giúp trực tuyến. Nháy một lần phím chuột phải trực tiếp vào khối có tác dụng mở menu chứa các lệnh cho phép soạn thảo và lập định dạng khối. Simulink phân biệt hai loại khối chức năng: Khối ảo (vitural) và khối thực (not vitural). Các khối thực đóng vai trò quyết định khi chạy mô phỏng mô hình Simulink. Việc thêm hay bớt một khối thực sẽ thay đổi đặc tính động học của hệ thống đang đƣợc mô hình Simulink mô tả. Có thể nêu nhiều ví dụ về khối thực nhƣ: khối Sum hay khối Product của thƣ viện con Math. Ngƣợc lại các khối ảo không có khả năng thay đổi đặc tính của hệ thống, chúng chỉ có nhiệm vụ thay đổi diện mạo đồ hoạ của mô hình Simulink. Đó chính là các khối nhƣ Mux, Demux, hay Enable 91 thuộc thƣ viện con Signal & System. Một số khối chức năng mang đặc tính ảo hay thực tuỳ thuộc theo vị trí hay cách thức sử dụng chúng trong mô hình Simulink. 8.1.1.2 Mô hình Simulink Từ cửa sổ thƣ viện khối (Library) hay từ cửa sổ truy cập thƣ viện (Library Browser) ta có thể tạo ra các cửa sổ mô phỏng mới bằng cách đi theo menu File / New / Model, hoặc mở các File có sẵn qua menu File / Open. Một File Simulink khi đƣợc cất giữ sẽ có đuôi .mdl. 8.1.1.3 Các thao tác cơ bản với Simulink - Sao chép: Bằng cách gắp và thả “Drag & Drop” nhờ phím chuột phải là có thẻ sao chép một khối từ thƣ viện con (cũng có thể từ một cửa sổ khác ngoài thƣ viện). - Di chuyển: Ta có thể dễ dàng di chuyển một khối trong phạm vi cửa sổ của khối đó nhờ phím chuột trái. - Đánh dấu: Bằng cách nháy phím chuột trái vào khối ta có thể đánh dấu, lựa chọn từng khối, hoặc kéo chuột đánh dấu nhiều khối một lúc. - Xóa: có thể xóa các khối và các đƣờng nối đã bị đánh dấu bằng cách gọi lệnh menu Edit / Clear. Bằng menu Edit / Undo hoặc tổ hợp phím Ctrl+Z ta có thể cứu vãn lại động tác xóa vừa thực hiện. - Hệ thống con: Bằng cách đánh dấu nhiều khối có quan hệ chức năng, sau đó gom chúng lại thông qua menu Edit / Create Subsystem, ta có thể tạo ra một hệ thống con mới. - Nối hai khối: Dùng phím chuột trái nháy vào đầu ra của một khối, sau đó di mũi tên của chuột tới đầu vào cần nối. Sau khu thả ngón tay khỏi phím chuột, đƣờng nối tự động đƣợc tạo ra. Có thể rẽ nhánh tín hiệu bằng cách nháy phím chuột phải vào một đƣờng nối có sẵn và kéo đƣờng nối mới xuất hiện tới đầu vào cần nối. 92 - Di chuyển đường nối: Để lƣu đồ tín hiệu thoáng và dễ theo dõi, nhiều khi ta phải di chuyển, bố trí lại vị trí các đƣờng nối. Khi nháy chọn bằng chuột trái ta có thể di chuyển tuỳ ý các điểm góc hoặc di chuyển song song từng đoạn thẳng của đƣờng nối. - Tạo vector đường nối: Để dễ phân biệt giữa đƣờng nối đơn và đƣờng nối các tín hiệu theo định dạng vector, hoặc ma trận, hoặc mảng, ta có thể chọn menu Format / Wide nonscalar lines để tăng bề dầy của đƣờng nối. - Chỉ thị kích cỡ và dạng dữ liệu của tín hiệu: Lệnh chọn qua menu Format / Signal dimensions sẽ hiện thị kích cỡ của tín hiệu đi qua đƣờng nối. Lệnh menu Format / Port data types chỉ thị thêm loại dữ liệu của tín hiệu qua đƣờng nối. - Định dạng cho một khối: Sau khi nháy phím chuột phải vào một khối, cửa sổ định dạng khối sẽ mở ra. Tại mục Format ta có thể lựa chọn kiểu và kích cỡ chữ, cũng nhƣ vị trí của tên khối, có thể lật hoặc xoay khối. Hai mục Foreground Color và Background Color cho phép ta đặt chế độ mầu bao quang cũng nhƣ mầu nền của khối. - Định dạng cho đường nối: Sau khi nháy phím chuột phải vào một đƣờng nối, cửa sổ định dạng đƣờng sẽ mở ra. Tại đây có các lệnh cho phép cắt bỏ, chép hoặc xoá đƣờng nối. - Hộp đối thoại về đặc tính của khối: Hoặc đi theo menu của cửa sổ mô phỏng Edit / Block Properties, hoặc chọn mục Block Properties của cửa sổ định dạng khối, ta sẽ thu đƣợc hộp đối thoại cho phép đặt một vài tham số tổng quát về đặc tính của khối. - Hộp đối thoại về đặc tính của tín hiệu: Có thể tới đƣợc hộp thoại Signal Properties của một đƣờng nối hoặc bằng cách nháy chuột đánh dấu đƣờng nối trên cửa sổ mô phỏng, sau đó đi theo menu Edit / Signal Properties từ cửa sổ định dạng đƣờng. Trong hộp đối thoại ta có thể đặt tên cho đƣờng nối một cách đơn giản 93 hơn: Nháy kép phím chuột trái vào đƣờng nối ta sẽ tự động tới đƣợc chế độ nhập văn bản. 8.1.1.4 Thƣ viện Sources và Sinks Thư viện Sources a. Constant Khối constant tạo nên một hằng số thực hoặc phức, hằng số có thể là scalar, vector hay ma trận tuỳ theo cách ta khai báo tham số Constant Value và ô Interpret vector parameters as 1-D có đƣợc chọn hay không. Nếu ô đó đƣợc chọn, ta có thể khai báo tham số Constant Value là vector hang hay cột với kích cỡ [1×n] hay [n×1] dƣới dạng ma trận. Nếu ô đó không đƣợc chọn, các vector hang cột đó chỉ đƣợc sử dụng nhƣ vector với chiều dài n, tức là tín hiệu 1-D. b. Step và Ramp Nhờ hai khối Stemp và Ramp ta có thể tạo nên các tín hiệu dạng bậc thang hay dạng dốc tuyến tính, 53at để kích thích các mô hình Simulink. Trong đó hộp thoại Block Parameters của khối Step ta có thể khai báo giá trị đầu / giá trị cuối và cả thời điểm bắt đầu của tín hiệu bƣớc nhẩy. Đối với Ramp ta có thể khai báo độ dốc, thời điểm và giá trị xuất phát của tín hiệu ở đầu ra. 94 Đối với cả hai khối, ta có thể sử dụng tham số tuỳ chọn Interpret vector parameters as 1-D để quyết định các tín hiệu dạng bƣớc nhẩy hay dạng dốc tuyến tính có giá trị scalar hay vector hay ma trận. Chú ý: Hai khối Step và Ramp không phải chỉ tạo ra một tín hiệu nhƣ nhiều ngƣời vẫn hiểu nhầm, mà có thể tạo ra một tập các tín hiệu đƣợc xử lý dƣới dạng vector hàng hay cột hoặc ma trận. c. Signal Generator và Pulse Generator Bằng Signal Generator ta tạo ra các dạng tín hiệu kích thƣớc khác nhau. Cung cấp cho 4 dạng song khác nhau: + Sóng Sin + Sóng vuông (Square) + Sóng răng cƣa (Sawtood) + Sóng ngẫu nhiên (Random) 95 Với Pulse Generator tạo chuỗi xung hình chữ nhật: Biên độ và tần số có thể khai báo tuỳ ý. Đối với Pulse Generator ta còn có khả năng chọn tỷ lệ cho bề rộng xung (tính bằng phần trăm cho cả chu kỳ). Đối với cả hai khối ta có thể sử dụng tham số tuỳ chọn Interpret vector parameters as 1-D để quyết định các tín hiệu có giá trị scalar hay vector ma trận. d. Repeating Sequence Khối Repeating Sequence cho phép ta tạo nên một tín hiệu tuần hoàn tuỳ ý. Tham số Time values phải là một vector thời gian với các giá trị đơn điệu tăng. Vector biến ra Output values phải có kích cỡ phù hợp với chiều dài của tham số Time values. Giá trị lớn nhất của vector thời gian quyết định chu kỳ lặp lại của vector biến ra. 96 e. Sine Wave Khối Sine Wave đƣợc sử dụng để tạo tín hiệu hình sin cho cả hai loại mô hình: liên tục (tham số Simple time = 0) và gián đoạn (tham số Simple time = 1). Tín hiệu đầu ra y phụ thuộc vào 56at ham số chọn: Amplitude, Frequency và Phase trên cơ sở quan hệ y = Amplitude.sin(Frequency.time + Phase). Vì đơn vị của Phase là [rad], ta có thể khai báo trực tiếp giá trị của Phase là một hệ số nào đó nhân với pi. Giống nhƣ khối Constant, ta có thể sử dụng tham số tuỳ chọn Interpret vector parameters as 1-D để quyết định các tín hiệu có giá trị calar hay vector hay ma trận. 97 f. From Workspace Khối From Workspace có nhiệm vụ lấy số liệu từ cửa sổ Matlab Workspace để cung cấp cho mô hình Simulink. Các số liệu lấy vào phải có dạng của biểu thức Matlab, khai báo tại dòng Data. 98 g. From File Bằng khối From File ta có thể lấy số liệu từ một MAT-File có sẵn. MAT- File có thể là kết quả của một lần mô phỏng trƣớc đó, đã đƣợc tạo nên và cất đi nhờ khối To file trong sơ đồ Simulink. 99 Thư viện Sinks Thƣ viện này bao gồm các khối xuất chuẩn của Simulink. Ngoài khả năng hiển thị đơn giản bằng số, còn có các khối dao động kí để biểu diễn các tín hiệu phụ thuộc thời gian hay biểu diễn hai tín hiệu trên hệ toạ độ XY. a. Scope Nhờ khối Scope ta có thể hiển thị các tín hiệu của quá trình mô phỏng. Khi nhấn vào nút Properties, hộp thoại Scope Properties (đặc điểm của Scope) sẽ mở ra. Chọn general ta có thể đặt chế độ cho các trục. Khi đặt Number of axes > 1, cửa sổ Scope sẽ có nhiều đồ thị con giống tƣơng tự nhƣ lệnh Subplot của Matlab. Nếu điền một số cụ thể vào ô time range, đồ thị sẽ chỉ đƣợc biểu diễn tại thời điểm do giá trị của số xác định. b. XY Graph 100 Khối này biểu diễn hai tín hiệu đầu vào trên hệ toạ độ XY dƣới dạng đồ hoạ Matlab đầu vào thứ nhất (bên trên). Ứng với trục X đầu thứ hai ứng với trục Y. c. To Workspace Khối To Workspace gửi số liệu ở đầu vào của khối tới môi trƣờng Matlab Workspace dƣới dạng mảng (Array), Stracture hay Stracture with time và lấy chuỗi kí tự khai tại variable name để đặt tên cho tập số liệu đƣợc ghi. d. To File Khối này giúp ta cất tập số liệu (mảng hay ma trận) ở đầu vào của khối cùng với vector thời gian dƣới dạng Mat-File. Array định dạng giống nhƣ định dạng mà khối From File cần, vì vậy số liệu do To File cất có thể đƣợc From File đọc trực tiếp mà không cần phải xử lý gì. 8.1.1.5 Khởi động và ngừng mô phỏng Quá trình mô phỏng của mô hình Simulink đƣợc khởi động qua menu Simulation/Start. Trong khi mô phỏng, có thể chọn Simulation/Pause để tạm ngừng, hay Simulink/Stop để ngừng hẳn quá trình mô phỏng. 101 8.1.1.6 Xử lý lỗi Nếu xuất hiện lỗi trong quá trình mô phỏng, Simulink sẽ ngừng mô phỏng và mở hộp thoại thông báo lỗi Simulation Diagnostics. Trong phần phía trên của hộp thoại báo lỗi ta thấy có danh sách các khối gây nên lỗi. Khi chuyển vạch chọn tới khối nào, ta sẽ thấy ở phần dƣới hộp thoại các mô tả kỹ về lỗi của khối đó. Nếu nháy chuột trái vào nút Open, cửa sổ Block Parameters của khối sẽ mở ra để tat hay đổi, sửa lại các tham số khai báo tại đó. Đôi khi nguồn gây lỗi trên sơ đồ còn đƣợc tô nổi bật bằng mầu, giúp ta nhanh chóng xác định đƣợc vị trí của khối gây lỗi. 8.1.2. Mô phỏng bộ điều khiển PID a. Nội dung: Dùng Matlab Simulink mô phỏng bộ điều khiển PID cho đối tƣợng có hàm truyền bên dƣới, sử dụng các khối sau: + Khối Step; + Khối điều khiển PID; + Khối Transfer Fcn; + Khối scope; + Khối Sum. 1,3.106 Đối tƣợng có hàm truyền sau: Gs() 340ss29 340408 0,71.10 b. Thiết kế: Thiết kế hệ thống nhƣ Hình 1 và lƣu tập tin với tên: pid.mdl 102 Hình 1: Hệ thống điều khiển dùng PID - Trong command window đánh lệnh: simulink - Tiếp tục ta chọn Files NewModel ta đƣợc hình 2 Hình 2: Cửa sổ giao diện - Lần lƣợt tạo các khối theo cách sau: Chọn các khối bằng cách kéo thả biểu tƣợng sang giao diện hình 3. + Khối Step: Simulinksources, kéo thả biểu tƣợng Step sang giao diện (Hình 4) 103 Hình 3: Tạo khối Step Tƣơng tự nhƣ trên lần lƣợt vẽ các khối sau: - Khối PID: SimulinkContinuousPID controller - Khối Transfer Fcn: SimulinkContinuous Transfer Fcn - Khối Sum: SimilinkCommonly Used blocksSum - Khối Scope: SimilinkSinksScope Tiếp tục ta double click vào khối Fcn để nhập hàm truyền G(s) vào nhƣ hình dƣới đây: 104 Hình 5: Nhập hàm truyền vào khối Fcn Bây giờ tiếp tục hiệu chỉnh các thông số của bộ điều khiển PID nhƣ sau: + Kích vào bộ PID đƣợc dao diện sau: + Tiếp tục kích vào Tune để tìm đƣợc các thống số của bộ PID nhƣ sau: 105 + Ta đƣợc các thông số của của bộ điều khiển PID nhƣ bên dƣới: - Kết quả điều khiển của bộ PID nhƣ sau: 106 8.1.3 Mô phỏng mạch điện Xét một mạch điện đơn giản sau: Power System Blockset cho phép ta xây dựng và mô phỏng một mạch điện chứa các phần tử tuyến tính cũng nhƣ phi tuyến. Để mô phỏng mạch điện này ta dùng các khối: nguồn, điện trở, điện kháng, điện dung và dụng cụ đo. Để đo điện áp ta dùng khối Vmet. Nó cho trị số tức thời của điện áp. Để thấy đƣơc giá trị hiệu dụng ta dùng khối RMS. Các bƣớc thực hiện nhƣ sau: • Từ menu File của cửa sổ powerlib chọn New rồi chọn Model sẽ chứa mạch điện và gọi là ctcircuit.mdl • Mở thƣ viện Electrical Sources để copy AC Voltage Source Block vào cửa sổ ctcircuit.mdl 107 • Mở hộp thoại AC Voltage Source Block bằng cách nhấp đúp lên nó để nhập vào biên độ, phase và tần số theo các giá trị đã cho trong sơ đồ. Chú ý là biên độ là giá trị max của điện áp. • Do khối điện trở không có nên copy khối Series RLC Branch và đặt giá trị điện trở nhƣ đã cho và đặt L là vô cùng và C là zero. • Thực hiện tƣơng tự với phần tử L và C. • Lấy khối đo điện áp trong hệ thống con Measurement • Để xem điện áp, dùng khối Scope của Simulink chuẩn. Mở Simulink và copy khối Scope vào mô hình ctcircuit.mdl. Nếu khối Scope đƣợc nối trực tiếp với đầu ra của thiết bị đo điện áp nó sẽ hiển thị điện áp theo V. • Để hoàn thành mạch điện, ta cần nối các phần tử với nhau Sơ đồ mô phỏng (lƣu trong ctcircuit.mdl) nhƣ sau: Bây giờ ta có thể bắt đầu mô phỏng từ menu simulation. Ta vào menu này, chọn các thông số cho qua trình mô phỏng và bấm nút start. Để dễ dàng cho việc phân tích trạng thái xác lập của mạch điện chúng ta, thƣ viện powerlib cung cấp giao diện đồ hoạ (GUI). Copy khối giao diện Powergui vào cửa sổ ctcircuit.mdl và nhấn đúp vào icon để mở nó. Mỗi dụng cụ đo đại lƣợng ra 108 đƣợc xác định bằng mỗi chuỗi tƣơng ứng với tên của nó. Các biến trạng thái đƣợc hiển thị tƣơng ứng với các giá trị xác lập của dòng điện và điện áp. Tên các biến chứa tên các khối, bắt đầu bằng tiếp đầu ngữ Il‐ hay Uc_. Dấu quy ƣớc đƣợc sử dụng với dòng điện và điện áp và các biến trạng thái đƣơc xác định bằng hƣớng của các khối: - Dòng điện điện cảm chạy theo hƣớng mũi tên tƣơng ứng với dấu dƣơng - Điện áp trên tụ C bằng điện áp ra trừ đi điện áp vào Chọn menu Tool | Steady ‐ State Voltages and Currents để xem các trị số xác lập của dòng điện và điện áp. Bây giờ chọn menu Tool | Initial Value of State Variables để hiển thị các giá trị khởi đầu của các biến trạng thái. Các giá trị khởi đầu này đƣợc đặt để bắt đầu simulation ở trạng thái xác lập. Tiếp theo ta tính các biểu diễn của không gian trạng thái của mô hình ctcircuit bằng hàm power2sys. Nhập dòng lệnh sau đây vào cửa sổ MATLAB: [A, B, C, D, x0, states, inputs, outputs] = power2sys(’ctcircuit’); Hàm power2sys trả về mô hình không gian trạng thái của mạch trong 4 ma trận A, B, C, D, x0 là vec tơ các điều kiện đầu mà ta vừa hiển thị với Powergui. Tên của các biến trạng thái, các đại lƣợng vào và các đại lƣợng ra đƣợc trả về trong 3 ma trận chuỗi. Một khi mô hình trạng thái đã biết, nó có thể phân tích đƣợc trong vùng tần số. Ví dụ các mode của mạch này có thể tìm từ các giá trị riêng của ma trận A (dùng lệnh MATLAB eig(A)): eig(A) ans = 1.0e+002* ‐0.5000 + 3.1225i ‐0.5000 ‐ 3.1225i Hệ thống này có dao động tắt dần vì phần thực âm. Nếu ta dùng Control System Toolbox, ta có thể vẽ đồ thị Bode. Các lệnh MATLAB (lƣu trong ctcircuitm.m) nhƣ sau: 109 freq = 0:1500; w = 2*pi*freq; [bien, pha, w] = bode(A, B, C, D); semilogy(w, mag1(:, 2)); semilogy(w, mag1(:, 2)); 8.2 Simulink trong mô phỏng đo lƣờng điện. 8.2.1 Đo dòng: a. Thƣ viện: Measurements b. Mô tả: Khối đo dòng dùng để đo dòng tức thời chảy trong bất kỳ khối điện hoặc trong đƣờng dây nào. Đầu ra mô phỏng cung cấp tín hiệu mô phỏng mà có thể sử dụng cho khối mô phỏng khác. c. Hộp thoại và các tham số: d. Các tín hiệu ra: - Xác định dạng tín hiệu ra khi khối này đƣợc sử dụng trong mô phỏng một pha. Thông số tín hiệu ra không cho phép khi khối không đƣợc sử dụng trong mô phỏng một pha. Mô phỏng một pha đƣợc tích cực bằng khối Powwrgui đặt trong mô hình này. 110 - Đặt Complex để tín hiệu ra đo đƣợc có dạng giá trị complex. - Đặt Real-Imag là phần thực và ảo của dòng đo đƣợc. Tín hiệu ra là một vector hai thành phần. - Đặt Magnitude-Angle để ra biên độ và tần số của dòng đo. Tín hiệu ra là một vector hai thành phần. - Đặt Magnitude để xuất ra biên độ của dòng đo đƣợc. Tín hiệu ra là một giá trị đơn. e. Ví dụ: Demo đo dòng sử dụng 4 khối đo dòng để đọc các dòng nhánh khác nhau trong mạch. Hai scope để hiển thị cùng dòng. 8.2.2 Đo áp a. Thƣ viện: Measurements b. Mô tả: 111 Khối đo áp Voltage Measurement block đo điện áp tức thời giữa 2 điện cực điện. Đầu ra cung cấp tín hiệu mô phỏng mà có thể đƣợc sử dụng cho một khối mô phỏng khác. c. Hộp hội thoại và các thông số: d. Tín hiệu ra: - Xác định dạng tín hiệu ra khi khối này đƣợc sử dụng trong mô phỏng một pha. Thông số tín hiệu ra không cho phép khi khối không đƣợc sử dụng trong mô phỏng một pha. Mô phỏng một pha đƣợc tích cực bằng khối Powergui đặt trong mô hình này. - Đặt Complex để tín hiệu có dạng giá trị complex - Đặt Real-Imag là phần thực và ảo của dòng đo đƣợc. Tín hiệu ra là một vector hai thành phần. - Đặt Magnitude-Angle để ra biên độ và tần số của dòng đo. Tín hiệu ra là một vector hai thành phần. - Đặt Magnitude để xuất ra biên độ của dòng đo đƣợc. Tín hiệu ra là một giá trị đơn. e. Ví dụ: Demo sử dụng ba khối đo điện áp để đọc điện áp 112 113 CÂU HỎI ÔN TẬP CHƢƠNG 8 Câu 1: Simulink là gì? Simulink có những thƣ viện con nào? Câu 2: Trình bày cách đo dòng bằng công cụ simulink? Câu 3: Trình bày cách đo áp bằng công cụ simulink? 114 TÀI LIỆU THAM KHẢO [1] Trần Văn Chính, Giáo trình Matlab và simulink, Đại học Bách Khoa Đà Nẵng. [2] Đại học Thái Nguyên (2011), Bài giảng mô phỏng và mô hình hóa, Thái Nguyên. [3] Nguyễn Phùng Quang (2004), Matlab và Simulink giành cho kỹ sư điều khiển tự động, Nhà xuất bản Khoa học và kỹ thuật, Hà Nội. 115

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_giai_tich_mach_va_mo_phong_tren_may_tinh_truong_qu.pdf