25/05/2018, 09:51

Symbolic và Simulink

MỤC TIÊU Hiểu một cách cơ bản về hai công cụ mạnh và hữu hiệu của Matlab, đó là Symbolic và Simulink , để từ đó sinh viên có thể tự mình phát huy các chức năng cao hơn của hai công cụ này trong tính toán và mô phỏng hệ ...

MỤC TIÊU

Hiểu một cách cơ bản về hai công cụ mạnh và hữu hiệu của Matlab, đó là SymbolicSimulink, để từ đó sinh viên có thể tự mình phát huy các chức năng cao hơn của hai công cụ này trong tính toán và mô phỏng hệ thống.

THAM KHẢO

[1]. The Mathworks Inc., Matlab Notebook User’s Guide, 2003.

[2]. Nguyễn Hoài Sơn - Đỗ Thanh Việt - Bùi Xuân Lâm, Ứng dụng MATLAB trong tính toán kỹ thuật, Tập 1, NXB ĐHQG Tp. HCM, 2000

[3]. Nguyễn Chí Ngôn, Bài thí nghiệm Kỹ thuật mô phỏng trong Điều khiển tự động, Bộ môn Viễn Thông & Tự động hóa, khoa Công nghệ thông tin, Đại học Cần thơ, 2002.

[4]. Nguyễn Công Định, Phân tích và tổng hợp các hệ thống điều khiển bằng máy tính, NXB Khoa học và Kỹ thuật, 2002.

[5]. http://www-h.eng.cam.ac.uk/help/tpl/programs/Matlab/Symbolic.html

THỰC HÀNH

SymbolicSimulink đều chứa thư viện chức năng rất phong phú, bài thí nghiệm này chỉ có thể đề cập đến những gì gọi là cơ bản nhất. Từ đó, sinh viên có thể tự mình nghiên cứu và phát triển tiếp.

Symbolic

Phiên bản mới nhất của Symbolic toolbox được Mathworks giới thiệu trong Matlab 6.5 vào tháng 6-2003. Đó là một thư viện toán học kiểu ký tự, được phát triển từ Symbolic Maple của trường Đại học Waterloo, Canada. Để có cái nhìn tổng quát về các chức năng của Symbolic, sinh viên hãy gõ:

>>help symbolic

Một số hàm thông dụng của Symbolic:

Tên hàm Chức năng Tên hàm Chức năng
diff Đạo hàm fourier Biến đổi Fourier
int Tích phân ifourier Biến đổi Fourier ngược
taylor Khai triển Taylor laplace Biến đổi Laplace
det Định thức của ma trận laplace Biến đổi Laplace ngược
numden Tử và mẫu của phân số ezplot Vẽ hàm,  plot
subs Thay biến sym bằng trị số ezpolar Vẽ hàm, tọa độ cực  polar
dsolve Giải phương trình vi phân ezmesh Vẽ mặt lưới  mesh
solve Giải phương trình đại số ezsurf Vẽ mặt  surf

Để biến đổi một số, một biến hay một đối tượng nào đó thành kiểu Symbolic ta có thể sử dụng một trong các cách sau:

>>s=sym(A)

>>x=sym(x)

>>syms x y z % khai báo kết hợp → x, y và z là biến symbolic

1. Tính đạo hàm bằng hàm diff của symbolic: Nếu S là biểu thức symbolic thì:

diff(S) đạo hàm của S theo biến tự do

diff(S,’v’) đạo hàm của S theo biến v

diff(S,’v’,n) đạo hàm cấp n của S theo v.

Ví dụ: Tính đạo hàm của y = sinx3.

>> syms x % khai bao x la bien kieu symbolic

>> y=sin(x^3);

>> z=diff(y) % dao ham cua y

z =

3*cos(x^3)*x^2 % sinh vien kiem tra ket qua

>>pretty(z) % hien thi dang quen thuoc

3 cos(x3) x2

>>ezplot(x,y) % ve y theo x

Hình 3.1 – Vẽ đồ thị hàm symbolic

2. Tính vi phân bằng hàm int - Nếu S là biểu thức Symbolic thì:

int(S) tích phân không xác định của S theo biến mặc nhiên (muốn biết biến mặc nhiên này ta dùng hàm findsym).

int(S,v) tích phân không xác định của S theo v.

int(S,a,b) tích phân xác định của S trên cận [a,b]

int(S,v,a,b) tích phân xác định của S theo v trên cận [a,b]

Ví dụ: Tính ∫012x219+12x27x2+1dx size 12{ Int cSub { size 8{0} } cSup { size 8{1} } { { {2x rSup { size 8{2} } left ("19"+"12"x rSup { size 8{2} } right )} over {7 left (x rSup { size 8{2} } +1 right )} } } ital "dx"} {}

>>syms x

>>S=2*x^2*(19+12*x^2)/(7*(x^2+1))

>>y=int(S,x,0,1) % tích phân S theo x trên cận [0,1]

>>subs(y) % đổi sang kiểu số

3. Giải hệ phương trình bằng hàm solve:

>>help solve

>>syms x y

>>[x,y]= solve('x^2*sin(x^2)-3*y=7','x+y=1')

Sau khi thu được nghiệm x và y, sinh viên hãy thay vào 2 phương trình trên và nhận xét kết quả.

4. Vẽ mặt 3D bằng hàm ezsurf: Ví dụ vẽ mặt S=f(x,y)=y1+x2+y2 size 12{S=f ( x,y ) = { {y} over {1+x rSup { size 8{2} } +y rSup { size 8{2} } } } } {} trên miền xác định: -5<x<5; -2π<y<2π.

>>syms x y

>>S=y/(1+x^2+y^2)

>>ezsurf(S, [-5 5 –2*pi 2*pi])

Hình 3.2 – Vẽ đồ thị 3D cho hàm số symbolic

Simulink

Simulink 5.0 (Simulation and Link - R13) được MatWorks giới thiệu vào tháng 6 năm 2003. Nó cho phép phân tích, mô hình hóa và mô phỏng các hệ thống động tuyến tính và phi tuyến, liên tục và rời rạc một cách trực quan trong môi trường giao tiếp đồ họa, bằng các thao tác chuột đơn giản. Có thể nói, không tận dụng được Simulink là một thiệt thòi lớn cho người làm công tác mô phỏng!

Khởi động Simulink bằng một trong các cách sau:

nhập: >>simulink

hoặc nhấp chuột vào trên menubar của Matlab

Thư viện simulink hiện ra như hình 3.3:

Trước tiên, sinh viên hãy nhấp chuột vào các thanh cuộn của thư viện để có cái nhìn thân thiện về simulink.

Từ đây, để có thể tạo mô hình bằng simulink, hãy:

  • nhấp chuột vào biểu tượng của thư viện simulink
  • chọn: File – New – Model trong Menu của thư viện Simulink
  • chọn: File – New – Model trong cửa sổ lệnh của Matlab

Hình 3.3 – Cửa sổ chính của thư viện Simulink

Hình 3.4 – Môi trường soạn thảo của Simulink

Cửa sổ này (hình 3.4) cho phép ta ‘nhấp - kéo - thả’ vào từng khối chức năng trong thư viện simulink. Ví dụ, đặt vào đây khối ‘Sine Wave’ trong thư viện của (hình 3.5):

Hình 3.5 – Lấy một khối từ thư viện

Sau khi đặt tất cả các khối cần thiết của mô hình, ta nối chúng lại bằng cách ‘nhấp - giữ’ và kéo một đường từ ngõ ra của khối này đến ngõ vào của khối khác rồi thả phím trái chuột, một kết nối sẽ được thiết lập.

1. Xây dựng mô hình hệ thống xe tải:

Hình 3.6 – Mô hình xe tải

cho bởi phương trình: mdvdt=u−bv size 12{m { { ital "dv"} over { ital "dt"} } =u - ital "bv"} {} hay dvdt=1m(u−bv) size 12{ { {"dv"} over {"dt"} } = { {1} over {m} } ( u - "bv" ) } {}.

Trong đó m là khối lượng xe, u là lực tác động của động cơ (ngõ vào của mô hình), b là hệ số ma sát và v là vận tốc đạt được (ngõ ra của mô hình).

Xuất phát điểm của việc xây dựng các mô hình hệ thống từ các phương trình vi phân tương ứng là các khối tích phân (Integrator). Nếu trong phương trình mô tả hệ thống có vi phân bậc n thì ta sẽ đặt vào mô hình n khối tích phân, do quan hệ ∫dvdt=v size 12{ Int { { {"dv"} over {"dt"} } } =v} {}.

  • Mở một cửa sổ mô hình mới.
  • Đặt vào mô hình khối ‘Integrator’ từ thư viện ‘Continuous’ và kẻ các đường thẳng nối đến ngõ vào và ngõ ra của khối này.
  • Đặt nhãn ‘vdot’ (dv/dt) cho cho đường nối đến ngõ vào và ‘v’ cho đường nối đến ngõ ra bằng cách nhấp đúp chuột ngay phía trên các đường này.

Từ phương trình hệ thống ta thấy dv/dt (vdot) bằng tích của thành phần (1/m) và thành phần tổng (u-bv), nên ta thêm khối 1/m ngay trước khối tích phân:

  • Đặt vào khối ‘Gain’ trong thư viện .
  • Nhấp đúp chuột vào khối này để thay đổi độ lợi thành 1/m.
  • Đặt nhãn ‘inertia’ cho khối này để tượng trưng cho quán tính của xe (nhấp đúp vào nhãn ‘Gain’ bên dưới khối).

Bây giờ ta đặt khối tổng với 2 ngõ vào ‘+-‘, ngõ vào ‘+’ sẽ được nối với u, ngõ vào ‘-’ sẽ được nối với thành phần bv để được (u-bv)

  • Đặt vào khối ‘Sum’ trong thư viện
  • Nhấp đúp vào khối này để đổi ngõ vào từ ‘++’ sang ‘+-’

Để được thành phần bv ta chỉ cần đặt thêm khối ‘Gain’ với độ lợi b:

  • Đặt khối ‘Gain’ có độ lợi b
  • Đặt nhãn là ‘damping’ tượng trưng cho thành phần lực cản của xe.

Đến đây việc xây dựng mô hình xe tải với ngõ vào u và ngõ ra v coi như hoàn thành. Tuy nhiên, để mô phỏng mô hình này, ta cần đặt thêm khối ‘Step’ vào u và hiển thị v trên khối ‘Scope’

  • Đặt khối ‘Step’ trong thư viện biên độ u ngay ngõ vào.
  • Đặt khối ‘Scope’ trong thư viện ngay ngõ ra v.

Nhớ rằng m, b và u là các biến cần được gán trị trước khi mô phỏng.

>>m=1000

>>b=50

>>u=500

Thời gian mô phỏng hệ thống tùy thuộc vào thông số ‘Stop time’ trong menu ‘SimulationSimulation paramrters’,giả sử đặt 120 (Hình 3.7).

Để chạy mô phỏng, ta có thể thực hiện bằng 1 trong các cách:

  • nhấp chuột vào biểu tượng trên menubar của mô hình
  • chọn: Simulation → Start
  • Ctrl-T

Nhấp đúp vào ‘Scope’ để xem kết quả mô phỏng.

Hình 3.7 – Thay đổi thông số mô phỏng

2. Xây dựng mô hình hệ thống điều khiển vị trí motor DC cho bởi phương trình vi phân sau:

d 2 θ dt 2 = 1 J K t i − b dθ dt size 12{ { {d rSup { size 8{2} } θ} over { ital "dt" rSup { size 8{2} } } } = { {1} over {J} } left (K rSub { size 8{t} } i - b { {dθ} over { ital "dt"} } right )} {}
di dt = 1 L − Ri + V − K e dθ dt size 12{ { { ital "di"} over { ital "dt"} } = { {1} over {L} } left ( - ital "Ri"+V - K rSub { size 8{e} } { {dθ} over { ital "dt"} } right )} {}

Trong đó:

J = 0.01 Kgm2/s2là moment quán tín của rotor

b = 0.1 Mms là hệ số ma sát của các bộ phận cơ khí

K = Ke = Kt = 0.01 Nm/A là hằng số sức điện động

R = 10 ohm là điện trở dây quấn

L = 0.5 H là hệ số tự cảm

V là điện áp đặt lên cuộn dây của motor

θ là vị trí trục quay (ngõ ra của mô hình)

i là dòng điện chạy trong cuộn dây của motor.

Hình 3.8 – Mô hình toán hệ điều khiển vị trí motor DC

Quan sát từng phương trình mô tả hệ thống ta thấy cấu trúc của chúng cũng tương tự như phương trình của câu . Sinh viên lần lượt thực hiện trên từng phương trình để được (hình 3.9):

(Hình 3.9)

Kết hợp 2 phương trình:

(Hình 3.10)

Đặt vào mô hình khối ‘Step’ để làm tín hiệu tham khảo, khối ‘Scope’ để quan sát đáp ứng. Sinh viên hãy gán trị cho tất cả các thông số của mô hình, thực hiện mô phỏng và quan sát đáp ứng (Hình 3.11).

Hãy thay đổi ngõ vào mô hình bằng khối tạo xung vuông. Mô phỏng, quan sát kết quả và nhận xét.

TỰ CHỌN

1. Sinh viên hãy tính đạo hàm cấp 2 của hàm y=xe1−x2 size 12{y= ital "xe" rSup { size 8{ left (1 - x rSup { size 6{2} } right )} } } {} bằng tay và kiểm chứng kết quả bằng symbolic.

3. Tính tích phân sau và kiểm chứng kết quả bằng symbolic: ∫0∞e−x2 size 12{ Int cSub {0} cSup { infinity } {e rSup { size 8{ - x rSup { size 6{2} } } } } } {}

Hình 3.11 - Mô hình Simulink hoàn chỉnh của hệ điều khiển vị trí motor DC

3. Xây dựng mô hình hệ thống xe lửa cho bởi phương trình:

M 1 d 2 x 1 dt 2 = F − k ( x 1 − x 2 ) − μM 1 g dx 1 dt size 12{M rSub { size 8{1} } { {d rSup { size 8{2} } x rSub { size 8{1} } } over { ital "dt" rSup { size 8{2} } } } =F - k ( x rSub { size 8{1} } - x rSub { size 8{2} } ) - μM rSub { size 8{1} } g { { ital "dx" rSub { size 8{1} } } over { ital "dt"} } } {}
M 2 d 2 x 2 dt 2 = k ( x 1 − x 2 ) − μM 2 g dx 2 dt size 12{M rSub { size 8{2} } { {d rSup { size 8{2} } x rSub { size 8{2} } } over { ital "dt" rSup { size 8{2} } } } =k ( x rSub { size 8{1} } - x rSub { size 8{2} } ) - μM rSub { size 8{2} } g { { ital "dx" rSub { size 8{2} } } over { ital "dt"} } } {}

(Hình 3.12 Photo courtesy: Dr. Howard Blackburn)

Trong đó các thông số tượng trưng như sau:

M1=1 kg là khối lượng toa kéo;

M2=0.5 kg là khối lượng toa khách;

k=1 N/sec là độ cứng lò xo kết nối giữa 2 toa;

F=1 N là lực tác động của đầu máy (ngõ vào mô hình);

μ=0.002 sec/m là hệ số ma sát lăn;

g = 9.8 m/s^2 là gia tốc trọng trường

x1, x2 vị trí 2 toa (ngõ ra).

Hình 3.13 – Mô hình toán của hệ thống xe lửa
0