MAX98357A_音频输出测试

提示:本文内容仅供学习参考。Author: Jonnie Walker CGC

目录

一、Max98357A是什么?

二、测试步骤

1.硬件

2.软件

总结


一、Max98357A是什么?

MAX98357A/MAX98357B 是 Maxim Integrated(现为 Analog Devices 旗下)生产的一款小型、低成本、数字 PCM 输入式 D 类音频放大器,具有接近 AB 类放大器的音频性能,同时具备 D 类放大器的高效率。

主要特性概览:

  1. 高效能 D 类输出

    • 效率高达 92%(8Ω负载,1W输出)

    • 无需外部输出滤波器(滤波less 设计)

  2. 数字音频接口灵活

    • MAX98357A 支持 I²S 格式

    • MAX98357B 支持 左对齐(Left-Justified) 格式

    • 两者均支持 TDM 格式(最多8通道)

    • 支持 8kHz 至 96kHz 采样率

    • 支持 16/24/32 位数据宽度

  3. 无需外部 MCLK

    • 自动识别时钟方案,简化设计
  4. 低功耗与高集成度

    • 静态电流仅 2.4mA

    • 支持关机模式(<0.6µA)

    • 内置点击与爆音抑制电路

  5. 电源与保护特性

    • 单电源供电:2.5V 至 5.5V

    • 输出功率:3.2W(4Ω,5V)

    • 具备短路保护与热保护

    • 高 PSRR(77dB @ 1kHz)

  6. 封装小巧

    • 提供 9 引脚 WLP(1.345mm × 1.435mm)和 16 引脚 TQFN(3mm × 3mm)封装
  7. 增益可调

    • 在 I²S/左对齐模式下支持 5 档增益(3dB 至 15dB)

    • TDM 模式下固定为 12dB

  8. EMI 抑制

    • 采用扩展频谱调制与边沿控制技术,降低电磁干扰

二、测试步骤

1.硬件

图1

以上为本次测试的使用的硬件原理图。

图2

图2是实体封装

2.软件

代码如下(示例):

cpp 复制代码
/**
 * @file I2S_T.ino
 * @author Jonnie walker iTEM  (CGC)
 * @brief  
 * @version 0.1
 * @date 2025-02-04
 * 
 * @copyright Copyright (c) 2025
 * 
 * 描述:以下为max98357A测试程序
 * 使用控制器ESP32S3进行测试的。
 * 
 */

//#include <Arduino.h>
#include <driver/i2s.h>

// I2S配置引脚
//ESP32S3------------------/
//#define I2S_BCLK   17   
//#define I2S_DIN    18 
//#define I2S_LRCLK  16  

//esp32s3--------1.85----------/
#define I2S_BCLK   34   
#define I2S_DIN    33 
#define I2S_LRCLK  35  





// I2S缓冲区大小
#define I2S_BUFFER_SIZE 512


// 音调频率(Hz)和持续时间(ms)的数组
const int melody[] = {
    262, 250, 294, 250, 330, 250, 349, 250, 392, 500, 0, 250, 392, 500,
    349, 250, 330, 250, 294, 250, 262, 500, 0, 250, 262, 500, 294, 500,
    330, 500, 349, 500, 392, 1000
};


// I2S初始化
void setupI2S() {
  i2s_config_t i2s_config = {
      .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
      .sample_rate = 16000,
      .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
      .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
      .communication_format = I2S_COMM_FORMAT_I2S_MSB,
      .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
      .dma_buf_count = 8,
      .dma_buf_len = I2S_BUFFER_SIZE,
      .use_apll = false,
      .tx_desc_auto_clear = true,
      .fixed_mclk = 0,
  };


  i2s_pin_config_t pin_config = {
      .bck_io_num = I2S_BCLK,
      .ws_io_num = I2S_LRCLK,
      .data_out_num = I2S_DIN ,
      .data_in_num = I2S_PIN_NO_CHANGE,
  };


  // 初始化I2S
  if (i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL) != ESP_OK) {
    Serial.println("I2S驱动初始化失败!");
    while (true);
  }


  if (i2s_set_pin(I2S_NUM_0, &pin_config) != ESP_OK) {
    Serial.println("I2S引脚设置失败!");
    while (true);
  }


  Serial.println("I2S初始化成功");
}


// 播放一个音调
void playTone(int frequency, int duration) {
  if (frequency == 0) {
    delay(duration); // 休止符
    return;
  }


  const int sampleRate = 16000; // 采样率
  const int sampleCount = (sampleRate * duration) / 1000; // 样本总数
  const float amplitude = 1.0 * INT16_MAX; // 振幅(50%)


  for (int i = 0; i < sampleCount; i++) {
    int16_t sample = (int16_t)(amplitude * sin(2.0 * PI * frequency * i / sampleRate));
    size_t bytes_written = 0;
    i2s_write(I2S_NUM_0, &sample, sizeof(sample), &bytes_written, portMAX_DELAY);
  }
}


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


  Serial.println("开始播放《爱丽丝》的旋律");
  for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i += 2) {
    int frequency = melody[i];
    int duration = melody[i + 1];
    playTone(frequency, duration);
  }
  Serial.println("旋律播放完成");
}


void loop() {
  // 主循环无操作
}

使用ArduinoIDE将程序编译下载到ESP32S3启动就会有简单声音播放!程序是非常简单的!


总结

通过此测试过程能让我们快速掌握MAX98357使用情况。在设计电路时有助于参考。此小封装max98357焊接有点麻烦BGA封装,价格上也不贵!!!非常适合使用在项目中。

注:部分内容来自官方文件。

非常感谢你能看到这里,如果文章可以的话非常感谢你的支持!

相关推荐
ursazoo14 小时前
写了一份 7000字指南,让 AI 帮我消化每天的信息流
人工智能·开源·github
冬奇Lab1 天前
一天一个开源项目(第37篇):awesome-selfhosted - 自托管软件资源集合
开源·自动化运维·资讯
冬奇Lab1 天前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab1 天前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
HelloGitHub2 天前
《HelloGitHub》第 119 期
开源·github
冬奇Lab2 天前
一天一个开源项目(第35篇):GitHub Store - 跨平台的 GitHub Releases 应用商店
开源·github·资讯
Bigger3 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
REDcker4 天前
WebCodecs VideoDecoder 的 hardwareAcceleration 使用
前端·音视频·实时音视频·直播·webcodecs·videodecoder
gihigo19984 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习