TB066

Análisis de Circuitos (TB066)
Index Commits Files Refs
tp/scripts/valores_sallen-key.py (2776B)
   1 import itertools
   2 from math import sqrt
   3 
   4 # Capacitores
   5 E6_C = [1.0, 1.5, 2.2, 3.3, 4.7, 6.8]
   6 
   7 # resistencias de 5% de error
   8 E24_R = [
   9     1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,
  10     3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1
  11 ]
  12 
  13 E24_R_custom = [
  14     1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,
  15     3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2
  16 ]
  17 
  18 # resistencias de 2% de error
  19 E48_R = [
  20     1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69,
  21     1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01,
  22     3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36,
  23     5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53
  24 ]
  25 
  26 # resistencias de 1% de error
  27 E96_R = [
  28     1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30,
  29     1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74,
  30     1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32,
  31     2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09,
  32     3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12,
  33     4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49,
  34     5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32,
  35     7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76
  36 ]
  37 
  38 
  39 OMEGA0_OBJ = 4000.0
  40 Q_OBJ = 2.25
  41 
  42 SERIE_R = E24_R_custom
  43 SERIE_C = E6_C
  44 
  45 DECADAS_R = [1e3, 1e4, 1e5]
  46 DECADAS_C = [1e-9, 10e-9, 100e-9, 1e-6]
  47 
  48 resistencias = [v*d for v, d in itertools.product(SERIE_R, DECADAS_R)]
  49 capacitores  = [v*d for v, d in itertools.product(SERIE_C, DECADAS_C)]
  50 
  51 def calc_params(R1, R2, C1, C2):
  52     omega0 = sqrt(1/(R1*R2*C1*C2))
  53     Q = omega0 / ((R1 + R2) / (C1*R1*R2))
  54 
  55     return omega0, Q
  56 
  57 def cost(omega, Q):
  58     err_w = (omega - OMEGA0_OBJ) / OMEGA0_OBJ
  59     err_q = (Q - Q_OBJ) / Q_OBJ
  60 
  61     return err_w**2 + err_q**2
  62 
  63 resultados = []
  64 
  65 for R1, R2, C1, C2 in itertools.product(
  66         resistencias,
  67         resistencias,
  68         capacitores,
  69         capacitores):
  70 
  71     omega, Q = calc_params(R1, R2, C1, C2)
  72 
  73     E = cost(omega,Q)
  74 
  75     resultados.append((
  76         E,
  77         omega,
  78         Q,
  79         R1,
  80         R2,
  81         C1,
  82         C2
  83     ))
  84 
  85 resultados.sort(key=lambda x: x[0])
  86 
  87 print(f"  R1 [Ω]  R2 [Ω]    C1 [F]    C2 [F]      w0  dw0 [%]       Q  dQ [%]       cost")
  88 for E, omega, Q, R1, R2, C1, C2 in resultados[:20]:
  89 
  90     errw = 100 * (omega - OMEGA0_OBJ)/OMEGA0_OBJ
  91     errq = 100 * (Q - Q_OBJ)/Q_OBJ
  92 
  93     print(
  94         f"{R1:8.0f}  "
  95         f"{R2:6.0f}  "
  96         f"{C1:8.2e}  "
  97         f"{C2:8.2e}  "
  98         f"{omega:6.2f}  "
  99         f"{errw:+7.2f}  "
 100         f"{Q:6.3f}  "
 101         f"{errq:+6.2f}  "
 102         f"{E:.3e}"
 103     )