Hallo, ich will einen Abwärtswandler in Matlab per Code simulieren. Hab da einige Schwierigkeiten, allgemein wie gehe ich das an? Kennt ihr vielleicht gute Tutorials oder ähnliches? Vielen Dank
:
Verschoben durch Moderator
Also ich weis nicht ganz wie ich das angehen soll. Ich könnte jetzt alle Formeln in Matlab beschreiben, doch wie schaffe ich diese dann dynamisch zu verbinden (sprich Spule, Kondensator und den ein und ausschaltenden Transistor) Ich muss leider Matlab nutzen
Albert K. schrieb: > Also ich weis nicht ganz wie ich das angehen soll. Ich könnte > jetzt alle > Formeln in Matlab beschreiben, doch wie schaffe ich diese dann dynamisch > zu verbinden (sprich Spule, Kondensator und den ein und ausschaltenden > Transistor) > > Ich muss leider Matlab nutzen Die Antwort auf meine Frage lautet also, dass Du überhaupt keine Ahnung vom Umgang mit Matlab hast, richtig?! Dann solltest Du in der Tat Matlab-Tutorials oder -Bücher durcharbeiten. Mit Sicherheit gibt es unzählige davon, als pdf zum Lesen oder auf youtube zum Gucken, was auch immer Deinem Geschmack entspricht. Was davon für Dich taugt, musst Du schon selber herausfinden, wir kennen Deinen Kenntnisstand und Deine genauen Probleme ja nicht. Deinen Angaben nach brauchst Du aber Grundlagen.
% Schaltkreis Daten clear L = [0.0005]; %Induktivität C = [0.000033]; %Kapazität Rc = [0.03]; %Widerstand Kapazität Rl = [0.2]; %Widerstand Spule Ue = [5]; %Eingangsspannung Ua = [1.2]; %Ausgangsspannung Ie = [2]; %Eingangsstrom Ia = [0.4]; %Ausgangsstrom T = [0.00005]; %Periode D = [0.7]; %duty cycle N = 20; %Anzahl der dargestellten Perioden A = [ 0 1/C ; -1/L -(Rc+Rl)/L ]; B1 = [ 0 -1/C ; -1/L Rc/L ]; B2 = [ 0 -1/C ; 0 Rc/L ]; C = [ 1 Rc ; 0 1 ]; t = zeros(N,1);%start Zeit iL0 = 0; uC0 = 0; iL = zeros(N,1); uC = zeros(N,1); ungerade = 1:2:N; %ungerade zahlen gerade = 2:2:N; tein0 = D.*T; taus0 = T-tein0; for k=1:N if k==1 iL(k,1) = 0; uC(k,1) = 0; t(k,1) = 0; end if k>1 t0 = ((k-1)-1).*T; %zeit nach k-1 Perioden tein = t0+D.*T; %tein nach Periode t0 if max(k==gerade)==1 t(k,1) = tein; iL(k,1) = (A(2,1)*uC(k-1,1)+A(2,2)*iL(k-1,1)+B1(2,1)*Ue+B1(2,2)*Ia)*tein0; uC(k,1) = (A(1,1)*uC(k-1,1)+A(1,2)*iL(k-1,1)+B1(1,1)*Ue+B1(1,2)*Ia)*tein0; end if max(k==ungerade)==1 t(k,1) = t0; iL(k,1) = (A(2,1)*uC(k-1,1)+A(2,2)*iL(k-1,1)+B2(2,1)*Ue+B2(2,2)*Ia)*taus0; uC(k,1) = (A(1,1)*uC(k-1,1)+A(1,2)*iL(k-1,1)+B2(1,1)*Ue+B2(1,2)*Ia)*taus0; end end end plot(t,iL) Also um mein Probelm genauer zu beschreiben: wenn man (t,iL) plotet sollte iL eigentlich um den Augangsstrom schwingen. Irgendwo habe ich einen Wurm drin aber wo? ( A, B1, B2 stellen die Differentialgleichung des synchronen Abwärtswandlers dar, wobei B1 den geschlossenen Schaltkreis und B2 den offenen Schaltkreis beschreibt)
:
Bearbeitet durch User
Hallo Albert, ob deine Gleichungen stimmen oder nicht, habe ich nicht überprüft, sondern stattdessen selbst gerechnet. Ausgangspunkt ist der in schaltung.png dargestellte Aufbau. Mithilfe der in ausgangsspg.png aufgestellten Gleichung zur Berechnung der Ausgangsspannung werden die Differentialgleichungen für den Spulenstrom (spulenstrom.png) und für die Kondensatorspannung (kondensatorspg.png) aufgestellt. Es ergibt sich ein System aus zwei Differentialgleichungen, die Lösung erfolgt mittels MATLAB/ode45:
1 | % Simulation eines Step-Down-Wandlers |
2 | function stepdown |
3 | global L R_L C R_C R_Last U_Bat f D |
4 | L = 0.0001; % Induktivität (in H) |
5 | R_L = 0.25; % Innenwiderstand Spule (in Ohm) |
6 | C = 0.00001; % Kapazität (in F) |
7 | R_C = 0.25; % Innenwiderstand Kondensator (in Ohm) |
8 | R_Last = 25.0; % Lastwiderstand (in Ohm) |
9 | U_Bat = 10.0; % Eingangsspannung (in V) |
10 | f = 200000.0; % Schaltfrequenz (in Hz) |
11 | D = 0.75; % Tastgrad |
12 | |
13 | y_0 = [0.3; 7.5]; % Startwerte für i_L und u_C |
14 | t_0 = 0.0000; % Startzeitpunkt (in Sekunden) |
15 | t_1 = 0.0003; % Stoppzeitpunkt (in Sekunden) |
16 | |
17 | % DGL-System lösen, darauf achten, dass während jeder |
18 | % Periode mindestens 50 Stützpunkte berechnet werden. |
19 | t_step = 1 / (50 * f); |
20 | options = odeset('MaxStep', t_step); |
21 | [T,Y] = ode45(@dglsys, [t_0 t_1], y_0, options); |
22 | |
23 | i_L = Y(:,1); |
24 | u_C = Y(:,2); |
25 | u_Last = f1(i_L, u_C); |
26 | |
27 | subplot(3,1,1); plot(T, u_sw(T)); title('Spannung am Schalter'); |
28 | subplot(3,1,2); plot(T, i_L); title('Spulenstrom'); |
29 | subplot(3,1,3); plot(T, u_Last); title('Ausgangsspannung'); |
30 | end |
31 | |
32 | % Spannung am Schalter in Abhängigkeit von der Zeit berechnen |
33 | function u = u_sw(t) |
34 | global L R_L C R_C R_Last U_Bat f D |
35 | t_norm = mod(t, 1 / f); |
36 | u = U_Bat * (t_norm < D / f); |
37 | end |
38 | |
39 | % Spannung u_Last in Abhängigkeit von i_L und u_C berechnen |
40 | function u_Last = f1(i_L, u_C) |
41 | global L R_L C R_C R_Last U_Bat f D |
42 | u_Last = i_L * R_Last * R_C / (R_Last + R_C) + u_C * R_Last / (R_Last + R_C); |
43 | end |
44 | |
45 | % DGL-System des Wandlers mit dem Zustandsvektor y = [i_L; u_C] |
46 | function dy_dt = dglsys(t, y) |
47 | global L R_L C R_C R_Last U_Bat f D |
48 | i_L = y(1); |
49 | u_C = y(2); |
50 | |
51 | dy_dt(1,1) = 1 / L * u_sw(t) - R_L / L * i_L - f1(i_L, u_C) / L; |
52 | dy_dt(2,1) = 1 / C * i_L - 1 / ( C * R_Last) * f1(i_L, u_C); |
53 | end |
Viele Grüße! Tilman
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.