Comment fonctionnent les simulateurs de circuit?


31

J'ai récemment eu l'occasion de jouer avec LiveWire , qui est un simulateur de circuit et j'ai commencé à me demander comment exactement ils calculaient les tensions à travers chaque composant et le courant passant par chaque piste de fil.

Jusqu'à présent, je n'ai appris que des compétences de base en analyse de circuits (telles que l'analyse de maillage et l'analyse nodale), et je ne suis pas entièrement sûr qu'elles seraient suffisamment génériques pour être mises en œuvre de manière `` universelle '' dans un simulateur de circuit.

En tant que programmeur, cela m'a intrigué et j'aimerais voir quelles techniques sont couramment utilisées lors de la construction de simulateurs de circuits tels que celui-ci.

Mes excuses si cela n'appartient pas ici, c'était un choix entre ici et StackOverflow et j'ai senti que bien que ce soit une question orientée développement logiciel, la question est plus applicable à ce site et à sa base d'utilisateurs.


L'astuce principale est beaucoup de petites tranches de temps. Les fonctions complexes du temps sont donc gérées en exécutant de nombreuses équations de différence avec de petites tranches de temps. La complexité désagréable est généralement considérablement réduite si elle peut être exprimée sous forme d'équations différentielles, qui deviennent des équations de différence dans une simulation numérique.
Olin Lathrop

Réponses:


14

J'ai examiné le code du simulateur Falstad en détail. Pour les circuits qui ne sont constitués que de composants linéaires comme des résistances, des commutateurs et des sources de tension (des choses comme les sorties de portes logiques sont considérées comme des sources de tension connectées à la terre aux fins de la simulation), le simulateur considère chaque nœud de circuit, chaque source de tension (connectant deux nœuds) , ou fil (de même) comme définissant une équation linéaire et une variable, de sorte que le nombre d'équations et le nombre de variables soient toujours égaux. Pour un nœud de circuit, la variable est la tension du nœud, et l'équation calcule le courant total qui le traverse égal au courant total injecté par toutes les sources de courant. Pour une source de tension ou un fil (un fil étant traité comme une source de tension où la différence de potentiel est nulle),

Des éléments comme les sources de courant et les résistances ne sont pas associés à des résistances ou à des variables. Au lieu de cela, les sources de courant augmentent le courant total requis pour un nœud de circuit (rappelez-vous que chaque nœud de circuit a une équation qui évalue le courant total entrant et sortant) et le diminue pour l'autre. Les résistances sont un peu plus délicates: pour l'équation de chaque point d'extrémité, la résistance ajoute des termes pour la tension de nœud de chaque point d'extrémité.

Une résistance de 100 ohms reliant les nœuds 1 et 2, par exemple, dirait que chaque augmentation de volt sur le nœud 1 diminuera le courant circulant dans le nœud 1 de 0,01 ampères et augmentera le courant circulant dans le nœud 2 d'une quantité similaire. De même, chaque augmentation de volt sur le nœud 2 augmenterait le courant circulant dans le nœud 1 de 0,01 ampères et diminuerait le courant circulant dans le nœud 2 d'une quantité similaire.

Considérons un circuit avec une alimentation de 10 volts reliant les nœuds 1 et 5 et des résistances de 100 ohms reliant les nœuds 1 et 2, 2 et 3, 2 et 4 et 3 et 4. Supposons en outre qu'il y a une icône de masse sur le nœud 1. Ainsi:

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

Il y aurait deux "sources de tension": le fil de terre et l'alimentation de 10 volts (qui sont considérées comme équation / variable 5 et 6, respectivement). Les équations seraient donc:

-X1*0.01                             +X5 -X6 = 0  Node 1
+X1*0.01 -X2*0.01          +X4*0.01          = 0  Node 2
         +X2*0.01 -X3*0.01 +X4*0.01          = 0  Node 3
         +X2*0.01          -X4*0.01      +X6 = 0  Node 4
-X1*1                                        = 0  Volts 5 (voltage between 1 and gnd)
-X1*1                      +X4*1             = 10 Volts 6 (voltage between 1 and 4)

Ce système d'équation peut être représenté comme une matrice NxN plus un tableau d'éléments N. Chaque équation est représentée par une ligne dans la matrice, avec des valeurs sur chaque ligne représentant les coefficients de chaque variable. Le côté droit de chaque équation est stocké dans le tableau séparé. Avant de résoudre les équations, on connaîtra le courant net circulant dans chaque nœud (zéro dans ce cas), et la différence de tension entre des paires de nœuds connectés par des sources de tension. La résolution des équations donnera la tension à chaque nœud et le courant traversant chaque source de tension.

Si le circuit contient des condensateurs, chacun d'eux sera considéré comme une source de tension en série avec une résistance de faible valeur; après chaque étape de simulation, la source de tension sera ajustée en fonction de la quantité de courant qui la traversera. Les inductances seront considérées comme des résistances de grande valeur qui alimentent le courant dans l'un et le retirent de l'autre (la quantité de courant étant ajustée en fonction de la tension aux bornes de la résistance). Pour les condensateurs et les inductances, la valeur de la résistance sera contrôlée par la quantité de temps représentée par une étape de simulation.

Les éléments de circuit plus complexes comme les transistors sont considérés comme des combinaisons de sources de tension, de sources de courant et de résistances. Contrairement aux éléments de circuit plus simples qui permettent de tout traiter une fois par pas de temps de simulation, des éléments comme les transistors calculent leurs résistances efficaces, etc. en fonction des tensions et des courants qu'ils voient, évaluent toutes les équations résultantes et réévaluent leur résistance en fonction de les nouvelles tensions et courants, réévaluent les équations, etc. dans le but d'atteindre un équilibre où leur résistance effective est telle qu'elle devrait être pour la tension et le courant que le transistor voit.

Le simulateur Falstad peut être décemment rapide pour des circuits de taille moyenne constitués entièrement d'éléments "linéaires". Le temps de résoudre à plusieurs reprises un système d'équations est assez raisonnable si la seule chose qui change est les coefficients du côté droit. Le temps devient beaucoup plus lent si le côté gauche change (par exemple parce que la résistance effective d'un transistor monte ou descend) parce que le système doit "refactoriser" les équations. Devoir refaire les équations plusieurs fois par étape de simulation (peut être nécessaire avec des transistors) rend les choses encore plus lentes.

Utiliser une grande matrice pour tout n'est pas une bonne approche pour les grandes simulations; même si la matrice sera assez clairsemée, elle occupera un espace proportionnel au carré du nombre de nœuds plus les sources de tension. Le temps requis pour résoudre la matrice à chaque étape de simulation sera proportionnel au carré de la taille de la matrice si le refactoring n'est pas requis, ou au cube de la taille de la matrice si le refactoring est requis. Néanmoins, l'approche a une certaine élégance lorsqu'il s'agit de montrer la relation entre un circuit et un système d'équations linéaires.


La plupart des simulateurs de type SPICE utilisent également ce type d'algorithme. Voici un aperçu de spice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
user6972

1
FYI - KLU est l'algorithme commun utilisé dans les simulateurs de circuits. KLU signifie Clark Kent LU, car il est basé sur l'algorithme de Gilbert-Peierls, un algorithme non supernodal, qui est le prédécesseur de SuperLU, un algorithme supernodal. KLU est un solveur linéaire haute performance clairsemé qui utilise des mécanismes de commande hybrides et une factorisation élégante et des algorithmes de résolution.
user6972

Il est important de noter qu'il existe plusieurs modèles de transistors, BSIM ou EKV, par exemple. Fondamentalement, ces modèles prennent en considération toute la physique, d'un point de vue, impliquée dans le fonctionnement d'un seul transistor et les effets sur ses caractéristiques électriques. Il y a bien plus que de représenter simplement des combinaisons de sources de tension, de sources de courant et de résistances. Si vous souhaitez sélectionner un modèle différent, vous pouvez utiliser le paramètre LEVEL. Ce tutoriel de Jacob Baker est un bon début. J'espère que ça aide.

11

LiveWire est l'un des nombreux simulateurs de circuits, de différents niveaux de capacité.

Par exemple, Falstad Circuit Simulator semble avoir un niveau de capacité similaire à LiveWire - et le code source est proposé sur ce lien. Ce devrait être un bon début.

Pour une simulation de circuit plus sophistiquée, de nombreux outils remontent à SPICE by UC Berkley . Le code source SPICE est disponible sur demande auprès d'UCB sous licence BSD.

Les éditions SPICE spécifiques au fabricant intègrent généralement des modèles de simulation de semi-conducteurs très détaillés de leurs propres produits dans leurs simulateurs. Par exemple, LTSpice IV de Linear Technologies ou TINA-TI de Texas Instruments. En dessous, c'est généralement du SPICE.

Citant la page WikiPedia sur SPICE:

Les programmes de simulation de circuits, dont SPICE et dérivés sont les plus importants, prennent une netlist textuelle décrivant les éléments du circuit (transistors, résistances, condensateurs, etc.) et leurs connexions, et traduisent cette description en équations à résoudre. Les équations générales produites sont des équations algébriques différentielles non linéaires qui sont résolues en utilisant des méthodes d'intégration implicites, la méthode de Newton et des techniques de matrice creuse.

À un niveau de sophistication encore plus élevé, plusieurs produits commerciaux tels que Proteus Virtual System Modeling , qui fait partie de Proteus Design Suite, utilisent des améliorations propriétaires pour la simulation de circuit SPICE en mode mixte - ces outils peuvent simuler à la fois le comportement du circuit analogique et le code du microcontrôleur numérique, avec les interactions entre eux entièrement modélisés.

À un niveau beaucoup plus limité et limitatif, certains éditeurs schématiques, tels que l'outil Circuit Lab intégré à ce site, offrent une petite gamme de capacités de simulation. Bien que cela ne soit pas si utile dans la conception électronique pratique et non triviale, étudier leurs capacités et leur mise en œuvre fournirait au développeur de logiciels un aperçu de ce qui fonctionne bien pour les utilisateurs et de ce qui ne fonctionne pas.


5

Il existe trois analyses principales effectuées par des simulateurs de circuits de type SPICE:

  • Point de fonctionnement DC
  • Analyse AC
  • Analyse transitoire

L' analyse du point de fonctionnement CC pour un circuit linéaire (formé de sources CC, de résistances linéaires et de sources contrôlées linéaires) est effectuée à l'aide de l'analyse nodale modifiée (MNA). L'analyse de maillage pourrait également être utilisée, mais il est très facile de configurer les équations pour l'analyse nodale.

Pour les circuits non linéaires (qui incluent des dispositifs comme les transistors, qui peuvent être modélisés essentiellement comme des sources contrôlées non linéaires), quelques astuces supplémentaires doivent être utilisées. Un moyen conceptuellement simple consiste à utiliser une extension de la méthode de Newton pour plusieurs équations.

La méthode de Newton consiste à deviner la solution, puis à faire un modèle linéaire du circuit qui n'est précis que "près" de la solution supposée. La solution du circuit linéarisé est utilisée comme une nouvelle estimation de la solution, et le processus est itéré jusqu'à ce que les itérations successives "convergent" sur la solution (espérons-le) correcte pour le circuit non linéaire. Dans le monde réel, des solveurs non linéaires plus compliqués sont utilisés pour être en mesure de faire la solution plus rapidement et avec moins d'erreurs en raison de l'échec de la convergence.

L' analyse AC est effectuée en effectuant d'abord une analyse DC pour trouver un point de fonctionnement. Ensuite, vous étudiez l'effet de petites perturbations autour du point de fonctionnement. "Petit" signifie, par définition, suffisamment petit pour que les effets non linéaires ne soient pas importants. Cela signifie que les éléments du circuit sont transformés en éléments linéaires équivalents en fonction du point de fonctionnement. Ensuite, le MNA peut être utilisé (avec des nombres complexes représentant l'impédance des éléments de stockage d'énergie) pour résoudre l'effet des perturbations causées par les sources CA dans le circuit.

L' analyse transitoire se fait, comme le dit Olin dans ses commentaires, en considérant comment les variables du circuit évoluent sur de très petits pas dans le temps. Encore une fois à chaque pas de temps, le circuit est linéarisé autour de son point de fonctionnement, de sorte que le MNA peut être utilisé pour configurer les équations. Une méthode simple pour résoudre le comportement au fil du temps est la méthode d'Euler . Cependant, dans la pratique, des méthodes plus compliquées sont utilisées pour permettre d'utiliser des pas de temps plus longs avec des erreurs plus petites.

Vous pouvez voir qu'un fil conducteur dans ces méthodes consiste à effectuer une approximation linéaire du comportement du circuit et à le résoudre avec MNA jusqu'à ce que vous trouviez une solution au comportement du circuit non linéaire.

Ces trois analyses sont les principales effectuées par les simulateurs de type SPICE depuis les années 1970. Les nouveaux simulateurs ajoutent des capacités supplémentaires comme l'équilibre harmonique (une extension de l'analyse CA pour s'adapter aux effets de mélange des éléments non linéaires), ou des simulations électromagnétiques pour simuler les effets des lignes de transmission. Mais les simulations CC, CA et transitoires sont les trois premières que vous devez comprendre lorsque vous utilisez un simulateur de type SPICE.


J'ai expliqué comment configurer les équations MNA dans une réponse antérieure: electronics.stackexchange.com/questions/19198/…
The Photon

2
Nous devons également ajouter que les simulations de circuits numériques utilisent des méthodes entièrement différentes; et cela fait de la co-simulation analogique-numérique un problème à part entière.
Le Photon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.