% Simulation des Schaltnetzteils in Aufgabe 10
% ============================================

clear;
UV = 5;    % Versorgungsspannung in V
L  = 0.1;  % Induktivitaet in H
UF = 0.7;  % Flussspannung der Diode in V
RL = 2.2E3;% Lastwiderstand in Ohm
RM = 1E2;  % Messwiderstand in Ohm
RiL= 120;  % Innenwiderstand der Spule
C  = 1E-6; % Kapazitaet Glaettungskondensator in F
eta= 0.344;% relative Pulsbreite Tastverhaeltnis
tP = 50E-6;% Periodendauer in s
N  = 200;  % Abtastpunkte je Periode
NP = 30;   % Anzahl der zu simulierenden Perioden
dt = tP/N; % Dauer eines Zeitschritts in s

% Erzeugen des Schaltsignals
N1 = floor(N*eta); 			% Anzahl der '1' je Periode
xP = [ones(1,N1) zeros(1,N-N1)];	% Folge einer Periode
x  = [];				% Aneinanderreihung von NP
for idx=1:NP				% Perioden 
  x = [x xP];
end;

% Anfangswerte
iL(1)= 0; % Strom durch die Induktivitaet in A
uA(1)= 0; % Spannung ueber der Kapazitaet in V
        
% Simulation
for n=1:length(x) 
  % Betriebszustand 1 (PMOS-Transistor eingeschaltet)        
  if x(n) == 0   
    iL(n+1) = iL(n)+dt/L*(UV-(RM+RiL)*iL(n));
    uA(n+1) = (1-dt/(RL*C))*uA(n);

    % Verhinderung einer Maximumsueberschreitung von iL
    if iL(n+1)>UV/(RiL+RM) 
      iL(n+1) = UV/(RiL+RM); 
    end;

  % Betriebszustand 2 (PMOS-Transistor ausgeschaltet)        
  else 
    iL(n+1) = iL(n)+dt/L*(uA(n)-UF-iL(n)*(RiL+RM));
    uA(n+1) = uA(n)-dt/C*(iL(n)+uA(n)/RL);

    % Verhinderung einer Minimumsunterschreitung von iL
    if iL(n+1)<0 
      iL(n+1) = 0; 
    end;
  end;
end;

t = (0:length(x)-1)*dt;

subplot(3,1,1); plot(1000*t,5*x, 'y');
xlabel('t in ms'); ylabel('ux in V'); 
title('Brueckengleichrichter mit Glaettungskapazitaet');

subplot(3,1,2); plot(1000*t,1000*iL(1:length(x)), 'r');
xlabel('t in ms'); ylabel('iL in mA'); 
subplot(3,1,3); plot(1000*t, uA(1:length(x))); 
xlabel('t in ms'); ylabel('ux in V'); 

