Sympy로 풀어보는 회로이론1 - 연산증폭기(Operational amplifier)
1. 연산증폭기란?
1.1. 연산증폭기의 정의
연산증폭기(Operational amplifier)는 증폭기(amplifier)의 일종으로, 직류(DC) 전압을 증폭한다. 입력으로 두 개의 전압 V+ 와 V-를 받고, 출력으로 증폭된 전압 V를 내놓는다. 이 때 두 입력 V+와 V-를 통틀어 차동 입력(differential input)이라고 한다.
연산증폭기라는 단어에서 증폭기라는 뜻은 "두 입력 단자의 전압 차이만 증폭한다."로 이해하면 좋을듯 하다. 보통의 ap-amp는 입력 전압차의 수백배에서 수천배를 증폭해 출력한다.
1.2. 연산증폭기의 특징
1.2.1. 회로 표기

연산증폭기는 회로에서 위와 같이 표시한다. V- 입력이 위에, V+ 입력이 아래에 위치한다는 것에 유의하라. 이때 각각의 입력을 반전 입력(inverting input), 비반전 입력(non-inverting input)이라고 한다.
한편 op-amp는 전압을 걸어줘야 작동하는 소자이기에 Vs+와 Vs-의 양의 전원 공급 전압(positive supply voltage)과 음의 전원 공급 전압(negative supply voltage)를 인가해야 한다. Vout은 출력이다.
1.2.2. 이상적인 op-amp의 특성
- virtual short: $v_+ = v_-$ (open gain $ G = \infty $)
- virtual open: $i_+ = i_- = 0$ (input resistance $R_i = \infty $)
즉, 입력 단자의 두 전압은 같고 전류는 모두 0이다. 보통 negative feedback을 이용해 안정된 ap-amp 회로를 구성한다.
1.2.3. Op-amp의 사용 예시
입력단과 출력단을 분리할 수 있다.

위 회로에서 내부 op-amp의 내부 저항을 $R_{in}$ 이라고 하자.
$V_S$의 공급전압을 외부저항 $$R_S$$와 내부저항 $$R_{in}$$으로 분배했을 때 입력전압은
$ V_o = \frac{R_{in}}{R_{in} + R_S} Vs $로 분배된다. 이 떄 이상적인 ap-amp의 가정에서 $R_{in} \to \infty $이므로, $V_S = V_o$ 이다. 또한 가정에 의해 $I = 0$ 이므로 송전 선로에서 $R_S$에 의한 전력 손실이 0이다.
2. Op-amp 회로의 해석
2.1. 해석 방법
- Ideal op-amp model을 이용한다: V- = V+, i- = i+ = 0
- nodal analysis를 이용한다: V-, V+, Vo 를 변수로 설정
중요: 출력단의 전압 Vo는 구할 수 있어도, 전류는 구할 수 없다. 내부의 숨은 전류가 존재하기 때문.
3. Op-amp 예제 풀이
3.1. Gain 구하기
- gain을 구하라

위와 같은 회로에서 op-amp의 이득(gain)을 구해보자.
이득은 다음과 같이 정의된다:
$$ G = \frac{V_o}{V_s} $$. 공급 전압에 대한 출력 전압의 비이므로 자연스러운 정의이다.
nodal analysis를 수행 할 것이다. 먼저 좌측 전압원에 의해 +단자쪽의 공급전압을 $V_s$, 입력 전압을 $V_- = V_+ = V_1$, 출력 전압을 $V_o$ 라고 하자. 이 때 (b) node에서 KCL를 적용하면,
$$ \frac{V_1 - V_s}{R_1} + \frac{V_1 - V_o}{R_2} = 0 $$ 이다.
한편 ideal ap-amp의 가정에 의해 $V_- = V_+$ 인데 $V_+ = 0$ 으로 GND와 연결되었으므로,
$$ V_o = - \frac{R_2}{R_1} V_s \to G = \frac{V_o}{V_s} = -\frac{R_2}{R_1}$$.
즉, inverting input의 경우 이득이 $G = -\frac{R_2}{R_1}$ 이다.
- gain을 구하라

$$V_{in} = V_1 = V_- = V_+, \frac{V_1}{R_1} + \frac{V_1 - V_o}{R_2} = 0$$
$$V_o = \left( 1 + \frac{R_2}{R_1} \right) V_1$$
- $I_0$를 구하라

import sympy as sp
V1, Vo = sp.symbols('V1, Vo')
eq = [sp.Eq(V1, 12),
sp.Eq(V1/2 + (V1-Vo)/12, 0)]
sol = sp.solve(eq)
Vo_val = sol[Vo]
print(f'V0 = {Vo_val} V')
I = Vo_val / 10
print(f'I0 = {I.evalf():.3g} mA')
V0 = 84 V
I0 = 8.40 mA
- 회로에서 $I_1,I_2,I_3,I_4$를 구하라.

I1, I2, I3, I4, V1, Vo = sp.symbols('I1, I2, I3, I4, V1, Vo')
eq = [sp.Eq(I1, 0),
sp.Eq(V1, 5),
sp.Eq(V1/10 + (V1-Vo)/5, 0),
sp.Eq((V1-Vo)/5, I3),
sp.Eq(Vo/10, I4),
sp.Eq(I2 + I3, I4)]
sol = sp.solve(eq)
I_val = [sol[I1], sol[I2], sol[I3], sol[I4]]
num = 1
for i in I_val:
print(f'I{num}_val = {i.evalf(3)} mA')
num+=1
I1_val = 0 mA
I2_val = 1.25 mA
I3_val = -0.500 mA
I4_val = 0.750 mA
- 회로에서 전압 이득과 출력 전압을 구하라

V1, Vo = sp.symbols('V1, Vo')
eq = [sp.Eq(V1, 1),
sp.Eq(V1/1 + (V1-Vo)/100, 0)]
sol = sp.solve(eq)
Vo_val = sol[Vo]
V1_val = sol[V1]
print(f'Vo = {Vo_val} mV')
G = Vo_val / V1_val
print(f'G = {G}')
Vo = 101 mV
G = 101
- $V_o$와 $V_3$을 구하라

V1, V2, V3, Vo = sp.symbols('V1, V2, V3, Vo')
eq = [sp.Eq((V1-5)/5 + (V1-V3)/2, 0),
sp.Eq(V1/5 + (V1-V2)/10, 0),
sp.Eq((V3-V2)/2.5 + V3/10, 0),
sp.Eq((V3-Vo)/3 + (V3-V1)/2, 0)]
sol = sp.solve(eq)
Vo_val = sol[Vo]
V3_val = sol[V3]
print(f'Vo = {Vo_val:.3g} V')
print(f'V3 = {V3_val:.3g} V')
Vo = -9.00 V
V3 = -4.80 V
- $𝑉_o/I=10𝑉/1mA$ 비율을 만족하도록 $R_2$ 값을 결정하라.

$$V_o = I(1 + R_2) \to R_2 = 9k \Omega$$
- 회로에서 $V_o$를 구하라.

V1, V2, Vo, R1, R2, R3, R4 = sp.symbols('V1, V2, Vo, R1, R2, R3, R4')
eq = [sp.Eq(V1/R1 + (V1-V2)/R2, 0),
sp.Eq((V2-V1)/R2 + V2/R4 + (V2-Vo)/R3, 0)]
sol = sp.solve(eq, (V2, Vo))
Vo_expr = sol[Vo]
# Vo_expr
print(Vo_expr)
(R1*R3*V1 + R1*R4*V1 + R2*R3*V1 + R2*R4*V1 + R3*R4*V1)/(R1*R4)