Leistungselektronik-Simulator · Browser
Mixed-Mode-Simulator für Leistungselektronik und Regelung. Knotenpotentialanalyse, adaptive Schrittweite, GMRES-Löser — alles clientseitig in JavaScript.
01 — Allgemein
LeSim simuliert leistungselektronische Schaltungen und die zugehörige Regelung gleichzeitig — vollständig im Browser, ohne Server-Rechenlast. Empfohlen: Chrome, Chromium, Firefox oder Edge. Je nach Modellumfang darf der Prozessor etwas Rechenleistung mitbringen.
02 — Beispiele
Rund 70 lauffähige Beispiele, gruppiert nach Baugruppe. Filter durchsucht Titel und Beschreibung.
03 — Elektro-Mathematisches
Zwei entkoppelte Zeitskalen in einer Simulation: der Netzwerklöser (KPA) arbeitet mit variabler Schrittweite zwischen dtMin und dtMax — halbiert dt, sobald ein Zustandswechsel bevorsteht, verdoppelt es nach sauberen Schritten. Die Regelungsblöcke (CTRL) laufen unabhängig davon mit fester Abtastrate dtCtrl. Jedes Element berechnet seinen Knotenstrom in KPA_solve() rein linear aus den aktuellen Knotenspannungen — der Zustand selbst wechselt erst in KPA_makeStateChange(), nachdem KPA_stateChangeAnnounced() bei minimaler Schrittweite einen Wechsel bestätigt hat. Nach jedem Schritt prüft validateBlocks() alle Werte auf NaN oder Infinity.
Lade Diagramm …
Faustregel: Sauberer Schritt → dt verdoppeln (bis dtMax). Zustandsänderung erkannt → dt halbieren (bis dtMin). War der vorherige Schritt bereits reduziert worden, bleibt dt unverändert. Grün markiert die Rechenpfade ohne Eingriff, Kupfer die Entscheidungspunkte, Rot die beiden Stellen, an denen dt tatsächlich angepasst wird.
Basic_R — Widerstand
KPA_solve: function(opt) { const c = this.Connectors; this.v = c[0].Knoten.Spannung - c[1].Knoten.Spannung; this.i = this.v / this.rx; // v = i * R c[0].Knoten.StromSum += -this.i; c[1].Knoten.StromSum += +this.i; }, // kein Zustand, keine Schaltereignisse: KPA_stateChangeAnnounced: function(opt) {}, KPA_makeStateChange: function(opt) {}
Basic_Diode — Zustandsmodell
KPA_solve: function(opt) { const c = this.Connectors; this.v = c[0].Knoten.Spannung - c[1].Knoten.Spannung; if (this.s_state) { this.i = (this.v - this.vT) / this.rxOn; } else { this.i = this.v / this.rxOff; // Leckstrom } c[0].Knoten.StromSum += -this.i; c[1].Knoten.StromSum += +this.i; }, KPA_stateChangeAnnounced: function(opt) { this.t_state = this.s_state; // 1→0: Rueckstrom hat Raumladung ausgeraeumt if (this.s_state === 1 && this.i < -0.01) this.t_state = 0; // 0→1: Spannung uebersteigt Schwelle p_vT if (this.s_state === 0 && this.v > this.vT) this.t_state = 1; return (this.s_state !== this.t_state); }, KPA_makeStateChange: function(opt) { this.s_state = this.t_state; }
Gelöst wird mit sgmres() (Simplified GMRES) als Standardlöser. Schlägt die Konvergenz fehl, bereinigen OR.getABD() und OR.makeAxM() die Matrix für einen zweiten Versuch, bevor lu() als robuster, aber langsamerer Fallback einspringt — leistungselektronische Netzwerke erzeugen bei sehr kleinen Widerständen neben großen Leitwerten leicht schlecht konditionierte Matrizen. Auffällige Matrizen werden automatisch serverseitig gesichert (OR.saveMatrix()), zur späteren Analyse und Algorithmus-Optimierung.
04 — Dokumentation
Anwendungsschicht (austauschbar, projektspezifisch), LESIM-Systemschicht (Zeitschrittschleife, Schaltplan, Standardblöcke) und Solver-Schicht (kennt weder Schaltplan noch Zeitschritte, löst ausschließlich A·x = b). Vollständige API-Referenz mit Mermaid-Diagrammen pro Modul.
05 — Download
Reines JavaScript, keine Abhängigkeiten. Seit der Aufteilung von lib_sym1.js modular in sys/elmLib/ organisiert.