Como os simuladores de circuito realmente funcionam?


31

Recentemente, tive a oportunidade de brincar com o LiveWire , que é um simulador de circuitos e comecei a me perguntar como exatamente eles calculavam as tensões em cada componente e a corrente passando por cada faixa de fio.

Até agora, aprendi apenas habilidades básicas de análise de circuitos (como análise de malha e análise nodal), e não tenho certeza absoluta de que elas sejam genéricas o suficiente para serem implementadas de maneira adequada em um simulador de circuitos.

Como programador, isso me intrigou e eu adoraria ver quais técnicas são comumente empregadas na construção de simuladores de circuito como este.

Minhas desculpas, se isso não pertencer a este, foi uma escolha entre aqui e o StackOverflow e senti que, embora seja uma pergunta orientada ao desenvolvimento de software, a pergunta é mais aplicável a este site e é a base de usuários.


O truque principal são muitas fatias de tempo. Funções complexas de tempo são, portanto, tratadas, executando muitas equações de diferença com pequenos intervalos de tempo. A complexidade desagradável geralmente é reduzida significativamente se puder ser expressa como equações diferenciais, que se tornam equações de diferença em uma simulação digital.
amigos estão dizendo

Respostas:


14

Examinei o código do simulador Falstad com mais detalhes. Para circuitos que consistem apenas em componentes lineares como resistores, comutadores e fontes de tensão (coisas como saídas de porta lógica são consideradas fontes de tensão conectadas ao terra para fins de simulação), o simulador considera cada nó do circuito, fonte de tensão (conexão de dois nós) ou wire (da mesma forma) como definindo uma equação linear e uma variável, de modo que o número de equações e o número de variáveis ​​sejam sempre iguais. Para um nó de circuito, a variável é a tensão do nó, e a equação calcula a corrente total que flui através dele igual à corrente total injetada por quaisquer fontes de corrente. Para uma fonte ou fio de tensão (um fio sendo manuseado como fonte de tensão em que a diferença de potencial é zero),

Coisas como fontes de corrente e resistores não estão associados a resistores ou variáveis. Em vez disso, as fontes de corrente aumentam a corrente total necessária para um nó do circuito (lembre-se de que cada nó do circuito possui uma equação que avalia a corrente total que entra e sai) e diminui para o outro. Os resistores são um pouco mais complicados: para a equação de cada ponto final, o resistor adiciona termos para a tensão do nó de cada ponto final.

Um resistor de 100 ohm que conecta os nós 1 e 2, por exemplo, diria que cada aumento de volt no nó 1 diminuirá a corrente que flui para o nó 1 em 0,01 amperes e aumentará a corrente que flui para o nó 2 em uma quantidade semelhante. Da mesma forma, cada aumento de volt no nó 2 aumentaria a corrente que entra no nó 1 em 0,01 amperes e diminuiria a corrente que entra no nó 2 em uma quantidade semelhante.

Considere um circuito com uma fonte de 10 volts conectando os nós 1 e 5 e os resistores de 100 ohm conectando os nós 1 e 2, 2 e 3, 2 e 4 e 3 e 4. Suponha ainda que exista um ícone de aterramento no nó 1. Assim:

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

Haveria duas "fontes de tensão": o fio terra e a fonte de 10 volts (que são consideradas como equação / variável 5 e 6, respectivamente). As equações seriam assim:

-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)

Este sistema de equação pode ser representado como uma matriz NxN mais uma matriz de itens N. Cada equação é representada por uma linha na matriz, com valores em cada linha representando os coeficientes de cada variável. O lado direito de cada equação é armazenado em uma matriz separada. Antes de resolver as equações, conheceremos a corrente líquida que flui para cada nó (neste caso, zero) e a diferença de tensão entre pares de nós conectados por fontes de tensão. A resolução das equações produzirá a tensão em cada nó e a corrente que flui através de cada fonte de tensão.

Se o circuito contiver capacitores, cada um deles será considerado uma fonte de tensão em série com um resistor de baixo valor; após cada etapa da simulação, a fonte de tensão será ajustada de acordo com a quantidade de corrente que fluiu através dela. Os indutores serão considerados resistores de alto valor que alimentam a corrente em uma e a retiram na outra (a quantidade de corrente sendo ajustada de acordo com a tensão na resistência). Para capacitores e indutores, o valor da resistência será controlado pela quantidade de tempo representada por uma etapa de simulação.

Elementos de circuito mais complexos, como transistores, são considerados combinações de fontes de tensão, fontes de corrente e resistores. Ao contrário dos elementos de circuito mais simples que permitem que tudo seja processado uma vez por etapa do tempo de simulação, elementos como transistores calculam suas resistências efetivas etc. com base nas tensões e correntes que estão vendo, avaliam todas as equações resultantes e reavaliam sua resistência com base em as novas tensões e correntes reavaliam as equações, etc., em um esforço para alcançar um equilíbrio em que a resistência efetiva seja a mesma para a tensão e a corrente que o transitor está vendo.

O simulador Falstad pode ser decentemente rápido para circuitos de tamanho moderado que consistem inteiramente em elementos "lineares". O tempo para resolver repetidamente um sistema de equações é bastante razoável se a única coisa que muda são os coeficientes do lado direito. O tempo fica muito mais lento se o lado esquerdo mudar (por exemplo, porque a resistência efetiva de um transistor aumenta ou diminui) porque o sistema precisa "refatorar" as equações. Ter que refatorar as equações várias vezes por etapa de simulação (pode ser necessário com transistores) torna as coisas ainda mais lentas.

Usar uma grande matriz para tudo não é uma boa abordagem para grandes simulações; mesmo que a matriz seja bastante esparsa, ela ocupará espaço proporcional ao quadrado do número de nós mais as fontes de tensão. O tempo necessário para resolver a matriz em cada etapa da simulação será proporcional ao quadrado do tamanho da matriz, se a refatoração não for necessária, ou ao cubo do tamanho da matriz, se for necessária a refatoração. No entanto, a abordagem tem certa elegância quando se trata de mostrar a relação entre um circuito e um sistema de equações lineares.


A maioria dos simuladores do tipo SPICE também usa esse tipo de algoritmo. Aqui está uma visão geral do spice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
user6972:

1
FYI - KLU é o algoritmo comum usado em simuladores de circuito. KLU significa Clark Kent LU, uma vez que é baseado no algoritmo de Gilbert-Peierls, um algoritmo não supernodal, que é o antecessor do SuperLU, um algoritmo supernodal. O KLU é um solucionador linear esparso de alto desempenho que emprega mecanismos de pedidos híbridos, fatoração elegante e algoritmos de resolução.
user6972

É importante notar que existem vários modelos de transistores, BSIM ou EKV, por exemplo. Basicamente, esses modelos levam em consideração toda a física, do ponto de vista, envolvida na operação de um único transistor e os efeitos em suas características elétricas. Há muito mais do que apenas representar como combinações de fontes de tensão, fontes de corrente e resistores. Se você deseja selecionar um modelo diferente, pode usar o parâmetro LEVEL. Este tutorial de Jacob Baker é um bom começo. espero que ajude.

11

O LiveWire é um dos muitos simuladores de circuito, com diferentes níveis de capacidade.

Por exemplo, o Falstad Circuit Simulator parece ter um nível de capacidade semelhante ao LiveWire - e o código-fonte é oferecido nesse link. Esse deve ser um bom começo.

Para uma simulação de circuito mais sofisticada, muitas ferramentas remontam ao SPICE pela UC Berkley . O código fonte do SPICE está disponível mediante solicitação no UCB sob licença BSD.

As edições SPICE específicas do fabricante normalmente integram modelos de simulação de semicondutores muito detalhados de seus próprios produtos em seus simuladores. Por exemplo, o LTSpice IV da Linear Technologies ou TINA-TI da Texas Instruments. Por baixo, geralmente é tudo SPICE.

Citando na página WikiPedia sobre o SPICE:

Os programas de simulação de circuitos, dos quais o SPICE e os derivados são os mais destacados, usam uma lista de rede de texto descrevendo os elementos do circuito (transistores, resistores, capacitores etc.) e suas conexões, e traduzem essa descrição em equações a serem resolvidas. As equações gerais produzidas são equações algébricas diferenciais não lineares que são resolvidas usando métodos de integração implícita, método de Newton e técnicas de matriz esparsa.

Em um nível ainda mais alto de sofisticação, vários produtos comerciais, como o Proteus Virtual System Modeling , parte do Proteus Design Suite, usam aprimoramentos proprietários para simulação de circuito SPICE em modo misto - essas ferramentas podem simular o comportamento do circuito analógico e o código do microcontrolador digital, com as interações entre eles totalmente modeladas.

Em um nível muito mais limitado e limitante, alguns editores esquemáticos, como a ferramenta Circuit Lab integrada neste site, fornecem uma pequena variedade de recursos de simulação. Embora isso possa não ser tão útil no design eletrônico prático e não trivial, o estudo de seus recursos e implementação forneceria ao desenvolvedor de software algumas dicas sobre o que funciona bem para os usuários e o que não funciona.


5

Existem três análises principais feitas por simuladores de circuito do tipo SPICE:

  • Ponto de operação DC
  • Análise AC
  • Análise transitória

O ponto de operação DC análise do para um circuito linear (formado a partir de fontes CC, resistores lineares e fontes controladas lineares) é feita usando a análise nodal modificada (MNA). A análise de malha também pode ser usada, mas é muito fácil configurar as equações para a análise nodal.

Para circuitos não lineares (que incluem dispositivos como transistores, que podem ser modelados principalmente como fontes controladas não lineares), alguns truques adicionais precisam ser usados. Uma maneira conceitualmente simples é usar uma extensão de do Método Newton para múltiplas equações.

O método de Newton envolve adivinhar a solução e, em seguida, criar um modelo linear do circuito que seja preciso apenas "próximo" da solução calculada. A solução para o circuito linearizado é usada como um novo palpite sobre a solução, e o processo é iterado até que as iterações sucessivas "converjam" na (espero) solução correta para o circuito não linear. No mundo real, os solucionadores não-lineares mais complicados são usados ​​para poder executar a solução mais rapidamente e com menos erros devido à falha de convergência.

A análise AC é feita primeiro fazendo uma análise de CD para encontrar um ponto de operação. Então você estuda o efeito de pequenas perturbações em torno do ponto de operação. "Pequeno" significa, por definição, pequeno o suficiente para que efeitos não lineares não sejam importantes. Isso significa que os elementos do circuito são transformados em elementos equivalentes lineares, dependendo do ponto de operação. Em seguida, o MNA pode ser usado (com números complexos representando a impedância dos elementos de armazenamento de energia) para resolver o efeito das perturbações causadas pelas fontes CA no circuito.

A análise transitória é feita, como Olin diz nos comentários, considerando como as variáveis ​​do circuito evoluem em etapas muito pequenas no tempo. Novamente, a cada passo do tempo, o circuito é linearizado em torno do ponto operacional, para que o MNA possa ser usado para configurar as equações. Um método simples para resolver o comportamento ao longo do tempo é o método de Euler . No entanto, novamente na prática, métodos mais complicados são usados ​​para permitir o uso de timesteps maiores com erros menores.

Você pode ver que um encadeamento comum nesses métodos está fazendo uma aproximação linear ao comportamento do circuito e resolvendo isso com o MNA até encontrar uma solução para o comportamento não linear do circuito.

Essas três análises foram as principais realizadas por simuladores do tipo SPICE desde os anos 70. Os simuladores mais recentes adicionam recursos adicionais, como balanço harmônico (uma extensão da anlise CA para acomodar efeitos de mistura de elementos não lineares) ou simulações eletromagnéticas para simular efeitos de linha de transmissão. Mas as simulações de corrente contínua, corrente alternada e transitória são as três primeiras que você deve entender ao usar um simulador do tipo SPICE.


Eu falei sobre como configurar as equações do MNA em uma resposta anterior: electronics.stackexchange.com/questions/19198/…
The Photon

2
Também devemos acrescentar que as simulações de circuitos digitais usam métodos totalmente diferentes; e isso faz da co-simulação analógico-digital um problema próprio.
O Photon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.