[아두이노] 아날로그 데이터의 입출력

김우경·2021년 4월 24일
0

아두이노

목록 보기
3/9

디지털 데이터와 아날로그 데이터

  • 아날로그 데이터 : 시간에 대해서 연속적

AD converter

  • 아날로그 데이터 -> 디지털 데이터
  • 센서 신호 읽을때 사용
  • 해상도와 범위 지정 : 이에 따라 디지털 신호 1당 전압의 차이가 다름

ATmega328에서의 ADC

  • ADC 채널 : 6개의 입력이 MUX에
  • 해상도 : 10비트 - 0~1023 사이의 값
    -> 5V 기준 4.89mV의 차이
  • 기준 전압 : 1023에 해당하는 전압
    • AREF : 외부 아날로그 기준 전압 -> 아날로그의 기준 결정
    • AVCC : 아날로그 VCC
    • 1.1V : 내부 1.1V의 기준

analogRead()

int analogRead(uint_t pin)

  • A/D 컨버터를 통해서 read
  • pin : 핀번호
  • 반환값 : 0~1023 사이의 정수값

analogReference()

void analogReference(uint8_t type)

  • 기준 전압의 설정
  • type :
    • DEFAULT : AVCC 5V 기준
    • INTERNAL : 내부 1.1V 기준 -> 들어오는 전압이 1.1V 이상이면 고장날 수도 있다
    • EXTERNAL : AREF에 인가된 0~5V 사이의 기준 전압

-> ADC의 전압에 맞게 적절히 전압분배/증폭채널을 이용한다.

D/A converter

  • 디지털 신호 -> 아날로그 신호
  • 아두이노 안에는 내장되어 있지 않음
  • 표시장치 또는 구동기 등 제어
  • true analog 신호 만들기 위해 사용

ATmega328에서의 DAC

  • 없음
    -> 직접적인 아날로그 신호 출력 불가능
  • PWM과 콘덴서를 이용해서 아날로그 신호 생성 가능 : 100% 정확하지는 않다
  • 외부 DAC 칩을 이용해서 아날로그 신호 만들 수 있음

analogWrite()

: 아두이노에는 D/A 컨버터가 없기 때문에 PWM을 이용한다
-> duty를 이용해서 0~5V 사이의 가상 신호를 만들어냄
void analogWrite(uint8_t pin, int value)

  • pin : 핀번호
  • value : 듀티 사이클 -> 0~255 사이의 값
  • 반환값 : x
  • PWM 신호를 이용한 단위 analog 신호
    -> LED의 밝기조절, 모터 속도 조절에 사용
  • 0~255 사이의 값 출력 : 0%~100% 사이의 듀티 사이클에 해당됨
    -> 0%는 0V, 100%는 5V지만 50%가 2.5V라고 확신할 수는 없음
  • digital pin 3,5,6,9,10,11만 PWM 출력 가능

PWM으로 LED 밝기 조절

: LED의 밝기는 비선형이므로 밝기와 출력이 정확히 선형적 관계를 가지지 x

-> 중간 밝기가 linear하게 바뀌지는 않음
-> 선형적으로 사용하려면 fitting이 필요

analogRead()로 LED 밝기 조절


int value = analogRead(A3)
-> 이때 들어오는 값은 0~1023
듀티 사이클(0~255)와의 mapping을 위해 y=ax+b꼴의 1차 함수 필요

profile
Hongik CE

0개의 댓글