Vraag:
Hoe werken Circuit Simulators eigenlijk?
Thomas Russell
2013-11-21 18:36:19 UTC
view on stackexchange narkive permalink

Ik had onlangs de gelegenheid om te spelen met LiveWire, een circuitsimulator, en begon me af te vragen hoe ze precies de voltages van elk onderdeel en de stroom die door elk draadspoor stroomt, hebben berekend.

Ik heb tot nu toe alleen basisvaardigheden voor circuitanalyse geleerd (zoals Mesh-analyse en Nodale analyse), en ik ben er niet helemaal zeker van of ze generiek genoeg zouden zijn om op een 'alles-in-een'-manier te implementeren binnen een circuitsimulator.

Als programmeur heeft dit me geïntrigeerd en ik zou graag willen zien welke technieken gewoonlijk worden gebruikt bij het bouwen van circuitsimulatoren zoals deze.

Mijn excuses als dit hoort hier niet thuis, het was een keuze tussen hier en StackOverflow en ik had het gevoel dat, hoewel het een vraag is die gericht is op softwareontwikkeling, de vraag meer van toepassing is op deze site en zijn gebruikersbasis.

De belangrijkste truc is veel kleine tijdschijven. Complexe functies van tijd worden daarom afgehandeld door veel verschilvergelijkingen uit te voeren met kleine tijdschijven. Vervelende complexiteit wordt meestal aanzienlijk verminderd als deze kan worden uitgedrukt als differentiaalvergelijkingen, die differentievergelijkingen worden in een digitale simulatie.
Drie antwoorden:
supercat
2013-11-21 22:40:53 UTC
view on stackexchange narkive permalink

Ik heb de code van de Falstad-simulator tot in detail onderzocht. Voor circuits die alleen bestaan ​​uit lineaire componenten zoals weerstanden, schakelaars en spanningsbronnen (zaken als uitgangen van de logische poort worden ten behoeve van de simulatie beschouwd als geaarde spanningsbronnen), betreft de simulator elk circuitknooppunt, spanningsbron (die twee knooppunten verbindt) , of draad (eveneens) als het definiëren van een lineaire vergelijking en een variabele, zodat het aantal vergelijkingen en het aantal variabelen altijd gelijk zijn. Voor een circuitknooppunt is de variabele de spanning van het knooppunt, en de vergelijking berekent de totale stroom die erdoor vloeit gelijk aan de totale stroom die door een stroombron wordt geïnjecteerd. Voor een spanningsbron of draad (een draad die wordt behandeld als een spanningsbron waarbij het potentiaalverschil nul is), stelt de vergelijking het spanningsverschil tussen de twee circuitknooppuntspanningen gelijk aan het vereiste spanningsverschil, en de variabele is de hoeveelheid stroom stroomt door de spanningsbron van het ene knooppunt naar het andere.

Zaken als stroombronnen en weerstanden worden niet geassocieerd met weerstanden of variabelen. In plaats daarvan verhogen stroombronnen de totale stroom die nodig is voor één circuitknooppunt (onthoud dat elk circuitknooppunt een vergelijking heeft die de totale stroom die in en uit stroomt evalueert) en verlagen deze voor het andere. Weerstanden zijn iets lastiger: voor de vergelijking van elk eindpunt voegt de weerstand termen toe voor de knooppuntspanning van elk eindpunt.

Een weerstand van 100 ohm die knooppunten 1 en 2 verbindt, zou bijvoorbeeld zeggen dat elke volt toeneemt op knooppunt 1 zal de stroom die naar knooppunt 1 vloeit met 0,01 ampère verminderen en de stroom die naar knooppunt 2 stroomt met eenzelfde hoeveelheid toenemen. Evenzo zou elke volttoename op knooppunt 2 de stroom die naar knooppunt 1 stroomt met 0,01 ampère verhogen en de stroom die naar knooppunt 2 stroomt met eenzelfde hoeveelheid verminderen.

Beschouw een circuit met een voeding van 10 volt die knooppunten 1 en 5 verbindt, en weerstanden van 100 ohm die knooppunt 1 en 2, 2 en 3, 2 en 4, en 3 en 4 verbinden. Neem verder aan dat er een aardingspictogram op knooppunt 1 staat Dus:

  neg --- + - 1 --- R100 --- 2 --- R100 --- 3 --- 100 --- 4 --- pos gnd | | + --------- 100 -------- +  

Er zouden twee "spanningsbronnen" zijn: de massakabel en de 10 volt voeding (die worden beschouwd als respectievelijk vergelijking / variabele 5 en 6). De vergelijkingen zouden dus zijn:

  -X1 * 0,01 + X5 -X6 = 0 Knooppunt 1 + X1 * 0,01 -X2 * 0,01 + X4 * 0,01 = 0 Knooppunt 2 + X2 * 0,01 -X3 * 0,01 + X4 * 0,01 = 0 Knooppunt 3 + X2 * 0,01 -X4 * 0,01 + X6 = 0 Knooppunt 4-X1 * 1 = 0 Volt 5 (spanning tussen 1 en gnd) -X1 * 1 + X4 * 1 = 10 Volt 6 (spanning tussen 1 en 4)  

Dit vergelijkingssysteem kan worden weergegeven als een NxN-matrix plus een N-itemreeks. Elke vergelijking wordt weergegeven door een rij in de matrix, waarbij de waarden op elke rij de coëfficiënten van elke variabele vertegenwoordigen. De rechterkant van elke vergelijking wordt opgeslagen in de afzonderlijke array. Alvorens de vergelijkingen op te lossen, zal men de nettostroom kennen die naar elk knooppunt stroomt (in dit geval nul), en het spanningsverschil tussen paren knooppunten verbonden door spanningsbronnen. Het oplossen van de vergelijkingen levert de spanning op bij elk knooppunt en de stroom die door elke spanningsbron vloeit.

Als het circuit condensatoren bevat, wordt elk van deze beschouwd als een spanningsbron in serie met een lage weerstand; na elke simulatiestap wordt de spanningsbron aangepast aan de hoeveelheid stroom die er doorheen stroomde. Inductoren worden beschouwd als hoogwaardige weerstanden die de ene stroom toevoeren en de andere eruit halen (de hoeveelheid stroom wordt aangepast aan de spanning over de weerstand). Voor zowel condensatoren als inductoren wordt de waarde van de weerstand bepaald door de hoeveelheid tijd die wordt weergegeven door een simulatiestap.

Complexere circuitelementen zoals transistors worden beschouwd als combinaties van spanningsbronnen, stroombronnen en weerstanden. In tegenstelling tot de eenvoudigere circuitelementen die alles eenmaal per simulatietijdstap laten verwerken, berekenen elementen zoals transistors hun effectieve weerstanden enz. Op basis van de spanningen en stromen die ze zien, evalueren ze alle resulterende vergelijkingen en evalueren ze hun weerstand opnieuw op basis van de nieuwe spanningen en stromen, herevalueer de vergelijkingen, enz. in een poging om een ​​evenwicht te bereiken waar hun effectieve weerstand is zoals het zou moeten zijn voor de spanning en stroom die de transitor ziet.

De Falstad-simulator kan behoorlijk snel zijn voor circuits van gemiddelde grootte die volledig uit "lineaire" elementen bestaan. De tijd om een ​​stelsel vergelijkingen herhaaldelijk op te lossen is redelijk als het enige dat verandert de coëfficiënten aan de rechterkant zijn. De tijd wordt veel langzamer als de linkerkant verandert (bijvoorbeeld omdat de effectieve weerstand van een transistor omhoog of omlaag gaat) omdat het systeem de vergelijkingen moet "refactoren". Als je de vergelijkingen meerdere keren per simulatiestap moet refactoren (kan nodig zijn bij transistors), gaat het nog langzamer.

Het gebruik van één grote matrix voor alles is geen goede benadering voor grote simulaties; hoewel de matrix vrij schaars zal zijn, neemt hij evenredig ruimte in met het kwadraat van het aantal knooppunten plus spanningsbronnen. De tijd die nodig is om de matrix op te lossen bij elke simulatiestap zal evenredig zijn met het kwadraat van de matrixgrootte als refactoring niet vereist is, of met de kubus van matrixgrootte als refactoring vereist is. Desalniettemin heeft de benadering een zekere elegantie als het gaat om het aantonen van de relatie tussen een circuit en een systeem van lineaire vergelijkingen.

De meeste SPICE-simulatoren gebruiken dit type algoritme ook. Hier is een overzicht voor specerijen http://www.ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
Ter info: KLU is het algemene algoritme dat wordt gebruikt in circuitsimulatoren. KLU staat voor Clark Kent LU, aangezien het gebaseerd is op het algoritme van Gilbert-Peierls, een niet-supernodig algoritme, dat de voorloper is van SuperLU, een supernodig algoritme. KLU is een spaarzame, hoogwaardige lineaire oplosser die hybride ordeningsmechanismen en elegante factorisatie- en oplossingsalgoritmen gebruikt.
Het is belangrijk op te merken dat er meerdere transistormodellen zijn, bijvoorbeeld BSIM of EKV.In principe houden deze modellen rekening met alle fysica, vanuit een oogpunt, betrokken bij de werking van een enkele transistor en de effecten op de elektrische eigenschappen ervan.Er zit veel meer in dan alleen representeren als combinaties van spanningsbronnen, stroombronnen en weerstanden.Als u een ander model wilt selecteren, kunt u de LEVEL-parameter gebruiken.[Deze tutorial] (http://cmosedu.com/cmos1/ltspice/ltspice.htm) van Jacob Baker's, het is een goed begin.hoop dat het helpt.
Anindo Ghosh
2013-11-21 19:37:16 UTC
view on stackexchange narkive permalink

LiveWire is een van de vele circuitsimulatoren, met verschillende capaciteiten.

Falstad Circuit Simulator lijkt bijvoorbeeld van een vergelijkbaar vaardigheidsniveau te zijn als LiveWire - en de broncode wordt op die link aangeboden. Dat zou een goed begin moeten zijn.

Voor meer geavanceerde circuitsimulatie vinden veel tools hun oorsprong in SPICE door UC Berkley. De SPICE-broncode is op verzoek verkrijgbaar bij UCB onder BSD-licentie.

Fabrikantspecifieke SPICE-edities integreren typisch zeer gedetailleerde halfgeleidersimulatiemodellen van hun eigen producten in hun simulatoren. Bijvoorbeeld LTSpice IV van Linear Technologies of TINA-TI van Texas Instruments. Daaronder is het meestal allemaal SPICE.

Citeren uit de WikiPedia-pagina over SPICE:

Circuitsimulatieprogramma's, waarvan SPICE en derivaten het meest prominent zijn, neem een ​​tekstnetlijst het beschrijven van de circuitelementen (transistors, weerstanden, condensatoren, etc.) en hun verbindingen, en deze beschrijving vertalen in vergelijkingen die moeten worden opgelost. De geproduceerde algemene vergelijkingen zijn niet-lineaire differentiële algebraïsche vergelijkingen die worden opgelost met behulp van impliciete integratiemethoden, de methode van Newton en sparse matrix-technieken.

Op een nog hoger niveau van verfijning zijn verschillende commerciële producten, zoals Proteus Virtual System Modeling, onderdeel van de Proteus Design Suite, gebruiken gepatenteerde verbeteringen voor mixed-mode SPICE circuitsimulatie - deze tools kunnen zowel analoog circuitgedrag als digitale microcontrollercode simuleren, waarbij de interacties daartussen volledig gemodelleerd zijn.

Op een veel beperkter en beperkter niveau bieden sommige schematische editors, zoals de Circuit Lab-tool die in deze site is geïntegreerd, een klein aantal simulatiemogelijkheden. Hoewel dit misschien niet zo nuttig is in praktisch niet-triviaal elektronisch ontwerp, zou het bestuderen van hun mogelijkheden en implementatie een softwareontwikkelaar enig inzicht geven in wat goed werkt voor gebruikers en wat niet.

The Photon
2013-11-21 23:30:55 UTC
view on stackexchange narkive permalink

Er zijn drie hoofdanalyses die worden uitgevoerd door SPICE-achtige circuitsimulatoren:

  • DC-werkpunt
  • AC-analyse
  • Transiënte analyse

De analyse van DC-werkpunt voor een lineair circuit (gevormd uit DC-bronnen, lineaire weerstanden en lineair gestuurde bronnen) wordt gedaan met behulp van de gemodificeerde knooppuntanalyse (MNA) . Mesh-analyse kan ook worden gebruikt, maar het is heel eenvoudig om de vergelijkingen op te stellen voor nodale analyse.

Voor niet-lineaire circuits (waaronder apparaten zoals transistors, die in wezen kunnen worden gemodelleerd als niet-lineaire gecontroleerde bronnen), er moeten extra trucs worden gebruikt. Een conceptueel eenvoudige manier is om een ​​uitbreiding van Newton's Method te gebruiken voor meerdere vergelijkingen.

De methode van Newton omvat het raden van de oplossing en vervolgens het maken van een lineair model van de schakeling dat alleen "bijna" de geraden oplossing nauwkeurig is. De oplossing voor het gelineariseerde circuit wordt gebruikt als een nieuwe gok over de oplossing, en het proces wordt herhaald totdat de opeenvolgende iteraties "convergeren" op de (hopelijk) correcte oplossing voor het niet-lineaire circuit. In de echte wereld worden meer gecompliceerde niet-lineaire oplossers gebruikt om de oplossing sneller en met minder fouten uit te voeren als gevolg van convergentiefouten.

De AC-analyse wordt eerst uitgevoerd door een DC-analyse uitvoeren om een ​​werkpunt te vinden. Vervolgens bestudeer je het effect van kleine verstoringen rond het werkpunt. "Klein" betekent per definitie klein genoeg dat niet-lineaire effecten niet belangrijk zijn. Dat betekent dat de circuitelementen worden omgezet in lineaire equivalente elementen, afhankelijk van het werkpunt. Vervolgens kan de MNA worden gebruikt (met complexe getallen die de impedantie van energieopslagelementen weergeven) om het effect op te lossen van de verstoringen veroorzaakt door de wisselstroombronnen in het circuit.

De transiënte analyse wordt gedaan, zoals Olin in opmerkingen zegt, door na te denken over hoe de circuitvariabelen evolueren over zeer kleine stappen in de tijd. Opnieuw wordt bij elke stap het circuit gelineariseerd rond het werkpunt, zodat MNA kan worden gebruikt om de vergelijkingen op te stellen. Een eenvoudige methode om het gedrag in de loop van de tijd op te lossen, is Euler's Method. In de praktijk worden echter weer meer gecompliceerde methoden gebruikt om grotere tijdstappen met kleinere fouten mogelijk te maken.

Je kunt zien dat een rode draad in deze methoden is het maken van een lineaire benadering van het circuitgedrag en dat oplossen met MNA tot je vindt een oplossing voor het niet-lineaire circuitgedrag.

Deze drie analyses zijn de belangrijkste uitgevoerd door SPICE-achtige simulatoren sinds de jaren 70. Nieuwere simulatoren voegen extra mogelijkheden toe, zoals harmonische balans (een uitbreiding van AC-analyse om mengeffecten van niet-lineaire elementen op te vangen) of elektromagnetische simulaties om transmissielijneffecten te simuleren. Maar de gelijkstroom-, wisselstroom- en transiënte simulaties zijn de eerste drie die u moet begrijpen wanneer u een SPICE-achtige simulator gebruikt.

Ik had het over het opzetten van de MNA-vergelijkingen in een eerder antwoord: http://electronics.stackexchange.com/questions/19198/kcl-vs-kvl-in-circuit-analysis/22782#22782
We moeten hieraan toevoegen dat digitale circuitsimulaties geheel andere methoden gebruiken; en dat maakt analoog-digitale co-simulatie tot een heel eigen probleem.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...