Desenhando circuitos analógicos e digitais com LaTeX + Circuitikz – Parte 2

Neste artigo daremos continuidade ao nosso tutorial para desenhar circuitos no LaTeX com auxílio do Circuitikz, mostrando dois exemplos – circuito analógico contendo transistor e circuito digital (somador). Como vimos anteriormente, o Circuitikz é uma importante ferramenta para criação de diversos tipos de circuitos elétricos utilizando a plataforma LaTeX [1], mostrando-se útil principalmente para quem quer desenhar seus circuitos sem a utilização de um programa gráfico específico.
 
Partiremos para um exemplo completo de um circuito com transistor, e o desmembraremos para entender seu passo a passo, pois, o Circuitikz implementa o circuito por linha de comando, sendo assim, uma forma linear de desenhar com orientação em coordenadas (x,y), a cada comando adicionado ao código temos um traço ou elemento novo ao desenho. Caso você não saiba o que é o Circuitikz ou como inicializar seu circuito, veja nosso primeiro tutorial [2] onde explicamos os passos iniciais para a utilização desta ferramenta.
 
Para utilizar o pacote do Circuitikz [3] carregue o respectivo pacote no programa de execução LaTeX desejado. Neste tutorial utilizaremos o programa TeXstudio [4], caso queira instalar o mesmo, siga o manual [5].
 
Comece com a referência em (0,0), então trace a linha de ligação dos componentes, adicione a alimentação do circuito, o resistor R1, um nó com bifurcação e então o resistor R3 com extremidade inferior ligada à terra, coloque um capacitor em série com a resistência R3, e série com o capacitor teremos nossa fonte alternada, também com extremidade inferior ligada à terra.
1
Figura 1 – Circuito Incompleto
%Código Transistor
%Autor: Solysion
\begin{document}       
            \begin{circuitikz}
                        \draw (0,0)
                        %Linha
                        to[short] (3,0);
                        \draw (1.5,0) 
                        %node[left] comando para escrever no nó a esquerda
                        %{22V} escrever 22V complementando node[left]
                        to[short, *-] node[left] {22V} (1.5,1); %Linha de (1.5,0) à (1.5,1)
                        %Linha
                        \draw (1,1) to[short] (2,1);
                        \draw (0,0)
                        to[short] (0,-0.25)
                        %Resistor R3
                        to[R=$R_1$] (0,-1.5)
                        to[short, -*] (0,-2.5);
                        \draw (0,-2.5)
                        to[short] (0,-3.1)
                        to[R=$R_3$] (0,-4.7)
                        % Terra
                        to[short] node[ground] {} (0,-4.5);
                        %Linha
                        \draw (0,-2.5)
                        to[short] (-1,-2.5)
                        %Capacitor
                        to[C=$C_1$] (-1.5,-2.5)
                        to[short] (-2.5,-2.5)
                        %Fonte de Tensão Alternada
                        to[short] (-2.5,-3) to[sV]  (-2.5,-4.5)
                        %Terra
                        to[short] (-2.5,-4.5) node[ground] {} (-2.5,-4);
            
            \end{circuitikz}
\end{document}

1. Transistor

 
Seguindo no circuito anterior, trace uma nova referência para (0,-2.5), lembre-se que essas são coordenadas (x,y) para inicializarmos o desenho. Após, implemente o comando node[npn,nobase](npn) {Nome do transistor}, um comando para adicionar um transistor ‘npn’ no nosso circuito, caso desejado, pode-se alterar o mesmo para ‘pnp’, ‘pmos’, entre outros, apenas substitua ‘npn’ no comando acima pelo tipo de transistor desejado. Veja a lista de componentes que pode ser utilizada no Circuitikz em seu manual [5].
 

graphic

2
Figura 2 – Transistor
             \draw (0,-2.5) %Traçando referência
             to[short] (2.6,-2.5) %Linha de (0,-2.5) até (2.6,-2.5)
             (3,-2.5) node[npn,nobase](npn) {$Q_1$}; %Em (-3,-2.5) colocar o transistor node[npn,nobase] {npn} {Nome do Transistor}
 
 Implementando linhas de código acima ao nosso circuito anterior teremos:

graphic

3
Figura 3 – Circuito com transistor
Para finalizar, precisa-se conectar os componentes desejados ao transistor Q1. Comece com o comando \draw para indicar o desenho, em seguida acrescente (npn.C), do qual dará a referência para o nosso transistor, em seguida com o comando node[above]{} informamos que no teremos um resistor de 68k na coordenada (3,0) nó superior junto com o implemento do comando to[R=$68k$] (3,0).
 
\draw (npn.C) node[above]{} to[R=$68k$] (3,0);
 %Desenhar na parte superior do transistor, (npn,C) node[above] {} , um resistor, to[R=$68k$] , até (3,0)
 
De forma semelhante ao comando anterior, adicione os componentes a parte inferior do nosso transistor Q1, com a referência (npn.E) seguido do comando node[below] {} do qual informa que ligado ao nosso coletor teremos um resistor R4 na coordenada (3,-4.5).
 
\draw (npn.E) node[below]{} to[R=$R_4$] (3,-4.5);
 %Na parte de baixo do transistor, (npn,E) node[below] {}, acrescentar um resistor to[R=$R_4$] até (3,-4.5)
 
Para finalizar nosso circuito, adicione um capacitor polarizado em paralelo ao nosso R4, em seguida os terras de referência.
 
                        %Desenhar capacitor polarizado de (5,-4.2) até (5,-2.8)
                        %Inverte-se as coordenadas para inverter a polaridade do capacitor
                        \draw (5,-4.2) to[pC=$C_2$] (5,-2.8);
 
                        %Linha
                        \draw (3,-2.8) to[short, *-] (5,-2.8); % Desenhar linha de (3,-2.8) até (5,-2.8)
                        %Terras
                        \draw (3,-4.5) to[short] node[ground] {} (3,-4.5);
                        %Acrescentar terra, to[short] node[ground], em (3,-4.5)
                        \draw (5,-4.2) to[short] node[ground] {} (5,-4.5);
                        %Desenhar o Terra de (5,-4.2) até (5,-4.5)
                        
2. Circuito e o código finalizados
 
4
Figura 4 – Circuito completo

graphic

%Código transistor
%Autor: Solysion
\documentclass{article}
\usepackage{tikz}
\usepackage{verbatim}
\usepackage[american]{circuitikz}
\usepackage{amsmath}
\begin{document}       
            \begin{circuitikz}
                        \draw (0,0)
                        %Linha
                        to[short] (3,0);
                        \draw (1.5,0) 
                        %node[left] comando para escrever no nó a esquerda
                        %{22V} escrever 22V complementando node[left]
                        to[short, *-] node[left] {22V} (1.5,1);
                        %Linha
                        \draw (1,1) to[short] (2,1);
                        \draw (0,0)
                        to[short] (0,-0.25)
                        %Resistor R3
                        to[R=$R_1$] (0,-1.5)
                        to[short, -*] (0,-2.5);
                        \draw (0,-2.5)
                        to[short] (0,-3.1)
                        to[R=$R_3$] (0,-4.7)
                        %Terra
                        to[short] node[ground] {} (0,-4.5);
                        %Linha
                        \draw (0,-2.5)
                        to[short] (-1,-2.5)
                        %Capacitor
                        to[C=$C_1$] (-1.5,-2.5)
                        to[short] (-2.5,-2.5)
                        %Fonte de Tensão Alternada
                        to[short] (-2.5,-3) to[sV]  (-2.5,-4.5)
                        %Terra
                        to[short] (-2.5,-4.5) node[ground] {} (-2.5,-4);
                        %Transistor Q1
                        \draw (0,-2.5)
                        to[short] (2.6,-2.5)
                        (3,-2.5) node[npn,nobase](npn) {$Q_1$};
                        %Parte superior do Transistor com resistor de 68k
                        \draw (npn.C) node[above]{} to[R=$68k$] (3,0)
                        %Parte inferior do Transistor com resistor R4
                        \draw (npn.E) node[below]{} to[R=$R_4$] (3,-4.5);
                        \draw (5,-4.2) to[pC=$C_2$] (5,-2.8);
                        %Inverte-se as coordenadas para inverter a polaridade do capacitor
                        %Linha
                        \draw (3,-2.8) to[short, *-] (5,-2.8);
                        %Terras
                        \draw (3,-4.5) to[short] node[ground] {} (3,-4.5);
                        \draw (5,-4.2) to[short] node[ground] {} (5,-4.5);
            \end{circuitikz}
\end{document}
De forma análoga ao circuito acima, partiremos para o tutorial de um circuito analógico, ainda no TeXStudio, chame os mesmos pacotes do circuito anterior, comece o documento e o Circuitikz. Declare as portas lógicas que estarão presentes no seu circuito e suas coordenadas no plano, em seguida seus respectivos nomes.
No circuito a seguir trabalharemos com as portas, xor, or e and, mas você pode ver a lista completa dos comandos para todas as portas analógicas presentes no Circuitikz em seu manual [5].
 
        \node (A) at (-3.7,0.3) {A};
        \node (B) at (-3.7,-0.85) {B};
        \node (C) at (5.4,0.5) {Out};
        \node (D) at (-0.3,-5.8) {Carry Out};
        \node (E) at (1.45,2) {C (Carry In)};
        \node (F) at (1.7,-0.1) {[($\bar{A}$.B) + (A.$\bar{B}$)]};
        \node (G) at (-2,-3.5) {A.B};
        \node (H) at (2,-3.5) {[($\bar{A}$.B) + (A.$\bar{B}$)] . C};
         %Adicionar A-F como nome aos respectivos nós.
Utilizamos os seguintes comandos para modificar os parâmetros das nossas portas, obtendo um circuito maior e mais nítido.
 
        \ctikzset{tripoles/american and port/input height=1}
        \ctikzset{tripoles/american xor port/input height=1}
        \ctikzset{tripoles/american or port/input height=1}
             %Aumentar tamanho das portas lógicas.
Comece com o comando \draw , do qual só será fechado ao encerramento do circuito , seguinte a ele teremos a declaração das portas lógicas desejadas, sua localização e seu nome de ‘chamada’, que será o nome que utilizaremos para distinguir duas portas iguais na hora de fazermos as conexões. Repare que utilizamos o complemento rotate=270 ao comando da porta and1, or1 e and2, este comando rotaciona a porta em 270° para que tenhamos um circuito com melhor visualização.
 
     \draw
(0.5,-0.3) node[xor port] (xor1) {}
 %Declara a porta xor.
(-2,-3) node[and port, rotate = 270, ] (and1) {}
%Declara a porta and e rotaciona a mesma em 270°.
(-0.3,-5) node[or port, rotate = 270] (or1) {}
%Declara a porta or e rotaciona a mesma em 270°.
(2,-3) node[and port, rotate = 270] (and2) {}
%Declara a porta and2 e rotaciona a mesma em 270°.
(5,0.25) node[xor port] (xor2) {} 
%Declara a porta xor2 .
Permanecendo dentro do comando \draw , faça as conexões entre uma porta e outra utilizando o comando de chamada da porta que deseja conectar, especificando se é na entrada ou saída (in ou out). No caso de entrada (in), teremos o complemento de primeira ou segunda entrada.
Para realizar a conexão utilize o símbolo -| para uma conexão reta precedida de uma curvatura em 90°, ou – – para obter uma conexão simples, sem ângulos, ou |- para uma conexão inicializada em 90° e precedida de uma reta.
Para finalizar, utilize o comando no de[circ] {} para realizar sua ligação com a outra porta desejada, da mesma forma que declaramos a primeira.
 
(xor1.in 1) -| node[circ] {} (and1.in 1)
 %Conecta a entrada 1 da porta xor1, com um nó, a entrada 1 da porta and1.
(xor1.in 2) -| node[circ] {} (and1.in 2)
%Conecta a entrada 2 da porta xor1, com um nó, a entrada 2 da porta and1.
(and1.out) -| (or1.in 2)
%Conecta a saída da porta and1 com a entrada 2 da porta or1.
(and2.out) -| (or1.in 1)
%Conecta a saída da porta and2 com a entrada 1 da porta or1.
(and2.in 1) |-  node[circ] {} (xor2.in 2)
%Conecta a entrada 1 da porta and2 com a entrada 2 da porta xor2.
(and2.in 2) |-  node[circ] {} (xor2.in 1)
%Conecta a entrada 2 da porta and2 com a entrada 1 da porta xor2.
(xor1.out) — (xor2.in 2)
%Conecta a saída da porta xor1 com a entrada 2 da porta xor2.
 (A)   —  (xor1.in 1) 
 %Faz uma conexão do ponto A até a entrada 1 do xor1.
 (B) — (xor1.in 2)
  %Faz uma conexão do ponto B até a entrada 2 do xor1.
 (E) — (and2.in 2)
  %Faz uma conexão do ponto E até a entrada 2 do and2.
Pode-se aumentar a linha de conexão entre um componente e outro, basta chamar a porta desejada, adicionar o tipo de conexão e então o símbolo + se quiser aumentar a linha ou para diminuí-la e então, complemente com as coordenadas que deseja finalizar a linha.
 
(xor2.out) —  +(0.5,0)
(or1.out) — +(0,-0.5)
%Aumenta a conexão das portas Xor2 e Or1
 
Finalize o comando \draw com um ponto e vírgula ( ; ), o circuito e então o documento, compile e aproveite seu circuito.
 
3. Circuito e o código finalizados
5
Figura 5 – Circuito lógico completo
%Código Somador Completo
%Autor: Solysion
\documentclass{article}
\usepackage{tikz}
\usepackage{verbatim}
\usepackage[american]{circuitikz}
\usepackage{amsmath}
\begin{document}       
            \begin{circuitikz}
        \ctikzset{tripoles/american and port/input height=1}
        \ctikzset{tripoles/american xor port/input height=1}
        \ctikzset{tripoles/american or port/input height=1}
             % Aumentar tamanho das portas lógicas.
        \node (A) at (-3.7,0.3) {A};
        \node (B) at (-3.7,-0.85) {B};
        \node (C) at (5.4,0.5) {Out};
        \node (D) at (-0.3,-5.8) {Carry Out};
        \node (E) at (1.45,2) {C (Carry In)};
        \node (F) at (1.7,-0.1) {[($\bar{A}$.B) + (A.$\bar{B}$)]};
        \node (G) at (-2,-3.5) {A.B};
        \node (H) at (2,-3.5) {[($\bar{A}$.B) + (A.$\bar{B}$)] . C};
         %Adicionar A-F como nome aos respectivos nós.
     \draw
(0.5,-0.3) node[xor port] (xor1) {}
 %Declara a porta xor.
(-2,-3) node[and port, rotate = 270, ] (and1) {}
%Declara a porta and e rotaciona a mesma em 270°.
(-0.3,-5) node[or port, rotate = 270] (or1) {}
%Declara a porta or e rotaciona a mesma em 270°.
(2,-3) node[and port, rotate = 270] (and2) {}
%Declara a porta and2 e rotaciona a mesma em 270°.
(5,0.25) node[xor port] (xor2) {} 
%Declara a porta xor2 .
(xor1.in 1) -| node[circ] {} (and1.in 1)
 %Conecta a entrada 1 da porta xor1, com um nó, a entrada 1 da porta and1.
(xor1.in 2) -| node[circ] {} (and1.in 2)
%Conecta a entrada 2 da porta xor1, com um nó, a entrada 2 da porta and1.
(and1.out) -| (or1.in 2)
%Conecta a saída da porta and1 com a entrada 2 da porta or1.
(and2.out) -| (or1.in 1)
%Conecta a saída da porta and2 com a entrada 1 da porta or1.
(and2.in 1) |-  node[circ] {} (xor2.in 2)
%Conecta a entrada 1 da porta and2 com a entrada 2 da porta xor2.
(and2.in 2) |-  node[circ] {} (xor2.in 1)
%Conecta a entrada 2 da porta and2 com a entrada 1 da porta xor2.
(xor1.out) — (xor2.in 2)
%Conecta a saída da porta xor1 com a entrada 2 da porta xor2.
 (A)   —  (xor1.in 1) 
 %Faz uma conexão do ponto A até a entrada 1 do xor1.
 (B) — (xor1.in 2)
  %Faz uma conexão do ponto B até a entrada 2 do xor1.
 (E) — (and2.in 2)
  %Faz uma conexão do ponto E até a entrada 2 do and2.
(xor2.out) —  +(0.5,0)
(or1.out) — +(0,-0.5)
%Aumenta a conexão das portas Xor2 e Or1
    ;
            \end{circuitikz}
\end{document}

4. Conclusão

 
Os desenhos feitos no Circuitikz seguem uma lógica de raciocínio, onde possuímos os comandos de entrada dos pacotes, seguido da nossa referência para o desenho, e então os complementos (linhas, componentes, textos, etc). Por ser uma plataforma linear de escrita e utilizar coordenadas (x,y) para localização, torna-se de fácil aprendizado e proporciona um conhecimento que pode ser aplicado a outros projetos de forma análoga. Finalizaremos nosso tutorial ensinando como fazer gráficos com sinais analógicos e/ou sinais digitais com o Tikz. Acompanhe nossa página no Facebook e esteja sempre por dentro destes e novos artigos.

 

Para saber mais acesse:
[1] LaTeX

Deixe um comentário