Forum: Digitale Signalverarbeitung / DSP / Machine Learning Abwärtswandler via Matlab Code


von Albert K. (teslace)


Lesenswert?

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
von M.A. S. (mse2)


Lesenswert?

Welcher Natur sind Deine Schwierigkeiten?

von Der Andere (Gast)


Lesenswert?

Nimm LTSpice

von Albert K. (teslace)


Lesenswert?

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

von M.A. S. (mse2)


Lesenswert?

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.

von Albert K. (teslace)


Lesenswert?

% 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
von Tilman K. (inginfo)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.