시뮬레이션으로 측정 확인

한 줄 요약 — 회로를 실제로 풀어 손계산과 일치하는지 확인합니다. 워크벤치에서 예제를 고르면 브라우저가 바로 풀고, expect 에 적어 둔 값과 맞대어 보여 줍니다. 어느 한쪽만 맞으면 둘 중 하나가 틀린 것입니다.


어디서 도는가

워크벤치에서 브라우저가 직접 풉니다. 설치할 것이 없고 폰에서도 됩니다.

푸는 방법은 수정 노드 해석(modified nodal analysis) 입니다 — 2-02 노드 해석이 가르치는 그 방법 그대로입니다. 노드마다 KCL을 세우고 노드 전압을 미지수로 놓습니다. 전압원처럼 전류를 식으로 쓸 수 없는 것은 그 전류 자체를 미지수로 하나 더 추가합니다. 그것이 “수정”의 뜻입니다.

[GBCD][vj]=[ie]\begin{bmatrix} G & B \\ C & D \end{bmatrix} \begin{bmatrix} v \\ j \end{bmatrix} = \begin{bmatrix} i \\ e \end{bmatrix}
기호
B대역폭 또는 자속밀도bandwidth or flux density
C정전용량capacitanceF
D듀티비duty cycle
e잡음 전압 밀도noise voltage densityV/√Hz
G컨덕턴스conductanceS
i전류 (순시값)instantaneous currentA
j허수 단위imaginary unit
r저항 (소신호)small-signal resistanceΩ
t시간times
v전압 (순시값)instantaneous voltageV
  • vv: 노드 전압 — 우리가 알고 싶은 것
  • jj: 전압원에 흐르는 전류 — 추가한 미지수
  • GG: 컨덕턴스 행렬 — 저항·커패시터·인덕터가 여기 들어갑니다

부품 하나하나가 이 행렬의 몇 자리에 값을 더하는 것뿐입니다.


★ 손계산과 맞대어 보기 — 이것이 핵심입니다

시뮬레이션 결과를 그냥 믿지 않습니다. 예제마다 expect 블록에 손으로 푼 값이 적혀 있고, 워크벤치가 그것과 대조해 보여 줍니다.

expect:
  - {measure: v, node: OUT, value: 1.667, tol: 1%}
손계산과 맞대어 보기  2/2
  ✓ OUT 의 전압 — 기대 1.667 V ± 16.67 mV · 실제 1.6667 V
  ✓ R1 의 전력  — 기대 ≤ 250 mW · 실제 1.1111 mW
출처무엇을 검증하나
손계산내가 회로를 제대로 이해했는가
시뮬레이션회로가 정말 그렇게 동작하는가
둘이 일치하면양쪽 다 맞습니다
어긋나면둘 중 하나가 틀렸습니다 — 어느 쪽인지 찾는 것이 공부입니다

💡 이것은 말뿐이 아닙니다. 이 시뮬레이터를 처음 돌렸을 때 예제 여섯 개가 어긋났고, 파 보니 다섯 개는 예제 쪽이 틀렸습니다 — 전극 모델의 배선, 계측 증폭기의 부호, 보드선도에서 기울기를 이득으로 적은 것. 아무도 돌려 본 적이 없어서 몇 달째 틀린 채로 있었습니다.


해석 종류

해석용도지금 되는가
opDC 동작점(operating point)✅ 노드 전압, 부품별 전류·전력
dcDC 소인✅ 곡선
tran과도응답(transient response)✅ 파형
ac주파수 응답✅ 보드선도(Bode plot)보드선도 Bode plot주파수에 따른 이득과 위상을 로그 축에 그린 그림으로, 직선 몇 개로 회로의 거동을 읽습니다.자세히 보기 → — 크기와 위상
noise잡음 해석❌ 아직 — 13-02의 손계산을 쓰세요

★ 무엇이 담기고 무엇이 안 담기는가

이것을 모르면 시뮬레이션을 믿어서는 안 되는 자리에서 믿게 됩니다.

풀 수 있는 부품

전부입니다.

저항 · 커패시터(ESR·ESL 포함) · 인덕터 · 결합 계수 · 전압원(vdc vac vsin vpulse) · 전류원(idc iac ipulse) · OP앰프 · 다이오드 · 제너 · LED · BJT · MOSFET · 아날로그 스위치

비선형 소자는 어떻게 푸는가

다이오드는 I=IS(eV/nVT−1)I = I_S(e^{V/nV_T}-1) 이라 한 번에 안 풀립니다 — VV 를 모르면 II 를 모르고 II 를 모르면 VV 를 모릅니다. 그래서 답을 하나 찍어 놓고 고쳐 나갑니다 (Newton-Raphson).

매 반복마다 그 점에서 곡선을 접선으로 바꿉니다.

I(V)≈g⏟저항⋅V+(I0−gV0)⏟전류원,g=dIdV∣V0I(V) \approx \underbrace{g}_{\text{저항}}\cdot V + \underbrace{(I_0 - gV_0)}_{\text{전류원}}, \qquad g = \left.\frac{dI}{dV}\right|_{V_0}
기호
d거리 또는 두께distance or thicknessm
g컨덕턴스 (소신호)small-signal conductanceS
I전류currentA
I_00번 전류current 0A
V전압voltageV
V_00번 전압voltage 0V

그러면 반복 한 번은 저항과 전류원만 있는 선형 회로를 푸는 것과 같아집니다. 이것이 6-08 소신호 모델이 말하는 “동작점 주변에서 직선으로 근사한다” 와 정확히 같은 이야기입니다 — 다른 점은 그 직선을 매번 다시 긋는다는 것뿐입니다.

교류 해석도 마찬가지입니다. 먼저 동작점을 구하고, 그 점에서의 기울기(gmg_m, gdsg_{ds})로 소신호 회로를 세워 풉니다.

⚠️ 이 반복은 자주 발산합니다. 지수 함수라 한 걸음이 조금만 커도 다음 전압이 엉뚱한 곳으로 날아갑니다. 걸음 제한·gmin 스테핑·소스 스테핑으로 막고, 그래도 안 되면 “수렴하지 않았습니다” 라고 말합니다. 조용히 이상한 숫자를 내느니 못 풀었다고 하는 편이 낫습니다.

OP앰프 — 이상적이지 않습니다

1극점 모델입니다. 이상적으로 두면 7장·13장이 보여 줄 것이 없어지기 때문입니다.

A(s)=Aol1+s/ωp,ωp=2π GBWAolA(s) = \frac{A_{ol}}{1 + s/\omega_p}, \qquad \omega_p = \frac{2\pi\,\mathrm{GBW}}{A_{ol}}
기호
A이득gain
A_ol이득 (ol)gain (ol)
GBW이득 대역폭 곱gain-bandwidth productHz

담깁니다:

  • 개루프 이득이 주파수에 따라 줄어드는 것 → 루프 이득(loop gain)루프 이득 loop gain신호가 귀환 루프를 한 바퀴 돌아 제자리로 왔을 때의 배율로, 왜곡·임피던스·오차가 모두 이 값으로 나눠집니다.T=AβT = A\beta자세히 보기 → T=AβT = A\beta 가 실제로 줄어드는 것이 보입니다 (7-08)
  • f−3dB=GBW/GNf_{-3\mathrm{dB}} = \mathrm{GBW}/G_N 이 정말 그 자리에 나옵니다 (13-04)
  • 출력 저항 → 용량성 부하(capacitive load)용량성 부하 capacitive loadOP앰프 출력에 붙은 커패시터가 출력 저항과 만나 극점을 만들어, 위상 여유를 갉아먹고 발진시킵니다.자세히 보기 →가 만드는 링잉 (7-07)

안 담깁니다:

입력 옵셋 · 바이어스 전류(input bias current)입력 바이어스 전류 input bias currentOP앰프 입력이 스스로 빨아들이는 작은 전류로, 고임피던스 신호원에서는 이것이 곧 오프셋 전압이 됩니다.ΔV=IBRsource\Delta V = I_B R_{source}자세히 보기 → · 잡음 · CMRR동상신호 제거비 CMRR두 입력에 똑같이 들어온 간섭을 얼마나 지워 내는지를 나타내며, 차동 측정의 값어치가 여기서 나옵니다.자세히 보기 → · 슬루레이트(slew rate) · PSRR

⚠️ 12장의 잡음 이야기를 이 시뮬레이션으로 확인했다고 생각하면 안 됩니다. 잡음은 손계산으로 하고, 실물에서 재세요 (14-04).

품번은 코퍼스에 적힌 값을 씁니다 — OPA140 GBW 11 MHz, TL071 3 MHz. 모델표에 없는 품번은 일반값으로 풀고 “데이터시트 확인 필요” 라고 표시합니다.


계산 예제 — RC 저역통과를 손으로 풀고 확인하기

10 kΩ, 100 nF 저역통과의 차단주파수(cutoff frequency)차단 주파수 cutoff frequency필터의 출력이 입력보다 −3 dB(약 0.707배)로 떨어지는 주파수입니다.fc=12πRCf_c = \frac{1}{2\pi RC}자세히 보기 →를 먼저 손으로 구합니다.

fc=12πRC=12π×104×10−7=159.15 Hzf_c = \frac{1}{2\pi RC} = \frac{1}{2\pi\times10^4\times10^{-7}} = \mathbf{159.15\ Hz}
기호
C정전용량capacitanceF
f_c차단 주파수cutoff frequencyHz
R저항resistanceΩ

차단에서 크기는 1/21/\sqrt2, 즉 −3.01-3.01 dB 이고 위상은 −45°-45° 입니다. 한 십년 위에서는 −20-20 dB 가 더 떨어집니다.

이것을 그대로 expect 에 적습니다.

analyses:
  - {type: ac, sweep: dec, points: 50, fstart: 1, fstop: 100k}

expect:
  - {measure: gain_db,   node: OUT, at: 159.15, analysis: ac, value: -3.01,  tol: 0.2}
  - {measure: phase_deg, node: OUT, at: 159.15, analysis: ac, value: -45,    tol: 2}
  - {measure: gain_db,   node: OUT, at: 1591.5, analysis: ac, value: -20.04, tol: 0.5}

세 줄이 전부 통과하면 식을 제대로 세웠고 회로도 제대로 그렸다는 뜻입니다. 하나라도 어긋나면 그 자리에서 알 수 있습니다.


ngspice·EasyEDA 와의 관계

EasyEDA의 시뮬레이션 엔진은 ngspice 입니다. 그런데 워크벤치에서 도는 것은 ngspice 가 아니라 이 저장소가 만든 해석기입니다. 그러면 값이 다를까요?

선형 회로에서는 같습니다. MNA 는 SPICE 도 쓰는 방법이고, 저항·커패시터·인덕터·전압원은 푸는 식이 하나뿐입니다. 예제 121개의 expect 가 전부 맞는 것이 그 증거입니다.

다를 수 있는 곳:

곳왜
OP앰프여기는 1극점, ngspice 는 제조사 매크로모델 (2극점 이상, 슬루·옵셋 포함)
트랜지스터 모델여기는 제곱법칙·에버스-몰의 간단한 꼴, ngspice 는 BSIM·거멜푼
과도 해석의 잔오차여기는 고정 간격 사다리꼴, ngspice 는 가변 간격
잡음 해석여기는 아직 없습니다

💡 정확한 값이 필요하면 EasyEDA 에서 Ctrl+R 로 한 번 더 돌리세요. 여기서 보는 것은 “값이 상식적인가”를 빠르게 확인하는 용도입니다.


★ 실무 주의사항

1. M은 밀리입니다

SPICE에서 1M = 0.001 입니다 (0-03). circuit.yaml 은 1M 을 메가로 읽습니다. 헷갈리지 않게 큰 값은 1MEG 으로 쓰세요.

2. 전류원의 극성

p 가 전류가 나오는 쪽입니다 (화살표가 그쪽을 향하는 그림). 포토다이오드를 합산 노드에 물릴 때 이것을 반대로 잡으면 출력 부호가 통째로 뒤집힙니다.

3. 저항 전류는 노드 전압에서 계산합니다

I=V1−V2R,P=I2RI = \frac{V_1-V_2}{R}, \qquad P = I^2R
기호
I전류currentA
P전력powerW
R저항resistanceΩ
V_11번 전압voltage 1V
V_22번 전압voltage 2V

전압원 전류는 행렬이 직접 풀어 주고, 나머지는 이렇게 구합니다.

4. 접지가 없으면 못 풉니다

전압은 언제나 어딘가에 대한 값입니다. 기준이 없으면 행렬이 풀리지 않고, 워크벤치가 “접지(GND)가 없습니다” 라고 말합니다.

5. 기생 성분을 넣으세요

기생 없는 시뮬레이션은 무한 대역폭을 보여 줍니다 (11-07).

# 반드시 넣을 것
- 고임피던스 노드의 대지 용량
- 케이블·배선 용량
- 커패시터 ESR/ESL
- 실제 소스 임피던스

⚖️ 트레이드오프

선택✅⚠️
브라우저 (여기)설치 없음, 즉시, 폰에서도잡음 해석이 없음, OP앰프는 1극점
ngspice / EasyEDA비선형, 제조사 모델설치 필요, PC 에서만
이상 모델빠름, 개념 확인실물과 다름
기생 포함 모델실용적 정확도파라미터 확보 필요
해석해 교차검증신뢰성단순 회로만 가능
몬테카를로부품 편차 반영시간

⚠️ 시뮬레이션의 한계

못 하는 것대응
레이아웃 의존 기생경험값 + 여유, 실측
방사·유도 결합(coupling)3D 전자기 해석 또는 실측
발진 정확 예측실물 측정 필수
접촉 불량, 조립 오차—
열 분포열 해석
부품 개체 편차몬테카를로

⚠️ OP앰프 모델은 출력 임피던스(output impedance)와 고주파 특성이 부정확한 경우가 많습니다. 이것은 여기서도 ngspice 에서도 마찬가지입니다. 안정성 판단은 실물에서 하세요 (14-07).


🔌 워크플로

#단계여기서 걸러지는 것
1circuit.yaml 작성—
2워크벤치에 붙여 넣기구조 오류 — 핀 오타, 접지 없음, 못 푸는 부품
3회로도를 눈으로 확인내가 그리려던 회로가 맞는가
4손으로 먼저 계산내가 이해했는가
5expect 에 그 값을 적기검증값을 파일에 고정
6결과와 대조어긋나면 둘 중 하나가 틀린 것
7EasyEDA 에서 Ctrl+R비선형까지 포함해 교차 확인
8실물 제작 후 실측최종 검증 — 모델이 놓친 것 (18-04)

각 단계가 다음 단계의 기대값을 제공합니다.


연습문제

문제 1. RC 저역통과(10 kΩ, 100 nF)의 차단주파수를 손으로 계산하고, expect 로 쓰세요.

exercises/17-03-rc-expect.yaml
풀이 fc=12π×104×10−7≈159.15 Hzf_c = \frac{1}{2\pi\times10^4\times10^{-7}} \approx 159.15\ \text{Hz}
기호
f_c차단 주파수cutoff frequencyHz
analyses:
  - {type: ac, sweep: dec, points: 50, fstart: 1, fstop: 100k}

expect:
  - {measure: gain_db, node: OUT, at: 159.15, analysis: ac, value: -3.01, tol: 0.2}
  - {measure: gain_db, node: OUT, at: 1591.5, analysis: ac, value: -20.04, tol: 0.5}

10배 주파수에서 −20 dB(1차 롤오프)도 함께 검증합니다.

문제 2. 시뮬레이션 대역폭이 실측보다 훨씬 넓습니다. 무엇을 빠뜨렸을까요?

exercises/17-03-missing-parasitics.yaml
풀이

기생 용량(parasitic capacitance)기생 용량 parasitic capacitance부품·배선·케이블이 원치 않게 갖는 커패시턴스로, 고임피던스 신호원에서 대역폭을 가장 먼저 잡아먹습니다.자세히 보기 →을 넣지 않았을 가능성이 큽니다 (11-07).

확인 목록:

  • 고임피던스 노드의 대지 용량 (PCB 1~3 pF/cm)
  • 케이블 용량 (100 pF/m)
  • OP앰프 입력 용량 (2~10 pF)
  • 프로브(probe) 용량 (측정 시 10 pF)
  • 소스 임피던스가 실제 값인가
  • OP앰프 품번이 모델표에 있는가 (없으면 GBW 1 MHz 일반값으로 풀립니다)

가장 흔한 원인: 소스 임피던스와 입력 용량을 넣지 않아 RCRC 가 0 이 된 경우.

수정 예:

components:
  - {ref: RS,  type: r, value: 1MEG, label: 실제 소스 임피던스}
  - {ref: CIN, type: c, value: 15p,  label: 입력 용량 + PCB + 프로브}

문제 3. NPN 스위치의 컬렉터 전류를 계산했더니 βIB\beta I_B = 1.1 A 가 나왔습니다. 그런데 시뮬레이션은 49 mA 라고 합니다. 누가 맞습니까?

exercises/17-03-bjt-saturation.yaml
풀이

시뮬레이션이 맞고, βIB\beta I_B 를 쓴 것이 틀렸습니다. IC=βIBI_C = \beta I_B 는 활성 영역에서만 성립합니다.

부하가 240 Ω, 전원이 12 V 면 흐를 수 있는 최대 전류가 50 mA 입니다. 그보다 많이 흘리려 하면 컬렉터 전압이 이미터 아래로 내려가고, 그러면 베이스-컬렉터 접합이 순방향이 되어 여분의 베이스 전류를 되돌려 보냅니다. 이것이 포화입니다 (6-02).

IC=min⁡(βIB, VCC−VCE(sat)RL)I_C = \min\left(\beta I_B,\ \frac{V_{CC} - V_{CE(sat)}}{R_L}\right)
기호
beta전류 이득 (BJT)current gain
I_B베이스 전류base currentA
I_C컬렉터 전류collector currentA
R_L부하 저항load resistanceΩ
V_CC전압 (CC)voltage (CC)V
V_CE(sat)전압 (CE(sat))voltage (CE(sat))V

스위치로 쓸 때는 일부러 포화시킵니다 — VCEV_{CE} 가 0.1~0.2 V 로 내려가야 손실이 작습니다. 그래서 베이스 전류를 필요한 것보다 넉넉히(보통 IC/10I_C/10) 줍니다.

이 시뮬레이터를 만들 때 베이스-컬렉터 접합을 빼먹었더니 정확히 이 회로가 1.04 A 를 흘렸습니다. 부하가 허용하는 것이 50 mA 인데도요.


이전 ← 02 검증 (ERC) | 다음 → 04 EasyEDA로 내보내기