Forum: Analoge Elektronik und Schaltungstechnik Nichtlinearen Kondesator in Spice modellieren?


von Mark (Gast)


Lesenswert?

Hat jemand eine Idee wie man ein nichtlinearen Kondensator in Spice(zb 
LTspice) modeliert. Mit nichtlinear ist die Änderung der Kapazität mit 
der Spannung gemeint wie in Kerkos, parasitäre Kapazitäten in 
Halbleitern aller Art.

Habe es mit einer gesteuerten Quelle wie folgt versucht:
1
 R1 1 3 1u
2
 VC 3 4 0
3
 BC 4 2 V=(1/V(ctrl))*V(int)
4
 BINT 0 INT I=I(VC)
5
 CINT INT 0 1

Das ist ein mit ctrl gesteuerter Kondensator. Das funktioniert auch. 
Problematisch wird es wenn ich die Steuerspannung von der Spannung des 
Kondensator selbst abhängig mache. Dann gibt's Konvergenzprobleme.

Wenn ich die Integration des Stromes, statt des 1F Kondensators wie in 
dem Model, mit dem idt() Befehl mache gibt es auch Probleme.

Hat jemand eine Idee?

: Verschoben durch Moderator
von Helmut S. (helmuts)


Lesenswert?

In LTspice musst du dazu die Ladung Q als Fzunktion der Spannung 
spezifizieren. Dazu ersetzt du den Wert (z. B. 100pF) durch den text
Q=100p*x
Das wäre jetzt ein linearer 100pF Kondensator.
x in der Formel ist automatisch die Spannung an der Kapazität.

Allgemein: Kapazität=f(x)
Q=Integral(f(x))


Aus der Help von LTspice:
There is also a general nonlinear capacitor available. Instead of 
specifying the capacitance, one writes an expression for the charge.

LTspice will compile this expression and symbolically differentiate it 
with respect to all the variables, finding the partial derivative's that 
correspond to capacitances.

Syntax: Cnnn n1 n2 Q=<expression> [ic=<value>] [m=<value>]

There is a special variable, x, that means the voltage across the 
device. Therefore, a 100pF constant capacitance can be written as

Cnnn n1 n2 Q=100p*x

von Unwichtig :0 (Gast)


Lesenswert?

Danke wuste ich selbst nochnicht.

von Mark (Gast)


Lesenswert?

>In LTspice musst du dazu die Ladung Q als Fzunktion der Spannung
>spezifizieren.

Ja, das is mir bekannt (wie flux= beim L), doch das hat am wenigsten 
funktionert. Für einfache Abhängigkeiten a, doch nicht für stark 
nichtlineare Kondensatoren, zb Coss, Ciss uws.

Ich poste mal den Versuch der implementierung mit Q=...

von Helmut S. (helmuts)


Lesenswert?

> doch nicht für stark nichtlineare Kondensatoren, zb Coss, Ciss uws.

Das geht auch damit. Zeig her.

Das Integral muss natürlich stimmen. Der typische Fehler ist, dass Leute 
"gerade" Q-Funktionen definieren. Das heißt auch bei negativer Spannung 
käme da eine positive Ladung Q heraus.

von Fralla (Gast)


Angehängte Dateien:

Lesenswert?

>doch das hat am wenigsten funktionert.
Das wundert mich jetzt. Die nichtlinearen Kapazitäten kann man mit 
Q=x*... herrlich Simulieren. Hatte damit noch keine Konvergenzprobleme.
Den Fehler, denn Helmut beschrieben hat, habe ich auch schon gemacht. 
Für ein Coss muss die Funktion jedoch nicht zwangsweise +/- symetrisch 
sein, denn andersrum leitet die Bodydiode, dh ein tanh und cosh 
funktioniert sehr gut.

Im Anhang ein Umschwingvorgang eines Resoanzwandlers mit verschiedenen 
600V SJ-Mosfets. Zu erkennen ist einmal ein gemütlicher Fet wie 
C6,MDmesh2,SupreMOS und ein "giftiger" wie ein CP,DTMOS4,MDmesh5,etc.

Messung und Model decken sich recht exakt, ohne das ganze aufwendig 
mittels Table zu machen (Ich finde vl auch Messungen wo diese Fets in 
einem 4kW LLC verbaut sind). Um Umschwingenergien und Zeiten in der 
Simulation zu sehen reicht es.

Das 1200V/50A SiC-FET-Sixpack Modul  geht allerding nicht mehr so ohne 
weiters mittels geschlossener Formel, (bzw für mich zu aufwendig, da war 
es schneller das per Q=tbl(x,.,.,.) zu lösen.

MFG Fralla

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

Jetzt mal ein Beispiel von mir das ich 2005 gemacht habe.

Quelle:
http://tech.groups.yahoo.com/group/LTspice/files/%20Tut/Nonlinear%20Capacitance%20of%20Capacitors/

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

Ich hatte vergessen die x-Achse in Volt zu skalieren.

von Mark (Gast)


Lesenswert?

@Helmut:
Diese Polynomnäherung darf aber auch keine negative Spannung abbekommen, 
oder? Zumindest steigt die Kapazität extrem an wenn die Spannung negativ 
wird, was ja nicht Ziel des Models sein kann.

@Fralla: Kannst du mir sagen welche Näherung du verwendest? tan() und 
cosh(), wie jetzt?

von Helmut S. (helmuts)


Lesenswert?

Warum nicht? Mein Beispiel funktioniert auch mit -2V.

von Mark (Gast)


Lesenswert?

Ja funktioniert, aber bei -2V ist die Kapazität höher als bei 2V. Bei 
-30V unrealistisch hoch...

von Helmut S. (helmuts)


Lesenswert?

@Mark,
ein Kapazitätsmodell für eine Didoe ist imemr für einen bestimmten 
Spannungsbereich. Schau dir mal die Gleichungen für die 
Sperrschuchtkapazität von Didoen an. Da will niemand 30V Flussspannung 
anlagen.

von Jop U. (jopu)


Lesenswert?

Fralla schrieb:
> Das 1200V/50A SiC-FET-Sixpack Modul  geht allerding nicht mehr so ohne
> weiters mittels geschlossener Formel, (bzw für mich zu aufwendig, da war
> es schneller das per Q=tbl(x,.,.,.) zu lösen.

Hi zusammen, ich würde auch gerne eine look up table benutzen. Mit einer 
Formel habe ich es schon aber ich hätte gern noch eine 2. Lösung um 
schneller mal paar werte anzupassen. Leider kommt bei mir was komisches 
raus :( kann man das einfach so hinschreiben wie du gesagt hast mit 
Q=tbl(x,.,.,.)?

von Jop U. (jopu)


Angehängte Dateien:

Lesenswert?

Hier habe ich mal das Modell von Helmut nur mit dem befehl table drin 
und ein paar dummy Werten. Jedoch Kommt nicht das gewünschte Ergebnis 
raus wie in der look up table vorgegeben.

: Bearbeitet durch User
von Jop U. (jopu)


Lesenswert?

Das kann doch nicht sein, dass ich das nicht hinbekomme. Ich weiß halt 
leider nicht genau welche Einstellungen ich machen muss für die 
Spannungsquelle. Sobald man da was ändert verändert sich alles...

Was ich noch vergessen hab zu erwähnen: Es soll eine exponentiell 
abfallende Funktion wie bei Helmut sein und sie soll bei ca. 130 pF bei 
0V starten und gegen 10 pF bei 100 V gehen

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Jop U. schrieb:
> Jedoch Kommt nicht das gewünschte Ergebnis raus wie in der look up
> table vorgegeben.

Deine Q(U)-Funktion hat auf Grund ihrer Definition mit table() Knicke.
Deswegen und wegen I=dQ/dt ist I unstetig (macht Sprünge).

Vermutlich beschreibt deine table-Funktion aber nicht Q, sondern C, also
C(U)=table(U, ...). Um daraus Q(U) zu gewinnen, musst du die Funktion
über U integrieren: Q(U)=∫C(U)du. Diese Funktion (mit U durch x ersetzt)
kannst du dann in den simulierten Kondensator eintragen.

Die table-Funktion nützt dir dann allerdings nichts mehr, weil die
integrierte Funktion Q(U) im Gegensatz zu C(U) nicht stückweise linear
ist.

Jop U. schrieb:
> Es soll eine exponentiell abfallende Funktion wie bei Helmut sein

Exponentialfunktionen sind ja sehr leicht zu integrieren. Da würde
ich nicht den Umweg über die table-Funktion gehen.

von Jop U. (jopu)


Lesenswert?

Yalu X. schrieb:
> Die table-Funktion nützt dir dann allerdings nichts mehr, weil die
> integrierte Funktion Q(U) im Gegensatz zu C(U) nicht stückweise linear
> ist.

Hi, sorry dass ich jetzt erst antworte. Ich habe komischerweise keine 
emailbenachrichtigung erhalten...
Ich glaube du hast recht. Was mich jedoch wundert ist, wie Fralla das so 
gemacht hat. Laut seiner Beschreibung hat er es nämlich genau so gemacht 
aber das funktioniert nicht.

von Jop U. (jopu)


Lesenswert?

Habe jetzt mal rumprobiert leider ohne Erfolg. Aber theoretisch müsste 
das ja schon gehen, da bin ich mir sehr sicher. Bei Fralla hats ja auch 
geklappt.
Ich habe meine Messwerte mit Matlab integriert und dann kam schön die 
Kurve von Q raus. Diese Werte hab ich dann rauskopiert und in die table 
geschrieben. Leider nicht das gewünschte Ergebnis.

von Jop U. (jopu)


Lesenswert?

Nur mal zur Sicherheit: Wie schaue ich denn überhaupt genau ob die 
Kapazität stimmt am Ende? Ich kann die ja in SPICE nicht direkt messen. 
Bin mir da nämlich gar nicht sicher, ob ich das am Ende einfach nur 
falsch plotte und die table sogar stimmt

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Trage doch den Strom durch den Kondensator über der Spannung am 
Kondensator auf. Die sich daraus ergebende Kennlinie ist die Kapazität.

von Jop U. (jopu)


Lesenswert?

Joe G. schrieb:
> Trage doch den Strom durch den Kondensator über der Spannung am
> Kondensator auf. Die sich daraus ergebende Kennlinie ist die Kapazität.

ok alles klar danke.

Leider sieht es trotzdem nicht aus, wie es aussehen soll. Keine Ahnung 
was ich falsch mache oder ob das doch nicht geht.

von Jop U. (jopu)


Lesenswert?

Mit was würdest du das ganze anregen? Ich habe einen Pulse gemacht aber 
sobald ich da was ändere, ändert sich alles

von Jop U. (jopu)


Lesenswert?

Weiß zufällig jemand wie man in dieser Yahoo gruppe auf die Modelle 
zugreift oder eine Frage stellt? Habe mich dort angemeldet aber kann nur 
lesen und nichts selber machen

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Q gibt doch die Ladung an. Soll die Kapazität variabel sein, mußt du die 
Ladung mit der Spannung über dem Kondensator (Variable x) 
multiplizieren. D.h. deine Tabellenwerte müssen mit x multipliziert 
werden. Ich habe mal lineare Werte von 10 bis 100 eingetragen. Diese mit 
der Spannung x multipliziert ergeben dann die Ladung Q.

von Jop U. (jopu)


Lesenswert?

Joe G. schrieb:
> Q gibt doch die Ladung an. Soll die Kapazität variabel sein, mußt du die
> Ladung mit der Spannung über dem Kondensator (Variable x)
> multiplizieren. D.h. deine Tabellenwerte müssen mit x multipliziert
> werden. Ich habe mal lineare Werte von 10 bis 100 eingetragen. Diese mit
> der Spannung x multipliziert ergeben dann die Ladung Q.

Aber welche Werte sind das bei dir jetzt in der table? Ich dachte da 
gehören sowohl die Spannungswerte als auch die Ladungswerte rein?

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

Jop U. schrieb:
> Ich dachte da
> gehören sowohl die Spannungswerte als auch die Ladungswerte rein?

Ja, sorry, die hatte ich vergessen.
Hier nochmals mit beiden Werten in der Tabelle. Aber wie es aussieht, 
dürfen die Stützstellen nicht zu weit entfernt sein, da durch das 
Differenzieren der Fehler schnell sehr groß wird. Test.asc mit Tabelle 
und Test1.asc mit Funktion.

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Jop U. schrieb:
> Wie schaue ich denn überhaupt genau ob die
> Kapazität stimmt am Ende?

Mach es wie Helmut, dessen Beispiel du ja übernommen hast: Lege an den
Kondensator eine Spannung mit konstantem dU/dt (also eine Rampe) an.
Wegen C=I/(dU/dt) muss in der Simulation nur I bestimmt werden, was für
Spice kein Problem darstellt. Da Helmut dU/dt=1MV/s gewählt hat,
dividiert er im Plot den Strom durch 1E6, um die richtigen Zahlenwerte
(in Farad gemessen) zu erhalten.

Normalerweise würde jetzt aber die Kapazität in der falschen
Einheit,nämlich in Ampere angezeigt werden, was etwas unschön ist.
Leider kennt LTspice die Einheit Farad nicht, also hat sich Helmut dafür
entschieden, statt durch 1E6 durch 1E6A zu dividieren, wodurch die
unpassenden Einheit einfach weggekürzt wird.

Zusätzlich lässt er auf der x-Achse statt der Zeit die Spannung
auftragen, so dass schließlich das gewünschte C(U)-Diagramm entsteht.

Joe G. schrieb:
> Soll die Kapazität variabel sein, mußt du die Ladung mit der Spannung
> über dem Kondensator (Variable x) multiplizieren.

Vorsicht: Die Formel Q=C·U gilt nur für konstantes C. Ist C von U
abhängig, lautet die Formel allgemeiner dQ=C(U)·dU bzw. Q=∫C(U)dU.
Deswegen schrieb ich oben:

Yalu X. schrieb:
> Um daraus Q(U) zu gewinnen, musst du die Funktion über U integrieren

Wenn das mit der Integriererei zu lästig ist, kann man statt des
Kondensatormodells auch eine B-Quelle verwenden, die gemäß I=C(U)·dU/dt
in Abhängigkeit von der angelegten Spannung den passenden Strom erzeugt.
Ich habe das mal für dein Beispiel von oben

Jop U. schrieb:
> Draft4.asc

umgesetzt (s. Anhang). Mit Helmuts Methode zum Plotten der Kapazität
kommt auch tatsächlich wieder die von dir vorgegebene Funktion heraus.

Möglicherweise hat die Methode mit der B-Quelle gegenüber der Verwendung
des Kondensatormodell auch Nachteile, bspw. bzgl. der Stabilität der
Simulation. Probier's einfach in deiner konkreten Anwendung aus, dann
wirst du sehen ...

von Jop U. (jopu)


Lesenswert?

@Yalu
Vielen vielen Dank! Du hast mir wirklich sehr geholfen. Danke auch für 
die ausführlichen Erklärungen mit der Rampe. Habe jetzt meine ganzen 
Werte reingemacht und es passt :)

Falls ich noch mehr zu dem Q rausfinde als Lösung kann ich es hier noch 
schreiben aber ich denke das passt jetzt so

von Jop U. (jopu)


Lesenswert?

Habe jetzt leider doch nochmal ein Problem. Und zwar wenn ich jetzt den 
ganzen reverse current plotte in einem dc sweep dann macht LTspice 
trotzdem den Strom durch die Kapazität, obwohl das ja nur bei einer 
.tran Simulation der Fall sein sollte und es eine ddt (Ableitung) gibt.
Warum checkt Spice das nicht, dass ddt nicht bei dc geht wenn ich es mit 
der Lösung mit der Stromquelle mache wie Yalu?

von Jop U. (jopu)


Lesenswert?

Also ich habe zusätzlich zu dem Kapazitätsstrom noch den noch einen 
anderen Strom in reverse der bei dc analyse ist.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Zeige doch mal was du aktuell hast, wir haben keine Glaskugel.

Kann sein das LTspice einen Fehler drin hat, aber ich suche den Fehler 
eher beim User.

von Carlo (Gast)


Lesenswert?

Wie sieht der letzte Stand der Schaltung aus ?! :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.