클럭과 타이밍
한 줄 요약 — 클럭은 시스템의 심장이자 가장 큰 노이즈원입니다. 측정 시스템에서는 클럭의 지터가 곧 측정 오차입니다.
클럭원
| 종류 | 정확도 | 지터 | 비고 |
|---|---|---|---|
| RC 내장 발진기 | ±1~5% | 큼 | 무료, 온도 드리프트 |
| 크리스털 (XTAL) | ±10~50 ppm | 작음 | 부하 커패시터(capacitor) 필요 |
| 크리스털 발진기 (XO) | ±10~50 ppm | 작음 | 완제품, 편리 |
| TCXO | ±0.5~2 ppm | 작음 | 온도 보상 |
| OCXO | ±0.01 ppm | 매우 작음 | 항온조, 비쌈·전력 |
| PLL 체배 | 원본에 의존 | 증가 | 주파수 유연 |
크리스털 회로
| 부품 | 어디에 붙나 | 하는 일 |
|---|---|---|
| XTAL | XIN ↔ XOUT | 기계적으로 진동하는 수정. 회로적으로는 매우 Q가 높은 직렬 RLC(모션 저항·인덕턴스·용량)처럼 보인다 |
| C1 | XIN ↔ GND | XIN 쪽 부하 용량 |
| C2 | XOUT ↔ GND | XOUT 쪽 부하 용량 |
| XIN ↔ XOUT | MCU 내부 인버터를 선형 영역에 바이어스한다 (보통 칩 안에 내장) |
💡 C1·C2는 크리스털과 병렬이 아니라 각각 GND로 갑니다. 크리스털이 보는 부하 용량은 이 둘의 직렬 합이고, 그래서 아래 식이 형태입니다.
부하 커패시터 계산:
C_stray정전용량 (stray)capacitance (stray)FC_11번 정전용량capacitance 1FC_22번 정전용량capacitance 2FC_L부하 정전용량load capacitanceF일 때:
C_stray정전용량 (stray)capacitance (stray)FC_11번 정전용량capacitance 1FC_22번 정전용량capacitance 2FC_L부하 정전용량load capacitanceF는 보통 3~5 pF입니다.
예: = 12 pF, = 4 pF → pF (E12: 15 pF)
⚠️ 부하 커패시터는 반드시 C0G/NP0를 쓰세요. X7R을 쓰면 온도에 따라 주파수가 드리프트합니다 (3-04).
레이아웃:
- 크리스털을 MCU 핀에 최대한 가깝게
- 배선(trace) 아래에 그라운드 가드
- 다른 신호가 근처를 지나지 않게
- 크리스털 주변에 가드링(guard ring)가드링 guard ring고임피던스 노드를 같은 전압의 링으로 둘러싸 표면 누설을 없애는 기법입니다.자세히 보기 →
★ 지터 (jitter) — 측정 정확도에 직결
지터는 클럭 에지의 시간 변동입니다.
ADC 샘플링에서의 지터 영향
샘플링 시점이 만큼 흔들리면, 신호가 변하는 중이므로 전압 오차가 생깁니다.
Delta t시간 간격time intervalsDelta V전압 변화량voltage changeVd거리 또는 두께distance or thicknessmt시간timesV전압voltageV정현파 의 최대 기울기는 이므로:
f_sig신호 주파수signal frequencyHzSNR신호 대 잡음비signal-to-noise ratiodBt_jitter시간 (jitter)time (jitter)s계산 표
| 신호 주파수 | 지터 | SNR 한계 | 유효 비트 |
|---|---|---|---|
| 1 kHz | 1 ns | 104 dB | 17비트 |
| 10 kHz | 1 ns | 84 dB | 13.6비트 |
| 100 kHz | 1 ns | 64 dB | 10.3비트 |
| 1 MHz | 1 ns | 44 dB | 7비트 |
| 100 kHz | 10 ps | 104 dB | 17비트 |
고주파 신호를 고분해능으로 측정하려면 지터가 ps급이어야 합니다.
다행히 생체 신호(kHz 이하)에서는 ns급 지터로도 충분합니다. 하지만 멀티플렉싱 어레이에서는 채널 간 샘플링 시각 차이가 별도 문제가 됩니다 → 16-01
★ 클럭이 만드는 노이즈
클럭은 주기적이고 강한 신호라 노이즈원으로서 특히 나쁩니다.
| 문제 | 대책 |
|---|---|
| 고조파가 광대역으로 방사 | 슬루레이트(slew rate)슬루레이트 slew rate출력이 오를 수 있는 최고 속도로, 이걸 넘기면 정현파가 삼각파로 잘려 나옵니다.자세히 보기 → 제한, 직렬 저항, 짧은 배선 |
| 전원을 통한 결합(coupling) | 디커플링, 전원 분리 |
| 아날로그 배선과 크로스토크(crosstalk)크로스토크 crosstalk옆 배선의 신호가 용량이나 자기장을 타고 내 신호에 섞여 들어오는 것입니다.자세히 보기 → | 물리적 분리, 가드 트레이스 |
| 접지 리턴 전류 | 그라운드 플레인(plane)그라운드 플레인 ground plane한 층을 통째로 접지로 쓰는 것으로, 리턴 패스가 알아서 최단 경로를 찾게 해 줍니다.자세히 보기 →, 리턴 경로 확보 |
⚠️ 클럭 주파수의 고조파가 측정 대역에 떨어질 수 있습니다. 예를 들어 8 MHz 클럭의 스퓨리어스가 다운컨버전되어 저주파에 나타나기도 합니다. 스펙트럼을 확인하고, 문제가 되면 클럭 주파수를 바꿔보세요.
클럭 분배
| 방식 | 특징 |
|---|---|
| 데이지 체인 | 간단, 스큐(skew) 큼 |
| 스타 (버퍼) | 스큐 작음, 버퍼 필요 |
| 트리 (H-tree) | 스큐 최소, 면적 |
| 차동 클럭 (LVDS) | 노이즈 면역 우수, EMI 낮음 |
💡 측정 시스템에서 클럭을 보드 간에 보낼 때는 LVDS 같은 차동 전송을 쓰세요. 싱글엔디드는 접지 잡음을 그대로 받고 EMI를 크게 방사합니다.
시뮬레이션으로 확인
# examples/09-digital/crystal-load.yaml
meta:
name: 크리스털 부하 커패시터의 영향
lesson: docs/09-digital/04-timing.md
note: 크리스털을 등가 RLC로 모델링해 공진 주파수를 확인
components:
- {ref: V1, type: vac, value: 1}
- {ref: RM, type: r, value: 30, label: 모션 저항}
- {ref: LM, type: l, value: 3.5m, label: 모션 인덕턴스}
- {ref: CM, type: c, value: 22f, label: 모션 용량}
- {ref: C0, type: c, value: 5p, label: 병렬 용량}
- {ref: C1, type: c, value: 15p, label: 부하 커패시터}
nets:
IN: [V1.p, RM.1, C0.1]
M1: [RM.2, LM.1]
M2: [LM.2, CM.1]
OUT: [CM.2, C0.2, C1.1]
GND: [V1.n, C1.2]
analyses:
- {type: ac, sweep: dec, points: 500, fstart: 15MEG, fstop: 17MEG}부하 커패시터 값을 바꾸면 공진(resonance)공진 resonance인덕터와 커패시터의 임피던스가 서로 상쇄되는 주파수로, 그 자리에서 전압이나 전류가 크게 솟습니다.자세히 보기 → 주파수가 미세하게 이동하는 것을 볼 수 있습니다.
⚖️ 부품 트레이드오프
| 선택 | ✅ 좋아지는 것 | ⚠️ 나빠지는 것 |
|---|---|---|
| 크리스털 | 정확·저지터·저렴 | 부하 커패시터 필요, 기동 시간, 진동에 민감 |
| 내장 RC 발진기 | 부품 0개 | 부정확(±5%), 지터 큼, 온도 드리프트 |
| TCXO/OCXO | 최고 정확도 | 비쌈, 전력(OCXO는 발열까지) |
| 높은 클럭 주파수 | 처리량↑ | EMI↑, 전력↑, 지터 관리 어려움 |
| 낮은 클럭 주파수 | EMI↓, 전력↓ | 처리량↓ |
| PLL 체배 | 주파수 유연 | 지터 증가, 잡음 |
| 차동 클럭 (LVDS) | 노이즈 면역, 낮은 EMI | 부품·전력, 배선 2배 |
⚠️ PLL은 지터를 증가시킵니다. 저지터가 필요한 ADC 클럭은 PLL을 거치지 않은 원본 크리스털에서 직접 받는 것이 좋습니다. MCU 시스템 클럭(PLL 출력)을 ADC 클럭으로 쓰면 지터가 나빠집니다.
🔌 실제 쓰임새
| 자리 | 요구 |
|---|---|
| MCU 시스템 클럭 | 일반 크리스털 |
| ADC 샘플링 클럭 | 저지터 — 별도 크리스털 또는 저지터 발진기 |
| UART 통신 | ±2% 이내 (크리스털 권장) |
| USB | ±0.25% (크리스털 필수) |
| 시각 동기 (여러 장비) | GPS 규율 클럭, PTP |
| 어레이 스캔 | 안정성 + 저EMI |
⚠️ 이상과 실제의 차이
| 이상 | 실제 |
|---|---|
| 클럭이 정확한 주파수 | ppm 단위 오차, 온도·에이징 드리프트 |
| 에지가 완벽 | 지터, 상승시간, 링잉(ringing) |
| 클럭이 동시에 도달 | 스큐 |
| 클럭이 노이즈 안 만듦 | 가장 강한 주기적 노이즈원 |
| 크리스털이 항상 발진 | 부하 커패시터·구동 레벨이 맞아야 함. 기동 실패 흔함 |
⚠️ 크리스털 기동 실패는 부하 커패시터 값이 틀렸거나, 구동 레벨(drive level)이 부족하거나, PCB 기생 용량(parasitic capacitance)기생 용량 parasitic capacitance부품·배선·케이블이 원치 않게 갖는 커패시턴스로, 고임피던스 신호원에서 대역폭을 가장 먼저 잡아먹습니다.자세히 보기 →이 예상보다 클 때 발생합니다. 저온에서만 실패하는 경우도 있어 온도 시험이 필요합니다.
연습문제
문제 1. 크리스털 = 18 pF, 기판 기생 5 pF. 부하 커패시터 값은?
풀이
C_11번 정전용량capacitance 1FC_22번 정전용량capacitance 2FE12에서 22 pF 또는 27 pF. 27 pF이 더 가깝습니다.
문제 2. 10 kHz 신호를 16비트 정확도로 샘플링하려면 허용 지터는?
exercises/09-04-jitter-16bit.yaml풀이
16비트 SNR ≈ 98 dB
f주파수frequencyHzSNR신호 대 잡음비signal-to-noise ratiodBt_jitter시간 (jitter)time (jitter)s200 ps 이하. 일반 크리스털 발진기(수 ps~수십 ps 지터)로 충분히 달성 가능합니다.
만약 1 MHz 신호라면: 2 ps — 훨씬 어렵습니다. 저지터 발진기가 필요합니다.
문제 3. 2500채널 어레이를 순차 스캔합니다. 첫 채널과 마지막 채널의 샘플링 시각이 172 µs 차이납니다. 이것이 문제가 됩니까?
exercises/09-04-scan-skew.yaml풀이
용도에 따라 다릅니다.
문제가 되는 경우:
- 공간적 전파 현상 관찰 — 신경 활동의 전파 속도를 측정한다면, 172 µs는 실제 전파 지연(수 ms)의 상당 부분입니다. 채널 간 시간차가 공간 정보를 왜곡합니다
- 동기 이벤트 검출 — 여러 채널의 동시 발화를 판정할 때 시간차가 오판을 만듦
- 위상(phase) 관계 분석 — 주파수 대역 간 위상 결합(phase-amplitude coupling) 분석
문제가 안 되는 경우:
- 각 채널의 파형 자체만 볼 때
- 신호 대역이 172 µs보다 훨씬 느릴 때 (< 1 kHz)
대책:
- 타임스탬프 보정 — 각 채널의 샘플링 시각을 알고 있으므로 후처리로 보정(리샘플링). 가장 실용적
- 동시 샘플-홀드 — 모든 채널을 동시에 샘플링한 뒤 순차적으로 읽음. 픽셀마다 샘플-홀드 커패시터가 필요해 면적·복잡도 증가. 이미지 센서의 “글로벌 셔터”와 같은 개념
- 병렬 리드아웃 — 열마다 ADC를 두면 행 단위로만 시간차 발생 (50배 개선)
- 스캔 순서 최적화 — 관심 영역을 먼저 읽거나, 인터리브
이것이 롤링 셔터(rolling shutter) 문제와 정확히 같습니다. 카메라에서 빠르게 움직이는 물체가 기울어져 보이는 현상과 같은 원리입니다.
자세한 논의 → 16-01
이전 ← 03 순차 논리와 플립플롭 | 다음 → 05 풀업·오픈드레인·레벨 시프터