commit 355f3e9a290154b3e77d28afd73bd4ca746299c9
parent 3f8f4cf4598e0cdef0b788aee5697e57a65804a2
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date: Tue, 25 Nov 2025 00:42:07 -0300
added `*.png`, `*.asc` // finished first order LPF circuit
Diffstat:
9 files changed, 210 insertions(+), 11 deletions(-)
diff --git a/tp/informe/img/osc1.png b/tp/informe/img/osc1.png
Binary files differ.
diff --git a/tp/informe/img/osc2.png b/tp/informe/img/osc2.png
Binary files differ.
diff --git a/tp/informe/informe.pdf b/tp/informe/informe.pdf
Binary files differ.
diff --git a/tp/informe/informe.tex b/tp/informe/informe.tex
@@ -738,10 +738,10 @@ por separado y luego se conecta uno seguido de otro.
\subsection{Transferencia $H_{1}(s)$}\label{transferencia-h1}}
La transferencia $H_{1}(s)$ es de la forma de la ecuación
-\ref{eq-transferencia-lineal}\footnotemark[9] la cual se puede implementar mediante un circuito
-amplificador inversor como el que se muestra en la figura
+\ref{eq-transferencia-lineal} la cual se puede implementar mediante un circuito
+amplificador inversor\footnotemark[9] como el que se muestra en la figura
\ref{fig-pasabajos-primer-orden-inversor} del cual se tienen expresiones
-tabuladas para los componentes en funcion del polo ($p$), cero($z$) y
+tabuladas para los componentes en funcion del polo ($p$), cero ($z$) y
ganancia ($K$).
\footnotetext[9]{Sección 3.4.1, ``Inverting Opamp Circuits'', \cite{schaumann2001}}
@@ -757,16 +757,15 @@ ganancia ($K$).
\begin{figure}[!ht]
\centering
\includegraphics[width=0.65\textwidth]{sch/pasa-bajos_activo_primer_orden_cero_no_nulo_inversor.png}
- \caption{Circuito pasa-bajos primer orden ejemplo}
+ \caption{Circuito pasa-bajos primer orden correspondiente a transferencia $H_{1}(s)$}
\label{fig-pasabajos-primer-orden-inversor}
\end{figure}
-En este caso la transferencia $H_{1}(s)$ tiene constantes $z=250$ y $p=500$, por
-lo que se pueden obtener los valores de los componentes $C_{i}$ y $R_{i}$
-considerando ganancia unitaria.
-
-Sabiendo que $K=1$ entonces de \ref{eq-transferencia-lineal} los capacitores
-deben tener igual valor: $C_{1} = C_{2}$ y reescribiendo las relaciones de
+En este caso la transferencia $H_{1}(s)$ tiene constantes $z=250$, $p=500$ y
+ganancia unitaria $K=1$, por lo que se pueden obtener los valores de los
+componentes $C_{i}$ y $R_{i}$ de las expresiones de
+\ref{eq-transferencia-lineal}. Por ganancia unitaria $K=1$ los capacitores deben
+tener igual valor: $C_{1} = C_{2}$ y reescribiendo las relaciones de
\ref{eq-transferencia-lineal} resulta como en \ref{eq-transferencia-lineal-2}.
\begin{align}
@@ -776,9 +775,26 @@ deben tener igual valor: $C_{1} = C_{2}$ y reescribiendo las relaciones de
\label{eq-transferencia-lineal-2}
\end{align}
+Para obtener la mejor relación normalizada de los componentes se utiliza un
+script de Python que genera una lista de todas las posbiles combinaciones entre
+$R_{1}$, $R_{2}$ y $C$, fijando un valor de $C$ y ajustando las resistencias,
+luego se ordena en funcion del error porcentual, el mejor resultado con
+resistores normalizados de tolerancia E24 (esto es $5\%$ de error) y capacitores
+de tolerancia E6 ($20\%$ de error) se llega a $C_{1} = C_{2} = 22nF$,
+$R_{1}=180k\Omega$ y $R_{2}=91k\Omega$, de esta forma se tiene un error
+respecto al valor teórico de $1.00\%$ para $R_{1}$ y $0.10\%$ para $R_{2}$.
+
+\hypertarget{transferencia-h2}{%
+\subsection{Transferencia $H_{2}(s)$}\label{transferencia-h2}}
-Tomando un valor comun para los capacitores como $1uF$, entonces
+La transferencia $H_{2}$ corresponde con un pasabajos de segundo orden
+\begin{figure}[!ht]
+ \centering
+ \includegraphics[width=0.80\textwidth]{sch/pasa-bajos_activo_segundo_orden_sallen-key.png}
+ \caption{Circuito pasa-bajos segundo orden correspondiente a transferencia $H_{2}(s)$}
+ \label{fig-pasabajos-primer-orden-inversor}
+\end{figure}
\hypertarget{diagrama}{%
\subsection{Diagrama}\label{diagrama}}
diff --git a/tp/informe/sch/pasa-bajos_activo_primer_orden_cero_no_nulo_inversor.png b/tp/informe/sch/pasa-bajos_activo_primer_orden_cero_no_nulo_inversor.png
Binary files differ.
diff --git a/tp/informe/sch/pasa-bajos_activo_primer_orden_inversor_H1.asc b/tp/informe/sch/pasa-bajos_activo_primer_orden_inversor_H1.asc
@@ -0,0 +1,64 @@
+Version 4
+SHEET 1 880 680
+WIRE 256 -16 208 -16
+WIRE 384 -16 336 -16
+WIRE 208 64 208 -16
+WIRE 256 64 208 64
+WIRE 384 64 384 -16
+WIRE 384 64 320 64
+WIRE 64 80 48 80
+WIRE 160 80 128 80
+WIRE -16 112 -48 112
+WIRE 48 112 48 80
+WIRE 48 112 -16 112
+WIRE 160 112 160 80
+WIRE 208 112 208 64
+WIRE 208 112 160 112
+WIRE 256 112 208 112
+WIRE -48 128 -48 112
+WIRE 384 128 384 64
+WIRE 384 128 320 128
+WIRE 48 144 48 112
+WIRE 64 144 48 144
+WIRE 160 144 160 112
+WIRE 160 144 144 144
+WIRE 256 144 208 144
+WIRE -48 224 -48 208
+WIRE 208 224 208 144
+FLAG -48 224 0
+FLAG 208 224 0
+FLAG -16 112 Vin
+FLAG 384 128 Vout
+SYMBOL OpAmps\\opamp 288 64 R0
+WINDOW 0 5 104 Left 2
+SYMATTR InstName TL074
+SYMBOL cap 320 48 R90
+WINDOW 0 9 53 VBottom 2
+WINDOW 3 28 -3 VTop 2
+SYMATTR InstName C1
+SYMATTR Value 22n
+SYMBOL res 352 -32 R90
+WINDOW 0 7 22 VBottom 2
+WINDOW 3 38 61 VTop 2
+SYMATTR InstName R2
+SYMATTR Value 91k
+SYMBOL cap 128 96 M270
+WINDOW 0 -6 10 VTop 2
+WINDOW 3 59 32 VBottom 2
+SYMATTR InstName C2
+SYMATTR Value 22n
+SYMBOL res 160 128 R90
+WINDOW 0 9 22 VBottom 2
+WINDOW 3 42 61 VTop 2
+SYMATTR InstName R1
+SYMATTR Value 180k
+SYMBOL voltage -48 112 M0
+WINDOW 0 50 42 Left 2
+WINDOW 3 55 72 Left 2
+WINDOW 123 55 68 Left 2
+WINDOW 39 0 0 Left 0
+SYMATTR InstName V1
+SYMATTR Value ""
+SYMATTR Value2 AC 1
+TEXT 256 208 Left 2 !.ac dec 100 1 10k
+TEXT 256 224 Left 2 !.inc opamp.sub
diff --git a/tp/informe/sch/pasa-bajos_activo_primer_orden_no_inversor.asc b/tp/informe/sch/pasa-bajos_activo_primer_orden_no_inversor.asc
@@ -0,0 +1,39 @@
+Version 4
+SHEET 1 880 680
+WIRE 336 0 128 0
+WIRE 496 16 400 16
+WIRE 336 32 256 32
+WIRE 256 64 256 32
+WIRE 288 64 256 64
+WIRE 384 64 352 64
+WIRE 496 64 496 16
+WIRE 496 64 464 64
+WIRE 128 80 128 0
+WIRE 256 80 256 64
+WIRE 128 224 128 160
+FLAG 496 16 Vout
+FLAG 128 224 0
+FLAG 256 224 0
+FLAG 128 0 Vin
+SYMBOL voltage 128 64 M0
+WINDOW 0 54 44 Left 2
+WINDOW 3 55 68 Left 2
+SYMATTR InstName V1
+SYMBOL OpAmps\\opamp 368 -48 R0
+SYMATTR InstName U1
+SYMBOL cap 352 48 R90
+WINDOW 0 12 53 VBottom 2
+WINDOW 3 32 12 VTop 2
+SYMATTR InstName C1
+SYMBOL cap 272 160 M0
+WINDOW 0 -28 31 Left 2
+WINDOW 3 46 30 Left 2
+SYMATTR InstName C2
+SYMBOL res 272 176 R180
+WINDOW 0 -28 54 Left 2
+WINDOW 3 51 57 Left 2
+SYMATTR InstName R2
+SYMBOL res 480 80 M270
+WINDOW 0 35 56 VTop 2
+WINDOW 3 -5 52 VBottom 2
+SYMATTR InstName R1
diff --git a/tp/informe/sch/pasa-bajos_activo_segundo_orden_sallen-key.png b/tp/informe/sch/pasa-bajos_activo_segundo_orden_sallen-key.png
Binary files differ.
diff --git a/tp/scripts/valores.py b/tp/scripts/valores.py
@@ -0,0 +1,80 @@
+import itertools
+
+# Capacitores
+E6_C = [1.0, 1.5, 2.2, 3.3, 4.7, 6.8]
+
+# resistencias de 5% de error
+E24_R = [
+ 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,
+ 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1
+]
+
+E24_R_custom = [
+ 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,
+ 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1
+]
+
+# resistencias de 2% de error
+E48_R = [
+ 1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69,
+ 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01,
+ 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36,
+ 5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53
+]
+
+# resistencias de 1% de error
+E96_R = [
+ 1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30,
+ 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74,
+ 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32,
+ 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09,
+ 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12,
+ 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49,
+ 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32,
+ 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76
+]
+
+
+SERIE_R = E24_R_custom
+SERIE_C = E6_C
+
+# décadas
+DECADAS_R = [1, 10, 100, 1_000, 10_000, 100_000]
+DECADAS_C = [1e-9, 10e-9, 100e-9, 1e-6] # pF–uF
+
+
+# lista de resistencias y capacitores disponibles
+resistencias = [v * d for v, d in itertools.product(SERIE_R, DECADAS_R)]
+capacitores = [v * d for v, d in itertools.product(SERIE_C, DECADAS_C)]
+
+# a = 1/(RC)
+def find_lower_error(a, res_list=resistencias, cap_list=capacitores):
+ resultados = []
+
+ for R, C in itertools.product(res_list, cap_list):
+ R_teorica = 1 / (C * a)
+
+ if R_teorica == 0:
+ continue
+
+ error_porcentual = abs((R - R_teorica) / R_teorica) * 100
+ resultados.append((error_porcentual, R, C, R_teorica))
+
+ # ordenar por error porcentual
+ resultados.sort(key=lambda x: x[0])
+ return resultados
+
+if __name__ == "__main__":
+ top = find_lower_error(250)
+
+ print(f" R [Ω], R_ideal [Ω], C [F], Err [%]")
+ for i, (err, R, C, R_ideal) in enumerate(top[:10], 1):
+ print(f"{R:9.2f}, {R_ideal:11.2f}, {C:8.2e}, {err:7.2f}")
+
+ top_cap_list=[c for (err, R, c, R_ideal) in top[:10]]
+ top_2 = find_lower_error(500, cap_list=top_cap_list)
+
+ print("")
+ print(f" R [Ω], R_ideal [Ω], C [F], Err [%]")
+ for i, (err, R, C, R_ideal) in enumerate(top_2[:10], 1):
+ print(f"{R:9.2f}, {R_ideal:11.2f}, {C:8.2e}, {err:7.2f}")