앞서 단극성(Unipolar)은 0 V 이상의 양수 전압만 다루었습니다. 하지만 현실 세계의 많은 교류(AC) 신호, 안테나 수신 신호, 혹은 음향 신호는 기준 전위(또는 그라운드)를 중심으로 위아래(+와 -)로 출렁이는 쌍극성(Bipolar) 특성을 가집니다. 따라서 이를 디지털로 온전히 표현하기 위해서는 음수를 표현할 수 있는 이진수 규칙이 반드시 필요합니다.
- Offset Binary (오프셋 바이너리): 전압의 최솟값(가장 큰 음수)을 0000...으로 두고, 전압이 올라갈 때마다 디지털 코드도 순수하게 1씩 증가하게 만드는 방식입니다. ADC 내부 비교기나 저항 사다리(Resistor Ladder) 회로가 직관적으로 동작하기 때문에 ADC/DAC 하드웨어 코어 내부에서 가장 선호합니다.
- Twos Complement (2의 보수): 현대 모든 컴퓨터(MCU, DSP, CPU) 산술 연산의 표준입니다. 덧셈과 뺄셈을 동일한 가산기(Adder) 로직으로 처리할 수 있고, '0'이 오직 하나(0000)만 존재하여 수학적 에러가 없습니다.
- Ones Complement / Sign-Magnitude: 이 두 방식은 +0과 -0이라는 두 개의 0이 존재하는 치명적인 단점이 있습니다. (예: 부호-크기 방식에서 0000은 +0, 1000은 -0). 이로 인해 하드웨어 연산 로직이 쓸데없이 복잡해지므로 현대 데이터 컨버터에서는 거의 퇴출당했습니다.

- 최저 전압 (-5V):
- Offset Binary: 0000
- Twos Complement: 1000
- 중간 전압 (0V, Mid-scale):
- Offset Binary: 1000
- Twos Complement: 0000
- 최고 전압 (+5V - 1LSB = 4.375V):
- Offset Binary: 1111
- Twos Complement: 0111
오프셋 바이너리(Offset binary) 방식에서는 신호의 영점(0V, Zero signal)에 1000이라는 코드가 할당됩니다.
쌍극성(Bipolar) 신호에서 가장 기준이 되는 정중앙 전압(0V)을, 단극성(Unipolar) 시스템의 딱 절반 위치였던 미드스케일 코드인 1000에 매핑한다는 뜻입니다. 또한 값이 커질 때 비트가 올라가는 순서(0000 -> 0001 -> ... -> 1111)도 우리가 아는 일반 이진수 카운팅과 똑같습니다.
가장 큰 음수 값(-FS + 1 LSB)에는 0001 코드가 할당되고(가장 밑바닥 코드인 0000이 아닌!), 가장 큰 양수 값(+FS - 1 LSB)에는 1111 코드가 할당됩니다.
미드 스케일(0V)을 중심으로 완벽한 대칭을 유지하기 위해 마이너스 풀스케일을 나타내는 0000 코드는 일반적으로 연산에 사용되지 않는다.
완벽한 7 vs 7 대칭을 맞추기 위해 수학적 계산을 할 때 0000 비트를 일부러 배제하고 최하단을 0001로 간주합니다. 대신 남는 0000 코드는 "센서 입력 전압이 너무 낮아서 ADC 측정 범위를 밑으로 뚫고 나갔다"는 일종의 경고 플래그(Negative Offrange)로 활용하거나, 하드웨어적으로 0001과 똑같은 전압값으로 묶어버리는(Clamping) 처리를 해줍니다.

DAC의 아날로그 출력은 영점 값(0V)은 입력 코드인 100 갖습니다.
가장 큰 음의 출력 전압은 일반적으로 001 코드(-FS + 1 LSB)에 의해 정의되며, 가장 큰 양의 출력 전압은 111 코드(+FS - 1LSB)에 의해 정의됩니다.
위의 그림 2.10 를 보면 0V(100)를 기준으로 위로 3칸(+3V), 밑으로 3칸(-3V)이 대칭을 잘 이루고 있습니다.
약 여기서 맨 밑바닥 코드인 000까지 살려서 아날로그 전압(-FS) 으로 출력하도록 DAC 내부 디코더 회로를 설계해 버리면, 양수 쪽은 최고 +3/8인데 음수 쪽은 -4/8까지 나오게 되면서 0V 기준 대칭성이 깨집니다.
이렇게 되면 오디오 신호나 통신 파형처럼 위아래가 대칭이어야 하는 AC 신호를 DAC가 복원해낼 때, 음수 쪽만 더 튀어나오게 되므로 최종 아날로그 출력 파형에 심각한 왜곡이나 DC 오프셋 에러가 발생합니다. 결과적으로 소프트웨어나 디지털 신호 처리(DSP) 단에서도 수학적 연산이 매우 까다로워집니다. 따라서 실무적으로는 000 코드가 들어오면 회로적으로 001과 똑같은 전압(-3/8V)이 나오게 클램핑하거나 배제하는 것이 정석입니다.

단극성 ADC에서 양자화 오차의 대칭성을 맞추기 위해 첫 번째 계단을 일부러 1/2 LSB 밀어 짜놓았던 규칙이 쌍극성 ADC에서도 똑같이 적용됩니다. 첫 번째 코드 변화를 음수 영역 하단에서 미리 반 칸 밀어 놓았기 때문에, 입력 전압이 정확히 0V (Zero Analog Input)가 되었을 때 디지털 코드는 100 계단의 왼쪽 끝이나 오른쪽 끝이 아니라 완벽한 발판의 정중앙에 안착하게 됩니다. 덕분에 미세한 전압 노이즈가 들어오더라도 0V 부근에서 코드가 위아래로 쉽게 출렁이지 않고 100이라는 안정된 값을 유지할 수 있습니다.
2의 보수는 최상위 비트(MSB)가 보수화(반전)된 오프셋 바이너리와 완전히 동일합니다.
오직 맨 앞자리인 MSB 딱 1비트만 서로 반대(0 <-> 1)이고 하위 비트들은 완벽히 똑같은 구조를 가집니다.
ADC 내부 코어에서 연산 대칭성이나 설계 편의를 위해 오프셋 바이너리로 데이터를 뽑았더라도, 이를 컴퓨터 시스템이 좋아하는 2의 보수로 바꾸는 데는 디지털 백엔드 출력단에 인버터(NOT 게이트) 하나만 달아주거나, 데이터를 저장하는 D 플립플롭(D-FF)의 뒤집힌 출력단(~Q 포트)에서 선을 한 가닥 따오기만 하면 끝납니다. 면적(Area)과 소모 전력 면에서 비용이 거의 제로에 가깝습니다.
*binary-coded-decimal (BCD)
우리가 쓰는 10진수 숫자를 컴퓨터가 이해하는 이진수로 바꿀 때, 전체 값을 한꺼번에 바꾸는 게 아니라 "10진수 자릿수 하나하나를 4비트짜리 이진수로 딱딱 끊어서 1:1로 매핑"하는 방식입니다.

예를 들어, 10진수 숫자 25가 있다면:
- 일반 이진수(Straight Binary) 방식: 값 통째로 변환 => 11001
- BCD 방식: 십의 자리 2(0010)와 일의 자리 5(0101)를 각각 변환 => 0010 0101
각 데케이드(Decade, 10진수 한 자릿수 구간)마다 16개의 가능한 코드 상태 중 오직 10개만 사용되기 때문에, 이 코드는 상대적으로 비효율적 입니다.
4비트 디지털 공간은 총 2^4 = 16가지 상태를 표현할 수 있습니다. 하지만 BCD는 0부터 9까지 딱 10개 상태만 사용하므로...
'회로설계 > ADC' 카테고리의 다른 글
| ADC - 샘플링 이론(1) ADC구조 (0) | 2026.06.17 |
|---|---|
| ADC - 정적 전달 함수 및 DC오차 (1) | 2026.06.16 |
| ADC - Gray Code (0) | 2026.06.14 |
| ADC - Unipolar Codes (0) | 2026.06.14 |
| ADC - Coding, Quantizing 용어 설명 (1) | 2026.06.14 |