Matlab co tam, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, metody numeryczne w technice, laborki


Odwrócone wahadło.

Układ składa się z wózka i zamocowanego na elastycznym przegubie pionowego wahadła.

DANE

M - masa wózka 0.5 kg

m - masa wahadła 0.5 kg

b - współczynnik tarcia 0.1 N/m/sec

l - połowa długoPci wahadla0.3 m

I - moment bezwładnoPci wahadła 0.006 kg*m^2

F - siła przyłożona do wózka

x - położenie wózka

- kąt odchylenia wahadła z pozycji pionowej

Rozklad sił:

Równania ruchu:

1. dla wózka w kierunku poziomym 0x01 graphic

2.dla wahadła w kierunku poziomym 0x01 graphic

3. suma sił w kierunku prostopadłym do wahadła         0x01 graphic

4. suma momentów względem środka wahadła 0x01 graphic

z 1 i 2 otrzymujemy: 0x01 graphic

z 2 i 3 0x01 graphic

Przykład 1

Napisać funkcję obliczającą kwadrat z dowolnej liczby.

 

f_kw.m

function a=f_kw(x)

a=x.^2

 

>> y=f_kw(10)

y=100

 

Przykład 2

Napisać funkcję obliczającą średnią arytmetyczną i geometryczną ciągu zapisanego w wektorze: a=[a1 a2 ... an]

 

srednia.m

function [sa,sg]=srednia(a)

n=length(a);

sa=sum(a)/n;

sg=(prod(a))^(1/n);

 

Możemy sprawdzić działanie tej funkcji

>> [a,g]=średnia([1:2:11])

gdzie wynikiem będzie liczba a (średnia arytmetyczna) i g (średnia geometryczna).

  1. 1.        RÓWNANIE RÓŻNICZKOWE

 

Większość obiektów dynamicznych da się opisać równaniem różniczkowym postaci:

 

0x08 graphic
any(n)+an-1y(n-1)+... +a1y1+a0y=u(t)

 

 

 

 

Każde równanie różniczkowe n-tego rzędu da się sprowadzić do układu n równań rzędu 1-go. Zróbmy następujące podstawienia:

y(t)=x1(t)

x'1=x2

x'2=x3

:

x'n-1=xn

wówczas:

0x01 graphic

Otrzymamy układ równań 1-go rzędu następującej postaci:

0x01 graphic
0x01 graphic

który w notacji macierzowjma następującą postać:

0x01 graphic
=0x01 graphic

0x01 graphic

 

Takie równanie macierzowe zapiszemy teraz w postaci funkcji Matlaba:

 

row_rozn.m

 

function dx=row_rozn(t,x)

global A B

dx=A*x+wymuszenie(t);

 

Funkcja reprezentująca wymuszenie (wektor sygnałów wejściowych będzie miała następującą postać:

 

wymuszenie.m

 

function u=wymuszenie(t)

if t >= 0

u = 1

else

u = 0

end

 

Aby numerycznie rozwiązać powyższe równanie różniczkowe w Matlabie (tzn. otrzymać wartości funkcji y dla odpowiadających im wartości chwil czasowych t należy użyć funkcji ode23 lub ode45. Skrypt rozwiązujący takie równanie powinien mieć następującą postać:

global A B

A=[ ]

B=[ ]

[t,y] = ode23(`rów_różn',[t0 tk],y0)

gdzie: t,y - rozwiązania, wektory odpowiednio chwil czasowych i wartości funkcji,

`rów_różn' - nazwa funkcji definiującej rozwiązywane równanie różniczkowe,

t0, tk - przedział czasu, w którym ma być rozwiązywane równanie różniczkowe,

y0 - warunki początkowe (wartość zmiennych x1 …xn w chwili t0.

 

Przykład:

Oscylator liniowy z tłumieniem (obciążnik na sprężynie)

0x01 graphic
(przyjęto, iż nie występuje wymuszenie u=0)

0x01 graphic

0x01 graphic

 

Funkcja reprezentująca powyższy układ równań różniczkowych:

oscylator.m

 

function DX=oscylator(t,X)

global A

DX=A*X;

 

Skrypt rozwiązujący takie równanie:

 

global A ;

k=1;

m=1;

=0.5;

A=[0 1 ; -k/m -/m];

y0=[5 0]; (warunek początkowy dla położenia różny od 0, x1=5)

[t,y]=ode23('oscylator',[0 20], y0);

plot(t,y(:,1));

Przykład:

Weźmy pod uwagę oscylator liniowy z tłumieniem (obciążnik na sprężynie) opisany następującym równaniem różniczkowym:

0x01 graphic

0x01 graphic

Przykład:

Jeżeli 0x01 graphic
, to

» l=[2 4] <Enter>

» m = [3 0 4 5] <Enter>

 

Ekran MATLABA powinien wyglądać tak:

» l=[2 4]

l =

2 4

» m = [3 0 4 5]

m =

3 0 4 5


 

W przestrzeni roboczej MATLABA istnieją teraz zmienne l (licznik transmitancji) i m (mianownik).

Wprowadź polecenie printsys(l,m) , otrzymasz

num/den =

2 s + 4

------------------

3 s^3 + 4 s + 5


 

W Matlabie istnieje również możliwość generacji standardowych modeli obiektów dynamicznych:

gdzie: n - jest rzędem wielomianu, którym jest to opóźnienie przybliżone.

[l,m]=pade(T0,n)

[A,B,C,D]=pade(T0,n)

Charakterystyki czasowe:

step(l,m) lub step(A,B,C,D)

 

impulse(l,m) lub impulse(A,B,C,D)

y=lsim(l,m,u,t)

y=lsim(A,B,C,D,u,t,x0)

gdzie: u(t) - wektor wartości sygnału wejściowego dla kolejnych chwil t

x0 - wektor wartości początkowe

 

Charakterystyki częstotliwościowe:

bode(l,m)

nyquist(l,m)

Przykład 1

Wyznaczyć odpowiedź skokową układu o transmitancji

0x01 graphic

dla n = 1 oraz = 0.5. Wyniki symulacji wyświetlić na oscyloskopie.

Zadanie to zrealizowane zostanie w następującym układzie.

0x01 graphic

Rys. Kompletny model badanego układu

Przykład 2

Wyznaczyć odpowiedź skokową układu o transmitancji

0x01 graphic

dla n = 2 oraz = 0.25. Czas trwania symulacji 10 sekund. Wyniki symulacji wyświetlić na oscyloskopie oraz zapisać do przestrzeni roboczej MATLABA i następnie:

uzyskane wyniki zapisać do pliku dyskowego pod nazwą odp_skokowa

zamknąć okno SIMULINKA

wyczyścić przestrzeń roboczą MATLABA poleceniem clear

odczytać umieszczone w pliku dyskowym dane i przedstawić je na wykresie

uzyskany wykres zamieścić w dokumencie Worda

Zadanie to zrealizowane zostanie w następującym układzie.

0x01 graphic

Rys. Model układu z przykładu 2

Przykład 3

Wyznaczyć odpowiedź skokową układu o transmitancji

0x01 graphic

dla n = 2 oraz = = 0.25, 0.5, 0.75. Czas trwania symulacji 10 sekund. Wyniki symulacji przedstawić na jednym wykresie.

Do realizacji tak postawionego zadania wykorzystany zostanie schemat pokazany na poprzednim rysunku i przechowywany pod nazwą uklad_IIrz.mdl. Skrypt wykonujący to zadanie jest następujący:

close all % Zamknięcie wszystkich okien graficznych

clear % Wyczyszczenie pamieci roboczej Matlaba

open_system('uklad_IIrz') % Otwarcie modelu Simulinka

wn = 2; % Wartość częstotliwości drgań własnych

zeta = [ 0.25 0.5 0.75]; % Wartości współczynników tłumienia

for i=1:3, % Pętla for

set_param('uklad_IIrz/Transfer Fcn','Numerator',num2str(wn^2),...

'Denominator','[1 2*zeta(i)*wn wn^2]') % Ustawienie

% parametrów transmitancji

sim('uklad_IIrz') % Wykonanie symulacji

t(:,i)=wyniki(:,1); % Podstawienie wyników symulacji

u(:,i)=wyniki(:,2); % pod odpowiednią zmienną

y(:,i)=wyniki(:,3);

end; % Zakończenie pętli for

close_system % Zamknięcie modelu Simulinka

id1 = figure(1) % Otwarcie okna graficznego

plot(t(:,1),u(:,1),'k:',t(:,1),y(:,1),'k-',t(:,2),y(:,2),'k-',...

t(:,3),y(:,3),'k-') % Wykreślenie zmiennych na wykresie

xlabel('t [s]') % Opis osi x

ylabel('y(t)') % Opis osi y

title('Odpowiedzi skokowe układu II rzędu') % Tytuł wykresu

set( id1, 'Color',[1 1 1]) % Usunięcie marginesu otaczającego wykresy

Przykład 4

Dla układu opisanego w przykładzie 1, zamaskować blok z transmitancją II rzędu

0x01 graphic
]

i ustawić wartości parametrów na ωn = 1 oraz ζ = 0.5.

Należy zbudować model pokazany na poprzednim rysunku.

0x01 graphic

Rys. Schemat modelu z zastąpionymi współczynnikami transmitancji na zmienne

Kolejka

Rozważmy kolejkę - zabawkę składającą się z lokomotywy i dołączanego do niej (poprzez sprężysty zaczep) wagonika.

M1 = 1 kg

M2 = 0.5 kg

k = 1 N/sec stała sprężyny

F= 1 N

= 0.002 sec/m. współczynnik tarcia

g = 9.8 m/s^2 przysp. ziemskie

Z praw Newtona wynika, że suma sił działających na ciało jest równa jego masie pomnożonej przez przyspieszenie. W tym wypadku, na ciało M1działają następujące siły: siła pochodząca od silnika elektrycznego, tarcie oraz siła, którą oddziałuje sprężyna. Na M2 - jedynie siła sprężyny oraz tarcie. Można to opisać równaniami:

0x01 graphic

SUWNICA:

Oznaczenia:

 

Równania opisujące model.

 

0x01 graphic

 

0x01 graphic

 

0x01 graphic

 Równania opisujące model są równaniami nieliniowymi (pierwsza pochodna jest podnoszona do kwadratu, jest również argumentem funkcji sin i cos). Dlatego układu tego nie można bezpośrednio rozwiązać stosując metodę zmiennych stanu, nie można również wyznaczyć transmitancji. Można go natomiast łatwo rozwiązać tworząc odpowiedni model w Simulinku

 

Układ ten można jednak poddać pewnemu uproszczeniu (linearyzacji). W tym celu utwórzmy sobie następujące zmienne stanu:

 

0x01 graphic

 Należy przyjąć, że układ pracuje przy małych wychyleniach obciążenia oraz małych prędkościach kątowych tego obciążenia:

cos x3 Ⴛ 1, sin x3 Ⴛ x3, sin2 x3 Ⴛ 0, x42 Ⴛ 0

wówczas:

 

0x01 graphic

gdzie: 0x01 graphic
, 0x01 graphic
, 0x01 graphic
, 0x01 graphic

Modelowanie zawieszenia samochodu:

Równania ruchu:

0x01 graphic

0x01 graphic

Poddając stronami powyższe równania transformacie Laplace'a otrzymamy:

0x01 graphic

0x01 graphic

 

0x01 graphic

 

0x01 graphic

 

0x01 graphic

 

0x01 graphic

Po znalezieniu macierzy odwrotnej otrzymamy następujące równanie:

0x01 graphic

 

0x01 graphic

 

Kiedy przyjmiemy, że sygnał sterujący U(s) = 0 otrzymamy transmitancję następującej postaci:

0x01 graphic



Wyszukiwarka