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
116 trang |
Chia sẻ: linhmy2pp | Ngày: 18/03/2022 | Lượt xem: 233 | Lượt tải: 0
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
nutCk 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
LRi 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 NewModel 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: Simulinksources, 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: SimulinkContinuousPID controller
- Khối Transfer Fcn: SimulinkContinuous Transfer Fcn
- Khối Sum: SimilinkCommonly Used blocksSum
- Khối Scope: SimilinkSinksScope
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:
- bai_giang_giai_tich_mach_va_mo_phong_tren_may_tinh_truong_qu.pdf