DAC — 구조와 글리치
한 줄 요약 — DAC 의 정확도는 저항 정합이 정하고, 파형의 깨끗함은 글리치가 정합니다. 둘은 서로 다른 문제이고 대책도 다릅니다.
세 가지 구조
| 구조 | 원리 | 정확도 | 속도 | 어디에 |
|---|---|---|---|---|
| R-2R | 저항 사다리로 전류 분배 | 저항 정합이 정함 | 빠름 | 범용, 내장 DAC |
| 전류 스티어링 | 가중 전류원을 켜고 끔 | 전류원 정합 | 가장 빠름 | 고속 (통신·영상) |
| ΔΣ | 1비트를 빠르게 + 필터 | 가장 높음 | 느림 | 오디오, 정밀 기준 |
| PWM + LPF | 듀티비 → 평균 | 시간 분해능분해능 resolutionADC 가 구분할 수 있는 가장 작은 전압 차이로, 비트 수와 기준전압으로 정해집니다.자세히 보기 →이 정함 | 느림 | 싸게 때울 때 |
R-2R — 왜 두 값만 쓰는가
비트에 가지 저항을 쓰면 정합이 불가능합니다. R-2R 은 과 두 값만으로 이진 가중을 만듭니다.
핵심은 사다리의 어느 지점에서 보아도 오른쪽이 항상 이라는 것입니다.
그래서 각 마디를 지날 때마다 전류가 정확히 반씩 갈라집니다.
D듀티비duty cyclek결합 계수 또는 상수coupling coefficient or constantN개수countV_out출력 전압output voltageVV_ref기준 전압reference voltageV저항의 절대값은 상관없습니다. 이 10 k 든 100 k 든 비만 맞으면 됩니다 — 이것이 IC 안에서 만들기 쉬운 이유입니다.
정확도는 정합이 정합니다
비트 정확도를 얻으려면 저항 비가 수준으로 맞아야 합니다.
| 비트 | 필요한 저항 정합 |
|---|---|
| 8 | 0.4% |
| 12 | 0.024% |
| 16 | 0.0015% |
개별 저항으로는 12비트가 한계입니다. 그 위는 같은 칩 위에 만들어 레이저 트리밍하거나, 아예 ΔΣ 로 갑니다.
💡 01 값을 정하는 순서의 차동 증폭기 CMRR 이야기와 같은 구조입니다 — 절대값이 아니라 비가 중요하고, 그러면 같은 칩 위가 절대적으로 유리합니다.
★ 글리치 — 코드가 바뀌는 순간
정적으로는 완벽한 DAC 도 코드가 바뀌는 순간에 엉뚱한 값을 냅니다.
최악은 메이저 캐리 입니다. 0111 1111 → 1000 0000 으로 갈 때 모든 비트가 동시에 바뀝니다.
| 스위치가 | 잠깐 나오는 값 |
|---|---|
| MSB 가 먼저 켜짐 | 1111 1111 → 풀스케일 |
| MSB 가 늦게 켜짐 | 0000 0000 → 0 |
1 LSB 만 올리려던 것이 풀스케일까지 튑니다.
글리치의 크기는 면적(V·s) 으로 잽니다 — 데이터시트의 glitch impulse
가 그것이고, 보통 pV·s ~ nV·s 단위입니다.
대책 셋:
| 방법 | 어떻게 | 대가 |
|---|---|---|
| 디글리처 (샘플홀드) | 전이 동안 출력을 붙잡아 둠 | 부품, 자체 오차 |
| 저역통과 필터 | 글리치를 평균해서 없앰 | 대역폭↓ |
| 세그먼트 구조 | 상위 비트를 온도계 코드로 | 스위치 수↑ (칩 안에서 해결) |
요즘 DAC 은 대부분 세그먼트 구조입니다. 상위 3~4비트를 이진이 아니라 온도계 코드(0001, 0011, 0111, 1111…)로 만들면 한 번에 스위치 하나만 바뀌므로 메이저 캐리가 아예 없습니다. 대가는 스위치가 개 필요한 것인데, 칩 안에서는 싼 비용입니다.
ΔΣ DAC — ADC 를 거꾸로
10-07 ADC 의 한계에서 본 노이즈 셰이핑을 그대로 뒤집습니다.
1비트라서 정합 문제가 원천적으로 없습니다. 값이 둘뿐이니 “비가 맞는다” 는 말 자체가 성립하고, 그래서 24비트가 가능합니다.
L인덕턴스inductanceHn비트 수 또는 개수number of bits or count| 대가 | 왜 |
|---|---|
| 느림 | OSR 배로 돌려야 함 |
| 지연 | 보간·데시메이션 필터의 군지연 |
| 아날로그 LPF 필수 | 밀어 놓은 잡음을 안 버리면 그대로 나옴 |
PWM + 필터 — 싸게 때울 때
MCU 타이머로 PWM 을 만들고 RC 로 평균 냅니다. 부품 두 개면 됩니다.
D듀티비duty cycleV_DD전압 (DD)voltage (DD)VV_out출력 전압output voltageV분해능은 타이머가 정합니다. 시스템 클럭 , PWM 주파수 이면
f_PWM주파수 (PWM)frequency (PWM)Hzf_sys주파수 (sys)frequency (sys)HzN개수count= 72 MHz, = 20 kHz 면 비트.
리플이 문제입니다. 1차 RC 로 거른 뒤 남는 리플은
C정전용량capacitanceFf_PWM주파수 (PWM)frequency (PWM)HzR저항resistanceΩV_DD전압 (DD)voltage (DD)VV_ripple전압 (ripple)voltage (ripple)V12비트 LSB() 아래로 만들려면
C정전용량capacitanceFf_PWM주파수 (PWM)frequency (PWM)HzR저항resistanceΩ시정수 51 ms — 정착에 0.46 초 걸립니다. 12비트를 원하면 s 입니다.
⚠️ PWM DAC 은 “느려도 되는 DC 값” 에만 씁니다. 바이어스 전압, 오프셋 조정, 기준전압 미세 조정 같은 것. 파형을 만들려는 순간 리플과 정착이 동시에 발목을 잡습니다.
계산 예제 — 전극 오프셋 보정용 DAC
요구: ±300 mV 를 12비트로 보정. 갱신은 1초에 한 번이면 충분. 잡음은 측정 대역(1 kHz)에서 신호(50 µV)의 1/10 아래.
1) 분해능
mu이동도mobilitym²/V·s⚠️ 신호가 50 µV 인데 LSB 가 146 µV 입니다. 보정 잔차가 신호의 3배 — 분해능이 모자랍니다.
되돌아가서: 보정을 두 단으로 나눕니다. 거친 보정(12비트, ±300 mV) 뒤에 미세 보정(12비트, ±10 mV) 을 더하면
mu이동도mobilitym²/V·s신호의 1/10 입니다. ✓
2) 잡음
DAC 출력 잡음이 그대로 신호에 더해집니다. 미세 DAC 은 ±10 mV 범위이므로 기준전압을 분압해서 만드는데, 그 분압 저항의 열잡음열잡음 thermal noise모든 저항이 온도 때문에 내는 피할 수 없는 잡음으로, 측정의 바닥을 정합니다.자세히 보기 → 을 봐야 합니다.
10 kΩ 이면 12.8 nV/√Hz × √1570 = 0.5 µV — 신호의 1% 입니다. ✓ (100 kΩ 이면 1.6 µV 로 3% — 경계입니다.)
3) 구조 선택
| 후보 | 판정 |
|---|---|
| PWM + RC | 정착 0.46 s. 1초에 한 번이면 OK. 부품 2개 ✓ |
| R-2R IC | 빠르지만 필요 없음 |
| ΔΣ DAC | 과함 |
PWM 으로 갑니다. 요구가 느리므로 가장 싼 것이 맞습니다.
이것이 18-01 값을 정하는 순서의 방식입니다 — 사양이 요구를 정하고, 요구가 구조를 정합니다. 좋은 것부터 고르는 게 아니라 충분한 것 중 싼 것을 고릅니다.
시뮬레이션으로 확인
# examples/10-mcu-interfacing/pwm-dac-ripple.yaml
meta:
name: PWM DAC 의 리플과 정착
lesson: docs/10-mcu-interfacing/08-dac.md
note: R1·C1 을 키우며 리플이 줄고 정착이 느려지는 것을 같이 본다
components:
- {ref: V1, type: vpulse, params: {v1: 0, v2: 3.3, td: 0, tr: 10n, tf: 10n, pw: 25u, per: 50u}}
- {ref: R1, type: r, value: 100k}
- {ref: C1, type: c, value: 470n}
- {ref: R2, type: r, value: 100k, label: 2단}
- {ref: C2, type: c, value: 470n}
nets:
PWM: [V1.p, R1.1]
MID: [R1.2, C1.1, R2.1]
OUT: [R2.2, C2.1]
GND: [V1.n, C1.2, C2.2]
analyses:
- {type: tran, tstep: 1u, tstop: 500m}2단으로 나눈 이유: 같은 총 시정수에서 리플이 훨씬 작습니다.
1단 = 47 ms 하나보다 2단 23.5 ms 두 개가 20 kHz 에서 감쇠가
크기 때문입니다. MID 와 OUT 의 리플을 견줘 보면 보입니다.
⚖️ 부품 트레이드오프
| 선택 | ✅ | ⚠️ |
|---|---|---|
| R-2R IC | 빠르고 예측 가능 | 12비트 이상은 값이 뜀 |
| ΔΣ DAC | 24비트, 정합 문제 없음 | 느림, 지연, 아날로그 LPF 필요 |
| PWM + RC | 부품 2개, 공짜 | 리플 vs 정착이 정면충돌 |
| PWM 2단 필터 | 같은 정착에서 리플↓ | 부품 4개 |
| 세그먼트 DAC | 글리치 거의 없음 | 칩 안에서만 가능 |
| 디글리처 추가 | 글리치 제거 | 부품, 자체 오차 |
🔌 실제 쓰임새
- 전극 오프셋 보정 — 위 예제
- 기준전압 미세 조정 — 교정 계수를 하드웨어로
- 자극 파형 생성 — 여기서는 글리치와 속도가 둘 다 중요
- 테스트 신호 주입 — 시스템을 자기 자신으로 교정 (14-05)
- 가변 바이어스 — 온도 보상
⚠️ 이상과 실제의 차이
| 이상 | 실제 |
|---|---|
| 출력이 코드에 정확히 비례 | INL·DNL 이 있습니다. DNL > 1 LSB 면 코드가 빠집니다 |
| 코드가 바뀌면 바로 그 값 | 글리치가 먼저 지나갑니다 |
| DAC 출력이 이상적 전압원 | 출력 임피던스가 있습니다 — 버퍼가 필요할 때가 많습니다 |
| 기준전압이 정확 | DAC 정확도의 상한이 기준전압 정확도입니다 |
| PWM 은 그냥 평균 | 리플·정착·타이머 지터가 다 들어옵니다 |
연습문제
문제 1. 8비트 R-2R DAC 을 1% 저항으로 만들면 실제 몇 비트가 나옵니까?
풀이
MSB 의 오차가 가장 크게 나타납니다. MSB 가 1% 틀리면 출력이 풀스케일의 0.5% 만큼 틀립니다.
약 7.6비트 — 8비트를 못 채웁니다.
⚠️ 게다가 DNL 이 1 LSB 를 넘으면 단조성이 깨져 코드를 올렸는데 출력이 내려가는 구간이 생깁니다. 제어 루프 안에 넣으면 발진합니다.
12비트를 개별 저항으로 만들려면 0.024%(0.1% 도 부족) 이 필요한데, 그런 저항은 개당 수천 원이고 온도계수까지 맞춰야 합니다. IC 를 사는 것이 언제나 쌉니다.
문제 2. PWM DAC 의 리플을 1/10 로 줄이면서 정착 시간은 그대로 두려면?
exercises/10-08-pwm-ripple-settling.yaml풀이
1차 RC 로는 불가능합니다 — 리플과 정착이 같은 로 정해지니까요.
방법 둘:
① PWM 주파수를 10배로. 리플 이므로 20 kHz → 200 kHz 면 리플이 1/10. ⚠️ 대가: 분해능이 비트 줄어듭니다 (같은 시스템 클럭에서).
② 2단 필터로. 같은 총 정착 시간에서 20 kHz 감쇠가 훨씬 큽니다. 1단 −20 dB/dec 대신 2단 −40 dB/dec.
를 각각 절반으로 나눠 두 단을 만들면 정착은 비슷하고 리플은 크게 줍니다. 부품 2개 추가로 해결되는 가장 싼 답입니다.
⚠️ 2단은 2차 시스템이므로 를 봐야 합니다. 같은 두 단을 버퍼 없이 이으면 뒷단이 앞단을 로딩로딩 loading뒷단이 앞단에서 전류를 끌어가면서 신호가 줄어드는 현상으로, 고임피던스 신호원에서 특히 심합니다.자세히 보기 →해서 계산과 어긋납니다 — 뒷단 저항을 앞단의 10배로 하거나 사이에 버퍼를 넣습니다.
문제 3. DAC 으로 만든 자극 파형에 매 코드 전환마다 스파이크가 보입니다. 어떻게 합니까?
exercises/10-08-dac-glitch.yaml풀이
글리치입니다. 특히 메이저 캐리(0111→1000)에서 큽니다.
대책을 순서대로:
- 데이터시트의
glitch impulse확인 — 세그먼트 구조인지 봅니다. 아니면 소자를 바꾸는 것이 가장 확실합니다 - 출력에 LPF — 파형 대역보다 충분히 위에 놓으면 글리치만 평균됩니다. ⚠️ 자극 파형의 상승 시간도 같이 느려집니다
- 디글리처(샘플홀드) — 전이 동안 출력을 붙잡습니다. 정확하지만 샘플홀드 자체의 전하 주입전하 주입 charge injection아날로그 스위치를 끌 때 게이트의 전하가 신호 쪽으로 새어 나와 전압을 튀게 하는 현상입니다.자세히 보기 →이 새 오차입니다
- 코드 전환을 부드럽게 — 큰 점프를 여러 작은 스텝으로 나누면 메이저 캐리를 피할 수 있을 때가 있습니다
측정 회로에서는 2번이 보통 정답입니다 — 자극 파형이 그렇게 빠를 필요가 없다면, 필터로 글리치를 없애는 것이 가장 싸고 확실합니다.
이전 ← 07 ADC 의 실제 한계 | 다음 → 11장. 기생 성분