본문 바로가기

개발자/부품

max98357 gain slot 설정 방법

반응형

🅿️ MAX98357 앰프 모듈의 게인(Gain) 설정은 GAIN(또는 GAIN_SLOT) 핀을 GND, VDD, 플로팅(연결 안 함) 상태로 두거나 100kΩ 저항을 연결하는 5가지 방식으로 조절할 수 있습니다. 

 

 

게인 설정 방법 (I2S 모드 기준)
  • 15dB: GAIN 핀과 GND 사이에 100kΩ 저항 연결
  • 12dB: GAIN 핀을 GND에 직접 연결 (기본값 중 하나)
  • 9dB: GAIN 핀을 아무것도 연결하지 않고 플로팅(뜸) 상태로 유지 (기본 설정)
  • 6dB: GAIN 핀을 VDD(전원)에 직접 연결
  • 3dB: GAIN 핀과 VDD 사이에 100kΩ 저항 연결
주의 사항
  • TDM 모드에서는 게인이 12dB로 고정되며, GAIN_SLOT 핀의 역할이 채널 선택(Slot Selection)용으로 바뀝니다.
  • 오디오가 재생되는 도중에 게인 핀 설정을 변경하면 팝(pop) 노이즈가 발생할 수 있으므로 전원이 꺼진 상태에서 연결을 변경해야 합니다.
만약 사용 중인 모듈의 종류(예: Adafruit 등)연결하려는 마이크로컨트롤러(ESP32, 아두이노 등)를 알려주시면 회로 연결을 더 자세히 도와드릴 수 있습니다.

 

 

🅿️ MAX98357은 하드웨어 볼륨 제어 핀이 없기 때문에, 볼륨 조절을 하려면 I2S 오디오 데이터를 전송하는 마이크로컨트롤러(MCU) 소스 코드에서 디지털 오디오 샘플 값을 계산하여 조절해야 합니다.

1. 소프트웨어 볼륨 조절 원리
디지털 오디오 데이터(PCM 샘플)에 0과 1 사이의 볼륨 계수(Volume Scale)를 곱하여 신호의 크기를 줄입니다.
  • 16비트 오디오 샘플 값의 범위는 -32768에서 32767입니다.
  • 볼륨을 50%로 줄이려면 각 샘플 값에 0.5를 곱합니다.
2. 플랫폼별 구현 방법
📌 아두이노 (ESP32 ESP32-A2DP 라이브러리 사용 시)
블루투스 오디오 등을 구현할 때 라이브러리 자체에서 제공하는 볼륨 함수를 사용합니다.

 

#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;

void setup() {
    a2dp_sink.start("MyMusicSpk");
    a2dp_sink.set_volume(70); // 0부터 100 사이의 값으로 볼륨 조절
}

 

📌 아두이노 standard I2S 라이브러리 (직접 데이터 전송 시)
출력하기 직전의 RAW 오디오 데이터에 볼륨 가중치를 곱해줍니다.
 
int16_t sample = get_audio_sample(); // 오디오 소스에서 16비트 샘플 읽기
float volume = 0.5; // 볼륨 50% 설정

// 샘플 값에 볼륨을 곱한 뒤 I2S로 전송
int16_t adjusted_sample = (int16_t)(sample * volume);
i2s_write(I2S_NUM_0, &adjusted_sample, sizeof(adjusted_sample), &bytes_written, portMAX_DELAY);
 
📌 라즈베리파이 (ALSA 믹서 이용)
라즈베리파이에 MAX98357을 연결한 경우, 내장된 소프트웨어 볼륨 컨트롤러(softvol)를 설정하여 alsamixer 명령어 또는 Python 코드로 조절할 수 있습니다.
  1. /etc/asound.conf 파일에 softvol 가상 장치 추가 설정을 합니다.
  2. 터미널에서 다음 명령어로 볼륨을 조절합니다:
amixer sset 'Master' 70%

 

 

3. 하드웨어 세팅 팁
소프트웨어로 볼륨을 줄이면 디지털 해상도(비트 심도)가 낮아져 음질이 저하될 수 있습니다.
따라서 MAX98357의 GAIN 핀 설정을 최대한 낮게(예: 3dB 또는 6dB) 하드웨어로 고정해 두고, 소프트웨어 볼륨을 최댓값에 가깝게 사용하는 것이 화이트 노이즈를 줄이는 데 가장 유리합니다. ** (주의: 소스 데이터를 직접 곱하여 볼륨을 줄이는 방식은 비트 심도가 낮아져 오디오 왜곡이나 음질 저하가 발생할 수 있습니다. 따라서 MAX98357의 하드웨어 GAIN 핀은 가급적 낮게(3dB 또는 6dB) 하드와이어링하고, 소프트웨어 볼륨은 최댓값에 가깝게 사용하는 것이 음질 유지에 유리합니다.)
현재 어떤 마이크로컨트롤러(ESP32, 아두이노, 라즈베리파이 등)어떤 라이브러리를 사용하여 오디오를 재생하고 계시는지 알려주시면 맞춤형 코드를 안내해 드릴 수 있습니다.

 

🅿️ MAX98357은 하드웨어 방식의 전용 볼륨 조절 핀이 없기 때문에, 하드웨어로 볼륨을 조절하려면 오디오 신호선(I2S)이 아닌 스피커 출력 단자에 가변 저항(포텐쇼미터)을 연결하거나, 볼륨 조절 기능이 있는 앰프를 전단에 추가해야 합니다.

1. 스피커 출력단에 가변 저항 연결 (가장 간단한 방법)

 

MAX98357의 스피커 출력선(OUT+, OUT-) 중 하나 또는 양쪽에 가변 저항을 직렬로 연결하여 전류량을 제한하는 방식입니다.
  • 준비물: 권장 10Ω ~ 50Ω 사이의 고전력용(최소 1W~2W 이상) 가변 저항
  • 결선 방법: OUT+ 핀 → 가변 저항의 1번 핀 → 가변 저항의 2번(가운데) 핀 → 스피커의 + 단자
  • 주의점: 일반적인 회로 실험용 가변 저항(10kΩ 등)은 저항값이 너무 높아 소리가 아예 안 나거나, 허용 전력이 낮아 앰프 출력(최대 3.2W)을 버티지 못하고 타버릴 수 있습니다. 반드시 와이어wound(권선형)나 전력용 가변 저항을 써야 합니다.

2. 하드웨어 볼륨 제어가 가능한 DAC/앰프 모듈로 교체 (추천)

 

MAX98357 대신 볼륨 조절 다이얼(노브)이 기본 장착되어 있거나, 하드웨어 볼륨 조절 핀을 제공하는 다른 칩셋 모듈을 사용하는 것이 회로 안정성과 음질 측면에서 가장 좋습니다.
  • MAX98357 + 아날로그 앰프 조합: MAX98357의 출력은 디지털 필터링이 없는 Class-D 방식이라 아날로그 볼륨 처리가 까다롭습니다. 오디오 소스단에서 아날로그 가변 저항 제어를 하려면 PCM5102A(I2S DAC) 모듈을 사용하여 아날로그 신호로 바꾼 뒤, 일반 10kΩ 가변 저항을 거쳐 PAM8403 같은 아날로그 앰프로 출력하는 구조가 표준적입니다.
  • 대체 칩셋 활용: 볼륨 조절 전용 핀이 탑재된 I2S 앰프 칩셋(예: MAX98358 또는 일부 오디오 코덱 칩)으로 회로를 변경합니다.

3. GAIN 핀에 로터리 스위치 연결 (단계별 볼륨 조절)

 

부드러운 볼륨 조절은 불가능하지만, 1번 선선에서 설명드린 하드웨어 게인 설정을 5단계 스위치로 만들어 물리적인 볼륨 버튼처럼 사용하는 방법입니다.
  • 로터리 스위치나 점퍼 핀을 이용하여 GAIN 핀의 연결 상태를 3dB / 6dB / 9dB / 12dB / 15dB 조건으로 물리적으로 바꾸어 줍니다.
  • 주의점: 전환 시 "툭, 툭" 하는 팝 노이즈가 발생할 수 있습니다.

현재 구상 중인 프로젝트에서 어떤 하드웨어 자재(가변 저항 등)를 가지고 계시는지, 아니면 부품 변경이 가능한 상황인지 알려주시면 회로도나 구체적인 부품을 추천해 드릴 수 있습니다.
 

🅿️ MAX98357 I2S 3W 클래스 D 앰프 모듈은 I2S 디지털 오디오 입력을 받아 스피커를 구동하는 고효율 증폭기로서, MAX98357A 칩셋 탑재, 3.2W 출력(4Ω, 5V), 마스터 클럭(MCLK) 불필요 등의 특징을 가집니다. 라즈베리 파이나 ESP32 같은 마이크로컨트롤러와 연결해 소형 오디오 프로젝트에 유용하게 쓰입니다.

주요 기술 사양
  • 동작 전압: 2.5V ~ 5.5V DC
  • 출력 전력: 4Ω 스피커 연결 시 최대 3.2W (5V 공급, 10% THD), 8Ω 시 1.8W
  • 지원 샘플링 레이트: 8kHz ~ 96kHz (16/32-bit 해상도)
  • 채널 설정: 기본 모노(L+R 믹스), 점퍼 설정을 통해 좌측 또는 우측 채널 단독 선택 가능
  • 게인(Gain) 조절: 3dB ~ 15dB 범위에서 설정 가능 (기본 9dB) 
호환 및 연결성
  • 지원 기기: 라즈베리 파이, ESP32, 아두이노 제로 등 I2S 출력을 지원하는 보드
  • 인터페이스 핀: BCLK(비트 클럭), LRC(워드 클럭), DIN(데이터 입력), GAIN, SD_MODE(종료/채널 모드)
모듈을 연결할 사용 중인 보드(예: 라즈베리 파이 또는 ESP32)를 알려주시면 구체적인 핀 연결 방법과 예제 코드를 안내해 드릴 수 있습니다.
 
 
ESP32-S3와 MAX98357A 모듈의 핀 연결 방법 및 아두이노 IDE 기반의 I2S 오디오 재생 예제 코드는 다음과 같습니다. ESP32-S3는 내부적으로 I2S 전용 하드웨어가 내장되어 있어, 임의의 GPIO 핀을 설정하여 오디오 신호를 보낼 수 있습니다.
 
🔌 핀 연결 방법 (Wiring Diagram)
 
MAX98357A 모듈의 전원은 안전한 동작을 위해 5V(VIN)에 연결하는 것이 출력(3.2W) 확보에 가장 유리합니다. ESP32-S3의 GPIO 핀은 예제 코드와 일치하도록 아래와 같이 연결해 주세요.
 
 

 

 

💻 아두이노 예제 코드
ESP32 공식 아두이노 코어(v3.x 버전 이상 적용)에서 지원하는 표준 ESP_I2S 라이브러리를 사용한 사인파(Sine Wave) 오디오 비프음 출력 예제입니다. 별도의 외부 라이브러리 설치 없이 바로 컴파일이 가능합니다.
 
 
 
#include "ESP_I2S.h"
#include <math.h>

// I2S 핀 설정 (ESP32-S3 사양에 맞게 지정)
#define I2S_BCLK_PIN  4
#define I2S_LRC_PIN   5
#define I2S_DIN_PIN   6

// 오디오 설정
#define SAMPLE_RATE   44100  // 샘플링 레이트 (44.1kHz)
#define WAVE_FREQ     440    // 생성할 주파수 (440Hz = '라' 음)
#define VOLUME        3000   // 볼륨 크기 (최대 32767)

I2SClass i2s;

void setup() {
  Serial.begin(115200);

  // I2S 구성 설정
  i2s.setPins(I2S_BCLK_PIN, I2S_LRC_PIN, I2S_DIN_PIN, -1, -1); // (BCLK, WS, DOUT, DIN, MCLK)
  
  // 마스터 모드, 44.1kHz, 16비트, 스테레오(또는 모노) 설정
  // MAX98357A는 스테레오 데이터를 받아 자동으로 다운믹스하거나 채널을 선택합니다.
  if (!i2s.begin(I2S_MODE_STD, SAMPLE_RATE, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO)) {
    Serial.println("I2S 초기화 실패!");
    while (1);
  }
  Serial.println("I2S 초기화 성공! 오디오 출력을 시작합니다.");
}

void loop() {
  // 1초 동안 440Hz 사인파 오디오 데이터 생성 및 출력
  int samples_count = SAMPLE_RATE; 
  for (int i = 0; i < samples_count; i++) {
    // 사인파 계산
    int16_t sample = (int16_t)(VOLUME * sin(2 * M_PI * WAVE_FREQ * i / SAMPLE_RATE));
    
    // 스테레오 포맷에 맞추어 Left, Right 채널에 각각 데이터 전송
    int16_t packet[2] = { sample, sample }; 
    
    // I2S 버퍼로 데이터 쓰기
    i2s.write((uint8_t*)packet, sizeof(packet));
  }
  
  delay(1000); // 1초 대기 후 반복
}
 
 
 
💡 동작 확인 및 팁
  1. 스피커 연결: MAX98357A 모듈의 출력 단자(+, -)에 4Ω 또는 8Ω 소형 스피커를 단단히 연결해야 소리가 들립니다.
  2. 노이즈 발생 시: 전원 공급이 불안정하면 지이잉하는 노이즈가 발생할 수 있습니다. ESP32-S3의 5V 전원 공급 능력이 부족하다면 외장 5V 전원을 모듈에 직접 인가하고 GND를 공통으로 묶어주세요.
이 코드를 업로드하면 스피커에서 1초 주기로 삐- 하는 비프음이 반복해서 출력됩니다. 혹시 단순한 효과음 발생 외에 MP3 파일 재생이나 인터넷 라디오 스트리밍 같은 구체적인 기능 구현을 원하시나요? 필요하신 최종 프로젝트 목적을 말씀해 주시면 최적의 라이브러리(예: ESP32-audioI2S) 조합을 추가로 추천해 드리겠습니다.
 
 
 
 
 
 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩