FastBond3挑战部分-基于MIC5504和MAX98357的双通道输入输出声卡模块设计
该项目使用了MIC5504和MAX98357,实现了双通道输入输出声卡模块的设计,它的主要功能为:双通道音频输出与输出,使用I2S通信。。
标签
音频
I2S
FastBond
江华210
更新2024-09-03
94

项目介绍

我设计了一个支持双通道音频输入与输出的声卡模组,使用I2S通信,方便日常使用ESP32,RP2040以及树莓派开发时音频应用的开发。我把这款模组设计的非常小型化,紧凑化,以方便日后可以直接嵌入到其他的项目中使用。


方案框图和原理图介绍

image.png

方案的逻辑框图看起来比较简单。音频输入使用两个SPH0645 MEMS麦克风,输出使用两个MAX98357功放。两款芯片都是用I2S来进行通讯,因此可以共用BCLK和WS引脚。芯片的增益和通道均使用板载电阻进行配置,并且会预留好各种配置的电阻位,可以在焊接时自由的选择配置方案。


按照上面框图在KiCAD中设计好原理图:

image.png

输入输出接口比较简单,一边是I2S通信接口,另一边是两个喇叭的接口。由于麦克风是直接集成在贴片元件内的,因此无需再额外接线。

方案中可能用到的指定厂商元器件

1,Microchip 的 MIC5504


MIC5501/2/3/4 是一款先进的通用 LDO,非常适合为通用便携式设备供电。MIC5501/2/3/4 产品系列提供了一款高性能的 300 mA LDO,封装尺寸超小,仅为 1 mm x 1 mm。


MIC5502 和 MIC5504 LDO 在使能引脚为低电平时,会在输出端自动放电。MIC5503 和 MIC5504 在使能引脚悬空时会内部拉低,从而关断输出。这对于处理器启动时控制信号悬空的应用场景非常理想。


MIC5501/2/3/4 非常适合电池供电应用,具有 2% 的初始精度、低压降电压(300 mA 时只有 160 mV)以及低静态电流(典型值为 38 μA)。当禁用时,MIC5501/2/3/4 可进入零耗电模式,几乎不消耗任何电流。


MIC5501/2/3/4 的工作温度范围为 -40°C 到 +125°C。


2,Analog Devices Inc 的 MAX98357AETE+T

MAX98357A/MAX98357B是数字脉冲编码调制(PCM)输入D类功率放大器,可提供AB类音频性能,同时具有D类的效率。器件在I2S/左对齐模式下通过单个增益设置输入可提供5中可选择增益(3dB、6dB、9dB、12dB、15dB),在TDM模式下为固定12dB增益。


数字音频接口高度灵活,MAX98357A支持I²S数据,MAX98357B支持左对齐数据。两种器件均支持8通道时分复用(TDM)数据。对于所有支持的数据格式,数字音频接口可接收8KHz至96KHz的指定采样速率。 IC通过配置可将立体声输入数据转换成左声道、右声道、(左声道/2 + 右声道/2)输出。对于I2S和左对齐模式,IC采用16/24/32位数据工作,对于TDM模式,器件采用16位或32位数据工作。IC无需PCM通讯应用中的外部MCLK信号。这有助于减小EMI以及电路板的耦合问题,另外,也可减小电路板尺寸以及IC引脚数。


PCB设计介绍及遇到的问题和解决方法

PCB我尽可能设计的非常紧凑,可以看到板子上几乎没有留白区域:

image.png


但这样做造成的代价就是需要用四层板,才可以走通所有线路。同时,有部分地线过孔不得不打在焊盘上。如果是自动开钢网印刷锡膏的话可能会导致贴片不良。但好在我本来设计的就是为了手动焊接,因此阻容才全部使用的是0603,没有用更小的0402或0201封装。所以总体来说问题不大。


电路板焊接好可以看到成品也非常紧凑。

image.png

我把所有的元件都设计到单面,目的是为了可以方便使用铁板烧进行焊接。需要注意的是,焊接注意顺序,先把两个QFN元件贴上,因为QFN引脚很小,所以大概率会有不少虚焊存在。接下来用刀头烙铁拖一下四周,确认焊接好后,再去焊其他的元件。


关键代码及说明

测试时我使用的是一块ESP32-S3开发板。因为使用Circuitphython可以非常容易的驱动I2S,不需要任何额外的库。

我使用的测试代码也非常简单,先往Circuitpython的根目录里放一个music.wav文件,然后通过以下几行代码,就可以循环播放该文件:

import time
import board
import audiocore
import audiobusio

wave = audiocore.WaveFile("music.wav")

audio = audiobusio.I2SOut(board.GPIO14, board.GPIO13, board.GPIO12)

audio.play(wave, loop=True)
while audio.playing:
time.sleep(0.1)


功能展示图及说明

我使用这样的电路来测试。由于我只有一个小喇叭,因此可以左右声道分别测试。

957756220626c3239f435d08ef1acf8.jpg


麦克风测试会更加简单。Circuitpython中暂时没有驱动I2S麦克风的方法,但是我们现在既然有了I2S麦克风和功放,完全可以用更方便的纯硬件方法来测试。只要去掉单片机的DATA输出引脚,但保留两个时钟引脚,接着把麦克风的数据输出和MAX98357的数据输入短接在一起,就可以直接把麦克风中的声音从小喇叭中播放出来。视频中为了方便验证,我分别对着左右麦克风吹气,可以通过喇叭反馈来测试输入输出的左右声道是否都能正常工作。

心得体会

通过参加FastBond活动,可以将日常一些小想法付诸实践,还可以在动手的过程中学到很多知识,收获颇丰。

软硬件
电路图
KiCad文件
使用说明
全屏
附件下载
music.wav
code.py
I2S.zip
Kicad 压缩包
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号