R. Kessler,C:\ro\Si05\AJ\matlab53\PasGleichriMatlab1.doc, S. 1,5 Passive Gleichrichter-Schaltungen, simuliert mit Matlab, dabei numerisches Finden des Dioden-Stroms aus Diodenkennlinie (Newton-Verfahren) Vergleiche Tephys-Algorithmen, dort aber „eckige“ Diodenkennlinie % http://www.home.hs-karlsruhe.de/~kero0001/gleichri/Gleichrichterschaltungen_3.pdf function [i]= diode1(u,R,Rp,I0,sw); % function [i]= diode1(u,R,Rp,I0,sw); Z.B. i0=10 nA=1e-8; if u > 0 u1=0.6; else u1=-1; end; u2=0; % Start: while abs(u2-u1) > sw u2=u1; y1 = R*(I0*(exp(u1/0.026)-1)+u1/Rp)+u1-u; y1st = R*I0*exp(u1/0.026)/0.026+R/Rp+1; % y1st= “Steigung” u1= u1-y1/y1st; % Newton-Verfahren end; i=(u-u1)/R; %Aus Tepfomk1.pas %function idrrp2(b:para_stack_ptr):float; {Diode s.R7 S.126 } % var u2,u1,u,y1,y1st,R,Rp,i0,sw: real; %begin % u:= b^[1]; R:= b^[2]; Rp := b^[3]; i0 := b^[4]; sw := b^[5]; % if u > 0 then u1 := 0.6 else u1 := -1; % repeat % u2 := u1; % y1 := R*(i0*(exp(u1/0.026)-1)+u1/Rp)+u1-u; % y1st := R*i0*exp(u1/0.026)/0.026+R/Rp+1; % u1:= u1-y1/y1st; % until abs(u2-u1) < sw; % idrrp2 := (u-u1)/R; %end; % Schaltung: Reihenschaltung R und (Diode parallel Rp) % u=R*i+u1; u1=Spannung an der Diode % Knoten: i=iD+u1/Rp, mit ID=I0*(exp(u1/uT)-1) % Diodenkennlinie uT=0.026, I0=Sperrstrom % eingesetzt: % i =I0*(exp(u1/uT)-1)+u1/Rp = (u-u1)/R; % mit R multipliziert und alles auf eine Seite: % Def y1= R*I0*(exp(u1/uT)-1) + u1*R/Rp +u1 -u % Ziel dasjenige u1 suchen, bei dem y1 =0 wird % Ableitung nach u1 Def.: y1st=dy1/du1 % y1st=R*I0*(exp(u1/uT)-1)/uT +R/Rp +1 % Daraus neuer Wert für u1: u1= u1-y1/y1st % Daraus obige Matlab-Funktion s. Datei-Anfang ******************************************************************** function [i]= diode1n(u,R,Rp,I0,sw); % Für anders gepolte Diode % function [i]= diode(u,R,Rp,I0,sw); Z.B. i0=10 nA=1e-8; % if u > 0 u1= 0.6; else u1= - 1; end; if u < 0 u1= - 0.6; else u1= 1; end; u= - u; %Probeweise scheint OK zu sein! u2=0; % Start: while abs(u2-u1) > sw u2=u1; y1 = R*(I0*(exp(u1/0.026)-1)+u1/Rp)+u1-u; y1st = R*I0*exp(u1/0.026)/0.026+R/Rp+1; u1= u1-y1/y1st; end; % i=(u-u1)/R; R. Kessler,C:\ro\Si05\AJ\matlab53\PasGleichriMatlab1.doc, S. 2,5 i = - (u-u1)/R; % Probeweise negatives Vorzeichen: das scheint OK zu sein ************************************************************************ bild=1,f=1,aS=1,dt=0.01,R=1000 1 0.5 0 -0.5 clear; R=1000;dt=1e-2;tmax=2.5;f=1;aS=1;bild=1; mitdiode; -1 0 0.5 1 sec 1.5 % Datei mitDiode.m R. Kessler Heft R71, S. 166, 21.7.2007 % clear; R=1000;dt=1e-2;tmax=5;f=1;aS=1;bild=1; mitdiode; % geht OK format compact; Rp=1e12; I0=1e-8; sw=1e-3; %Plotwerte deklarieren: Nmax=floor(tmax/dt); tp=zeros(1,Nmax); u0p=tp; iDp=tp; uAp=tp; % Startwerte: t=0; k=0; while t < tmax; u0=aS*sin(2*pi*f*t); [iD]=diode1(u0,R,Rp,I0,sw); uA=u0-R*iD; % Plotwerte speichern: k=k+1; tp(k)=t; u0p(k)=u0; uAp(k)=uA; t=t+dt; end; figure(bild); clf reset; plot(tp,u0p, tp,uAp); grid on; xlabel('sec'); S1=['bild=',num2str(bild)]; S2=[',f=',num2str(f)]; S3=[',aS=',num2str(aS)]; S4=[',dt=',num2str(dt)]; S5=[',R=',num2str(R)]; Tit=[S1,S2,S3,S4,S5]; title(Tit); 2 2.5 R. Kessler,C:\ro\Si05\AJ\matlab53\PasGleichriMatlab1.doc, S. 3,5 bild=3,f=1,aS=1,dt=0.02,R=1000 1 0.8 clear; R=1000;dt=2e-2;tmax=2.5;f=1;aS=1;bild=3; mitdiode3; 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 0.5 1 sec 1.5 clear; R=1000;dt=2e-2;tmax=2.5;f=1;aS=1;bild=3; mitdiode3; %Datei mitDiode3.m R. Kessler Heft R71, S. 166, 21.7.2007 % clear; R=1000;dt=1e-2;tmax=5;f=1;aS=1;bild=1; mitdiode3; % geht OK format compact; Rp=1e12; I0=1e-8; sw=1e-3; %Plotwerte deklarieren: Nmax=floor(tmax/dt); tp=zeros(1,Nmax); u0p=tp; iDp=tp; uAp=tp; iDnp=tp; iDpp=tp; % Startwerte: t=0; k=0; while t < tmax; u0=aS*sin(2*pi*f*t); [iDp]=diode1(u0,R,Rp,I0,sw); % Diode gepolt in positiver Richtung [iDn]=diode1n(u0,R,Rp,I0,sw); % Diode gepolt in negativer Richtung uA=u0 - R* iDn - R* iDp; % OK % Plotwerte speichern: k=k+1; tp(k)=t; u0p(k)=u0; uAp(k)=uA; iDnp(k)=iDn; iDpp(k)=iDp; t=t+dt; end; figure(bild); clf reset; plot(tp,u0p, tp,uAp, tp,iDnp*200,'m',tp,iDpp*200,'k' ); grid on; xlabel('sec'); S1=['bild=',num2str(bild)]; S2=[',f=',num2str(f)]; S3=[',aS=',num2str(aS)]; S4=[',dt=',num2str(dt)]; S5=[',R=',num2str(R)]; Tit=[S1,S2,S3,S4,S5]; title(Tit); 2 2.5 R. Kessler,C:\ro\Si05\AJ\matlab53\PasGleichriMatlab1.doc, S. 4,5 bild=2,f=50,a0=10,dt=0.0002,C=0.01,RL=4,R0=0.1 25 20 clear;f=50;a0=10;RL=4;dt=2e-4;C=0.01;R0=0.1; tmax=0.05; bild=2;GleichriZwei1; 15 10 5 0 -5 -10 0 0.005 R0 0.01 0.015 0.02 C uC 0.025 0.03 sec 0.035 0.04 0.045 0.05 iD uD u0 uD RL %Datei GleichriZwei1.m R. Kessler Heft R71, S. 166, 21.7.2007 % Probweise Zweiweg-Glecihrichtung: OK? % clear;f=50;a0=10;RL=40;dt=2e-4;C=0.002;R0=0.1; tmax=0.05;bild=5;GleichriZwei1; % % clear;f=50;a0=10;RL=40;dt=2e-4;C=0.002;R0=0.1; tmax=0.05; bild=5;Gleichri2; % % Einweg-GLeichrichter, vgl. Tephys (homepage) %http://www.home.hskarlsruhe.de/~kero0001/gleichri/Gleichrichterschaltungen_3.pdf format compact; Rp=1e12; I0=1e-8; sw=1e-3; %Plotwerte deklarieren: Nmax=floor(tmax/dt); tp=zeros(1,Nmax); u0p=tp; iDpp=tp; iDnp=tp; uCp=tp; % Startwerte: uC=0; t=0; k=0; while t < tmax; u0=a0*sin(2*pi*f*t); %[iDp]=diode1(u0-uC,R0,Rp,I0,sw); % Diode gepolt in positiver Richtung [iDp]=diode1(abs(u0)-uC,R0,Rp,I0,sw); % Diode gepolt in positiver Richtung % Hinweis: Hier fehlt noch doppelter Spannungsabfall an den Dioden uC=uC+(iDp -uC/RL)*dt/C; % Ploterte speichern: k=k+1; tp(k)=t; u0p(k)=u0; uCp(k)=uC; iDpp(k)=iDp; t=t+dt; end; figure(bild); clf reset; plot(tp,u0p, tp,uCp, tp,iDpp,'k' ); grid on; xlabel('sec'); S1=['bild=',num2str(bild)]; S2=[',f=',num2str(f)];S3=[',a0=',num2str(a0)]; S4=[',dt=',num2str(dt)]; S5=[',C=',num2str(C)]; S6=[',RL=',num2str(RL)]; S7=[',R0=',num2str(R0)]; Tit=[S1,S2,S3,S4,S5,S6,S7]; title(Tit); R. Kessler,C:\ro\Si05\AJ\matlab53\PasGleichriMatlab1.doc, S. 5,5 bild=5,f=50,a0=10,dt=0.0002,C=0.01,RL=4 10 5 0 -5 -10 -15 -20 -25 0 0.01 0.02 0.03 0.04 0.05 0.06 sec 0.07 0.08 0.09 0.1 clear;f=50;a0=10;RL=4;dt=2e-4;C=0.01;L=0.05;R0=0.1; tmax=0.1; bild=5;GleichCL2; R0 u0 i iD uD C L uC RL uRL %Datei GleichCL2.m R. Kessler Heft R71, S. 166, 21.7.2007 % Mit L zum zusätzlichen Glätten % negative Diodenpolung, liefert negative Spannung: OK % clear;f=50;a0=10;RL=4;dt=2e-4;C=0.01;L=0.05;R0=0.1; tmax=0.1; bild=5;GleichCL2; % % Passive GLeichrichter-Schaltungen, vgl. Tephys (homepage) % http://www.home.hs-karlsruhe.de/~kero0001/gleichri/Gleichrichterschaltungen_3.pdf format compact; Rp=1e12; I0=1e-8; sw=1e-3; %Plotwerte deklarieren: Nmax=floor(tmax/dt); tp=zeros(1,Nmax); u0p=tp; iDpp=tp; iDnp=tp; uCp=tp;uRLp=tp; % Startwerte: uC=0; iL=0; t=0; k=0; while t < tmax; u0=a0*sin(2*pi*f*t); [iDn]=diode1n(u0-uC,R0,Rp,I0,sw); % Diode gepoltt in negativer Richtung uC = uC+(iDn-iL)*dt/C; % iL= Spulenstrom statt i, sonst ev komplex!! iL = iL+(uC-RL*iL)*dt/L; uRL = RL*iL; % Plotwerte speichern: k=k+1; tp(k)=t; u0p(k)=u0; uCp(k)=uC; iDnp(k)=iDn; uRLp(k)=uRL; t=t+dt; end; figure(bild); clf reset; plot(tp,u0p, tp,uCp,tp,uRLp, tp,iDnp,'k' ); grid on; xlabel('sec'); S1=['bild=',num2str(bild)]; S2=[',f=',num2str(f)];S3=[',a0=',num2str(a0)]; S4=[',dt=',num2str(dt)]; S5=[',C=',num2str(C)]; S6=[',RL=',num2str(RL)]; Tit=[S1,S2,S3,S4,S5,S6]; title(Tit);