项目介绍
我设计了一个支持双通道音频输入与输出的声卡模组,使用I2S通信,方便日常使用ESP32,RP2040以及树莓派开发时音频应用的开发。我把这款模组设计的非常小型化,紧凑化,以方便日后可以直接嵌入到其他的项目中使用。
方案框图和原理图介绍
方案的逻辑框图看起来比较简单。音频输入使用两个SPH0645 MEMS麦克风,输出使用两个MAX98357功放。两款芯片都是用I2S来进行通讯,因此可以共用BCLK和WS引脚。芯片的增益和通道均使用板载电阻进行配置,并且会预留好各种配置的电阻位,可以在焊接时自由的选择配置方案。
按照上面框图在KiCAD中设计好原理图:
输入输出接口比较简单,一边是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我尽可能设计的非常紧凑,可以看到板子上几乎没有留白区域:
但这样做造成的代价就是需要用四层板,才可以走通所有线路。同时,有部分地线过孔不得不打在焊盘上。如果是自动开钢网印刷锡膏的话可能会导致贴片不良。但好在我本来设计的就是为了手动焊接,因此阻容才全部使用的是0603,没有用更小的0402或0201封装。所以总体来说问题不大。
电路板焊接好可以看到成品也非常紧凑。
我把所有的元件都设计到单面,目的是为了可以方便使用铁板烧进行焊接。需要注意的是,焊接注意顺序,先把两个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)
功能展示图及说明
我使用这样的电路来测试。由于我只有一个小喇叭,因此可以左右声道分别测试。
麦克风测试会更加简单。Circuitpython中暂时没有驱动I2S麦克风的方法,但是我们现在既然有了I2S麦克风和功放,完全可以用更方便的纯硬件方法来测试。只要去掉单片机的DATA输出引脚,但保留两个时钟引脚,接着把麦克风的数据输出和MAX98357的数据输入短接在一起,就可以直接把麦克风中的声音从小喇叭中播放出来。视频中为了方便验证,我分别对着左右麦克风吹气,可以通过喇叭反馈来测试输入输出的左右声道是否都能正常工作。
心得体会
通过参加FastBond活动,可以将日常一些小想法付诸实践,还可以在动手的过程中学到很多知识,收获颇丰。