4주차_참고 : DAC(Digital‐to‐Analog Converter) - dhryu60/SmartDevice_2025-1 GitHub Wiki

ESP32 DAC 강의 자료

1. DAC(Digital-to-Analog Converter) 개요

DAC(디지털-아날로그 변환기)는 디지털 데이터를 아날로그 신호(전압)로 변환하는 장치입니다. ESP32는 2개의 8비트 DAC 채널을 제공하며, 오디오 출력, 아날로그 신호 생성, 센서 캘리브레이션 등에 활용됩니다.

2. ESP32의 DAC 특징

  • 내장 DAC 채널: 2개 (DAC1, DAC2)
  • DAC1: GPIO25, DAC2: GPIO26
  • 분해능: 8비트 (0 ~ 255 값 출력, 0V ~ 3.3V 범위)
  • 출력 전압 범위: 0V ~ 3.3V (VDD에 따라 달라짐)
  • 단순한 아날로그 신호 생성 가능 (파형 생성, 전압 제어)
  • PWM 방식과 비교하여 출력이 부드러움

3. DAC와 PWM 비교

항목 DAC (Digital-to-Analog Converter) PWM (Pulse Width Modulation)
출력 방식 순수 아날로그 전압 출력 고속 ON/OFF로 평균 전압 생성
해상도 8비트 (0~255 단계) 최대 16비트 (0~65535 단계)
주파수 제한 제한 없음 1Hz ~ 40MHz 가능
신호 품질 부드러운 아날로그 신호 고주파 성분 포함 (필터 필요)
전압 범위 0V ~ 3.3V 0V ~ VDD (평균 전압)
사용 예 오디오 출력, 정밀 신호 생성 모터 속도 제어, LED 밝기 조절
필터 필요 여부 불필요 저역통과 필터 필요

🔹 사용 추천:

  • DAC 사용부드러운 아날로그 출력이 필요한 경우 (오디오, 정밀 전압 조절)
  • PWM 사용스위칭 방식이 효율적인 경우 (모터, LED 제어)

4. ESP32에서 DAC 사용법

ESP32는 dacWrite() 함수를 통해 DAC 출력을 설정할 수 있습니다.

1) 기본적인 DAC 출력 예제

#define DAC_PIN 25 // DAC1 (GPIO25)
void setup() {
}
void loop() {
    for (int val = 0; val <= 255; val++) {
        dacWrite(DAC_PIN, val); // 0~255 값을 DAC로 출력
        delay(10);
    }
    for (int val = 255; val >= 0; val--) {
        dacWrite(DAC_PIN, val);
        delay(10);
    }
}

설명:

  • dacWrite(pin, value): 지정된 핀에서 0~255 범위의 아날로그 값을 출력합니다.
  • 0은 0V, 255는 3.3V를 의미합니다.
  • 위 코드는 DAC를 이용해 전압을 점진적으로 변화시킵니다.

2) 사인파 출력 (신호 생성)

#include <math.h>
#define DAC_PIN 25
void setup() {
}
void loop() {
    for (int i = 0; i < 360; i++) {
        int value = (sin(i * DEG_TO_RAD) * 127) + 128; // 사인파 값 생성 (0~255 범위)
        dacWrite(DAC_PIN, value);
        delay(5);
    }
}

설명:

  • 사인파 형태의 신호를 생성하여 부드러운 변화를 만듭니다.
  • 아날로그 신호를 출력하여 오디오 또는 센서 캘리브레이션 등에 활용할 수 있습니다.

5. DAC 활용 사례

  1. 오디오 신호 생성 (DAC + I2S 활용 가능)
  2. 정밀한 아날로그 전압 출력 (센서 캘리브레이션, 기준 전압)
  3. 파형 생성 (사인파, 삼각파, 정현파 등)
  4. 전압 기반 아날로그 신호 출력 (전기적 제어 시스템)

6. 주의사항 및 최적화 팁

  • ESP32의 DAC는 8비트 해상도로 제한됨 (고해상도 출력은 I2S-DAC 사용 고려)
  • 출력 전압 범위는 0V ~ 3.3V로 고정됨 (조정 불가)
  • PWM과 다르게 전력 효율이 낮을 수 있음 (대용량 전류 공급 어려움)
  • 고주파 신호 생성에는 적합하지 않음 (I2S 사용 추천)

7. 결론

ESP32의 DAC는 간단한 아날로그 신호 출력에 유용하며, PWM보다 부드러운 신호를 생성할 수 있습니다. 단, 8비트 제한이 있어 고해상도 출력이 필요한 경우 I2S DAC 모듈을 사용하는 것이 더 적합할 수 있습니다. 반면 PWM은 모터 및 LED 제어 등 빠른 ON/OFF 전환이 필요한 경우 더 효율적입니다. 프로젝트 목적에 맞게 DAC과 PWM을 적절히 선택하여 활용하는 것이 중요합니다.

⚠️ **GitHub.com Fallback** ⚠️