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.rhkb.cn/news/481562.html

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

相关文章

【人工智能】Python常用库-TensorFlow常用方法教程

TensorFlow 是一个广泛应用的开源深度学习框架,支持多种机器学习任务,如深度学习、神经网络、强化学习等。以下是 TensorFlow 的详细教程,涵盖基础使用方法和示例代码。 1. 安装与导入 安装 TensorFlow: pip install tensorflow…

【设计模式系列】解释器模式(十七)

一、什么是解释器模式 解释器模式(Interpreter Pattern)是一种行为型设计模式,它的核心思想是分离实现与解释执行。它用于定义语言的文法规则,并解释执行语言中的表达式。这种模式通常是将每个表达式抽象成一个类,并通…

【查询目录】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

设计模式:11、迭代器模式(游标)

目录 0、定义 1、迭代器模式的四种角色 2、迭代器模式的UML类图 3、示例代码 4、迭代器的next()方法与集合的get(int index)方法的效率对比(LinkedList为例) 0、定义 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象…

Web开发基础学习——通过React示例学习模态对话框

Web开发基础学习系列文章目录 第一章 基础知识学习之通过React组件学习模态对话框 文章目录 Web开发基础学习系列文章目录前言一、创建新的 React 应用二、 创建模态对话框组件三、修改 App.js四、 添加样式五、启动应用六、访问应用总结 前言 模态对话框(Modal D…

Unity XR Interaction Toolkit 开发教程:抓取交互【3.0以上版本】

获取完整课程以及答疑,工程文件下载: https://www.spatialxr.tech/ Unity XR Interaction Toolkit 系统化开发教程:https://www.spatialxr.tech/course/5 视频说明链接:抓取交互课程介绍【全球最新 Unity VR 系统化入门开发教程…

科技为翼 助残向新 高德地图无障碍导航规划突破1.5亿次

今年12月03日是第33个国际残疾人日。在当下科技发展日新月异的时代,如何让残障人士共享科技红利、平等地参与社会生活,成为当前社会关注的热点。 中国有超过8500万残障人士,其中超过2400万为肢残人群,视力障碍残疾人数超过1700万…

OGRE 3D----4. OGRE和QML共享opengl上下文

在现代图形应用开发中,OGRE(Object-Oriented Graphics Rendering Engine)和QML(Qt Modeling Language)都是非常流行的工具。OGRE提供了强大的3D渲染能力,而QML则用于构建灵活的用户界面。在某些应用场景中,我们需要在同一个应用程序中同时使用OGRE和QML,并且共享OpenGL…

YOLOv9改进,YOLOv9引入TransNeXt中的ConvolutionalGLU模块,CVPR2024,二次创新RepNCSPELAN4结构

摘要 由于残差连接中的深度退化效应,许多依赖堆叠层进行信息交换的高效视觉Transformer模型往往无法形成足够的信息混合,导致视觉感知不自然。为了解决这个问题,作者提出了一种聚合注意力(Aggregated Attention),这是一种基于仿生设计的token混合器,模拟了生物的中央凹…

坐标系变换

1 Clark变换 三相对称电压表达式为: 将三相电压用相量的形式表达出来,并用欧拉公式(eix(cosxisinx))写成三角函数的形式: 同时,三相电压矢量空间合成向量可表示为: 三相电压合成矢量幅值为相电…

Java 上机实践10(常用实用类)

(大家好,今天分享的是Java的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 Plug:程序实现方法一(记事本) 方法二(IDEA) 实验一&…

【JavaEE初阶 — 网络编程】Socket 套接字 & UDP数据报套接字编程

1. Socket套接字 1.1 概念 Socket 套接字,是由系统提供用于网络通信的技术,是基于TCP / IP协议的网络通信的基本操作单元。基于 Socket 套接字的网络程序开发就是网络编程。 1.2 分类 Socket套接字主要针对传输层协议划分为如下三类&#x…

MacOS 如何连接 Linux NFS 服务器

以 Ubuntu 为例。 Ubuntu 服务器端设置 1. 进入 root 权限,安装 NFS 服务: apt-get update apt-get install nfs-kernel-server2. 创建共享目录: mkdir /data chown nobody:nogroup /data chmod 777 /data3. 配置 /etc/exports 文件: vi …

23种设计模式-原型(Prototype)设计模式

文章目录 一.什么是原型设计模式?二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图: 原型设计模式类图 一.什么是原型设计模式? 原型模式(Prototype…

Docker Buildx 与 CNB 多平台构建实践

一、Docker Buildx 功能介绍 docker buildx 是 Docker 提供的一个增强版构建工具,支持更强大的构建功能,特别是在构建多平台镜像和高效处理复杂 Docker 镜像方面。 1.1 主要功能 多平台构建支持 使用 docker buildx,可以在单台设备上构建…

C# 数据类型详解:掌握数据类型及操作为高效编码奠定基础

本文将带你深入了解C#中各种数据类型的特点、用途和最佳实践,让你不仅能熟练运用基本类型,还能掌握如何在实际项目中做出最合适的选择。 目录 C#基本语法 C#数据类型 C#类型转换 C#变量常量 C#基本语法 在学习C#之前我们要先知道C#的基础构建是由哪些…

新型大语言模型的预训练与后训练范式,谷歌的Gemma 2语言模型

前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内的完整…

Istio笔记01--快速体验Istio

Istio笔记01--快速体验Istio 介绍部署与测试部署k8s安装istio测试istio 注意事项说明 介绍 Istio是当前最热门的服务网格产品,已经被广泛应用于各个云厂商和IT互联网公司。企业可以基于Istio轻松构建服务网格,在接入过程中应用代码无需更改,…

uniapp运行时,同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示。

遇到自定义基座调试时安装无效或无反应?本文教你用 ADB 工具快速解决:打开 USB 调试,连接设备,找到应用包名,一键卸载问题包,清理干净后重新运行调试基座,轻松搞定! 问题场景&#…

CAD 文件 批量转为PDF或批量打印

CAD 文件 批量转为PDF或批量打印,还是比较稳定的 1.需要本地安装CAD软件 2.通过 Everything 搜索工具搜索,DWG To PDF.pc3 ,获取到文件目录 ,替换到代码中, originalValue ACADPref.PrinterConfigPath \ r"C:…