Nichtlinearen Kondesator in Spice modellieren?

Gast #3207025
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?
#3207485
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
Gast #3207798
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=...
#3208032
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.
Gast #3208317
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
Angehängte Dateien:
Gast #3210831
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?
#6869810
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,.,.,.)?
#6869843
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
Moderator #6869965
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.
#6872566
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.
#6872784
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.
Persönliche Seite #6873091
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.
Angehängte Dateien:
#6873125
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?
Persönliche Seite #6873229
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.
Angehängte Dateien:
Moderator #6873533
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 ...
Angehängte Dateien:
#6873692
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
#6888241
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren