@Powersupply(YeungnamUniv.) @NanheeKim @nh9k
질문이 있으면 언제든지 연락주세요!
Please, feel free to contact me, if you have any questions!
github: https://github.com/nh9k
email: kimnanhee97@gmail.com
5/38
* GPIO에서 0과5V 를 DigitalRead(→HIGH OR LOW) 할 수 있지만,
그 사이의 2.5V, 3.3V 등은 AnalogRead로써 가능하다.
6.
[Analog to DigitalConverter]
연속적인 아날로그 신호를 부호화된 디지털 신호로 변환.
이 일을 하는 기계장치는 AD Convertor라고 한다.
6/38
7.
- 실생활, 자연= Analog 신호.
- 온도, 압력, 음성, 영상 신호, 전압 등 실생활에서 연속적인 신호(Analog Signal)를 센서로 측정하여,
컴퓨터에서 처리할 수 있도록 디지털 신호(Digital Signal)화가 필요.
- 자율 주행 자동차나 로봇 등에 측정되는 신호(장애물 인식(적외선 센서), 영상처리 등)는 모두 Analog Signal.
Example
7/38
8.
아날로그 신호를 잡는다일정 시간 간격의 Sample을 고른다.
그래프의 위쪽 or 아래쪽의
이산적 값(숫자)로 변환한다.
2진(디지털) 부호로 바꾼다.
8/38
9.
9/38
① 얼마나 많은표본을 추출할 것인가 (samples/sec) = 표본화 주파수
② 양자화 비트를 얼마나 나눌 것인가 (bits/sample) = 표본당 비트 수
바로 위의 두 가지 요소가 A/D Conversion 과정을 좌우한다.
샘플 수를 많이 취하고 비트 수를 많이 취할수록 음질(화질)이 좋아진다.
→ 같은 정보를 표현할 때 디지털 정보량이 많을수록 디지털 데이터의 품질은 확연히 높아지나,
데이터의 정보량이 기하급수적으로 늘어나게 되고, 전혀 경제적이지 못한 결과를 초래.
10.
10/38
파형을 모두 전송할필요는 없으며 아날로그 신호의 본래의 특성을 잃어 버리지 않는 범위에서
필요한 정보만을 효율적으로 추출하여 전송해야 한다.
표본화란 필요한 정보를 취하기 위해 음성 또는 영상과 같은 연속적인 아날로그 신호를 불연속적인 디지털 신호로 바꾸는 과정,
원 신호를 시간 축 상에서 일정한 주기로 추출하는 것.
(추출된 신호의 진폭 - 표본 값, 이 표본 값은 일정하게 추출되는 간격 - 표본 간격)
그런데 연속적인 아날로그 신호를 불연속적인 디지털 신호로 바꾸면서 그 특성을 잃어버리지 않으려면
얼마나 자주 신호를 추출하여야 할까?
Nyquist 표본화 정리(표본화된 신호의 주파수는 표본화하고자 하는 원신호의 최대 주파수보다 2배 이상이면
원신호를 정확히 복원할 수 있음)를 이용.
음성 신호인 경우 유효 음성 주파수 대역인 300-3.400Hz의 2배인 6,800Hz(1초당 6,800번 추출)로
표본화하면 원 신호를 문제없이 재생할 수 있다.
그러나 실제 많은 채널을 구성할 경우 여파기(다수의 신호 중에서 특정 주파수를 가진 신호만을 선택하거나 또는 제거하는
회로기)의 특성이 이상적이지 못하므로 실제로는 여유를 두어 2배가 넘는 8,000Hz (1초당 8,000번 추출)로 표본화하고 있다.
11.
11/38
→그래프에서 Analog 신호의높이, 레벨을
한정되어 있는 디지털 레벨로 바꾸는 과정
여기서 한정된 값의 수는 AD Converter의 bit 수에 의해 결정.
2bit일 경우, 2의 2승 = 4개의 값 중 하나로 sampling 값 할당.
(Atmega128의 ADC는 10bit 분해능을 가지므로,
2의 10승 = 1024개의 값 중 하나로 sampling 값을 할당해야 한다,)
4개의 값 중간에 있는 값들은 가까운 4개 중 하나의 값으로
근사되는데, 이 과정에서 Error 발생.
• Quantization Error(Noise)
12.
12/38
선형양자화 : 양자화계단의 크기를 일정하게 계단 모양으로 나누는 것.
양자화 잡음이 발생한다면!
→ 양자화 레벨을 세분하면 양자화 잡음 감소 가능.
Ex. AD Converter의 bit 수가 많을수록 sampling을 할당할 수 있는 값이 증가하고,
할당 값 사이의 간격이 좁아져 Error도 감소한다.
→ 비선형 양자화 이용 : 낮은 레벨에서는 양자화 레벨을 조밀하게 하고
높은 레벨에서는 드물게 함으로써 양자화 잡음을 감소시키는 방법,
13.
13/38
비선형 양자화를 이용할때, 왜 낮은 레벨에서는 양자화 레벨을
조밀하게 하고, 높은 레벨에서는 양자화 레벨을 드물게 할까?
14.
14/38
양자화는 몇 단계의한정된 값, 아직 Analog 레벨의 값.
이 값을 0과 1인 디지털 값으로 표현하는 것을 부호화.
2bit AD Converter의 경우 양자화를 통한 4개의 한정된 값에 각각 00 01 10 11의 2진 code를 부여.
부호화 과정을 통한 출력이 최종 AD Converter를 통한 출력.
111
110
101
100
011
010
001
000
17/38
1) 오프셋 오차(offset error)
- 변환 결과가 이상적인 디지털 값에서 일정한 양만큼
벗어난 상태.
- 대처방안 : 변환된 디지털 값에 일정치 값을 더하거나
빼서 교정한다.
2) 이득 오차 (Gain error)
- 변환 결과가 이상적인 디지털 값에서 일정한 비율만큼
벗어난 상태
- 대처방안 : 변환된 디지털 값에 일정치 값을 곱하거나
나누어서 교정한다.
18.
18/38
3) 비선형 오차(Integralnon-linearity error)
- 변환결과가 교정될 수 없는 상태
- 대처방안 없음
4) 차등 비선형 오차(Differential-linearity error)
-변환 결과가 교정될 수 없는 상태
- 대처방안 없음
19.
AVR에서 ADC를 사용하기위해 Atmel Studio에 작성할 소스코드를 공부해야 한다.
ADC에 사용되는 Register의 각 Bit 역할을 알아야, ADC를 진정 잘 사용 가능하다.
또한 AVR ATmega128에서 ADC 특징을 잘 공부해두면, 다음에 AD컨버터를 구입할 때 많이 도움될 것이다.
참고 : ATmega128의 Datasheet 링크
19/38
ATmega128
21/38
(1) 10Bit 분해능(15kSPS)
(2) ±2LSB 정확도
// [least significant bit ] : 2진수의 데이터에서 가장 낮은 자리(가장 오른쪽)의 비트.
(3) 13 - 260μs 변환 시간
(4) 8채널의 멀티플렉스된 단일 입력
//아날로그 멀티플렉서란, 몇 개의 인가된 아날로그 입력가운데 하나를 선택하여 출력하는 회로.
(5) 7채널의 차동입력
// 차동입력이란, 두 개의 입력단자간 전압 차이를 읽는 것(비교).
(6) 샘플/홀드회로 탑재
// 시시각각 변환되어가는 아날로그 전압의 어느 순간 값을 샘플링하여 이것을 일정 시간 유지하는 회로.
(7) 프리 런닝 모드와 단일 변환 모드 사용 가능
(8) 0~ VCC : ADC 입력 전압 범위, 선택 가능한 2.56V의 ADC Reference Voltage,
ADC 결과값의 좌정렬, ADC Interrupt 포함, Sleep Mode Noise Canceler 포함
22.
n
10230
5V
2.5V
512
V
V = 5/1023.0*n
22/38
Q.‘10bit분해능’이란 무슨 의미일까?
A. 2의 10승 = 1024 분해능 : 양자화나 부호화 과정에서 사용되는 세로축의 열쇠!
어느 범위내의 아날로그 입력 (FSR – Full Scale Range)을 몇 비트의 디지털 값(비트 수)으로 변환할 수 있는가,
즉, 디지털 출력의 1비트에 대응하는 아날로그 입력의 변화량을 얼마나 담아낼 수 있는지를 말한다.
ATmega128
23.
23/38
앞으로 공부할 것은실질적으로 ADC를 할 때,
사용할 ATMEGA128의 레지스터 3가지이다.
이때 레지스터란 뭘까?
24.
24/38
ADMUX – 채널설정과 기준전압 설정
ADCSRA – ADC사용과 동작 모드선택, 클럭 분주비 설정
ADCL/ADCH – 데이터 저장
3
(ADMUX 레지스터의 비트)
-오른쪽 정렬
(ADMUX 레지스터의 비트)
- 왼쪽 정렬
ADCL, ADCH (ADC Data Register, ADC 데이터 레지스터)
28/38
왜 두 개의 레지스터를 사용할까?
*레지스터가 8비트인 경우, 그보다 긴 데이터를 저장하기 위해 8비트 레지스터 여러 개를 묶어서 사용.
ADCL(LOW)만으로 데이터 저장공간이 부족하면 ADCH(HIGH)를 이용한다.
29.
* Bit 7:6(기준 전압 설정 비트) - ADC변환에 사용하는 기준전압 선택. (ADC 변환 중 영향 X).
* Bit 5 (ADC 결과 정렬 비트) - 1→왼쪽 정렬로 데이터 레지스터에 저장,
0→오른쪽 정렬
(ADC 변환 중 영향 O)
1
(ADC 멀티플렉서
선택 레지스터)
29/38
30.
30/38
ADC는 Analog Signal(시간에따라 변화하는 전압)을 기준전압과 비교하여 순간적으로 기준전압의
몇 퍼센트인가를 계산하여 그 퍼센트 값을 출력으로 내보낸다.
기준 전압을 등분하여 나누어 놓고 계산한 퍼센트가 어느 등급에 가까운가를 비교하여
정해진 등급으로 출력하게 되는 것이다.
0에서부터 기준전압까지 나누는 등급의 수는 2의 n제곱으로 나뉘고 이를 해상도라 한다.
ATMEGA128은 8비트와 10비트 두 종류가 있고, 각각 256등분, 1024등분한다.
그리고 비교하는 횟수에 따라 정밀도가 차이가 난다.
REF 전압 선택 추가 설명이 필요할 경우 - 링크
31.
* Bit 4:0 (Analog 채널 및 이득 선택 비트) - 아날로그 채널 선택 가능. (ADC 변환 중 영향 X)
1
31/38
32.
2
(ADC 제어 및상태
레지스터)
* Bit 7 (ADC Enable) – ADC 사용하기 위해 이 비트에 1사용, 0은 ADC 꺼짐.
* Bit 6 (ADC Start Conversion) – 이 비트에 1쓰면
(단일 변환 모드 – ADC 변환 시작, Free Runninh Mode는 첫변환 시작, 반복),
ADC변환 중 1로 SET, 변환 종료 동시 0으로 SET
* Bit 5 (ADC Free Running Select) - 1SET→ 프리 런닝 모드, 0SET → 단일 변환 모드
ADC는 계속해서 입력을 샘플링, 결과를 데이터 레지스터에 저장.
* Bit 4 (ADC Interrupt Flag) – ADC변환완료와 결과가 레지스터에 저장 → 이 비트 SET됨.
ADIE비트와 SREG의 I비트가 SET → ADIF비트가 SET 될 때 인터럽트가 CPU에 걸림.
ADIF비트는 해당 인터럽트 서비스 루틴이 수행될 때 자동 RESET됨.
* Bit 3 (ADC Interrupt Enable) - 이 비트와 레지스터 SREG의 I비트가 SET
→ ADIF비트가 SET될 때 인터럽트가 CPU에 걸림.
32/38