Circuito linear simples.

Usando o Scilab em simulação de circuitos em regime transitório

Um circuito em regime transitório apresenta suas correntes e tensões variando ao longo do tempo. Essas variações das intensidades das correntes e tensões em um circuito normalmente podem ser explicadas adequadamente através de equações diferenciais ordinárias (EDOs). Assim, para simular a resposta de um circuito em regime transitório, o primeiro passo é expressar o circuito que se deseja analisar em função de uma ou um conjunto de equações diferenciais. Estas equações são obtidas facilmente através da aplicação das relações de tensão e corrente através de resistores, capacitores e indutores. Ou seja:

\[
v(t)=R \cdot i(t)
\]

\[
v(t)=L \cdot \frac{d i(t)}{dt}
\]

\[
i(t)=C \cdot \frac{d v(t)}{dt}
\]

Podemos utilizar também as relações de tensão e corrente no domínio de Laplace. Ou seja, a transformada de Laplace das equações anteriores. As equações se tornam relações algébricas em relação a variável complexa s. Assim, as equações anteriores são transformadas nas seguintes equações algébricas:

\[
V(s)=R \cdot I(s)
\]

\[
V(s)=s \cdot L \cdot I(s)
\]

\[
I(s)=s \cdot C \cdot V(s)
\]

A principal vantagem de utilizar as equações no domínio de Laplace é poder criar expressões generalizadas para a oposição a passagem de corrente e para a lei de Ohm. São expressões muito semelhantes as utilizadas, por exemplo, na análise de circuitos AC em regime permanente senoidal. Entretanto, são expressões que podem ser utilizadas para sinais arbitrários e não apenas sinais senoidais. As semelhanças não são coincidências, na análise de regimes permanentes senoidais utilizamos a transformada de Fourier, que é um caso restrito da transformada de Laplace. Quando fazemos as contas no “papel” utilizando apenas sinais senoidais, é mais fácil trabalhar com a transformada de Fourier. Entretanto, quando desejamos respostas de circuitos a sinais arbitrários e pretendemos fazer as contas em um sistema algébrico computacional (ou CAS, como o Scilab), não há motivo para usar Fourier. O melhor é usar logo Laplace independentemente do tipo de sinal que se deseja utilizar. As expressões para impedâncias indutivas e capacitivas no domínio de Laplace são:

\[
Z_{L}(s)=(R + s \cdot L )
\]

\[
Z_{C}(s)=(R + \frac{1}{s \cdot C} )
\]

Nestas equações, $R$ é o valor de uma resistência em ohms, $L$ é o valor de uma indutância em henry e $C$ é o valor de uma capacitância em farad. Diferentemente da análise em regime permanente senoidal, não é necessário especificar um frequência ($w$) para o calculo das impedâncias.

A expressão generalizada para a lei de Ohm no domínio de Laplace fica da seguinte forma:

\[
V(s)=Z(s) \cdot I(s)
\]

Uma vez que se tenha as equações do circuito expressas no tempo (através de equações diferenciais) ou no domínio de Laplaca (utilizando as expressões algébricas em s) podemos utilizar um CAS para avaliar a resposta no tempo do circuito.

Neste post, vamos apresentar um exemplo simples de como podemos simular circuitos lineares em regime transitório com uma única entrada utilizando o Scilab e a equação do circuito já no domínio de Laplace. É possível também realizar simulações de circuitos utilizando suas equações no tempo e com mais de uma entrada. Entretanto, estas formas de simulação no tempo e com mais de uma entrada ficam para um outro post.

O circuito

O circuito que vamos utilizar como exemplo para simulação esta mostrado na Figura 1. É um circuito bem simples composto por uma única malha, mas que tem a sua utilidade principalmente para análise de transitórios em circuitos AC.

Circuito a ser simulado.
Figura 1:

Os elementos do circuito $Z_{in}$, $Z_{line}$ e $Z_{load}$ são impedâncias e podem ter, basicamente, quais quer combinação de resistências, capacitâncias e indutâncias. A entrada do circuito é $V_{in}$ e pode ser, essencialmente, qualquer forma de onda no tempo. O sinal $V_{in}$ pode ser periódico ou não periódico. As saídas do circuito, neste exemplo, serão a tensão $V_{out}$ sobre $Z_{load}$ e corrente $I_{out}$ que passa por essa impedância. Entretanto, poderíamos ter a tensão ou corrente em qualquer outro componente do circuito. Para exemplificar, vamos adotar os seguintes valores para o circuito da Figura 1:

\[
Z_{in} = 100+\frac{1}{s \cdot 10 \cdot 10^{-3}}
\]

\[
Z_{line} = 10
\]

\[
Z_{load} = 10+s \cdot 25 \cdot 10^{-3}
\]

Notem que, no exemplo, o valor adotado para $Z_{in}$ é uma impedância formada por um resistor de $100 \Omega$ em série com um capacitor de $10 m F$. $Z_{line}$ é uma impedância puramente resistiva com resistência igual a $10 \Omega$. E $Z_{load}$ é um resistor de $10 \Omega$ em série com um indutor de $25 mH$.

A equação do circuito

Aplicando a segunda lei de Kirchhoff ou lei das malhas no circuito deste exemplo, obtemos a seguinte equação:

\[
V_{in} = ( Z_{in} + Z_{line} +Z_{load} ) \cdot I_{in}
\]

Como o circuito só tem uma malha, sabemos que a corrente $I_{in}$ que sai da fonte $V_{in}$ é a mesma corrente $I_{out}$ que passa pela impedância $Z_{load}$ e produz a saída desejada $V_{out}$, ou seja:

\[
I_{in} = I_{out}
\]

E a saída do circuito deve obedecer a seguinte relação (generalização da lei de Ohm):

\[
V_{out} = Z_{load} \cdot I_{out}
\]

Considerando as equações anteriores, a expressão final que relaciona $V_{in}$ com $V_{out}$ é:

\[
V_{out} = \frac{Z_{load}}{ Z_{in} + Z_{line} +Z_{load} } \cdot V_{in}
\]

Para podermos realizar as simulações no Scilab, ainda é preciso colocar o equação acima na forma de uma função de transferência, ou seja:

\[
\frac{V_{out}}{V_{in}}=H(s)= \frac{Z_{load}}{ Z_{in} + Z_{line} +Z_{load} }
\]

Assim, a relação de entrada ($V_{in}$) e saída ($V_{out}$) fica:

\[
V_{out} = H(s) \cdot V_{in}
\]

Para determinar, por exemplo, a relação de entrada $V_{in}$ com a saída $I_{out}$ o procedimento é análogo ao anterior. E a função de transferência $G(s)$ para essa relação fica da seguinte forma:

\[
\frac{I_{out}}{V_{in}}=G(s)= \frac{1}{ Z_{in} + Z_{line} +Z_{load} }
\]

Assim, a relação de entrada ($V_{in}$) e saída ($I_{out}$) fica:

\[
I_{out} = G(s) \cdot V_{in}
\]

Para efeitos de simulação, o principal é obter a função de transferência do circuito. No Scilab, uma vez definindo a função de transferência, basta criar um sinal arbitrário $V_{in}$ para testar o circuito e registrar a saída da simulação $V_{out}$. O comando que faz a “mágica” acontecer é o csim. Esta função do Scilab recebe, basicamente, três parâmetros. O primeiro parâmetro (u) é um vetor com as intensidades ao longo do tempo da função de entrada do sistema. O segundo parâmetro (t), é um vetor com os respectivos intervalos de tempo das intensidades registradas no vetor u. O terceiro parâmetro é a função de transferência do sistema a ser simulado. A saída é um vetor com as intensidades da resposta do sistema ao longo do tempo. Os intervalos de tempo utilizados na saída do sistema são os mesmo da entrada, ou seja t. Notem que, para efeito de simulação, as entradas e saídas são dadas ao longo do tempo e não no domínio de Laplace. O único parâmetro que é dado no domínio de Laplace é a função de transferência do sistema.

Neste exemplo, vamos apresentar três simulações com sinais $V_{in}$ distintos. Em uma primeira simulação vamos fazer $V_{in}$ igual a um sinal senoidal. Em uma segunda simulação, uma senoide modificada. Por último, vamos aplicar um sinal $V_{in}$ na forma de um pulso. Em todas essas simulações o circuito será o mesmo, somente o sinal de entrada $V_{in}$ será diferente.

Abaixo segue os códigos em Scilab script para o exemplo apresentado aqui com diferentes tipos de entrada.

Simulação com sinal senoidal

Este script realiza as simulações para as variações de tensões e corrente ao longo do tempo sobre a carga $Z_{load}$ considerando a seguinte entrada senoidal.

\[
V_{in}=311.13 \cdot sin(2 \cdot \pi \cdot 60 \cdot t)
\]

O script para realizar a simulação segue abaixo:

Scilab
//Exemplo de código ilustrativo de simulação de circuito
//www.drgomes.pro

//Definição da variável complexa s
s=poly(0,'s')

//Parâmetros da entrada
Vp=311.13 // Volts 
f=60 //Hz
w=2*%pi*f // rad/s
t=0:0.0001:5*(1/f) //tempo em segundos
Vin=Vp*sin(w*t) //Entrada senoidal

//Parâmetros do circuito
Cin=10e-3 //Capacitor 10mF
Zin=100+1/(s*Cin) //100 ohm e 10mF

Zline=10 //10 ohm

Rload=10     // 10 ohm
Lload=25e-3// 150 mH 
Zload=Rload+Lload*s

//Funçao de transferencia do circuito
H=Zload/(Zin+Zline+Zload) // H=Vout/Vin
G=1/(Zin+Zline+Zload)     // G=Iout/Vin


//Simulações da saída de tensão e corrente na carga
Iout=csim(Vin,t,G);
Vout=csim(Vin,t,H);

subplot(211)
xtitle("www.drgomes.pro")
plot(t,Vin,'k-')
plot(t,Vout,'r-')
xlabel('t(s)')
ylabel('V(volts)')
xgrid
//Perfumaria para deixar o plot mais bonito...
f=gcf() //Captura o contexto gráfico
a = f.children(); 
a.data_bounds = [0 0.09 -400 400 ];
p=a.children(1).children(1); //Características da linha do 1 plot
p.thickness=2;
p=a.children(2).children(1); //Características da linha do 2 plot
p.thickness=2;

subplot(212)
plot(t,Iout,'b-')
xlabel('t(s)')
ylabel('I(Amps)')
xgrid
//Perfumaria para deixar o plot mais bonito...
f=gcf() //Captura o contexto gráfico
a = f.children(); 
p=a.children(1).children(1);
p.thickness=2;

Notem que o sinal $v_{in}(t)$ é,na realidade, registrado em dois vetores. No vetor Vin, há as intensidades do sinal ao longo do tempo e no vetor t há os intervalos de tempo para as respectivas intensidades.

A resposta da simulação, vetores Vout ou Iout, só apresenta as intensidades de saída. Os intervalos de tempo são os mesmos contidos no vetor t.

Na Figura 2, temos os sinais de entrada(linha preta) e saída(tensão-> linha vermelha e corrente-> linha azul) do circuito da Figura 1.

Plot 2d
Figura 2: Resposta a uma entrada senoidal do circuito da Figura 1. Nos gráficos, $v_{in}(t)$ esta representado com linha preta, $v_{out}(t)$ esta representado com linha vermelha e $i_{out}(t)$ esta representado com linha azul.

Simulação com sinal senoidal modificada

No exemplo a seguir, temos o mesmo circuito anterior, mas respondendo a uma entrada de uma senoide modificada (sinal típico produzido por inversores DC-AC). A definição do sinal $V_{in}$, neste exemplo, segue abaixo:

\[
V_{in}= \left\{ \begin{matrix}
311.13 & sin(2 \cdot \pi \cdot 60 \cdot t) > \frac{\sqrt{2}}{2} \\
0 & -\frac{\sqrt{2}}{2} < sin(2 \cdot \pi \cdot 60 \cdot t) < \frac{\sqrt{2}}{2}\\ -311.13 & sin(2 \cdot \pi \cdot 60 \cdot t) < -\frac{\sqrt{2}}{2} \end{matrix} \right. \]

O script para realizar a simulação segue abaixo:

Scilab
//Exemplo de código ilustrativo de simulação de circuito
//www.drgomes.pro

//Definição da variável complexa s
s=poly(0,'s')

//Definição senoide modificada
function y=msin(wt)
    y=zeros(wt)
    yy=sin(wt)
    y=(yy>0.7071).*1-(yy<-0.7071).*1
endfunction

//Parâmetros da entrada
Vp=311.13 // Volts 
f=60 //Hz
w=2*%pi*f // rad/s
t=0:0.0001:5*(1/f) //tempo em segundos
Vin=Vp*msin(w*t) //Entrada senoidal


//Parâmetros do circuito
Cin=10e-3 //Capacitor 10mF
Zin=100+1/(s*Cin) //100 ohm e 10mF

Zline=10 //10 ohm

Rload=10     // 10 ohm
Lload=25e-3// 150 mH 
Zload=Rload+Lload*s

//Funçao de transferencia do circuito
H=Zload/(Zin+Zline+Zload) // H=Vout/Vin
G=1/(Zin+Zline+Zload)     // G=Iout/Vin


//Simulações da saída de tensão e corrente na carga
Iout=csim(Vin,t,G);
Vout=csim(Vin,t,H);

subplot(211)
xtitle("www.drgomes.pro")
plot(t,Vin,'k-')
plot(t,Vout,'r-')
xlabel('t(s)')
ylabel('V(volts)')
xgrid
//Perfumaria para deixar o plot mais bonito...
f=gcf() //Captura o contexto gráfico
a = f.children(1); 
a.data_bounds = [0 0.09 -400 400 ];
p=a.children(1).children(1); //Características da linha do 1 plot
p.thickness=2;
p=a.children(2).children(1); //Características da linha do 2 plot
p.thickness=2;


subplot(212)
plot(t,Iout,'b-')
xlabel('t(s)')
ylabel('I(Amps)')
xgrid
//Perfumaria para deixar o plot mais bonito...
f=gcf() //Captura o contexto gráfico
a = f.children(1);
p=a.children(1).children(1);
p.thickness=2;
Plot 2d
Figura 3: Resposta a senoide modificada do circuito da Figura 1. Nos gráficos, $v_{in}(t)$ esta representado com linha preta, $v_{out}(t)$ esta representado com linha vermelha e $i_{out}(t)$ esta representado com linha azul.

Simulação com a entrada de um pulso

Neste outro exemplo, também temos o mesmo circuito, mas agora a entrada $V_{in}$ é um sinal não periódico na forma de um pulso simples. A definição do sinal $V_{in}$, neste exemplo, segue abaixo:

\[
V_{in}=300 \cdot (u(t-0.01) – u(t-0.04))
\]

O script para realizar a simulação segue abaixo:

Scilab
//Exemplo de código ilustrativo de simulação de circuito
//www.drgomes.pro

//Definição da variável complexa s
s=poly(0,'s')

//Definição degrau unitrio
function y=u(t)
    y=zeros(t)
    y=(t>=0).*1
endfunction

//Parâmetros da entrada
Vp=300 // Volts
f=60
t=0:0.0001:5*(1/f) 
Vin=Vp*(u(t-0.01)-u(t-0.04)) //Entrada tipo pulso


//Parâmetros do circuito
Cin=10e-3 //Capacitor 10mF
Zin=100+1/(s*Cin) //100 ohm e 10mF

Zline=10 //10 ohm

Rload=10     // 10 ohm
Lload=25e-3// 150 mH 
Zload=Rload+Lload*s

//Funçao de transferencia do circuito
H=Zload/(Zin+Zline+Zload) // H=Vout/Vin
G=1/(Zin+Zline+Zload)     // G=Iout/Vin


//Simulações da saída de tensão e corrente na carga
Iout=csim(Vin,t,G);
Vout=csim(Vin,t,H);

subplot(211)
xtitle("www.drgomes.pro")
plot(t,Vin,'k-')
plot(t,Vout,'r-')
xlabel('t(s)')
ylabel('V(volts)')
xgrid
//Perfumaria para deixar o plot mais bonito...
f=gcf() //Captura o contexto gráfico
a = f.children(); 
a.data_bounds = [0 0.09 -400 400 ];
p=a.children(1).children(1); //Características da linha do 1 plot
p.thickness=2;
p=a.children(2).children(1); //Características da linha do 2 plot
p.thickness=2;

subplot(212)
plot(t,Iout,'b-')
xlabel('t(s)')
ylabel('I(Amps)')
xgrid
//Perfumaria para deixar o plot mais bonito...
f=gcf() //Captura o contexto gráfico
a = f.children();
p=a.children(1).children(1);
p.thickness=2;
Plot 2d
Figura 4: Resposta ao pulso do circuito da Figura 1. Nos gráficos, $v_{in}(t)$ esta representado com linha preta, $v_{out}(t)$ esta representado com linha vermelha e $i_{out}(t)$ esta representado com linha azul.

Conclusões

Neste post vimos como podemos realizar simulações da resposta transitória de circuitos simples utilizando o Scilab como sistema de álgebra computacional. O essencial para realizar as simulações, da forma como proposto aqui, é obter a função de transferência do circuito. Esse processo precisa ser feito manualmente, mas uma vez vencida essa etapa, pode-se realizar com facilidade a simulação da resposta do circuito a diversos tipos de entrada diferentes. A complexidade do circuito a ser simulado é limitada basicamente a nossa capacidade de obter uma função transferência apropriada para o circuito.

Comentários, sugestões e criticas, são sempre bem vindos.

That’s all folks!


Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *