Witam
Programuje troche (symuluje) w matlabie 6.5 silnik indukcyjny klatkowy dwufazowy przy pomocy skrypcików zawartych w plikach „plik.m” oraz „plikfun.m” umieszczonych w folderze „work”. Plik „plikfun.m” zawiera prawe strony rozwiązywanych równań:
Natomiast plik „plik.m” jest skryptem głównym (uruchamianym):
W skrypcie tym wywoływana jest funkcja ode45 numerycznego całkowania układu równań. Jest to funkcja zmiennokrokowa – sama dobiera sobie krok czasu tak aby utrzymać dokładność obliczeń równą 1e-6.
I tu jest pies pogrzebany. Wynikiiem działania [t,y]=ode45('plikfun',[tpocz,tkonc],[0,0,0,0,0,0]); jest macierz [t,y], której pierwszą kolumną są kroki czasu (o zmiennym przyroście) a kolejnymi są wyliczone odpowiadające krokom czasu wartości prądów stojana, wirnika, kąt fi, prędkość kątowa np.:
Dla podanych w plikach parametrów silnika, zasilania i czasu symulacji kroków symulacji jest 6589 (podkreślam ze zmiennym krokiem).
Mój problem polega na tym, że z tych 6589 rozwiązań(w danych warunkach – może być ich więcej) symulacji od czasu „tpocz” do czasu „tkonc” musze wybrać 4000 ze stałym krokiem! dt = (tkon-tpocz)/4000. Czyli z macierzy [t,y] o wymiarach 6589(lub więcej)x7 o zmiennym przyroście argumentu t potrzebuję wybrać macierz [t1,y1] o wymiarach 4000 x 7 ze stałym przyrostem argumentu t1 równym dt = (tkon-tpocz)/4000. Wiadomo, że dla stałego przyrostu dt nie będzie w macierzy [t,y] odpowiadających mu elementów (z wyjątkiem pierwszego i ostatniego- chyba że przypadek) więc dany element trzeba będzie obliczyć jako średnią sąsiednich.
„szkic”:
t: +.................+...+.....+.....+.........+...............+......+...+...+.........+............+.......+
t1:*............. *.............*.............*.............*.............*.............*.............*.............*
gdzie:
t - wektor czasu z [t,y], t1 – wektor czasu z [t1,y1], + - 6589 rozwiązań z funkcji ode45, * - 400 rozwiązań, które nie wiem jak wybrać
Niestety w matlabie nie jestem zbytnio otrzaskany i na razie nie wiem jak to napisać, zwracam się więc do Was o pomoc, za którą z góry dziękuję
Programuje troche (symuluje) w matlabie 6.5 silnik indukcyjny klatkowy dwufazowy przy pomocy skrypcików zawartych w plikach „plik.m” oraz „plikfun.m” umieszczonych w folderze „work”. Plik „plikfun.m” zawiera prawe strony rozwiązywanych równań:
%plikfun.m
%prawe strony równań
function yprime=plikfun(t,y);
global R B G p Uds Uqs alfa omega1 D J
i=[y(1:4)];
u=[sqrt(2)*Uds*cos(omega1*t); % wektor napięć zasilających
sqrt(2)*Uqs*cos(omega1*t+alfa);
0;
0];
TL=0; %moment obciążenia
Te=p*i'*G*i; %moment elektromagnetyczny
t %wyświetla czas symilacji
yprime=[-B*((R+p*y(5)*G)*i-u);
1/J*(Te-TL)-D/J*y(5);
y(5)];
Natomiast plik „plik.m” jest skryptem głównym (uruchamianym):
%plik.m
%ten skrypt uruchamiać: silnik indukcyjny klatkowy dwufazowy - rozruch
clc;
clear;
global R B G p Uds Uqs alfa omega1 D J
%parametry zasilania
Uds=380;
Uqs=380;
fn=50;
alfa=pi/2;
omega1=-2*pi*fn;
%parametry silnika
Rs=0.62;
Rr=0.84;
Ls=0.097;
Lr=0.097;
M=0.087;
D=0;
J=0.104;
p=2;
R=[Rs,0,0,0;
0,Rs,0,0;
0,0,Rr,0;
0,0,0,Rr];
L=[Ls,0,M,0;
0,Ls,0,M;
M,0,Lr,0;
0,M,0,Lr];
G=[0,0,0,0;
0,0,0,0;
0,M,0,Lr;
-M,0,-Lr,0];
B=inv(L);
tpocz=0;%poczatek symulacji
tkonc=1;%czas koncowy symulacji
[t,y]=ode45('plikfun',[tpocz,tkonc],[0,0,0,0,0,0]);
%menu do wykresow
close all
while 1
clc;
k=menu('wykresy',' Ids=f(t)','Iqs=f(t)','nieprzeliczony Idr=f(t)','nieprzeliczony Iqs=f(t)','fi=f(t)','w=f(t)','Exit=Wyjscie');
if (k==1) plot(t,y(:,1)), grid, title('prad stojana fay A Ids=f(t)'), xlabel('t[s]'), ylabel('Ids[A]');
elseif (k==2) plot(t,y(:,2)), grid, title('prad stojana fay B Iqs=f(t)'), xlabel('t[s]'), ylabel('Iqs[A]');
elseif (k==3) plot(t,y(:,3)), grid, title('nieprzeliczony prad wirnika fazy A Idr=f(t)'), xlabel('t[s]'), ylabel('Idr[A]');
elseif (k==4) plot(t,y(:,4)), grid, title('nieprzeliczony prad wirnika fazy B Iqs=f(t)'), xlabel('t[s]'), ylabel('Iqs[A]');
elseif (k==5) plot(t,y(:,6)), grid, title('kat obrotu fi=f(t)'), xlabel('t[s]'), ylabel('fi[rad]');
elseif (k==6) plot(t,y(:,5)), grid, title('predkosc katowa w=f(t)'), xlabel('t[s]'), ylabel('w[rad/s]');
elseif (k==7) break
end
end
close all
W skrypcie tym wywoływana jest funkcja ode45 numerycznego całkowania układu równań. Jest to funkcja zmiennokrokowa – sama dobiera sobie krok czasu tak aby utrzymać dokładność obliczeń równą 1e-6.
I tu jest pies pogrzebany. Wynikiiem działania [t,y]=ode45('plikfun',[tpocz,tkonc],[0,0,0,0,0,0]); jest macierz [t,y], której pierwszą kolumną są kroki czasu (o zmiennym przyroście) a kolejnymi są wyliczone odpowiadające krokom czasu wartości prądów stojana, wirnika, kąt fi, prędkość kątowa np.:
>>[t(100:105),y(100:105,:)]
%[ t Ids Iqs Idr Iqr w fi ] =[t,y]
0.0494 6.1714 99.6758 -7.2007 -82.6593 12.3952 0.4626
0.0507 -27.3934 91.4330 22.5955 -74.4526 12.2016 0.4780
0.0519 -54.6976 71.5158 46.4703 -55.9551 12.4990 0.4931
0.0531 -72.4857 42.9546 61.5772 -29.9715 13.2575 0.5089
0.0544 -78.1688 9.8695 65.7002 -0.2679 14.3984 0.5258
0.0556 -70.9107 -22.9422 58.2102 28.8259 15.7881 0.5444
Dla podanych w plikach parametrów silnika, zasilania i czasu symulacji kroków symulacji jest 6589 (podkreślam ze zmiennym krokiem).
Mój problem polega na tym, że z tych 6589 rozwiązań(w danych warunkach – może być ich więcej) symulacji od czasu „tpocz” do czasu „tkonc” musze wybrać 4000 ze stałym krokiem! dt = (tkon-tpocz)/4000. Czyli z macierzy [t,y] o wymiarach 6589(lub więcej)x7 o zmiennym przyroście argumentu t potrzebuję wybrać macierz [t1,y1] o wymiarach 4000 x 7 ze stałym przyrostem argumentu t1 równym dt = (tkon-tpocz)/4000. Wiadomo, że dla stałego przyrostu dt nie będzie w macierzy [t,y] odpowiadających mu elementów (z wyjątkiem pierwszego i ostatniego- chyba że przypadek) więc dany element trzeba będzie obliczyć jako średnią sąsiednich.
„szkic”:
t: +.................+...+.....+.....+.........+...............+......+...+...+.........+............+.......+
t1:*............. *.............*.............*.............*.............*.............*.............*.............*
gdzie:
t - wektor czasu z [t,y], t1 – wektor czasu z [t1,y1], + - 6589 rozwiązań z funkcji ode45, * - 400 rozwiązań, które nie wiem jak wybrać
Niestety w matlabie nie jestem zbytnio otrzaskany i na razie nie wiem jak to napisać, zwracam się więc do Was o pomoc, za którą z góry dziękuję