Sinus-Oszillator mit 3 RC-Gliedern, Simulation mit Tephys und mit

Werbung
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsytemtechnik,
A:\sinus\sinosz2.doc,
Seite 1/7
Sinus-Oszillator mit 3 RC-Gliedern,
Simulation mit Tephys und mit Simulink.
Wahlweise Fremderregung oder Selbsterregung
Umax
R1
R3
R2
C1
C2
u1
R4
C3
u2
u3
Op1
R5
uA
u3
Op2
Umin
Spannungsfolger
invert. Verstärker,
V= - R5/R4
Diese Schaltung stellt einen Sinus-Oszillator dar. Da die Schaltung außer den Verstärkern nur Widerstände
(R ) und Kondensatoren (C) enthält, spricht man auch von einem RC-Sinus-Oszillator (oder RC-SinusGenerator oder einfach RC-Generator).
Man mag sich wundern, wieso damit Sinus-Schwingungen entstehen. Denken wir an eine mechanische
Wanduhr (Pendeluhr) aus Opas Zeiten: da drin ist ein mechanischer Schwinger, ein „Schwerependel“, oder
bei einer Taschenuhr ein „Drehschwinger“ . Damit ein solcher mechanischer Schwinger Dauerschwingungen
ausführt, braucht man „nur“ das bisschen Energieverlust, das infolge Reibung entsteht, zu ersetzen. Diese
vergleichsweise winzige Zusatz-Energie wird aus einem Energievorrat abgerufen. Bei der Pendeluhr ist der
Energievorrat ein gehobenes Gewicht, bei der Drehschwinger-Uhr eine gespannte Feder.
Die Kunst der Uhrmacher besteht darin, im richtigen Moment dem schwingenden System aus diesem
Energievorrat etwas Energie zu zuführen. Dieser Mechanismus ist alles andere als trivial!! -- Auch ohne diese
Energiezufuhr schwingt ein Pendel nach einmaligem Auslenken und dann Loslassen viele Perioden lang
sinusförmig weiter. Allerdings wird die Amplitude allmählich kleiner.
Bei obiger RC-Schaltung ist das total anders: Ein RC-Glied „denkt“ nicht daran, von alleine zu
schwingen. Auch drei hintereinander geschaltete RC-Glieder schwingen nicht die Spur sinusähnlich, wenn man
keinen geeigneten Verstärker nimmt. Im Gegensatz zu den erwähnten mechanischen Uhren ist also bei einem
RC-Oszillator der Verstärker dringend nötig. Das soll durch nachfolgende Überlegung vertieft werden:
1
2
Umax
uEin
R1
R3
R2
R4
u0
C1
u1
C2
u2
C3
u3
R5
uA
u3
Op1
Spannungsfolger
Op2
Umin
invert. Verstärker,
V= - R5/R4
Dazu haben wir die ursprüngliche Schaltung etwas verändert: Die „Rück-Kopplungs-Leitung“ vom Ausgang
des OP2 zum Widerstand R1 ist unterbrochen worden. Stattdessen ist ein Schalter eingefügt worden. In der
Schalterstellung 2 haben wir die ursprüngliche Schaltung (mit „Rück-Kopplung“, also „Selbsterregung“), in
Schalterstellung 1 wirkt hingegen die Spannung u0 einer externen Spannungsquelle. Statt Selbsterregung
haben wir bei Schalterstellung 1 „Fremderregung“.
Denken wir uns Experimente mit dieser Fremderregung durchgeführt. u0 sei Sinus. Das 1. RC-Glied (R1,
C1) ist ein Tiefpass, ebenfalls sind die anderen RC-Glieder (R2,C2, R3, C3) Tiefpässe. Wie wir wissen, ist der
Ausgang eines Tiefpasses nacheilend im Phasenwinkel (verglichen mit dem Phasenwinkel des Eingangs u0).
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsytemtechnik,
A:\sinus\sinosz2.doc,
Seite 2/7
Ein Tiefpass 1. Ordnung (also aus nur einem RC-Glied) macht maximal Phasen-Nacheilung von 90 Grad,
folglich machen 3 hintereinandergeschaltete Tiefpässe maximal 3 * 90 Grad = 270 Grad Phasen-Nacheilung.
Ein elektronischer Verstärker hat (im einfachsten Fall) entweder keine Phasenverschiebung (dann ist er ein
„nicht-invertierender“ Verstärker) oder er macht 180 Grad Phasenverschiebung. Dann ist er ein
„invertierender“ Verstärker.
Wollen wir aus obigen 3 hintereinander geschalteten Tiefpässen einen Sinus-Oszillator bauen, so müssen
wir einen invertierenden Verstärker nehmen (also 180 Grad Phasenverschiebung). Verändern wir, von kleinen
Frequenzen anfangend, die Frequenz der Sinus-Spannung u0 und beobachten wir zunächst die Spannungen
u0 und u3. Wie erwartet, wird mit wachsender Frequenz die Amplitude der Spannung u3 kleiner (weil es ja ein
Tiefpass ist) und um so mehr phasen-nacheilend (gegenüber u0), je größer die Frequenz ist. Aber mehr als
3*90 Grad kann u3 nicht nacheilen, s.o. Interessant zum Aufbau eines Sinus-Oszillators ist nur die PhasenNacheilung von 180 Grad. Nennen wir die zugehörige Frequenz f180 und die zugehörige „Abschwächung“
A180, soll heißen A180 = Amplitude von u0 dividiert durch die Amplitude von u3 (bei 180 Grad).
Betrachten wir jetzt die Ausgangs-Spannung uA. Zunächst überzeugen wir uns, dass uA (wie verlangt)
„invertiert“ ist gegenüber u3 ist, also 180 Grad phasenverschoben. Jetzt spätestens ahnt man, worauf wir
hinauswollen: Bei der oben festgestellten Frequenz f180 ist zwar u3 um 180 Grad nacheilend, aber uA ist bei
genau dieser Frequenz gleichphasig mit u0. Stellen wir jetzt den Verstärkungsfaktor des Op2 so ein, dass
die Abschwächung infolge der 3 Tiefpässe gerade aufgehoben wird, so ist die Ausgangs-Spannung uA
nicht nur phasengleich mit der externen Sinusspannung u0 sondern hat auch die gleiche Amplitude. Der
fragliche Verstärkungsfaktor muss A180 betragen(s.o). Legen wir jetzt den Schalter in Stellung 2, so wird die
Sinus-Schwingung „selbsterregt“ weiter schwi ngen. Mit welcher Frequenz? Mit genau derjenigen Frequenz,
bei der die Phasenverschiebung von u3 genau 180 Grad ist, also mit unsrer obigen Frequenz f180.
Für gleiche Werte R1=R2=R3=R und C1=C2=C3 =C ergibt sich nach nicht ganz leichter Rechnerei
die Frequenz bei 180 Grad Phasen-Nacheilung f180 = sqrt(6) / (2*pi*R*C) und die zugehörige
Abschwächung um den Faktor A180 = 29.
Der Verstärker muss also bei Selbsterregung den Verstärkungsfaktor V = - 29 haben.
Dies aufregende Experiment mit der externen Sinus-Schwingung u0 und Beobachten von u3 bzw. uA und
Umschalten auf Selbsterregung wollen wir zunächst mit Tephys simulieren und anschließend mit Simulink:
Simulation mit Tephys:
Aufstellen der DGLn und Tephys-Algorithmus:
Strom durch R1 = Strom durch Kondensator C1 + Strom durch R2 -->
(uEin- u1)/R1 =
C1 * du1/dt
+ (u1- u2)/R2 -->
Algorithmus nach dem einfachen Prinzip neuer Wert u1 = alter Wert u1 plus die Änderung von u1,
--> u1 =u1 + ((uEin – u1)/R1 - (u1 – u2)/R2 ) *dt/C1 (Zeile 6)
Strom durch R2 = Strom durch C2 + Strom durch R3 -->
(u1-u2)/R2 = C2*du2/dt
+ (u2-u3)/R3 --> u2 = u2 + ((u1-u2)/R2 – (u2-u3)/R3 ) *dt/C2 (Zeile 7)
Strom durch R3 = Strom durch C3 -->
(u2 – u3 )/R3 =
C3 * du3/dt --> u3 =u3 + ((u2-u3)/R3 )* dt/C3 (Zeile 8)
----------------------- D:\KUELLMAR\MATLAB\SI3RCS1.TXT ---1¦ ext = ja(tex-t) { ext ist 1 bis t=text, ab dann ext=0 }
2¦ w = wSt+(wE-wSt)*t/Tmax { w = Kreisfrequenz (gelesen omega).
w startet mit dem Wert wSt und geht in der Zeit Tmax auf den Endwert wE}
3¦ wink = wink+w*dt { wink= “Winkel” = Zeitintegral der Kreisfrequenz w}
4¦ u0 = sin(wink) { u0 = Sinus mit der MomentanKreisFrequenz w}
5¦ uEin = ja(ext)*u0+nein(ext)*uA { uEin ist die Spannung am Widerstand R1, s. Figur}
6¦ u1 = u1+((uEin-u1)/R1-(u1-u2)/R2)*dt/C1 { u1 = Spannung am Kondensator C1}
7¦ u2 = u2+((u1-u2)/R2-(u2-u3)/R3)*dt/C2 { u3 = Spannung am Kondensator C2 }
8¦ u3 = u3+((u2-u3)/R3)*dt/C3 { u3 = Spannung am Kondensator C3 }
9¦ uA = begr(V*u3,max,min) { uA = Spannung am Ausgang von OP2. Verstärkung V ist negativ! }
10¦ t = t+dt { Wichtig: der Parameter Tmax muss eingegeben werden, er ist NICHT identisch mit tmax}
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsytemtechnik,
A:\sinus\sinosz2.doc,
Seite 3/7
Fig. 1 Fremderregung mit u0 (bis t = tex=35). Man erkennt, dass bei w ca. 2.448 uA phasengleich ist mit
u0. Da V= - 29 „richtig“ gewählt wurde, hat uA gleiche Amplitude wie u0. Ab t=tex=35 Selbsterregung.
Man erkennt, dass Amplitude uA (und u3) ab dann konstant bleiben
Fig. 2. V= - 32, also zu groß, drum ansteigende Amplitude bei Selbsterregung
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsytemtechnik,
A:\sinus\sinosz2.doc,
Seite 4/7
Fig. 3. V= -26, also zu klein, drum Abnahme von uA (und u3) bei Selbsterregung.
Fig. 4. V= -100 also VIEL zu groß. Drum geht bei Selbsterregung uA in Begrenzung. Dennoch bleibt u3
(nahezu) sinusförmig. Das liegt daran, dass die „Oberschwingungen“ in uA durch die Tiefpasswirkung
der RC-Glieder stark geschwächt werden.
Simulation mit Simulink (Matlab 5.3):
Sinus-Oszillator mit 3 RC-Gliedern und invertierendem
Datei sinosz10.mdl
Verstärker V. Wahlweise extern oder rückgekoppelt
Aufruf mit
wSt + (wE-wSt) * u/ tmax
t
sinosz10parx, x=1,2
1/s
sin ( u )
u0
w
Fcn
uEin
tex > u
1/R1
Switch
1/C1
1/s
ext
Tephys: Si3RCS1.txt
ext = ja(tex-t)
u1
w = wSt+(wE-wSt)*t/Tmax
wink = wink+w*dt
u0 = sin(wink)
1/R2
uEin = ja(ext)*u0+nein(ext)*uA
1/C2
1/s
u1 = u1+((uEin-u1)/R1-(u1-u2)/R2)*dt/C1
u2 = u2+((u1-u2)/R2-(u2-u3)/R3)*dt/C2
u2
u3 = u3+((u2-u3)/R3)*dt/C3
uA = begr(V*u3,max,min)
1/R3
t = t+dt
V
1/C3
uA
1/s
max, min
u3
Der Tephys-Programm-Text ist mit in die Simulink-Schaltung „eingefügt“ worden. Dadurch kann man die
Konstruktion der Simulink-Schaltung verstehen: Sie ist „wörtlich“ übersetzt aus dem Tephys-Programm:
Betrachten wir die Kreisfrequenz w: In Tephys: w=wSt+(wE-wSt)*t/Tmax. Im „Funktionsblock“ Fcn steht
wSt + (wE-wSt) * u/tmax. Bekanntlich muss die Eingangsvariable innerhalb des Blockes die Bezeichnung u
haben. Also bedeutet hier u = t (wie bei Tephys) . Der Ausgang aus dem Block ist die Kreisfrequenz w. w
wird zeitlich integriert. Der Block 1/s ist ein Integrator.
Anschließend wird in einem weiteren Fcn-Block u0= sin(u) gebildet. In Tephys ist das nahezu wörtlich das
Gleiche: wink = wink + w*dt (also das Zeitintegral der Kreisfrequenz w), anschließend u0 = sin (wink).
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsytemtechnik,
A:\sinus\sinosz2.doc,
Seite 5/7
Ähnlich wie in Tephys wird die Variable ext bebildet: in Tephys: ext = ja (tex –t), also ist ext = 1 für tex > t,
anschließend text =0. In Simulink: Die Zeit t geht aus der Uhr in einen weiteren Fcn-Block. Darin steht tex > u.
Dieser „Vergleich“ liefert den Wert „wahr“ =1 (also = 1 für tex > t ) bzw. den Wert „falsch“ = 0 wenn tex < t).
Der Schalter „switch“ hat 3 Eingänge, der mittlere ist der „Steuereingang“, hier also ext. Wenn ext >
Schwelle (hier Schwelle auf 0.5 gesetzt), dann wird der obere Eingang durchgeschaltet (hier also u0). Wenn
ext < Schwelle, dann wird der untere Eingang (hier also uA) durchgeschaltet.
In Tephys klingt das so: uEin = ja(ext)*u0 + nein(ext) * uA.
Jetzt u1: in Tephys u1 = u1+( (uEin - u1)/R1 - (u1-u2) / R2 )* dt/C1. ( vgl. auch die Herleitungen der DGLn,
s.o.)
Betrachten wir Simulink: Es wird die Differenz uEin- u1 gebildet. Diese Differenz wird mit dem konstanten
Faktor 1/R1 multipliziert (das Symbol Dreieck= „gain“). Ausgang aus dem gain ist also (uEin- u1)/R1.
Weiterhin wird die Differenz u1 - u2 gebildet, diese geht in den gain 1/R2, es entsteht also (u1 - u2 )/ R2.
Diese beiden gain-Ausgänge gehen in einen Subtrahierer, dessen Ausgang mit 1/C1 multipliziert wird.
Der Ausgang aus diesem gain 1/C1 hat also den Wert ( (uEin-u1)/R1 - (u1-u2)/R2 )* 1/C1. Dieser Wert wird
zeitintegriert und liefert die Variable u1. Das ist also „wörtlich“ wie in Tephys.
In entsprechender Weise werden die Variablen u2 und u3 gewonnen.
In Tephys:
u2 = u2+ ( (u1-u2)/R2 - (u2-u3)/R3 )* dt/C2
u3 = u3+ ( (u2-u3)/R3 )* dt/C3
Der Ausgang u3 wird multipliziert mit dem Verstärkungsfaktor V, dann kommt ein Begrenzer („saturation“)
mit oberem Wert max und unterem Wert min. Dessen Ausgang ist uA
in Tephys: uA = begr(V*u3,max,min)
Damit haben wir erkannt, dass die Simulink-Schaltung die „wörtliche“ Übersetzung aus Tephys ist.
Jetzt die Bilder 1 bis 4, die mit der weiter unten beschriebenen Methode
aus der Simulink-Schaltung entstanden sind.
Die Parameter dieser Bilder 1 bis 4 sind identisch mit den Parametern der
obigen Tephys-Figuren Fig. 1 bis Fig. 4
4
Bild=1,R1=1, C1=1, R2=1, C2=1, dt=0.01, R3=1, C3=1, V=-29, text=35
3
uA
u3*5
w
uA
u0
2
u0
w
ext/2
ext/2
u3*5
1
0
-1
hier uA und u0 gleichphasig
und gleiche Amplitude
-2
0
5
10
15
20
25
30
35
40
45
50
Bild 1: V= -29, also „richtig“. Man erkennt den Bereich, wo u0 und uA gleichphasig sind (s. Text im Bild)
Da V = -29 richtig ist, bleibt bei Selbsterregung (ab t =35) die Amplitude uA (und u3) konstant
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsytemtechnik,
A:\sinus\sinosz2.doc,
Seite 6/7
4
uA
Bild=2,R1=1, C1=1, R2=1, C2=1, dt=0.01, R3=1, C3=1, V=-32, text=35
u3*5
u0
w
3
ext/2
2
1
0
-1
hier uA und u0 gleichphasig, aber uA
größer als u0. weil V = -32 (statt -29 )
-2
0
5
10
15
20
25
30
35
40
45
50
Bild 2: V= - 32, also zu groß, drum haben bei Selbsterregung (ab t = 35) uA und u0 ansteigende Amplitude
4
Bild=3,R1=1, C1=1, R2=1, C2=1, dt=0.01, R3=1, C3=1, V=-26, text=35
uA
u3*5
3
u0
w
uA
2
ext/2
u0
1
0
-1
hier uA und u0 gleichphasig, da aber v = -26 zu klein,
bei Selbsterregung abnehmende Amplituden uA und u3
-2
0
10
20
30
40
50
60
70
Bild 3: V= - 26, also zu klein, drum abnehmende Amplituden bei Selbsterregung ( ab t = 35)
4
Bild=4,R1=1, C1=1, R2=1, C2=1, dt=0.01, R3=1, C3=1, V=-100, text=35
uA
u3*5
3
u3 (trotz Begrenzung von uA
uA
u0
fast sinusförmig!)
w
ext/2
2
u0
1
0
-1
V = -100, also viel zu groß. Drum steigt uA bis in die Begrenzung, wird also
fast rechteckig! Trotzdem ist u3 noch nahezu sinusförmig!
-2
0
10
20
30
40
50
60
70
Bild 4: V = - 100, also viel zu groß ( V = -29 wäre richtig, s.o.) Drum geht uA bis in die Begrenzung (in
der Figur nicht sichtbar, weil Achsen in Y-Richtung begrenzt sind auf –2 bis 4 ). Trotz der Begrenzung
von uA ist die Spannung u3 nahezu sinusförmig. Das liegt daran, dass die Oberschwingungen von uA
(die infolge der Begrenzung entstehen) durch die Tiefpasswirkung der 3 RC-Glieder stark abgeschwächt
werden.
Prof. Dr. R. Kessler, FH-Karlsruhe, Sensorsytemtechnik,
A:\sinus\sinosz2.doc,
Seite 7/7
Anschließend die Matlab-Dateien,
mit denen das Simulink-Modell aufgerufen wird:
Es sind 4 „Parameter-Dateien“ SinOz10Parx.m mit Endziffer x = 1, 2, 3, 4. Diese Endziffer ist auch
gleichzeitig die Nummer des Bildes. Die Parameter-Datei ruft die (immer gleiche) „Stringdatei“
sinosz10str.m auf, die seinerseits die Simulink-Datei sinosz10.mdl aufruft und die Bilder zeichnet
und (mittels „Fadenkreuz“ ) die Parameterwerte in die Bilder schreibt.
So wird die Parameterdatei gestartet:
In Kommandoebene eintippen sinosz10parx ( mit x = 1,2,3,4, ohne Endung .m),
dann „Return“
Hier eine der Parameter-Dateien SinOz10Parx.m eingefügt,
anschließend die Stringdatei sinosz10str.m:
% Datei sinosz10par1.m Parameter-Datei für Sinosz10.MDL
clear;
format compact;
Bild=1;
R1=1;R2=1; R3=1; C1=1; C2=1; C3=1; max =10; min=-10;
V=-29;
dt=0.01;tmax=50;
wSt=1; wE=4; tex=35;
sinosz10str; % Aufruf Stringdatei sinosz110.m
%-------
% Datei Sinosz10Str.m; Stringdatei für Simulink sinosz10.MDL
if Bild ==1 sinosz10; end;%Aufruf der Schaltung sinosz10.MDL auf Bildschirm
S0=['Bild=', num2str(Bild)];
S1=[',R1=', num2str(R1)]; S2=[', C1=', num2str(C1)];
S3=[', R2=', num2str(R2)]; S4=[', C2=', num2str(C2)];S5=[', dt=',
num2str(dt)];
S6=[', R3=', num2str(R3)]; S7=[', C3=', num2str(C3)];
S8=[', V=', num2str(V)]; S9=[', text=', num2str(tex)];
[nix]=sim('sinosz10',[0,tmax]);% Starten von sinosz1.MDL
set(0,'DefaultLineLinewidth',1); % Linienstärke 1
figure(Bild); clf;
plot(t, uA, t, u3*5, t,u0, t,w, t,ext/2);
hold on;
%set(0,'DefaultLineLinewidth',1);
%plot(t,u1,t,u2);
grid;
axis([0,tmax,-2,4]);% Begrenzung x-Achse auf 0,tmax, y-Achse auf –2,4
gtext([S0,S1,S2,S3,S4,S5,S6,S7,S8,S9]); % Ausgabe Text-String auf Bild
legend('uA','u3*5','u0','w','ext/2');
hold off;
Herunterladen