提示:本文内容仅供学习参考。Author: Jonnie Walker CGC
目录
一、Max98357A是什么?
MAX98357A/MAX98357B 是 Maxim Integrated(现为 Analog Devices 旗下)生产的一款小型、低成本、数字 PCM 输入式 D 类音频放大器,具有接近 AB 类放大器的音频性能,同时具备 D 类放大器的高效率。
主要特性概览:
-
高效能 D 类输出
-
效率高达 92%(8Ω负载,1W输出)
-
无需外部输出滤波器(滤波less 设计)
-
-
数字音频接口灵活
-
MAX98357A 支持 I²S 格式
-
MAX98357B 支持 左对齐(Left-Justified) 格式
-
两者均支持 TDM 格式(最多8通道)
-
支持 8kHz 至 96kHz 采样率
-
支持 16/24/32 位数据宽度
-
-
无需外部 MCLK
- 自动识别时钟方案,简化设计
-
低功耗与高集成度
-
静态电流仅 2.4mA
-
支持关机模式(<0.6µA)
-
内置点击与爆音抑制电路
-
-
电源与保护特性
-
单电源供电:2.5V 至 5.5V
-
输出功率:3.2W(4Ω,5V)
-
具备短路保护与热保护
-
高 PSRR(77dB @ 1kHz)
-
-
封装小巧
- 提供 9 引脚 WLP(1.345mm × 1.435mm)和 16 引脚 TQFN(3mm × 3mm)封装
-
增益可调
-
在 I²S/左对齐模式下支持 5 档增益(3dB 至 15dB)
-
TDM 模式下固定为 12dB
-
-
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封装,价格上也不贵!!!非常适合使用在项目中。
注:部分内容来自官方文件。
非常感谢你能看到这里,如果文章可以的话非常感谢你的支持!
