본문 바로가기
시스템

AD 변환기 연재 4편 — CCD/Linear Sensor와 고속 ADC 실무

by 프레스러쉬 2026. 10. 1.

AD 변환기 연재 4편 — CCD/Linear Sensor와 고속 ADC 실무

부제: TCD1209DG + AD9226 + FPGA 사례로 보는 신호 취득, 타이밍, 차동 입력, 디버깅

이번 편에서 다룰 내용

1~3편에서는 ADC의 기본 원리, 내부 Architecture, Single-Ended/Differential 입력과 Common-Mode 설계를 살펴보았습니다. 4편에서는 이를 실제 Linear Image Sensor 시스템에 적용해 봅니다. Toshiba TCD1209DG CCD Line Sensor의 OS 아날로그 신호를 AD9226 12-bit 65 MSPS ADC로 변환하고, FPGA에서 병렬 데이터를 취득해 Edge Detection까지 연결하는 과정을 하나의 실무 Signal Chain으로 정리합니다.

1. Linear Image Sensor 시스템은 일반 ADC 회로와 무엇이 다른가?

온도나 압력과 같은 저속 센서는 ADC 입력값이 비교적 천천히 변합니다. 반면 Linear Image Sensor는 수천 개의 Pixel이 일정한 Clock에 맞추어 연속적으로 출력됩니다. 따라서 “전압을 정확히 측정한다”는 개념만으로는 부족하고, 어느 Pixel의 값을 언제 Sampling할 것인지가 매우 중요합니다.

일반적인 구조는 다음과 같습니다.

광학 신호
→ CCD/CMOS Linear Sensor
→ Analog Output(OS)
→ Buffer / Level Shift / Differential Driver
→ ADC
→ FPGA
→ Pixel Processing / Edge Detection

즉 ADC는 센서와 FPGA 사이에 위치하지만, 실제 품질은 센서 구동 Clock, OS Settling, ADC Clock Phase, 입력 Driver, PCB Layout이 함께 결정합니다.

2. TCD1209DG의 특징과 신호 구조

TCD1209DG는 2048개의 광검출 요소를 갖는 CCD Linear Image Sensor입니다. 각 Pixel에 축적된 전하가 CCD Shift Register를 통해 순차적으로 이동하고, 최종적으로 OS(Output Signal) 핀에서 아날로그 전압으로 출력됩니다.

이때 OS 파형은 단순한 0 V 기준의 깨끗한 영상 신호가 아닙니다. 실제로는 Reset Level, DC Pedestal, Pixel Signal이 겹쳐 보일 수 있으며, 구동 조건과 조명에 따라 DC Level도 달라질 수 있습니다.

중요: 오실로스코프에서 보이는 OS 전체 Peak-to-Peak 값을 그대로 “유효 영상 신호의 크기”라고 생각하면 안 됩니다. 실제 ADC에서 필요한 것은 유효 Pixel 정보를 보존하면서 ADC 입력 범위에 맞추는 것입니다.

TCD1209DG의 구동에서는 SH, RS, CCD Clock 등의 타이밍이 중요하며, Sensor Clock이 빨라질수록 한 Pixel당 Settling 시간은 짧아집니다. 따라서 20 MHz에 가까운 고속 운전에서는 아날로그 Front-End의 Bandwidth와 Settling 특성이 특히 중요합니다.

3. OS 신호를 ADC에 바로 넣으면 왜 문제가 생길까?

CCD의 OS 출력이 예를 들어 수 V의 DC Level 위에서 움직인다면 이를 그대로 고속 ADC에 연결했을 때 다음 문제가 발생할 수 있습니다.

  • ADC Full-Scale 범위 초과
  • 입력 Common-Mode 범위 이탈
  • ADC 내부 Sample-and-Hold의 순간 입력전류로 인한 Sensor 출력 왜곡
  • 큰 DC 성분 때문에 ADC Dynamic Range 낭비
  • Pixel Reset 성분이 영상 신호보다 크게 보이는 현상

따라서 실무에서는 보통 센서 출력을 그대로 ADC에 연결하지 않고 Buffer → Offset 처리 → Gain 조정 → 필요 시 Differential 변환의 단계를 거칩니다.

4. 권장 Signal Chain — DC 성분을 먼저 다루자

OS 신호에 큰 DC 성분이 있다면 가장 먼저 해야 할 일은 센서의 실제 유효 신호 범위를 파악하는 것입니다. 예를 들어 측정상 OS가 약 1~5 V 사이에서 움직이고 중심이 약 3 V라면, 바로 Gain=1 Differential 변환을 하는 것보다 기준 전압을 빼고 Gain을 맞추는 편이 안정적입니다.

TCD1209 OS
→ High-Z Buffer
→ VBIAS 기준 Offset 제거
→ Gain / Attenuation
→ Fully Differential Driver
→ ADC

예를 들어 3 V를 기준으로 DC Offset을 제거한 뒤 0.5배로 줄이면 ±2 V 범위의 신호를 ±1 V 수준으로 바꿀 수 있습니다. 이후 FDA의 VOCM을 이용해 ADC가 요구하는 Common-Mode에 맞출 수 있습니다.

단순한 직렬 Capacitor를 이용한 AC Coupling도 가능하지만, CCD 영상의 평균 밝기나 Duty 변화에 따라 Baseline Wander가 생길 수 있습니다. 따라서 개발 초기에는 Active Level Shift, Clamp, CDS(Correlated Double Sampling) 방식도 함께 검토할 가치가 있습니다.

5. AD8138을 이용한 Single-Ended → Differential 변환

AD9226과 같은 고속 ADC는 Differential 입력 구조를 효과적으로 사용할 수 있습니다. TCD1209처럼 Single-Ended 센서 출력을 Differential로 바꾸기 위해 AD8138과 같은 Fully Differential Amplifier를 사용할 수 있습니다.

이때 반드시 확인해야 할 두 가지는 Differential Gain과 Common-Mode Voltage입니다.

V_DIFF_OUT ≈ Gain × (V_IN - V_BIAS)

V_CM ≈ (V_OUT+ + V_OUT-) / 2 ≈ V_OCM

예를 들어 VOCM을 2.5 V로 설정하고 ADC에 ±1 V Differential 범위를 넣고 싶다면, 두 출력은 대략 2.0~3.0 V 범위 안에서 서로 반대 위상으로 움직이게 됩니다.

반대로 센서의 1~5 V를 Offset 제거 없이 Gain=1로 바로 변환하면 Differential 신호가 너무 커지고 한쪽 출력은 0 V, 다른 한쪽은 5 V에 가까워지려고 하기 때문에 Driver와 ADC 모두 Saturation 가능성이 커집니다.

6. AD9226 — 12-bit 65 MSPS Pipeline ADC

AD9226은 12-bit, 65 MSPS급의 고속 Pipeline ADC입니다. 내부에 Sample-and-Hold, Pipeline A/D Core, Reference, Digital Correction을 포함하고 있으며, 병렬 12-bit Digital Output을 제공합니다.

이 구조는 Linear Sensor와 잘 맞습니다. Pixel마다 일정한 시점에 Analog 값을 Sampling한 뒤 FPGA로 병렬 Data를 전달할 수 있기 때문입니다.

다만 65 MSPS라는 숫자는 “무조건 65 MHz Sensor Clock까지 완벽하게 읽는다”는 의미는 아닙니다. Sensor Output Settling, Driver Settling, ADC Aperture, Clock Phase를 함께 고려해야 합니다.

실제 설계에서는 ADC Clock Edge가 OS 파형 중 가장 안정적인 구간에 위치하도록 해야 합니다. Reset 직후나 Transition 중간을 Sampling하면 정상 신호가 아니라 Transient를 읽게 됩니다.

7. Pixel Clock과 ADC Clock — 같은 주파수보다 Phase가 더 중요하다

Linear Sensor 시스템에서 가장 흔한 실수 중 하나가 “센서 Clock과 ADC Clock 주파수만 같으면 된다”고 생각하는 것입니다. 실제로는 Sampling Phase가 더 중요합니다.

한 Pixel 기간 안에서도 다음 과정이 발생할 수 있습니다.

  1. Reset
  2. Output Transition
  3. Settling
  4. Stable Pixel Level
  5. 다음 Pixel로 전환

ADC Clock은 이 중 Stable Pixel Level의 중앙에 가까운 지점에서 Sampling하도록 배치해야 합니다.

FPGA가 Sensor Clock과 ADC Clock을 모두 생성한다면 MMCM/PLL, Phase Shift, ODDR/Clocking Resource를 이용해 두 Clock의 상대 위상을 조절하는 것이 가능합니다. 개발 단계에서는 ADC Sampling Phase를 몇 단계로 변화시키면서 Pixel Code의 Noise와 Repeatability가 가장 좋은 지점을 찾는 방법이 매우 효과적입니다.

8. FPGA에서 12-bit ADC 데이터를 받는 방법

AD9226의 12-bit 병렬 출력은 FPGA의 동일 I/O Bank에 배치하고, 출력 Logic Level과 FPGA VCCO를 맞추어야 합니다. 배선은 가능한 한 짧게 하고, Clock과 Data의 Skew를 줄이는 것이 중요합니다.

FPGA 내부에서는 ADC Clock에 맞추어 입력 데이터를 Register에 Capture하는 구조가 기본입니다.

AD9226 D[11:0]
→ FPGA Input Pins
→ Input Register
→ adc_data_reg[11:0]
→ Filtering / Edge Detection

이렇게 해두면 FPGA가 실제로 처리하고 있는 데이터와 Debug 신호가 동일해지므로 ILA를 이용한 검증이 쉬워집니다.

9. Vivado ILA를 이용한 ADC Debug

고속 ADC 시스템에서는 Oscilloscope와 FPGA ILA를 동시에 사용하는 것이 좋습니다. Oscilloscope는 Analog Signal을 보여주고, ILA는 FPGA가 실제로 받은 Digital Code를 보여줍니다.

ILA Probe에는 다음과 같은 신호를 넣으면 유용합니다.

  • adc_data[11:0]
  • adc_clk
  • pixel_valid
  • line_valid
  • edge_valid
  • edge_position

Raw ADC Code가 000h 또는 FFFh 근처에서 계속 붙어 있다면 Input Over-range, Reference 설정, Data Mapping을 의심할 수 있습니다. 파형은 움직이는데 Digital Code가 이상하다면 ADC Clock Phase나 FPGA Capture Timing을 점검해야 합니다.

10. Oscilloscope에서는 어디를 봐야 할까?

Bring-up 단계에서 최소한 다음 Test Point를 준비하는 것을 권장합니다.

Test Point 확인 내용
TP_OS_RAW TCD1209 원본 OS 파형
TP_BUFFER Buffer 후 파형 보존 여부
TP_AIN+ ADC Positive 입력
TP_AIN- ADC Negative 입력
ADC_CLK Sampling Phase와 Jitter

차동 입력을 측정할 때에는 AIN+와 AIN-를 따로 보는 것뿐 아니라 Oscilloscope의 Math 기능을 이용해 AIN+ - AIN-를 확인해야 합니다. 또한 두 입력의 평균이 목표 Common-Mode를 유지하는지도 함께 확인해야 합니다.

11. PCB Layout에서 성능이 결정된다

고속 ADC 시스템은 회로도가 맞아도 PCB Layout이 좋지 않으면 성능이 나오지 않을 수 있습니다. 특히 다음 항목이 중요합니다.

  • Sensor → Buffer → Driver → ADC 경로를 최대한 짧게 배치
  • AIN+ / AIN- Differential Pair의 대칭성 유지
  • ADC Clock을 Analog 입력과 충분히 이격
  • ADC Reference 및 Common-Mode Decoupling을 IC 가까이에 배치
  • Solid Ground Plane을 유지하고 불필요한 Return Path 단절을 피함
  • Digital Output과 Analog Input의 평행 장거리 배선을 피함
  • 전원별 Decoupling Capacitor를 각 Power Pin 가까이에 배치

Analog Ground와 Digital Ground를 무조건 물리적으로 갈라놓는 것보다, 고속 Return Current가 끊기지 않도록 Continuous Ground Plane을 유지하면서 배치로 영역을 분리하는 방식이 더 안정적인 경우가 많습니다.

12. Edge Detector 관점에서 ADC 데이터는 어떻게 사용될까?

ADC에서 얻은 2048 Pixel 값은 단순히 저장하는 것이 목적이 아닙니다. FPGA에서는 이 Pixel Stream을 실시간으로 처리하여 Wafer Edge 위치를 계산할 수 있습니다.

대표적인 처리 순서는 다음과 같습니다.

ADC Pixel Stream
→ Offset / Dark Correction
→ Smoothing Filter
→ Derivative
→ Threshold Crossing
→ Edge Candidate
→ Sub-pixel Interpolation
→ Edge Position

이 방식의 장점은 메인 Controller가 2048개의 Raw Pixel을 모두 처리하지 않아도 된다는 것입니다. FPGA 내부에서 Edge 위치를 계산하고 최종 Result만 전달하면 시스템 부하를 크게 줄일 수 있습니다.

13. 개발 중 자주 만나는 문제와 원인

ADC Code가 0 또는 Full Scale에 붙는다
→ 입력 범위 초과, Reference 설정, Differential Polarity 확인

Analog 파형은 정상인데 Digital Data가 심하게 흔들린다
→ ADC Clock Phase, Clock Jitter, FPGA Input Timing 확인

속도를 높이면 Noise가 급격히 증가한다
→ Sensor OS Settling, Driver Bandwidth, RC Filter Time Constant 확인

한쪽 Differential 출력만 Rail에 가까워진다
→ Gain 과다, Offset 미보정, VOCM 설정 문제 확인

Pixel 위치에 따라 일정한 Pattern Noise가 보인다
→ Clock Coupling, Ground Return, Power Decoupling, Sensor Timing 확인

14. 4편 핵심 정리

  • Linear Sensor 시스템은 ADC의 속도뿐 아니라 Pixel Timing이 핵심이다.
  • CCD OS 신호의 큰 DC Level과 유효 영상 신호를 구분해야 한다.
  • 필요하면 Buffer, Offset 제거, Gain 조정 후 Differential 변환을 한다.
  • ADC Clock은 Sensor Clock의 안정된 Pixel 구간에 맞추어야 한다.
  • FPGA에서는 ADC 데이터를 Clock에 맞추어 먼저 Register하는 것이 기본이다.
  • Oscilloscope와 ILA를 함께 사용하면 Analog/Digital 문제를 분리하기 쉽다.
  • Layout, Reference, Ground, Clock 품질이 실제 ADC 성능을 결정한다.

다음 편 예고 — 마지막 5편

ADC 설계 체크리스트와 문제 해결 가이드

마지막 편에서는 ADC가 정상 동작하지 않을 때 무엇부터 측정해야 하는지, 전원·Reference·Clock·Input Range·Common-Mode·Digital Interface·PCB Layout을 어떤 순서로 점검해야 하는지 실제 Trouble Shooting 순서와 함께 정리합니다. 회로 Review용 체크리스트도 함께 제공합니다.

 

태그
#ADC #AD변환기 #TCD1209DG #AD9226 #AD8138 #CCD #LinearSensor #라인스캔 #고속ADC #FPGA #Vivado #ILA #ADCClock #PixelClock #차동입력 #CommonMode #LevelShift #DCOffset #SignalConditioning #EdgeDetection #WaferAligner #머신비전 #아날로그회로 #PCB설계 #회로디버깅