ADC 입력 설계

한 줄 요약 — ADC는 샘플링 커패시터(sampling capacitor)를 충전해서 측정합니다. 소스 임피던스가 크면 충전이 안 되고 값이 틀립니다.


SAR ADC의 입력 구조

ADC 샘플링 커패시터 충전 회로도RSRC10kΩ소스 임피던스RSW1kΩADC 스위치 저항VSCS10pF샘플링 커패시터SRCINCAPGND
ADC 샘플링 커패시터 충전워크벤치에서 열기 →
부품정체하는 일
RswR_{sw}ADC 칩 내부 아날로그 스위치아날로그 스위치 analog switch신호를 그대로 통과시키거나 끊는 반도체 스위치로, 다채널 측정의 채널 선택이 여기서 이뤄집니다.자세히 보기 →의 도통 저항도통 저항 R_DS(on)MOSFET 이 켜져 있을 때의 저항으로, 여기에 전류의 제곱을 곱한 만큼이 열이 됩니다.P=I2RDS(on)P = I^2 R_{DS(on)}자세히 보기 →샘플링할 때만 닫힌다. 없앨 수 없는 직렬 저항
CsampleC_{sample}ADC 칩 내부 샘플링 커패시터여기에 담긴 전압을 변환한다. 이 커패시터가 다 안 차면 그만큼 오차
RSRCR_{SRC}우리가 붙인 바깥 회로의 출력 임피던스출력 임피던스 output impedance회로가 부하에 전압을 얼마나 굳건히 유지해 주는지를 나타내는 값으로, 낮을수록 부하에 덜 흔들립니다.자세히 보기 →RSRCR_{SRC}가 크면 CsampleC_{sample}이 늦게 차서 값이 낮게 읽힌다

💡 ADC 입력은 “고임피던스 전압계”가 아니라 “주기적으로 커패시터를 물리는 회로” 입니다. 그래서 앞단의 출력 임피던스가 정확도를 직접 결정합니다.

샘플링 단계: 스위치가 닫혀 CsampleC_{sample}을 입력 전압까지 충전 변환 단계: 스위치가 열리고 SAR 알고리즘으로 비교

항목전형값
CsampleC_{sample}4~20 pF
RswR_{sw}0.5~2 kΩ

★ 획득 시간 계산

τ=(Rsource+Rsw)×Csample\tau = (R_{source}+R_{sw})\times C_{sample}
기호
tau시정수time constants
C_sample샘플링 커패시터sampling capacitorF
R_source신호원 저항source resistanceΩ
R_sw스위치 저항switch resistanceΩ

nn비트 정확도에 필요한 시간 (3-02):

tacq>(n+1)×ln⁡2×τ≈0.693(n+1)τt_{acq} > (n+1)\times\ln 2\times\tau \approx 0.693(n+1)\tau
기호
tau시정수time constants
n비트 수 또는 개수number of bits or count
t_acq획득 시간acquisition times

(n+1)(n+1)인 이유는 1/2 LSB 이내로 안정되어야 하기 때문입니다.

계산 예제

CsampleC_{sample} = 10 pF, RswR_{sw} = 1 kΩ, 12비트:

RsourceR_{source}τ\tau필요 tacqt_{acq}
010 ns90 ns
1 kΩ20 ns180 ns
10 kΩ110 ns991 ns
100 kΩ1.01 µs9.1 µs
1 MΩ10 µs90 µs

데이터시트의 “권장 소스 임피던스(impedance)임피던스 impedance교류에서의 저항으로, 크기뿐 아니라 전압과 전류의 시간 차이(위상)까지 담은 복소수입니다.ZC=1jωC,ZL=jωLZ_C = \frac{1}{j\omega C},\quad Z_L = j\omega L자세히 보기 → ≤ 10 kΩ” 은 기본 샘플링 시간 설정에서 나온 값입니다. 샘플링 시간을 늘리면 더 큰 임피던스도 가능합니다.


★ 세 가지 해결책

1. 소스 임피던스 낮추기

분압기(voltage divider) 저항을 낮추거나 버퍼(ADC 드라이버) 를 넣습니다. 가장 확실한 방법입니다.

2. 샘플링 시간 늘리기

MCU 설정으로 획득 시간(acquisition time)을 늘립니다. 대신 샘플링률이 떨어집니다.

3. 입력에 커패시터 달기 (전하 저장)

ADC 입력에 외부 커패시터 달기 회로도RS10kΩ소스 임피던스RSW1kΩADC 스위치 저항VSCEXT100nF외부 커패시터CS10pF샘플링 커패시터SRCINCAPGND
ADC 입력에 외부 커패시터 달기워크벤치에서 열기 →

CextC_{ext}는 ADC 입력 핀 바로 옆, RsR_s 뒤에 붙습니다. 샘플링 순간 CsampleC_{sample}에 전하를 대 주는 것은 먼 소스가 아니라 이 CextC_{ext}입니다.

Cext≫CsampleC_{ext} \gg C_{sample}이면, 샘플링 순간 CextC_{ext}가 전하를 공급합니다.

전하 공유로 인한 오차:

ΔV=V×CsampleCsample+Cext\Delta V = V\times\frac{C_{sample}}{C_{sample}+C_{ext}}
기호
Delta V전압 변화량voltage changeV
C_ext외부 커패시터external capacitorF
C_sample샘플링 커패시터sampling capacitorF
V전압voltageV

CsampleC_{sample} = 10 pF, CextC_{ext} = 100 nF → ΔV/V=10−4\Delta V/V = 10^{-4} (0.01%) — 12비트(0.024%)에 충분 ✅

⚠️ 단, CextC_{ext}가 다음 샘플링 전까지 재충전되어야 합니다.

τrecharge=Rs×Cext=10k×100n=1 ms\tau_{recharge} = R_s\times C_{ext} = 10\text{k}\times100\text{n} = 1\ \text{ms}
기호
C_ext외부 커패시터external capacitorF
e잡음 전압 밀도noise voltage densityV/√Hz
g컨덕턴스 (소신호)small-signal conductanceS
r저항 (소신호)small-signal resistanceΩ
R_s신호원 저항source resistanceΩ

샘플링 주기가 1 ms보다 짧으면 따라가지 못합니다. 신호가 빠르게 변할 때도 문제입니다.

💡 CextC_{ext} 방식은 느리게 변하는 신호(온도, 배터리 전압)에 적합하고, 빠른 신호에는 ADC 드라이버(버퍼) 가 필요합니다.


ADC 드라이버 설계

ADC 드라이버 (버퍼 + R_iso + C_filt) 회로도RISO33Ω격리 저항RSW1kΩADC 스위치 저항VS1V신호CF2.2nF전하 저장 + LPFCS10pF샘플링 커패시터VP5VVN-5VU1OPA320ADC 드라이버VCCVCCVEEVEEINOUTADCCAPGND
ADC 드라이버 (버퍼 + R_iso + C_filt)워크벤치에서 열기 →
요소역할
OP앰프낮은 출력 임피던스, 빠른 정착
RisoR_{iso}용량성 부하용량성 부하 capacitive loadOP앰프 출력에 붙은 커패시터가 출력 저항과 만나 극점을 만들어, 위상 여유를 갉아먹고 발진시킵니다.자세히 보기 →로부터 OP앰프 보호 (7-07)
CfiltC_{filt}샘플링 전하 공급 + 안티에일리어싱

OP앰프 선정 기준:

  • 정착 시간(settling time)정착 시간 settling time출력이 목표값의 허용 오차 안으로 들어와 머무를 때까지 걸리는 시간으로, 다채널 측정의 속도 상한을 정합니다.자세히 보기 →이 샘플링 주기 내에 들어갈 것 (데이터시트의 0.01% 정착 시간 확인)
  • 대역폭(bandwidth) ≥ 샘플링률
  • 출력이 ADC 입력 범위 전체를 커버 (레일투레일)
  • 저잡음

입력 범위와 기준전압

항목고려
입력 범위0~VrefV_{ref} (단극성) 또는 ±VrefV_{ref} (양극성)
범위 초과클리핑, 심하면 입력 보호 다이오드(diode) 동작 → 다른 채널까지 오염
범위 미달분해능(resolution) 낭비

⚠️ 멀티플렉스 ADC에서 한 채널이 범위를 크게 초과하면 인접 채널 값도 틀어집니다. 입력 보호 다이오드로 전류가 흐르면서 내부 노드를 흔들기 때문입니다. 입력 클램프와 직렬 저항으로 방지하세요.


시뮬레이션으로 확인

ADC 샘플링 커패시터 충전 회로도RSRC10kΩ소스 임피던스RSW1kΩADC 스위치 저항VSCS10pF샘플링 커패시터SRCINCAPGND
ADC 샘플링 커패시터 충전워크벤치에서 열기 →
# examples/10-mcu-interfacing/adc-acquisition.yaml
meta:
  name: ADC 샘플링 커패시터 충전
  lesson: docs/10-mcu-interfacing/03-adc-input.md
  note: RSRC를 1k/10k/100k로 바꾸며 세틀링 시간을 비교
components:
  - {ref: VS,   type: vpulse, params: {v1: 0, v2: 2.5, td: 0, tr: 1n, tf: 1n, pw: 10u, per: 20u}}
  - {ref: RSRC, type: r, value: 10k,  label: 소스 임피던스}
  - {ref: RSW,  type: r, value: 1k,   label: ADC 스위치 저항}
  - {ref: CS,   type: c, value: 10p,  label: 샘플링 커패시터}
nets:
  SRC: [VS.p, RSRC.1]
  IN:  [RSRC.2, RSW.1]
  CAP: [RSW.2, CS.1]
  GND: [VS.n, CS.2]
analyses:
  - {type: tran, tstep: 1n, tstop: 5u}
expect:
  - {measure: v, node: CAP, at: 1u, analysis: tran, value: 2.5, tol: 0.03%}

τ=11k×10p=110\tau = 11\text{k}\times10\text{p} = 110 ns이므로 1 µs면 9τ9\tau로 충분히 정착합니다.


⚖️ 부품 트레이드오프

선택✅ 좋아지는 것⚠️ 나빠지는 것
ADC 드라이버(버퍼)소스 임피던스 무관, 빠른 샘플링부품·전력, OP앰프 잡음·옵셋 추가
입력 커패시터 (100 nF)전하 공급, 노이즈 필터응답 느림, 빠른 신호에 부적합
작은 입력 커패시터 (1 nF)빠른 재충전전하 공급 부족
샘플링 시간 늘리기부품 0샘플링률 감소
소스 저항 낮추기근본 해결전류 소비, 신호원 부담
직렬 저항 + 커패시터 (RC)안티에일리어싱 겸용대역폭 제한

저항 분압 + ADC의 딜레마

분압 저항소비 전류소스 임피던스ADC 적합성
1 k / 1 k큼500 Ω✅ 우수
10 k / 10 k중간5 kΩ✅ 양호
100 k / 100 k작음50 kΩ⚠️ 샘플링 시간 필요
1 M / 1 M극소500 kΩ❌ 버퍼 필수

🔌 실제 쓰임새

측정 대상권장 구성
배터리 전압분압(100 k급) + 100 nF (느린 신호)
온도 센서 (NTC)분압 + RC 필터
생체 신호AFE + ADC 드라이버 + 안티에일리어싱
전류 (션트)전류 감지 증폭기 + 드라이버
광센서TIA + 드라이버
포텐셔미터직접 (임피던스 낮음)

⚠️ 이상과 실제의 차이

이상실제
입력 임피던스 무한샘플링 중에는 매우 낮음 (kΩ)
즉시 측정획득 시간 필요
채널 독립멀티플렉스 시 이전 채널의 잔류 전하 (메모리 효과)
기준전압(voltage reference) 정확기준전압 잡음이 모든 측정에 곱해짐 (8-06)
선형INL/DNL 오차, 미싱 코드

⚠️ 멀티플렉스 ADC의 메모리 효과: 이전 채널의 전압이 샘플링 커패시터(capacitor)에 남아 있어, 다음 채널이 그 값에서 출발합니다. 두 채널의 전압 차가 크면 획득 시간이 더 필요합니다. 최악의 경우(풀스케일 → 0)를 기준으로 설계하세요.


연습문제

문제 1. CsampleC_{sample} = 8 pF, RswR_{sw} = 1.5 kΩ, 소스 임피던스 20 kΩ. 10비트 획득 시간은?

연습 10-03-1 — ADC 획득 시간과 소스 임피던스 회로도RSRC20kΩ소스 임피던스RSW1.5kΩADC 내부 스위치V1샘플링 시작CS8pF샘플링 커패시터SRCPINCAPGND
연습 10-03-1 — ADC 획득 시간과 소스 임피던스워크벤치에서 열기 →
풀이 τ=(20k+1.5k)×8p=172 ns\tau = (20\text{k}+1.5\text{k})\times8\text{p} = 172\ \text{ns}
기호
tau시정수time constants
tacq=0.693×11×172 ns≈1.31 μst_{acq} = 0.693\times11\times172\ \text{ns} \approx 1.31\ \mu\text{s}
기호
mu이동도mobilitym²/V·s
t_acq획득 시간acquisition times

문제 2. 1 MΩ 분압기 출력을 ADC로 읽습니다. 100 nF 커패시터를 달면 되나요?

exercises/10-03-1meg-adc.yaml
풀이

전하 공유 오차는 해결됩니다:

CsampleCext=10p100n=10−4\frac{C_{sample}}{C_{ext}} = \frac{10\text{p}}{100\text{n}} = 10^{-4}
기호
C_ext외부 커패시터external capacitorF
C_sample샘플링 커패시터sampling capacitorF

✅

하지만 재충전 시정수:

τ=500k×100n=50 ms\tau = 500\text{k}\times100\text{n} = 50\ \text{ms}
기호
tau시정수time constants

응답이 극도로 느려집니다. (RthR_{th}는 1M∥1M = 500 kΩ)

용도가능?
배터리 전압 (분당 1회)✅ 가능
온도 (초당 1회)✅ 가능
50 Hz 이상 신호❌ 불가

빠른 신호라면 버퍼가 필수입니다. 또는 분압 저항을 10 k/10 k로 낮추세요 (소비 전류가 100배 늘지만 τ\tau가 500 µs로 개선).

문제 3. 8채널 멀티플렉스 ADC로 8개 센서를 읽습니다. 채널 1은 3.0 V, 채널 2는 0.1 V인데, 채널 2를 읽으면 0.15 V로 나옵니다. 원인과 해결책은?

exercises/10-03-mux-crosstalk.yaml
풀이

원인: 메모리 효과 (획득 시간 부족)

채널 1의 3.0 V가 샘플링 커패시터에 남은 상태에서 채널 2로 전환됩니다. 커패시터를 3.0 V → 0.1 V로 방전시켜야 하는데, 획득 시간이 부족해 0.15 V에서 멈춘 것입니다.

필요한 정확도 확인: 12비트, 3.3 V 범위에서 1 LSB = 0.8 mV. 0.05 V 오차는 62 LSB입니다.

ln⁡2.90.0008≈8.2⇒8.2τ 필요\ln\frac{2.9}{0.0008} \approx 8.2 \Rightarrow 8.2\tau\ \text{필요}
기호
tau시정수time constants

해결책:

  1. 획득 시간 늘리기 ← 가장 간단. MCU 설정에서 샘플링 사이클 증가
  2. 소스 임피던스 낮추기 — 각 채널에 버퍼 또는 낮은 임피던스 분압
  3. 각 채널에 커패시터 (100 nF) — 채널마다 전하를 준비해둠 ✅ 효과적
  4. 더미 변환 — 채널 전환 후 한 번 버리고 두 번째 값을 사용 (간단하고 효과적)
  5. 채널 순서 최적화 — 전압이 비슷한 채널끼리 인접하게 배치

가장 실용적: 채널 전환 후 첫 변환을 버리기 + 채널마다 커패시터. 펌웨어 한 줄과 부품 몇 개로 해결됩니다.


이전 ← 02 버튼과 디바운싱 | 다음 → 04 안티에일리어싱