Integrator in LTSpice mit begrenzter Amplitude

Gast #5411960
Lesenswert?
• ▲
▼
Hallo,

ich möchte in LTSpice Signale integrieren. Das geht ja relativ einfach 
mit einer B-Source und V=idt(V(x)). Ich möchte aber den maximalen 
Ausgangswert begrenzen, ähnlich wie es ein realer Integrator mit 
endlichen Spannungsrails macht. Das ginge auch mit einer B-Source und 
V=limit(-15,15,idt(V(x)). Dadurch hab ich aber eine Art "Integrator 
windup", weil der Integrator intern deutlich höher als das Limit gehen 
kann und dann auch erst wieder intern bis auf die Railspannung herunter 
fahren muss, bevor eine Änderung im Ausgangssignal sichtbar wird.

Ich will also einen idealen Integrator, der aufhört weiter zu 
integrieren wenn er an festgelegte Grenzen kommt. Deswegen ideal, weil 
potentiell schneller ind er Simulation, übersichtlicher im Schaltplan 
und einfacher zu parametrieren.

Möglichkeit 1: der klassische RC-Integrator mit idealem Opamp. Nachteil: 
mehr Bauteile zum platzieren und Parameter nicht so bequem einstallbar.
optional: E-Source mit table(-1m -15 1m 15) als "idealer" Opamp

Möglichkeit 2: B-Source mit V=idt( if(V(integrator)<15, V(x), 0) ), oder 
"integriere solange du unter dem Rail bist". Problem: Sobald der 
Integrator auf 15V ist, kommt er auch nicht mehr runter.

Möglichkeit 3: idt(if(V(integrator)<15,V(x),min(0,V(x)))), oder 
"integriere solange du unterm Rail bist, sonst integriere nur negative 
Werte". Problem: wird langsam unübersichtlich und behandelt erst ein 
Rail.

Möglichkeit 4:
idt(
 if(V(integrator) > 15, min(0,V(x)),
 if(V(integrator) < -15, max(0,V(x),
 V(x)
))), oder "Wenn du über dem positiven Rail bist, integriere nur negative 
werte, wenn du unter dem negativen Wert bist, integriere nur positive 
Werte, sonst integriere einfach". Problem: noch unübersichtlicher 
(Schaltplan ist aber übersichtlicher).

Hat da jemand anders eine bessere Idee? Ich bin sicherlich nicht der 
einzige oder erste mit dem Problem.
Gast #5411981
Lesenswert?
• ▲
▼
Eine Möglichkeit für die B-Source ist mir noch gekommen:

V=idt(
   limit(
    if(V(integrator)>15,0,max(0,V(x))),
    V(in),
    if(V(integrator)<-15,0,min(0,V(x)))
   )
  )

oder "Integriere V(x), begrenzt auf maximal 0 wenn der Ausgang am oberen 
Rail ist und begrenzt auf minimal 0 wenn der Ausgang am unteren Ende 
ist". Ist aber immernoch unschön.
Gast #5412067
Lesenswert?
• ▲
▼
Ich hab mich jetzt mit

V=idt(V(x)*((V(x)>0&V(integrator)<15)|((V(x)<0)&V(integrator)>-15)))

zufrieden gegeben. Ist zwar Kauderwelch, aber kompakter Kauderwelsch.

Würde mich trotzdme interessieren, ob es noch andere Ansätze gibt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.