본문 바로가기

ATmega328p

ATmega328p의 Analog Digital Converter 설명

(모든 내용은 ATmega328P Datasheet를 기반으로 작성됨)

 

✔ 1. 

ADC 주요 특징 (Features)

  • 10-bit 해상도
  • ±2 LSB 절대 정확도
  • 13–260 μs 변환 시간
  • 최대 76.9kSPS 속도
  • 최대 8개의 단일 입력 채널 (ADC0~ADC7)
  • 내부 온도 센서 연결 가능
  • Sample and Hold 회로 탑재
  • 입력 범위: 0 ~ VCC
  • 내부 1.1V 기준 전압 사용 가능
  • 싱글 변환 / 프리런닝 모드
  • ADC 완료 인터럽트 지원
  • ADC 노이즈 캔슬러 기능 제공

✔ 2. 

ADC 구조 개요

 

ATmega328P ADC는 10-bit Successive Approximation 방식(SAR ADC)이며 다음 구성 요소로 이루어짐:

  • 입력 아날로그 멀티플렉서 (MUX)
  • Sample and Hold
  • 내부 1.1V 기준 전압
  • 10-bit DAC 비교기
  • ADCH/ADCL 데이터 레지스터

✔ 3. 

ADC 입력과 전원 요구 조건

 

  • AVCC 연결 조건:
  • 아날로그 입력 회로 설명:

 

 

◼ AVCC

  • ADC는 AVCC 전원핀을 사용
  • 반드시 VCC와 ±0.3V 이내여야 함
  • 노이즈 방지를 위해 LC 필터 권장

◼ 입력 임피던스 권장

  • ADC 입력은 약 10kΩ 이하의 출력 임피던스가 유리
  • 임피던스가 높으면 샘플링 시간이 길어져 정확도 저하

◼ 고주파 성분은 제거해야 함

  • 샘플링 주기 Nyquist 조건에 따라
  • → ADC 클럭(f_ADC)의 1/2 이상 고주파는 제거해야 함
  • 저역 통과 필터(LPF) 권장

✔ 4. 

ADC Voltage Reference 선택

REFS1:REFS0 옵션

REFS1:0기준 전압

00 AREF 핀 (외부전압), 내부 Vref OFF
01 AVCC 사용 (+ AREF 핀에 커패시터 필요)
10 Reserved
11 내부 1.1V 기준 전압 사용

✔ 5. 

ADC Result 정렬(ADLAR)

 

  • ADLAR = 0 → Right Adjust (기본)
  • ADLAR = 1 → Left Adjust
  • 8-bit 해상도만 필요할 때 ADCH만 읽으면 됨

✔ 6. 

입력 채널 선택 (MUX3:0)

 

MUX 값입력 채널

0000 ADC0
0001 ADC1
0111 ADC7
1000 내부 온도센서
1110 1.1V Bandgap
1111 GND

 

✔ 7. 

ADCSRA – ADC Control & Status Register A

 

비트이름설명

ADEN Enable 1: ADC 활성화
ADSC Start Convert 변환 시작
ADATE Auto Trigger Enable  
ADIF ADC Interrupt Flag  
ADIE ADC Interrupt Enable  
ADPS2:0 Prescaler 설정  

prescaler는 ADC 클럭을 CPU 클럭에서 나눔

 

✔ 8. 

ADCSRB – Auto Trigger Source 설정

 

ADTS 값트리거

000 Free Running
001 Analog Comparator
010 INT0
011 Timer0 Compare Match A
111 Timer1 Capture Event

 

✔ 9. 

ADC 변환 과정 (Single Conversion)

 

  1. PRR.PRADC 비트를 0으로 → 전원 차단 해제
  2. ADCSRA.ADEN = 1 (ADC 활성화)
  3. ADCSRA.ADSC = 1 (시작)
  4. 변환 중 ADSC = 1 유지
  5. 변환 완료 시 ADIF = 1, ADSC 자동 0으로 클리어

✔ 10. 

Free Running Mode

  • ADATE = 1
  • ADTS[2:0] = 000
  • 한 번 시작하면 ADC가 계속 반복적으로 변환 수행

✔ 11. 

ADC Noise Reduction Mode (Sleep Mode)

  • CPU를 Sleep 시켜 디지털 노이즈를 감소
  • ADC 변환 정확도 향상
  • Sleep에서 깨어나는 조건 제한적

✔ 12. 

ADC 데이터 레지스터 읽기 순서 (중요!)

  • ADCL 먼저 읽어야 한다는 설명:

규칙

  • ADCL → ADCH 순서로 읽어야 한다
  • ADCL 읽는 순간 레지스터 latch가 걸려 새로운 값 저장 금지
  • ADCH 읽으면 latch 해제됨

✔ 13. 

Digital Input Disable (DIDR0)

  • ADC 핀을 아날로그 입력으로 사용할 때
  • DIDR0의 해당 채널 비트를 1로 설정하는 것이 권장
  • 이유:
    • 디지털 버퍼 제거 → 노이즈 감소
    • 전력 절약