Erstellung eines SelfDef-Scripts vom Typ LaplaceVolts am Beispiel
Transformator, Transformator mit Anzapfung, Sensor-Scripting

Der Modell-Typ LaplaceVolts ist das Gegenstück zu LaplaceCurrents. Pin-Ströme und Pin-Spannungen
sind vertauscht (rechte <--> linke Seite).
Für den Modell-Typ LaplaceVolts schreibt man i.A. die Gleichungen so auf:

Ux = Uterm_11(s, I1, t) + Uterm_12(s, I2, t) + .... 
Uy = Uterm_21(s, I1, t) + Uterm_22(s, I2, t) + .... 
.....
Uz = Uterm_k1(s, I1, t) + Uterm_k2(s, I2, t) + .... 
<Bilanz-Strom-Gleichung 1>
<Bilanz-Strom-Gleichung 2>
.....

I1 bis Ik sind wieder die Pin-Ströme, Ux/Uy... wieder die Pin-Spannungen, s ist der Laplace-Operator.
Jede Pin-Spannung wird als Summe von Term-Spannungen (Uterm) ausgedrückt. Man kann die Terme auch
als Teil-Elemente auffassen, welche im jeweiligen Pin-Spannungs-Zweig in Serie geschaltet sind.
Jeder Uterm wird i.A. mit seinen Term-Parametern als Laplacetransformierte niedergeschrieben.
Die Zeit t kommt vor, da Term-Parameter auch zeitlich veränderlich sein können. Bei manchen
Term-Typen können die Term-Parameter auch eine Funktion von Pin-Strömen sein (nichtlin. Term).

Die in UTermen nicht verwendeten (heraus fließenden) Ströme müssen in den Bilanz-Strom-Gleichungen
definiert werden.

Für die Syntax der Uterme gelten rigorose Regeln. Man muß eine Übereinstimmung in dieser Tabelle finden,
um die entsprechende Formel in der 1. Spalte für eine Term-Spannung verwenden zu können.
In der Tabelle sind auch für jeden Term-Typ die korrespondierenden Differential-Gleichungen beschrieben,
mit Denen ToneCirc letztendlich auch rechnet.

Während bei LaplaceCurrents jeder Pin-Strom aus Y-Parametern (Leitwerte) und Stromquellen besteht, wird
bei LaplaceVolt jede Pin-Spannung mit Z-Parametern (Widerstände) und Spannungsquellen ausgedrückt.
Da ToneCirc aber eigentlich mit Y-Parametern arbeitet, muß intern eine Transformation der Z-Parameter in
die Y-Parameter durchgeführt werden. Das kostet natürlich mehr Rechenaufwand, ich benutze aber dafür
einen eigens entwickelten schnellen Algorithmus (nicht die Kramersche Regel).
LaplaceVolt-Modelle sind wie LaplaceCurrent-Modelle für die SA, Dyna als auch LSA verfügbar. Bei der SA setzt
ToneCirc eindach s = 0, bei der LSA einfach s = iw (Term-Parameter werden im AP linearisiert) ein.

Linearer Transformator:

So, wir wollen nun einen LaplaceVolt-Script für einen Transformator entwickeln. Wir machen also wieder
eine Skizze mit den üblichen Eintragungen:

Die Gleichungen in Laplace-Schreibweise sind für einen 2-Wicklungs-Transformator in U(I)-Darstellung
sehr einfach. Wir schreiben also:

 UP = U1 - U2,    US = U3 - U4



Wir schauen in der Matching-Tabelle nach und finden:
Typ 4 mit alfa = LP, beta = RP  bzw. alfa = LS, beta = RS
Typ 2 mit beta = M

Wir können nun in den Script schreiben:

#VarsAndConstants
M = K*sqrt(LP*LS)
#End

#Volts
up = u1 - u2
us = u3 - u4
#End

#LaplaceVolts ;U(s) = F(I(s))
up = (s*LP+RP)*i1 + s*M*i3
us = (s*LS+RS)*i3 + s*M*i1
<i2 = -i1> ;i2 is Output-Current of i1
<i4 = -i3> ;i4 is Output-Current of i3
#End

Hier der vollständige Script Transformator.selfdef.

Die ohmschen Serien-Widerstände RP und RS sind zwingend notwendig, um einen statischen Leitwert von
unendlich (Kurzschluss) zu vermeiden. Der Term-Typ 2 erzeugt nämlich (stand alone) einen solchen
Kurzschluss. Für die SA würde dies Division durch 0 bedeuten. Also auch mal in der Tabelle die Spalte
statischer Leitwert angucken.

Wollten wir das Transformator-Modell in I(U)-Schreibweise (LaplaceCurrents) formulieren, müßten wir
die Gleichungen nach I umstellen. Das ergibt sehr komplizierte Gleichnungen wo noch dazu Null-Stellen
auftreten, so das K=1 bzw. K=-1 nicht erlaubt ist. Hier zum Gruseln das Transformator-Script in
LaplaceCurrent-Schreibweise.

Test des Transformator-Elements:

Bitte die Schaltung DocSamples/Transformator_Test.circ öffnen:

Wie man sieht habe ich einen rechnenden Comment hinzugefügt, um die theoretischen Übertragungs-
faktoren und den Kopplungsfaktor auszugeben.
Das Ergebnis nach Dyna schaut so aus:

 

 

 


Man sieht, dass die Spannungs-
übertragung und die Phase
nicht genau stimmen.
Das liegt daran, dass der 
Kopplungsfaktor kleiner als 1
ist.

Wir tauschen die Sinus-Quelle durch die Rechteck-Quelle aus (einfach raus/rein schieben) und
erhalten nach Dyna:

 

 

 


Wieder ist der Kopplungsfaktor
dafür verantwortlich, dass der
Rechteck nicht formgenau
übertragen wird. Schon am
Eingang wird das Signal bärisch
verzerrt.

Das durch den Kopplungsfaktor bedingte Übertragungs-Verhalten kann man sehr schön nach der
Kleinsignal-Analyse (LSA) sehen:

Vor der LSA bitte nicht vergessen den Signal-Generator und den Widerstand heraus zu ziehen.
Interssant ist hier zu sehen, dass die Spannungs-Übertragung mit steigender Frequenz fällt, während die
Strom-Übertragung ansteigt.

Transformator mit Anzapfung:

Und hier wieder die Skizze mit wichtigen Eintragungen:

Wir schreiben erstmal die Gleichungen so, als ob es ein normaler 3-Wicklungs-Transformator wäre:





Für die Gegen-Induktivitäten gilt:

Die Kopplung der Sekundär-Spulen L2 und L3 legen wir standartmäßig mit 1 fest.

Die restlichen Ströme definieren wir noch in den Bilanzstrom-Gleichungen:

Und schon ist das Modell fertig, und wir können in den Script reinschreiben:

#VarsAndConstants
M12 = K*sqrt(L1*L2)
M13 = K*sqrt(L1*L3)
M23 = sqrt(L2*L3) ;L2<-->L3: K = 1
#End

#Volts
u12 = u1 - u2
u34 = u3 - u4
u45 = u4 - u5
#End

#LaplaceVolts ; U(s) = F(I(s))
u12 = (s*L1+R1)*i1 + s*M12*i3 - s*M13*i5
u34 = (s*L2+R2)*i3 + s*M12*i1 - s*M23*i5
u45 = -(s*L3+R3)*i5 + s*M13*i1 + s*M23*i3
<i2 = -i1>     ;i2 is Output-Current of i1
<i4 = -i3-i5> ;i4 is Output-Current of i3 & i5
#End

Hier der vollständige Script Transformer_withtap.selfdef.

Ausprobieren könnt Ihr diesen Transformator in den Schaltungen DocSamples/DiodeBalancemixer.circ und
Gleichrichter2Wege.circ.

Alle induktiven Elemente findet man unter dem Verzeichniss Data/Transformers_Coils.


Spule, die auf magnetisches Feld reagiert, als Beispiel für Sensor-Scripting

Wir wollen eine Induktivität kreieren, die zusätzlich auf ein magnetisches Wechselfeld reagieren kann. Dieses
Feld wird mittels einer Circuit-Variablen (g_magneticfield) erzeugt.

Skizze für die Modellierung:

Die Differential-Gleichung für solch eine Spule lautet:

Und in Laplace-Schreibweise:

In den Script wird nun folgendes reingeschrieben:

#Parameter
N = N, 50
muer = relative Permeability, 100
Len = Length(cm), 2
A = Cross Area(cm^2), 1
R = CoilResist (Ohm), 1
#End

#VarsAndConstants
Len2 = Len*0.01
A2 = A*0.0001
man = muer*c_mue0*A2*N
L = man*N/Len2
#End

#DefineCircuitVars
g_magneticfield = 1, A/m, magnet. Feldstärke
#End

#Volts
u = u1 - u2
#End

#LaplaceVolts
u = (L*s + R)*i1 - man*s*g_magneticfield 
<i2 = -i1>
#End

Hier der vollständige Script von Induct_Hsensible.selfdef.

Bei #VarsAndConstants wird für Len und A noch eine Umrechnung von cm in m durchgeführt und die
Induktivität berechnet.
Wir dürfen den neuen Block #DefineCircuitVars begrüßen. Hier muß die Definition der Circuit-Variable
g_magneticfield statt finden, die für das magnetische Feld H steht. Hier legt man mit ','-Zeichen getrennt,
den Standard-Wert, die Einheit sowie eine Bezeichnung fest.
Beim Einfügen eines Elements mit Circuit-Variablen, werden Diese automatisch in der Tabelle für die
Circuit-Vars erzeugt. Mittels Menü: Settings/Edit CircuitVars können nun diesen Variablen Zeitfunktionen
zugewiesen werden:

Wie man das macht hatten wir ja für eine TokenRefParameter-CircuitVariable schon hier besprochen.

Haben mehrere Elemente die gleiche Circuit-Variable, wird Diese natürlich nur einmal angelegt, und alle diese
Elemente empfangen die gleichen Werte. Nach dem Entfernen des letzten Elements, wird die entsprechende
Circuit-Variable automatisch aus der Tabelle gelöscht.

Diese im Sript definierten Circuit-Variable können in den Block-Typen #RealCurrents, #LaplaceCurrents und
#LaplaceVolts verwendet werden. Bei den beiden letzteren steht das CircuitVar-Symbol für das Symbol X in der
Matching-Tabelle. Wir können hier den Term-Typ 19 verwenden. Circuit-Vars können auch in PreFormeln einge-
setzt werden. Auch können Sie im Block #DefineDynCharts zum Einsatz kommen.

Wir testen nun unsere tolle Spule, indem wir die Schaltung DocSamples/Test_HSensitivCoil.circ öffnen:

Nach Durchführung der Dyna öffnen die folgenden Charts:

Für die Circuit-Var g_magneticfield haben wir einen Sinus mit einer Frequenz von 5 khz und einer Feld-Amplitude von 
1 A/m
eingestellt. 
Hier wird auch gezeigt, dass mehrere Elemente die gleiche Circuit-Variable empfangen können. Beide Spulen reagieren
also auf das magnetische Feld. Wie man sieht, ist L2 Teil eines Schwingkreises, wodurch die Spannungs-Amplitude
wesentlich höher wird, aber die Einschwingzeit sich stark verlängert.

Für in Scripten definierte Circuit-Variable gibt es viele weitere Anwendungsfälle. Denkbar wären zum Beispiel licht-
empfindliche Dioden, Solar-Panels, Thermistoren, Lichtschranken, Antennen, Metalldedektoren und alles was eben mit
Sensorik zu tun hat. Um das Temperatur-Verhalten von Halbleitern zu ermitteln, könnte man z.Bsp. eine CircVar g_temp
definieren, um Diese dann mittels einer Ramp-Funktion langsam hochlaufen zu lassen.

Zurück zur Hauptseite