Circuito RC

Simulando um circuito RC e avaliando sua resposta no tempo e na frequência.

Um circuito RC é formado por um resistor e um capacitor normalmente disposto em série. É um circuito bastante simples, mas muito importante para o entendimento de circuitos reativos mais complexos como filtros.

Neste post, vamos ver como este circuito pode ser analisado e simulado no Scilab. É esperado que o leitor tenha conhecimento básico de análise de circuitos, transformada de Laplace e função de transferência.

O circuito

Abaixo, na Figura 1, temos um desenho esquemático de um circuito RC típico.

Plot 3d
Figura 1: Circuito RC básico.

Na Figura 1, $v_{in}(t)$ é a entrada de tensão do circuito e $v_{out}(t)$ é a saída. A corrente de saída, $i_{out}(t)$ é considerada igual a zero. Ou seja, este circuito RC é formado por uma única malha que envolve a fonte $v_{in}$, o resistor $R_1$ e o capacitor $C_1$, todos conectados em série.

Neste exemplo, vamos considerar os seguintes valores para $R_1$ e $C_1$:

\[
R_1= 1 K \Omega
\]

\[
C_1= 1 \mu F
\]

Em relação a entrada, $v_{in}(t)$, diversos tipos serão testados. Os tipos específicos e suas particularidades serão abordados na próxima seção. A função de transferência do circuito RC da Figura 1 é apresentada abaixo:

\[
H(s) = \frac{1}{1+s \cdot R \cdot C} \qquad Eq.1
\]

Resposta no tempo

Para realizar simulações do comportamento dinâmico do circuito precisamos, essencialmente, obtermos a funções de transferência do circuito ($H(s)$) e definir qual a forma do sinal de entrada ($v_{in}(t)$). Uma vez definidos $H(s)$ e $v_{in}(t)$ é possível calcular a saída $v_{out}(t)$ por simulação dinâmica. Vários tipos diferentes de softwares podem ser utilizados para realizar esse trabalho, como: Scilab, Matlab, Modelica, Mathematica, Python(SciPy), etc. Ou seja, há muitas opções de software para realizar esse trabalho. A abordagem é basicamente a mesma para todos esses softwares. Neste exemplo, vamos utilizar o Scilab para realizar as simulações. No Scilab, o comando para simular a resposta no tempo de um sistema dinâmico definido por uma função de transferência é o csim. Este comando tem três parâmetros principais: entrada $r(t)$, o tempo $t$ e a função de transferência $H(s)$ do sistema que se deseja obter a resposta. No nosso caso, consideraremos $r(t)=v_{in}(t)$. E $t$ será um vetor com todos os instantes de tempo utilizados para calcular os valores de $v_{in}(t)$. A função de transferência $H(s)$ será a do circuito RC (Figura 1), a equação 1.

Faremos simulações do comportamento dinâmico do circuito RC da Figura 1 com 4 tipos de sinais diferente, listados abaixo:

  1. Entrada constante e capacitor descarregado: $v_{in}(t)=12$ e $v_c(0)=0$;
  2. Entrada nula e capacitor carregado: $v_{in}(t)=0$ e $v_c(0)=12$
  3. Entrada igual a um pulso e capacitor descarregado: $v_{in}(t)=12 \cdot (u(t-0.001)-u(t-0.003))$ e $v_c(0)=0$
  4. Entradas senoidais de frequências $0.1 w_c$,$w_c$ e $10 w_c $ e capacitor descarregado: $v_{in}(t)=12 \cdot sin(w_i \cdot t)$ e $v_c(0)=0$

Todos os casos acima são respostas no tempo do funcionamento do circuito RC. A resposta em frequência do circuito poderia ser obtida realizando várias simulações consecutivas no tempo de entradas senoidais com frequências distribuídas ao longo de um intervalo desejado. Entretanto, na maioria dos software esse trabalho de avaliar a resposta em diferentes sinais senoidais não é necessário. Em muitos software, como no Scilab, há rotinas prontas para, por exemplo, plotar o gráfico de Bode a partir da função de transferência do sistema. Vamos mostrar esse procedimento por último.

1. Entrada constante e capacitor descarregado

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

s=poly(0,'s');

R=1e3
C=1e-6
tau=R*C
Vcc=12

Zc=1/(s*C)
H=Zc/(R+Zc)

t=0:(tau/1000):5*tau;
Vin=Vcc*ones(t)

y=csim(Vin,t,H)

xtitle("www.drgomes.pro")
plot(t,y)
xlabel("t(s)")
ylabel("V(volts)")
xgrid

ax=gca(),//Captura dos parâmetros do plot atual.
ax.data_bounds=[0 -0.5; 0.005 12.5]; 
ax.children.children.thickness=2
Plot resposta circuito RC
Figura 2: Resposta no tempo, linha azul, a uma entrada $V_{in}(t)$ em degrau com 12V de amplitude em $t=0$ e capacitor inicialmente descarregado (estado inicial nulo).

2. Entrada nula e capacitor carregado

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

s=poly(0,'s');

R=1e3
C=1e-6
tau=R*C
Vcc=0

Zc=1/(s*C)
H=Zc/(R+Zc)

t=0:(tau/1000):5*tau;
Vin=Vcc*ones(t)

//31.623 é o ganho do sistema com estado inicial 1
y=csim(Vin,t,H,12/31.623)

xtitle("www.drgomes.pro")
plot(t,y)
xlabel("t(s)")
ylabel("V(volts)")
xgrid
ax=gca(),//Captura dos parâmetros do plot atual.
ax.data_bounds=[0 -0.5; 0.005 12.5]; 
ax.children.children.thickness=2
Plot resposta circuito RC
Figura 3: Resposta, linha azul, a entrada nula ($V_{in}(t)=0$) e capacitor inicialmente carregado com 12V (estado inicial não nulo).

3. Entrada igual a um pulso e capacitor descarregado

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

function y=step(x)
    y=zeros(x)
    y(x==0)=0.5
    y(x>0)=1
endfunction

s=poly(0,'s');

R=1e3
C=1e-6
tau=R*C
Vcc=12

Zc=1/(s*C)
H=Zc/(R+Zc)

t=0:(tau/1000):5*tau;
Vin=Vcc*(step(t-0.001)-step(t-0.003))

y=csim(Vin,t,H)

xtitle("www.drgomes.pro")
plot(t,Vin,'r-')
plot(t,y)
xlabel("t(s)")
ylabel("V(volts)")
xgrid
ax=gca(),//Captura dos parâmetros do plot atual.
ax.data_bounds=[0 -0.5; 0.005 12.5]; 
ax.children.children.thickness=2
Plot resposta circuito RC
Figura 4: Resposta do circuito RC da Figura 1, linha azul, a um pulso de duração de 2ms e início em 1ms, linha vermelha. Capacitor inicialmente descarregado.

4. Entradas senoidais de frequências $0.1 w_c$,$w_c$ e $10 w_c $ e capacitor descarregado

Neste exemplo, são consideradas três entradas senoidais diferentes. Uma primeira entrada senoidal com frequência 10 vezes menor que a frequência de corte do circuito, aproximadamente 15.9Hz. Uma segunda entrada senoidal com frequência igual a frequência de corte do circuito, 159.1 Hz. Uma terceira entrada com frequência 10 vezes maior que a frequência de corte, aproximadamente 1591.5Hz. Todas as entradas senoidais possuem 12V de amplitude de pico. E todas as respostas senoidais foram sobrepostas em um mesmo gráfico, Figura 5, para melhor comparação. O script do Scilab segue logo abaixo:

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

s=poly(0,'s');

R=1e3
C=1e-6
tau=R*C
Vcc=12

Zc=1/(s*C)
H=Zc/(R+Zc)

t=0:(tau/100):100*tau;
w2=1/tau
w1=0.1*w2;
w3=10*w2;

Vin1=Vcc*sin(w1*t)
Vin2=Vcc*sin(w2*t)
Vin3=Vcc*sin(w3*t)

y1=csim(Vin1,t,H)
y2=csim(Vin2,t,H)
y3=csim(Vin3,t,H)

xtitle("www.drgomes.pro")
plot(t,y1,'k-')
plot(t,y2,'r-')
plot(t,y3,'b-')
xlabel("t(s)")
ylabel("V(volts)")
xgrid

ax=gca(),//Captura dos parâmetros do plot atual.
ax.data_bounds=[0 -12.5; 100*tau 12.5]; 
ax.children.children.thickness=2

É interessante notar nos sinais de resposta a concordância entre a expectativa teórica e as simulações. Primeiro, o sinal com frequência muito menor que a frequência de corte do circuito praticamente não sofre atenuação nenhuma, linha preta na Figura 5. O sinal senoidal com frequência igual a frequência de corte, linha vermelha na Figura 5, tem uma atenuação de $1/ \sqrt{2}$ ou -3dB. E, o sinal com frequência 10 vezes maior que a frequência de corte, linha azul na Figura 5, sofre uma atenuação de -20dB ($V_{out}≃1.2V$).

Plot resposta circuito RC
Figura 5: Resposta do circuito RC da Figura 1 a três estímulos senoidais diferentes. Linha preta, sinal senoidal de $0.1 w_c$ ou 15.91Hz. Linha vermelha, sinal senoidal de $w_c$ ou 159.15 Hz (frequência de corte do circuito). Linha azul, sinal senoidal de $10 w_c$ ou 1591.5 Hz.

Resposta em frequência

A resposta em frequência do circuito RC pode ser obtida basicamente de duas formas diferentes. Simulando a resposta no tempo para vários valores de entradas senoidais com frequências diferentes e comparando a amplitude e fase das respectivas saídas em relação as entradas. Ou pode ser obtida diretamente a partir da função de transferência, substituindo $s$ por $jw$ e calculando o módulo e a fase da função de transferência para vários valores diferentes de frequência angular $w$. Entretanto, como a análise da resposta em frequência é uma tarefa relativamente comum, muito software já oferecem rotinas prontas para esse tipo de tarefa. No caso do Scilab, o comando é bode. Essencialmente, o único parâmetro que precisa ser passado para esse comando é a própria função de transferência do sistema na forma de um sistema linear. No Scilab para transformar uma função racional em s, como $H(s)$, em um sistema linear e contínuo no tempo é preciso chamar o comando syslin de conversão para informar ao Scilab que $H(s)$ deve ser interpretado como um sistema linear. Esse comando é apenas uma conversão de tipo. Não envolve nenhuma transformação ou operação matemática extra sobre $H(s)$.

Um exemplo de script em Scilab para plotar a resposta em frequência do circuito RC da Figura 1 segue logo abaixo:

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

s=poly(0,'s');

R=1e3
C=1e-6
tau=R*C

Zc=1/(s*C)
H=Zc/(R+Zc)

sl=syslin('c',H)
bode(sl)

xtitle("www.drgomes.pro")
xgrid

fig=gcf(),//Captura dos parâmetros do plot atual.
fig.children.children.children.thickness=2
Plot resposta circuito RC
Figura 6: Resposta em frequência do circuito RC da Figura 1.

Esse é o “básico” sobre simulação e análise de um circuito RC série simples usando uma ferramente CAS como o Scilab. Questões, comentários, dúvidas e críticas são sempre bem vindas.

Para quem gostou deste post e do assunto abordado eu convido a dar uma olhada em mais dois outros post com assuntos semelhantes:

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 *