Teiletoleranzsimulationen in ltspice

Ich habe dieses Tutorial (und verschiedene andere Orte, die eine ähnliche Technik erwähnen) erst kürzlich gefunden , als ich versuchte zu bewerten, wie sich eine meiner Schaltungen verhält, wenn reale Komponenten mit realen Toleranzen verwendet werden.

Normalerweise entwerfe ich es jedoch mit idealen Werten, spiele mit .stepAnweisungen usw. herum. Um nur diese Bewertung durchzuführen, müsste ich alle Wertanweisungen ändern, um die erwähnten Funktionen zu verwenden, und wenn ich nicht zufrieden bin, ändere sie zurück und spiele damit Werte wieder und so weiter. Das scheint eine Menge Arbeit zu sein. Ich könnte wahrscheinlich ein Skript schreiben, das es für mich mit den .asc-Dateien macht, aber ich habe mich gefragt, ob es wirklich keinen anderen Weg gibt.

Für die meisten Komponenten haben Sie ein "Tolerance[%]"-Feld, also habe ich mich gefragt, ob dies global verwendet werden kann? Genauso wie einige Komponenten auf die .step tempVariable zu reagieren scheinen. Leider finde ich in der Dokumentation die erwähnte Temperatur, aber nicht die Toleranz (die sich in der .asc-Datei ergibt SpiceLine tol=xxx, falls das jemandem hilft).

Gibt es also eine einfache Möglichkeit, LTSpice (zufällig) Komponententoleranzen über mehrere Durchläufe hinweg variieren zu lassen, ohne Formeln für jeden einzelnen verwenden zu müssen? (Ich interessiere mich heute hauptsächlich für Widerstände und Kondensatoren, falls das hilft, eine 90%ige Lösung zu finden)

Von den Freebie-Sims kann meines Wissens nur Intersils Isim:PE Monte Carlo relativ schmerzlos erledigen. Siehe dies für Dokumente. Wahrscheinlich kann die kostenlose/Demo-Version von SIMetrix/SIMPLIS das auch (und sie ist etwas aktueller als die Intersil-Version), aber ich hatte die erstere bereits installiert und wollte nicht riskieren, sie mit zwei durcheinanderzubringen Versionen installiert.

Antworten (3)

Monte-Carlo-Analyse und Worst-Case ist normalerweise die Art und Weise, wie dies gemacht wird, genau wie der verlinkte Artikel beschreibt. Für Monte-Carlo müssen Sie Ihre Komponenten nicht von Hand ändern, sondern führen Sie einfach die Monte-Carlo-Simulationen aus und der Simulator ändert die Komponenten automatisch basierend auf Ihrem Toleranzfeld. Sie müssen genügend Fälle ausführen, um ein statistisch signifikantes Ergebnis zu erhalten, und Sie können berechnen, wie viele Läufe Sie für eine bestimmte Konfidenz benötigen. Der schlimmste Fall erfordert etwas mehr Arbeit und Kenntnisse über die Funktionsweise der Schaltung, aber der verlinkte Artikel erklärt das auch.

„Einfach die Monte-Carlo-Sims laufen lassen“, genau das ist die Frage. Wie man das in ltspice macht, ohne die Komponenten in Formeln umwandeln zu müssen, wie der verlinkte Artikel vorschlägt.
Für Monte Carlo fügen Sie einfach die Direktive .mc hinzu. Sie können dies in der GUI tun, indem Sie auf das kleine .op in der Symbolleiste klicken. Der verlinkte Artikel zeigt, dass dies geschehen ist. Da Sie nicht den Worst-Case machen, müssen Sie sich keine Gedanken über die Funktionen machen. Einfach den Schaltplan für die Monte-Carlo-Analyse im verlinkten Artikel finden, die im Schaltplan gezeigten Anweisungen hinzufügen und schon kann es losgehen.
Hm, sieht aus als wäre ich blind. Ich kann keine .mc-Direktive finden, alles, was ich finden kann, ist "anstatt den Wert eines Widerstands als beispielsweise 10K zu definieren, definieren wir ihn als "{mc(10K,0.05)}", "
Sie haben Recht, es ist nicht die .mc-Direktive, sondern die .step param-Direktive. Sie müssen weiterhin die eingebaute Monte-Carlo-Funktion für die Komponenten verwenden, aber Sie müssen keine speziellen Funktionen definieren, wie dies für die Worst-Case-Analyse der Fall ist. Es ist keine große Sache, die eingebaute MC-Funktion zu den Komponenten hinzuzufügen. Es mag umständlicher sein, MC auszuführen als einige andere SPICE-Versionen, aber für den Preis ist es schwer, sich zu beschweren.
Mir war nicht bewusst, dass es als Beschwerde gilt, wenn man danach fragt, ob es einen schöneren Weg gibt; Zumal es eine Toleranz gibt, die dann scheinbar für nichts genutzt wird. Am Ende muss ich also entweder meinen Workflow komplett ändern und überall Formeln anstelle von Werten einfügen (was wahrscheinlich auch bedeutet, benutzerdefinierte Modifikationen von Transistoren usw. auszuführen), oder ich muss ein Skript schreiben, das meine aktuelle .asc übersetzt Datei in eine, die stattdessen überall mc() verwendet ...
Ich verstehe definitiv Ihren Standpunkt, und der Kommentar "schwer zu beschweren" ist wirklich eine Redewendung. Ich habe nicht angedeutet, dass Sie sich wirklich beschweren, indem Sie die Frage stellen. Natürlich könnten Sie immer einen Simulator kaufen, der traditionelle Monte-Carlo-Methoden unterstützt, anstatt das Skript zu schreiben :)
Es scheint nur so ein triviales Feature hinzuzufügen. Es sei denn natürlich, ihre Codebasis ist ein riesiges Durcheinander ...
@PlasmaHH Wenn Sie wertvolle Funktionen anfordern möchten, möchten Sie diese vielleicht an Mike E. weitergeben, der sich von AD getrennt hat. Wie sein Profil sagt: „Am besten bekannt als Autor von LTspice, hat aber seitdem einen völlig neuen und besseren Simulator geschrieben!“
@SpehroPefhany, es sei denn, es ist ein Drop-in-Ersatz mit denselben Bibliotheken und Modellen, es ist schwierig, alle bereits entwickelten Dinge umzustellen

Ich verwende folgendes für den Wert von Komponenten: Beispiel für einen Widerstand ist {if(nom,R1,mc(R1,tolr))}. Dann definiere ich einen Parameter 'nom' so, dass, wenn er auf 1 gesetzt ist, der Widerstand den Nennwert erhält (R1-Parameter in diesem Fall, könnte aber ein 'harter' Wert wie '10k' sein), andernfalls, wenn er dann 0 ist es erhält den Monte-Carlo-Wert.

Das ist nicht wirklich das, was ich unter "ohne Formeln an jeden einzelnen stellen zu müssen" verstehe.

Dieser Beitrag ist alt ... aber ab März 2021 unterstützt LTspice immer noch nicht die Verwendung des integrierten Toleranzparameters für Komponenten. Siehe Seite 102 des kürzlich veröffentlichten (November 2020) „ Passive Circuit Analysis with LTspice®: An Interactive Approach “. In Bezug auf Widerstandstoleranzfelder heißt es: "Dies wird akzeptiert, aber, wie wir bereits gesehen haben, nicht darauf reagiert. ... Also sind Toleranz und Nennleistung wirklich als Erinnerung da, wenn Widerstände für die Produktion spezifiziert werden."

Die kürzlich kostenlose Micro-Cap- Software unterstützt MC möglicherweise intuitiver.

Ja, viele Tools können einige Dinge besser machen, aber das war nicht ganz der Sinn der Frage. Ich bin wahrscheinlich nicht der Einzige, der schon einiges in ltpsice gemacht hat und damit arbeiten möchte, und andere Programme können das Format meist nicht einmal lesen, oder haben die verwendeten Teile nicht. Und wenn ich nichts in Micro-Cap übersehen habe, müssen Sie auswählen, welche Diagramme gezeichnet werden sollen, bevor Sie eine transiente Analyse durchführen, was beim Debuggen extrem umständlich und zeitaufwändig sein kann. Es scheint jedoch viele andere nette Funktionen für andere Anwendungen zu haben.
Ich höre dich, ich bin genauso frustriert. Ich habe Ihren Beitrag gefunden, nachdem ich herumgegraben und versucht habe, herauszufinden, wie man das Feld „Toleranz“ in LTspice verwendet. Es ist frustrierend, dass EEs bei Designsoftware den Kürzeren ziehen. Spice-Simulation und PCB-EDA fühlten sich im Vergleich zu mechanischer 3D-CAD- oder 2D-Kunstsoftware schon immer ruckelig an.
Meine aktuelle Pipeline ist immer noch ltspice, aber mit einem hinzugefügten Skript, das sie ausführt und die Komponentenwerte ändert und dann alle Ergebnisse sammelt ...
All das in einem Skript? Sauber! Würde es dir etwas ausmachen, es zu teilen?
ziemlich spezifisch für das, was ich tue, aber ich habe eine (mentale) Notiz hinzugefügt, um zu versuchen, es Open Source und allgemeiner zu machen, wenn möglich. Könnte es dann hier als Antwort hinzufügen ....