Modellierung eines Relais mittels LaplaceVolt

Wir machen wiedermal eine Skizze mit den üblichen Eintragungen:

Ein Relais besteht aus einem induktiven strom-gesteuerten Teil (UL) und aus einem Schaltausgang (US).
Für den Steuereingang können wir ansetzen:

Beim Schalt-Ausgang haben wir den Schaltwiderstand R sowie eine Schaltkapazität C zu berücksichtigen:

Um zwischen geöffneten Schalter (Ropen) und geschlossenen Schalter (Rclose) unterscheiden zu können,
führen wir einen Widerstand Rav ein, der genau in der Mitte von Beiden liegt:

Ein gesteuerter Schalter mit Hysterese kann mit folgender if/else-Konstruktion dargestellt werden:

if( R > Rav)    // Schalter offen
{
        if(_I1 > Ion)
                R = Rclose
}
else                // Schalter geschlossen
{
        if(_I1 < Ioff)
                R = Ropen
}

Wobei Ion der Strom ist, der bei Überschreitung den Schalter schließt, und Ioff der Strom ist, der bei
Unterschreitung den Schalter öffnet. Wir haben es hier mit einer verschachtelten Konstruktion zu tun,
die mit Hilfe der Relations-Funktion einfach codiert werden kann:

R = {R > Rav ? {_I1 > Ion ? RClose : R} : {_I1 < Ioff ? ROpen : R}}

Dabei ist _I1 der sogenannte PinOld-Strom (die PinOld-Spannung hatten wir ja schon bei LaplaceCurrents).
Dieser Strom wird durch ein vorgesetztes '_' vorm Pin-Strom gekennzeichnet. Der PinOld-Strom stellt den
Pin-Strom einen Zeitschritt vorher dar. Damit läßt sich das Modell erheblichst vereinfachen, da wir Nicht-
lineraritäten umgehen. Der eigentliche Schaltvorgang findet dadurch immer einen Zeitschritt später statt,
was man aber bei genügend kleiner Schrittweite vernachlässigen kann.
R müssen wir als StateVar deklarieren, da es bei der ersten Formel auf der rechten Seite vorkommt. R ist
sozusagen der Schaltzustand (Ropen oder Rclose).
Da das Relais vom Strom gesteuert wird, müssen wir den Modell-Typ LaplaceVolts wählen. Der Strom wird
nämlich auf der rechten Seite der Gleichungen benötigt. Bei LaplaceCurrents können nur Spannungen auf der
rechten Seite vorkommen.

In den Script können wir nun reinschreiben:

#VarsAndConstants
Rav = (ROpen + RClose)/2
#End

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

#StateVars
R = ROpen
#End

#LaplaceVolts
R = {R > Rav ? {_i1 > ion ? RClose : R} : {_i1 < ioff ? ROpen : R}}
G = 1/R
ul = (L*s+Rl)*i1 ; Coil
us = 1/(C*s + G)*i2 ; Switch
<i3 = -i1>
<i4 = -i2>
#End

Hier der vollständige Script Relais_2Contacts.selfdef.
Man sieht, dass StateVars auch bei #DefineStaticInfoText und #DefineDynCharts eingesetzt werden können.

Simulation des Relais:

Um unser Relais-Modell im harten Einsatz zu testen, bitte die Schaltung DocSamples/Test_Relais.circ öffnen:

Ich habe die DynCharts Sig1.E, Rel1.Ul, Rel1.Il und Rel1.Is ausgewählt. Nach Dyna werden die zugehörigen
Chart-Fenster geöffnet:

Für das Signal habe ich eine Trapez-Funktion verwendet, mit HighTime = 0, um einen Dreieck zu erhalten. Die
Spannung wird also linear hoch- und wieder herunter gefahren. Man sieht, dass der Spulen-Strom etwas träge
reagiert. Verringerte man die Pulse-Dauer, würde irgendwann das Relais nicht mehr schalten. Die Trägheit des
Schalters wird bei diesem einfachen Modell natürlich nicht berücksichtigt.

Zurück zur Hauptseite