ESP32驱动PCM5102A播放SD卡音频

文章目录

  • 简介
  • 模块参数
  • 功能框图
  • 引脚定义
  • 通信接口和通信数据格式
  • 通信流程
  • 引脚接线
    • ESP32和PCM5102A
    • ESP32和SD模块
  • 主要代码
  • spi.h
  • SD.h
  • Audio.h
  • 实验效果
  • 总结

简介

PCM5102A模块是一款立体声DAC模块、音频数模转换器,内部集成了PCM5102芯片。PCM5102芯片是集成了立体声模数转换器(DAC),可实现出色的动态性能并提升针对时钟抖动的耐受度,凭借 DirectPath™电荷泵技术,PCM510xA器件提供2.1 VRMS中央接地输出(设计人员无需在输出上连接隔直电容)以及传统意义上与单电源线路驱动器相关的外部静音电路。集成了软静音也可以硬件静音,实现120dB静音信噪比(SNR)。集成线路驱动器的每个引脚支持低至1kΩ的负载,从而在性能上超过其他所有基于电荷泵的线路驱动器。器件上集成了具有BCK基准的高性能集成音频锁相环(PLL),可在内部生成SCK,免除了对于系统时钟(通常称为主时钟)的需要,从而实现一个3线制I2S连接并减少了系统电磁干扰(EMI)。智能时钟误差与PowerSense 欠压保护采用双层系统,能够消除喀嗒和噼啪声。相比许多传统的开关电容DAC 架构,能够将带外噪声控制在20dB的较低水平,从而减少下游放大器/ADC中的EMI和混叠。当时钟和电源系统出现错误,器件自动衰减数据并启动模拟静音电路。

在这里插入图片描述

模块参数

模块供电电压:DC3.3V 信噪比SNR:112dB 动态范围:112dB
满量程单端输出:2.1 VRMS采样频率:8KHz~384KHz 主时钟频率:50MHz
音频数据位数:16、24、32 工作环境温度:-40℃~85℃ 音频数据格式:IIS、左对齐
总谐波失真(THD+N at-1dBFS):-93dB
模块尺寸:31.8mm23.7mm6.35mm,带一个3.5mm耳机座

功能框图

在这里插入图片描述

引脚定义

PCM5102A芯片在手册上的引脚定义如下:

在这里插入图片描述
对于PCM5102A模块,我们只需了解其中几个引脚功能:

引脚引脚功能
VCC模拟电源vcc
3.3V数字电源vcc
GND数字/模拟电源地
FLT滤波器选择:低电平 正常延迟 / 高电平 低延迟
DMP44.1kHz采样率去重控制:低电平关 / 高电平开
SCL系统时钟
BCK位时钟
DIN音频数据输入
LCK字时钟
FMT数据传输模式:低电平 I2S模式 / 高电平 左对齐模式
XMT软静音控制:低电平 软静音开 / 高电平 软静音关

此外,我们还用到了SD卡模块,共 6 个引脚(GND、VCC、MISO、MOSI、SCK、CS),GND 为地,VCC 为供电电源,MISO、MOSI、SCK 为 SPI 总线,CS 为片选信号脚。
在这里插入图片描述
下面我们来简单了解下PCM5102A模块的通信接口及数据格式。

通信接口和通信数据格式

音频接口端口是一个三线串行端口,信号包括 LRCK、BCK 和 DIN。BCK 是串行音频比特时钟,用于将串行数据(DIN 上的数据)时钟传入音频接口的串行移位寄存器。串行数据在 BCK 上升沿时被时钟输入到 PCM510xA。LRCK 是串行音频左右声道字时钟。以下是PCM5102A支持的通信数据格式、比特深度以及支持的时钟速率。
在这里插入图片描述
PCM510xA 支持行业标准的音频数据格式,包括标准 I2S 和 左对齐(Left-justified) 格式。

I2S模式:
在这里插入图片描述
左对齐模式:
在这里插入图片描述
数据格式通过 FMT 引脚(引脚 16)选择, 低电平选择 I2S 格式,高电平选择 左对齐 格式。所有格式都要求使用 二进制补码格式的 MSB(最高有效位优先)音频数据,最多支持 32 位 音频数据。

通信流程

通过以上我们了解到PCM5102A是一款数字输入, 模拟量输出,内置DAC的一款模块,这个数字信号输入可以输入音频信号,然后经过DAC转换成模拟音频输出,那么我们可以使用ESP32,将SD卡的数字音频信号读取后,再把数据通过I2S协议传输给PCM5102A模块进行音频输出,这样我们就能通过读取SD卡的音频播放音乐了。

在这里插入图片描述

引脚接线

ESP32和PCM5102A

ESP32PCM5102A
-VCC
3.3V3.3V
GNDGND
GNDFLT、DMP、SCL (这里SCL悬空可能会有干扰,所以接地)
D27BCK
D25DIN
D26LCK
GNDFMT
3.3VXMT

ESP32和SD模块

ESP32SD模块
D5CS
D18SCK
D23MOSI
D19MISO
5VVCC
GNDGND

主要代码

#include "Arduino.h"
#include "Audio.h"
#include "SPI.h"
#include "SD.h"
#include "FS.h"#define SD_CS          5
#define SPI_MOSI      23
#define SPI_MISO      19
#define SPI_SCK       18
#define I2S_DOUT      25
#define I2S_BCLK      27
#define I2S_LRC       26Audio audio;
File audioFile;void setup() {pinMode(SD_CS, OUTPUT);digitalWrite(SD_CS, HIGH);SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);SPI.setFrequency(1000000);Serial.begin(115200);if (!SD.begin(SD_CS)) {Serial.println("初始化 SD 卡失败!");return;}Serial.println("SD 卡初始化成功!");// 打开 MP3文件audioFile = SD.open("/test.mp3");if (!audioFile) {Serial.println("无法打开音频文件!");return;}Serial.println("音频文件已打开!");audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);audio.setVolume(12); // 音量范围:0...21audio.connecttoFS(SD, "test.mp3");}
void loop() {audio.loop();
}

在这个代码中,有几个关键的函数我们来看一下:

spi.h

  1. SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
    作用:初始化 SPI 接口

SPI_SCK(Serial Clock):时钟信号,由主设备产生,主设备通过 SCK 控制数据的传输时序。
SPI_MISO( Master Input Slave Output):主设备数据输入,从设备数据输出,从设备通过 MISO 线将数据发送到主设备。
SPI_MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入,主设备通过 MOSI 线将数据发送到从设备。

  1. SPI.setFrequency(1000000);
    作用:设置 SPI 总线时钟的频率

SD.h

  1. SD.begin(SD_CS);
    作用:初始化 SD 卡片选引脚并挂载文件系统。

SD_CS: SD 卡的片选引脚。

Audio.h

  1. audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    作用:音频时钟引脚,配置音频数据的传输引脚,将音频信号通过硬件接口(如 I2S)发送到音频输出设备

I2S_BCLK:用于同步音频数据传输的时钟信号,此引脚传输音频数据流的时序信息。
I2S_LRC: 左/右声道选择引脚,用于确定音频数据是左声道还是右声道。
I2S_DOUT:数据输出引脚。

实验效果

在这里插入图片描述

总结

本文介绍了通过ESP32驱动PCM5102A实现播放SD卡音频的功能,主要过程是从SD卡读取音频文件,并通过I2S输出给PCM5102A进行播放,另外如果音频播放存在沙沙声或不稳定的情况,可能是接地不良或电源噪声导致的,实验过程中碰到的一个现象是出现噪声,后面发现PCM5102A的时钟线虽然没有用到但是不能悬空,否则会接触不良、音乐失真。此外检查ESP32和PCM5102A的GND连接,并确保使用稳定的电源,必要情况下可以在电源线上加入滤波电容,以实现音频信号的无损传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ProtonBase 教育行业解决方案

01/方案概述 当前,大数据、云计算等技术正加速教育行业的数字化转型,教学模式从线下转向线上,传统教育企业向具有互联网性质的新型教育企业转变。在此背景下,教育企业亟需探索多源数据的融合扩展,以应对复杂的业务场景…

2025年人工智能,自动化与机械工程国际学术会议(AIAME2025)

早鸟通道开启: 2025年人工智能,自动化与机械工程国际学术会议(AIAME2025) 2025 International Conference on Artificial Intelligence, Automation, and Mechanical Engineering 【重要日期】 早鸟征稿截止日期:…

C++ STL 容器系列(三)list —— 编程世界的万能胶,数据结构中的百变精灵

STL系列学习参考: C STL系列__zwy的博客-CSDN博客https://blog.csdn.net/bite_zwy/category_12838593.html 学习C STL的三个境界,会用,明理,能扩展,STL中的所有容器都遵循这个规律,下面我们就按照这三个境…

【AI技术赋能有限元分析应用实践】Abaqus有限元分析到深度学习方法应用全过程——汽车刹车片热力耦合分析

目录 一、项目实现介绍**项目背景****项目目标****项目流程概述****技术融合****项目价值** 二、实现流程**Step 1: 分析问题构建方法,寻找主要分析目标,确定初步目标****Step 2: 使用 Abaqus 完成有限元仿真,后处理并保存数据为 odb 格式***…

从0开始linux(38)——线程(1)线程概念

欢迎来到博主专栏:从0开始linux 博主ID:代码小豪 文章目录 进程与线程线程概念线程的优点线程的独立数据 进程与线程 如果要理解线程,那么进程将会时绕不开的点。首先我们回顾一下我们之前在进程章节当中是如何描述进程的? 进程&…

Doge东哥wordpress主题

Doge东哥wordpress主题是一款专为中小型企业设计的WordPress外贸网站模板,它以其现代、专业且用户友好的界面,为企业提供了一个展示产品和服务的理想平台。以下是对该模板的详细描述: 首页设计概览 首页的设计简洁而不失大气,顶…

keil 5. Flash Timeout. Reset the Target and try it again.

使用官方STM32 ST-LINK Utility 烧写软件 KEIL 5, 设置DFP 包支持FLASH烧写算法 Keil 5, Flash Timeout. Reset the Target and try it again.-CSDN博客

MySQL源码编译

华子目录 下载源码包上传并解压安装cmake环境检测make编译make install安装 部署 下载源码包 下载相应源码包mysql5.7编译安装需要boost库,这里官网下载含boost的源码包https://downloads.mysql.com/archives/community/ 上传并解压 [rootmysql-node1 ~]# du -sh …

【Canvas与化学】枣红实心球钙元素图标

【成图】 120*120 大小图 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>钙元素图标 Draft2</title><style type&qu…

YOLOv8实战无人机视角目标检测

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化&#xff0c;该数据集包含丰富的无人机目标图像…

私有库gitea安装

一 gitea是什么 Gitea是一款自助Git服务&#xff0c;简单来说&#xff0c;就是可以一个私有的github。 搭建很容易。 Gitea依赖于Git。 类似Gitea的还有GitHub、Gitee、GitLab等。 以下是安装步骤。 二 安装sqilite 参考&#xff1a; 在windows上安装sqlite 三 安装git…

【Anaconda】 创建环境报错:CondaHTTPError: HTTP 000 CONNECTION FAILED for url

问题描述 使用 Anaconda 创建环境时报错&#xff1a; CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/free/noarch/repodata.json.bz2> Elapsed: -An HTTP error occurred when trying to retrieve this URL. HTTP errors are o…

十一、快速入门go语言之接口和反射

文章目录 接口:one: 接口基础:two: 接口类型断言和空接口:star2: 空接口实现存储不同数据类型的切片/数组:star2: 复制切片到空接口切片:star2: 类型断言 反射 &#x1f4c5; 2024年5月9日 &#x1f4e6; 使用版本为1.21.5 接口 十、Java类的封装和继承、多态 - 七点半的菜市…

计算机的错误计算(一百七十)

摘要 回复一中学生来信&#xff0c;探讨 MATLAB 关于算式 的计算问题。 在计算机的错误计算&#xff08;一百三十二&#xff09;中&#xff0c;我们探讨了手持式计算器关于算式 的计算问题。一中学生来信询问该算式在数学软件中是否会出错。 例1. 在 MATLAB 中计算 . 首…

【科研】9如何高效阅读和理解学术论文

【科研】9如何高效阅读和理解学术论文 写在最前面一、为什么需要系统的阅读方法&#xff1f;二、阅读论文的11步方法三、实践示例四、常见问题解答五、结语 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ …

RabbitMQ在手动消费的模式下设置失败重新投递策略

最近在写RabbitMQ的消费者&#xff0c;因为业务需求&#xff0c;希望失败后重试一定次数&#xff0c;超过之后就不处理了&#xff0c;或者放入死信队列。我这里就达到重试次数后就不处理了。本来以为很简单的&#xff0c;问了kimi&#xff0c;按它的方法配置之后&#xff0c;发…

计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

《我的世界之武艺时代》——第2话

观众朋友们&#xff0c;大家好&#xff01;欢迎来到《我的世界之武艺时代》的精彩世界。在开始这段奇幻旅程之前&#xff0c;请您花几秒钟的时间为我们的作品点个赞&#xff0c;并将其收藏到您的书架中。这不仅是对我们创作者的最大支持&#xff0c;也是让更多人发现这部作品的…

如何将 GitHub 私有仓库(private)转换为公共仓库(public)

文章目录 如何将 GitHub 私有仓库转换为公共仓库步骤 1: 登录 GitHub步骤 2: 导航到目标仓库步骤 3: 访问仓库设置步骤 4: 更改仓库可见性步骤 5: 确认更改步骤 6: 验证更改注意事项 如何将 GitHub 私有仓库转换为公共仓库 在软件开发领域&#xff0c;GitHub 是一个广受欢迎的…

RPA:电商订单处理自动化

哈喽&#xff0c;大家好&#xff0c;我是若木&#xff0c;最近闲暇时间较多&#xff0c;于是便跟着教程做了一个及RPA&#xff0c;谈到这个&#xff0c;可能很多人并不是很了解&#xff0c;但是实际上&#xff0c;这玩意却遍布文末生活的边边角角。话不多说&#xff0c;我直接上…