ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PCM2706+ES9023便携USB声卡设计实战:从原理图到PCB

PCM2706+ES9023便携USB声卡设计实战:从原理图到PCB 坦白说把PCM2706和ES9023做成USB声卡这个方案在圈子里早被贴上了“烂大街”的标签——网上随手一搜就是各种开源工程立创商城甚至能一键下单全套物料。但真正从原理图、PCB布局布线尺寸、打样回来一次点亮到听感实测都过关的其实远没有想象中那么多。这个项目的重点从来不是“用多高端的芯片”而是把常见芯片在常见工具链里做扎实把电源、地线、I2S这些基本功练明白。今天这篇就完整复盘一遍这个便携USB音频解码器是怎么从零做出来的核心是PCM2706接收USB音频流并转成I2S信号交给ES9023完成数模转换最后输出模拟音频。全程用立创EDA标准版画原理图和PCB嘉立创打样手工焊接调试。整个过程踩了不少坑也总结了一批直接能用的经验不管是新手第一次画音频板还是老手想快速验证一个DAC方案这篇应该都能给你省点时间。1. 方案选型为什么还是PCM2706ES9023这对老搭档1.1 先搞明白这个项目到底在做什么很多朋友第一次看到“USB音频解码器”这几个字脑子里浮现的可能都是几千块的台式一体机。但这个项目的定位完全不同它是一个便携USB声卡确切地讲是一个带独立DAC芯片的外置USB音频接口。电脑通过USB口把数字音频数据发过来PCM2706这颗芯片负责接收USB信号并恢复出I2S数字音频流包含MCLK、BCK、LRCK、DATA四根线ES9023再把I2S数字信号转换成模拟电压信号最终通过耳机座或线路输出送给耳机、音箱。这么做的好处非常明显电脑主板自带的板载声卡受限于电磁环境、供电质量、集成度信噪比和底噪表现一直不太理想。外置USB解码器把数模转换从机箱里挪出来用独立供电、独立PCB布局音质和底噪都会有一个明显提升。1.2 为什么选PCM2706而不选其他USB音频方案做USB声卡市面上主流方案大概分这么几类方案方向代表芯片特点开发门槛免驱、带I2S输出PCM2704/2705/2706即插即用无需写固件很低高性能异步USBSA9227、CT7601、XMOS支持高采样率、异步传输高需写固件/驱动配置MCU模拟USB音频STM32USB库灵活、学习价值高但开发量大较高集成CODECCM108、HS100B直接输出模拟信号、便宜但指标一般极低我最终选PCM2706核心原因就三句话第一免驱动免固件。PCM2706内部已经固化好了USB Audio Class 1.0协议栈Windows、macOS、Linux插上就能识别不需要装任何驱动也不需要自己写任何固件。对硬件工程师或者学生党来说这就省掉了最麻烦的软件环节专注把硬件做好。第二原生输出I2S。PCM2706可以直接输出标准的I2S信号这样我可以外接独立的DAC芯片而不是像CM108那样内部集成DAC直接输出模拟。独立DAC意味着音质上限更高也更有“做解码器”的仪式感。第三采购和封装都很友好。PCM2706是TQFP-32封装手工焊接难度不算大立创商城直接有现货价格也就十几块钱左右。作为学习/验证方案性价比非常合适。当然PCM2706也有明显的局限最高只支持16bit/48kHz的USB音频输入规格这在今天动不动就是DSD、192kHz的环境下确实显得不够看。但这个项目定位是学习基本功、做便携设备48kHz/16bit已经足够覆盖播客、在线视频、MP3等绝大多数日常场景。真要追求高采样率等把这套完整流程跑通再去换SA9227或者CT7601也不迟。1.3 ES9023一个优点和缺点都很突出的DACDAC部分我选了ESS的ES9023。这颗芯片在DIY圈子里口碑非常好原因也简单单个SOIC-8封装外围电路极简内部集成了电荷泵和运放不需要外接负压电源也不需要额外加I/V转换电路输出端甚至可以直接驱动耳机。更关键的是ES9023的信噪比标称能做到112dB左右动态范围也不错作为一颗几块钱、8条腿的芯片这个指标相当能打。它还内置了线性相位数字滤波器对音质的讨喜度有正面帮助。但ES9023也有一个非常著名的脾气对电源质量极其敏感。它的供电引脚如果混进了数字噪声或者纹波输出端会直接反映为底噪、沙沙声或者“嘶嘶”声。这颗芯片在烧友口中经常被评价为“上限高、下限低”下限低的根源不在芯片本身而是外围供电没做好。所以这个项目里我在电源上花了比DAC本身更多的心思后面会详细讲。选ES9023还有一个现实原因PCM2706输出的只是16bit/48kHz的I2S信号根本喂不满那些高端DAC而ES9023在8k~192kHz、16~32bit的范围内都能适配规格冗余足够配合起来非常顺。1.4 整体架构和个人分工整个系统框图用一句话说清USB 5V进入板子一路给PCM2706供电一路经过LDO稳压后给ES9023供电PCM2706从USB取音频流转换成I2S四线送到ES9023ES9023完成数模转换输出一对模拟信号到音频接口。音频数据通路和供电通路是分开规划的。数字部分PCM2706、USB座、晶振和模拟部分ES9023、模拟输出、LDO后的滤波在PCB上严格分区这个决策在后面布线阶段帮了大忙。音频PCB本质上就是处理两个东西信号完整性以及地回路。把握住这两点方向就对了。2. 原理图设计实操每一个电阻电容为什么这么放2.1 供电拓扑单5V输入怎么处理USB的VBUS提供5V电源但PCM2706的数字核心和ES9023的模拟部分都需要3.3V供电。常规做法是加一颗LDO把5V降到3.3V。实际设计时我在3.3V后端做了分路处理数字3.3V直接给PCM2706供电模拟3.3V再经过一级LC滤波后才进ES9023的AVDD。这样数字电路翻转产生的开关噪声就不会直接串到DAC的模拟电源上。具体元件选择LDO用了AMS1117-3.3虽然这颗芯片噪声不算顶级但胜在便宜、稳定、压差足够。模拟滤波部分用了一颗22uH的小电感加一颗100uF电解电容组成π型滤波实测效果不错。如果手头有更好的低噪声LDO比如TPS7A4901、LT3042这类完全可以升级替换。注意ES9023的抗电源噪声能力较弱不建议直接把数字3.3V和模拟3.3V短接共用哪怕你是为了省一个电感。另外PCM2706内部还有一个3.3V输出的LDOVCOM引脚这是给芯片内部模拟电路做参考电压用的按数据手册接好退耦电容就行不要用它去给外部电路供电。2.2 PCM2706外围电路晶振、模式配置、去耦PCM2706的外围电路并不复杂但有几个细节非常容易出事。先看晶振。PCM2706需要一颗12MHz的无源晶振直接接在XT0和XT1两个引脚上两边各加一颗18~22pF的负载电容电容另一端接地。晶振尽量靠近芯片引脚放置走线要短。这颗晶振是整个USB时序的时钟源如果它不起振或者起振不稳电脑端会直接报“无法识别的USB设备”。新手焊接时最容易犯的错就是焊锡把晶振相邻引脚搭桥了或者用热风枪吹太久把晶振吹坏。然后是模式配置引脚。PCM2706的几个配置引脚SEL0、SEL1、MODE0等决定了它的工作模式、音量控制方式、SPDIF输出是否启用等。我当时选的是“USB总线供电、HID音量控制、启用板载SPDIF输出”的模式组合因为项目最终可能还要外接播放器或者数字功放留着SPDIF接口以后扩展更方便。去耦电容方面PCM2706每个电源引脚就近放一颗0.1uF的MLCC再加一颗10uF左右的钽电容做低频储能。如果用普通电解电容也行但注意ESR和体积。有一个细节VDD和VCOM引脚间的去耦要格外靠近引脚这颗电容直接关系内部模拟电路稳定性。USB数据线DP/DM上按数据手册要求各加一颗33欧姆串联电阻放在靠近PCM2706引脚的位置。这组电阻的作用是抑制振铃、改善USB信号质量不要省。另加一个1.5k欧姆的上拉电阻在DP引脚上用于告诉主机这是一台全速USB设备——注意PCM2706内部可能已经集成了上拉一定要对照datasheet确认避免重复上拉。2.3 ES9023外围极简但每个位置都讲究ES9023的外围元件真是少得感人一颗电源退耦、一组I2S输入、一对模拟输出基本就没了。但正因为外围少每一颗电容的位置都更讲究。ES9023的AVDD和DVDD在芯片内部是分开的引脚外部建议各接一颗0.1uF10uF的组合。如果空间紧张最少也要保证每个电源引脚各有一颗0.1uF。I2S四根信号线MCLK、BCK、LRCK、DATA从PCM2706的对应引脚连过来中间不需要串电阻直接点对点就行。但注意走线不要分叉尽量保持相同长度、平行走线。ES9023的模拟输出是OUTP和OUTN两个引脚输出是内部运放驱动后的模拟信号可以直接驱动耳机和线路输入。为了安全起见我在输出端各串了一颗33欧姆的电阻作为耳机阻尼电阻同时并联了一颗100pF电容滤掉超高频噪声。如果后续想接功放可以去掉串联电阻直接接线路输出。另外ES9023有一个内部电荷泵用于产生负电压给输出运放供电。电荷泵工作需要一个飞跨电容flying capacitor按数据手册要求接到指定引脚电容值一般选1uF左右。这个电容位置要尽量靠近芯片我曾经把这个电容放远了结果输出端出现明显的高频噪声。2.4 接口、按键与保护电路USB输入用了标准的Micro USB座。虽然Type-C已经普及但Micro USB座子焊接更简单间距大不容易连锡作为新手项目更友好。后来想换Type-C也容易引脚定义对应好就行。除了USB座之外我还加了三个轻触按键音量加、音量减、静音。这三个按键接入PCM2706的HID音量控制引脚按下后主板会识别为USB HID音量键事件直接控制系统音量非常实用。操作系统的音量弹窗跳出来的时候真的很有“自己做的声卡被系统认成标准设备”的成就感。保护电路上我在VBUS输入处加了一颗自恢复保险丝和一颗TVS管。音频解码器经常被插在电脑前面板或者USB Hub上插拔瞬间的浪涌很容易损坏芯片。加了这两颗后长期使用心里会踏实很多。自恢复保险丝选500mA就够用两颗芯片加按键的功耗远低于这个值。还有一个容易忽略的点PCM2706的SPDIF输出引脚如果不用不要悬空接地或者通过电阻拉低避免引入干扰。3. 立创EDA里的关键操作与PCB设计要点3.1 工程建立与元件库使用项目从立创EDA标准版开始创建选择“新建工程”在原理图编辑器中通过“立创商城”搜索元件直接放置。立创EDA库和立创商城是打通的几乎每个常用元件都有封装配套搜索PCM2706、ES9023、AMS1117-3.3、Micro USB座都能直接调出带封装的元件。这一条极其重要尽量用立创商城自带封装不要手动建封装。我见过很多新手在Kicad里自己画封装翻车立创EDA最舒服的地方就是商城元件封装绝对可信。不过即便如此布局前还是建议逐个核对封装特别是USB座的引脚间距和定位尺寸以及电解电容的丝印极性方向。画原理图的时候建议把电路按功能区模块化排列左上角放USB输入和保护电路中间放PCM2706及其晶振、配置引脚右边放ES9023和模拟输出电源部分独立画在最下方。模块化排列方便后续PCB布局时按区域搬运也让别人看原理图的时候一眼就能读懂你的设计意图。3.2 PCB布局顺序与分区逻辑PCB设计里最忌一上来就自动布局、自动布线。我的习惯是先把每个功能模块的元件框选成组人工摆放到板子对应区域再细调位置。板子尺寸我定的是50mm x 32mm双面板厚度1.6mm。这个尺寸放进3D打印外壳里刚好。布局具体分区左上角Micro USB座。USB座尽量靠板边方便开槽装配。USB座右侧紧贴自恢复保险丝、TVS、共模电感如果加了的话。中部左侧PCM2706。这颗芯片和USB座之间尽量缩短距离DP/DM走线才能短。PCM2706旁边12MHz晶振以及两端负载电容晶振距离芯片引脚不超过5mm。中部右侧ES9023。和PCM2706之间保持一点距离减少数字信号对模拟区域的辐射干扰。右下角模拟输出接口、耳机座、SPDIF接口。下方区域电源部分——AMS1117、滤波电感、滤波电容。电源部分贴着板边放避免从模拟区域中间穿过。布局的时候还有一个容易犯的错误把ES9023放在PCM2706和USB座的正中间。这样数字信号线确实短了但数字噪声也正好辐射到DAC下方。正确做法是让数字部分和模拟部分在板子上形成一个清晰的分界线尽量让数字电流回路和模拟电流回路在物理空间上相互远离。3.3 布线实操USB差分、I2S、接地策略布局做完后进入布线环节这部分是整个项目技术含量最高的地方。我按优先级从高到低处理第一优先级USB DP/DM差分走线。USB全速12Mbps虽然速度不算高但DP/DM是差分信号需要保持等长、并行走线并且尽量短。我用的是顶层走线线宽0.3mm间距0.2mm注意在板边不要有直角转折。如果板子空间允许在DP/DM正下方放一个完整的地平面作为参考层信号质量会更好。第二优先级地线策略——音频板的重中之重。这块板子最大的坑就在地上。最初我按“大面积铺铜”的思路整个板子覆铜直连结果ES9023输出端底噪非常明显示波器能看到1kHz左右的数字噪声毛刺。后来改成“模拟地”和“数字地”分区域铺铜最后在USB座附近通过一个0欧姆电阻单点汇接底噪立即降了好几个数量级。这就是很多老工程师常说的单点接地/星型接地模拟部分和数字部分的地不要大面积混在一起而是各自独立汇聚到电源输入端一点。模拟地电流和数字地电流在公共路径上不重叠数字翻转噪声就不会通过地阻抗耦合到模拟回路里。0欧姆电阻的作用是提供一个可焊点的单点连接位置方便调试时断开测量。具体操作在PCB上画一条清晰的“地线分割线”把模拟区和数字区物理隔开。数字区铺铜作为数字地模拟区铺铜作为模拟地两个区域只通过电源端的一颗0欧姆电阻连通。Audio的地线问题无论什么时候强调都不过分这是整个项目最核心的经验。第三优先级I2S走线。MCLK、BCK、LRCK、DATA四根线从PCM2706连到ES9023每组之间保持间距避免平行走线过长。时钟线MCLK频率最高48kHz采样率下是12.288MHz尽量短、避免过孔。四根线在ES9023端汇合时保持整齐对位即可不需要像DDR那样做严格的等长——毕竟走线长度只有几厘米目前速率下影响可以忽略。第四优先级电源走线与滤波电容。LDO输出的3.3V模拟电源走线尽量粗0.8mm以上滤波电容就近放置在ES9023电源引脚旁边不要先过电容再走很远进芯片。所有去耦电容的地端都打孔回到对应区域的地平面不要在芯片外部绕一大圈再回到GND。3.4 设计规则检查、导出Gerber与下单立创EDA的DRC检查功能要充分利用。布线完成后运行一次DRC重点关注短路、间距、未连接线这几类问题。我的板子第一次DRC报了一处丝印重叠和一处安全间距过小都是小问题修正后顺利通过。导出Gerber和BOM时直接在立创EDA“制造”菜单里选择“PCB下单”系统会自动生成Gerber文件并跳转到嘉立创下单页面。这里注意下单时选择板子颜色我选了黑色质感好很多、板材厚度1.6mm、表面处理选“无铅喷锡”即可。铜厚1盎司对于音频板足够不需要加厚。如果后续要SMT贴片还要在原理图阶段确保所有元件都能在立创商城买到且把位号图导出来人工核对一遍。下单后大概两三天收到板子嘉立创的板子质量稳定焊盘镀层均匀覆盖膜对位也准基本不用处理就能焊接。4. 焊接调试与实测记录4.1 打样回来后的焊接顺序与器件准备板子回来后先不急着焊芯片先用万用表蜂鸣档检查电源正负极有没有短路。这个动作虽然基础但能避免很多灾难性故障。检查完再上烙铁。焊接顺序我按“从矮到高、从电源到信号”的规则先焊电阻、电容、晶振等小元件再焊LDO、USB座最后焊PCM2706和ES9023。芯片用拖焊方式先固定对角两脚然后顺着一边用焊锡拖过去最后检查有没有连锡。这里分享一个实测有效的细节用松香焊剂而不是水溶性助焊剂。虽然水溶性助焊剂干净但容易残留腐蚀引脚对音频放大器的长期可靠性不利。松香焊剂残留虽然难看点但性能稳定不影响使用。4.2 上电调试识别、出声、测指标第一次上电时先把板子插到电脑USB口屏幕右下角出现了“正在安装设备驱动程序”的提示然后很快提示“设备已就绪”设备管理器里多出了“USB Audio Device”和“扬声器USB Audio Device”。看到这个提示PCM2706这一级基本确认没问题。接着用手机播放音乐把耳机插到解码器的耳机座上声音直接出来了——但第一耳朵就发现问题底噪明显伴随“嘶嘶”的高频噪声。这个现象其实在意料之中因为我在第一次版PCB的接地策略上偷懒了整个板子共地铺铜。示波器探头接到耳机输出端能看到几百微伏的高频毛刺。为了验证改进方向我用飞线把模拟区域和数字区域的GND割开单独接了一根线到USB座附近的地。这一改底噪立刻降了下去示波器上的毛刺几乎消失。返回去改PCB就是前面说的“模拟地数字地单点连接”方案的雏形。这个教训非常深音频PCB铺铜一时爽地线没分好后面全是泪。第二版板子回来后继续调试。插上电脑识别正常放歌正常底噪用耳机听基本不可闻。我用示波器量了一下ES9023输出端的噪声底压低到几个毫伏以内。顺手也测了数字信号PCM2706输出的MCLK在48kHz采样率下确实稳定在12.288MHzBCK是64fs也就是约3.072MHzLRCK是48kHz整齐的方波。DATA脚有连续的数据翻转。这些波形确认了PCM2706的I2S输出完全符合ES9023的输入要求数字链路是通的。4.3 实测数据与主观听感手头没有AP音频分析仪这种专业设备我用一套相对可靠的民用测试方案电脑输出1kHz正弦波通过解码器接一个固定电阻负载再用USB示波器采集输出端的波形计算THDN的估算值。实测1kHz/0dBFS输出时输出电平约为2Vrms符合ES9023标称的输出幅度。THDN估算在0.005%以下具体数值受限于示波器本底仅供参考。底噪方面音量开到最大输出端短接负载时实测噪声电压约在2mVrms左右折算下来信噪比能到100dB以上对这个价位和复杂度来说已经相当不错。主观听感方面用耳机阻抗32欧姆的动圈试听了几首人声和器乐曲目。整体声音取向清晰、干净中高频细节丰富低频控制力超出预期——ES9023的电荷泵输出级确实有力驱动32欧姆耳机不虚。16bit/48kHz的限制在听感上唯一能感知的差异是极高频稍微有一层“数码感”但日常使用几乎不影响。4.4 调试中踩过的坑第一坑是第一次焊完插上去电脑没反应。排查了半天最后发现是Micro USB座的DP/DM引脚在焊接时被焊锡桥接短路了。用放大镜仔细检查、重新拖焊后恢复正常。从此以后我焊USB座都会先量一遍引脚间阻值再上电绝不偷懒。第二坑是ES9023的电荷泵飞跨电容放得太远。第一版原理图我把这颗电容放在板子另一侧结果输出端出现明显高频噪声。把这个电容移到芯片引脚正对面之后噪声消失。飞跨电容的高频回路必须短这和去耦电容的原理一样。第三坑是音量键的HID功能没生效。检查原理图才发现配置引脚的上下拉电阻接错位置了——我把应该接地的那组电阻接到了VDD导致芯片识别成了非HID模式。重新焊接电阻后音量键正常。引脚配置这种静态设置必须在画原理图时反复核对datasheet硬件调试时再去改引脚配置就麻烦很多。5. 常见问题与排查技巧实录故障现象可能原因排查方法解决办法电脑提示“无法识别的USB设备”DP/DM短路或断路晶振未起振芯片虚焊万用表量DP/DM通断示波器看晶振引脚波形重新焊接USB座和晶振确认DP上拉电阻设备识别正常但没声音I2S四线连接错误MCLK未接ES9023供电异常示波器测BCK/LRCK/DATA波形量ES9023各供电脚电压对照原理图重新核对I2S连接补焊ES9023输出有“嘶嘶”底噪模拟地数字地没有分离模拟电源滤波不足短接输出端示波器测输出噪声频谱改用单点接地加强LC滤波飞跨电容贴近芯片播放时偶发爆音USB供电波动LDO压差不够测AMS1117输入端电压是否在5V附近波动换更好的USB线或改用独立5V供电加大储能电容音量键按下没反应HID配置引脚接错核对配置引脚电平与datasheet要求重焊上下拉电阻到正确电平声音一边大一边小或无声输出串联电阻虚焊耳机座接触不良万用表量输出通路通断补焊或更换耳机座高频刺耳输出端没有滤除射频噪声观察输出波形高频毛刺输出并联100pF电容滤除再补几个隐藏技巧调试时不要直接插电脑USB口中间串一个USB电流表或者可调限流电源。如果板子有短路电流表会立刻暴露问题避免烧芯片。很多电源可以设定限流500mA上电瞬间电流异常就断电排查。接地策略上如果不想纠结0欧姆电阻的位置还有一个更简单的办法USB座的金属外壳单独连接到数字地不接模拟地。这个细节能减少USB外壳耦合进来的共模噪声。外壳地不要和模拟地直接相连否则地环路的噪声会直接灌进模拟电路。I2S信号如果有条件可以在PCM2706和ES9023之间加一级74LVC1G125缓冲或者串联33欧姆电阻。虽然不一定需要但遇到信号完整性问题时这是一个可选的冗余方案。本项目的走线长度很短不加也没问题。最后如果准备做两台以上或者给别人复刻强烈建议在PCB丝印上把调试用的关键测试点标出来比如3.3V、GND、MCLK、BCK、LRCK、DATA调试时探针直接往测试点上一搭就能量测不用找元件引脚。虽然只是个小改动但在排查问题时能省非常多时间。写在最后的一点个人体会这个项目做下来我最大的收获不是“做出了一个能用的USB声卡”而是真正理解了音频电路设计里“地”的重要性。很多网上的教程画原理图时看不出差别但打样回来一上电地线策略的优劣立刻体现在底噪上。PCB设计不是把线连通就完事了电流怎么回流、噪声怎么耦合、退耦电容怎么放这些才是决定成品档次的关键。如果你也想试这个方案我的建议是第一版打样时不要怕失败预留几个调试用的焊盘和0欧姆电阻位置方便后面改接地策略晶振和USB座的焊接一定要认真检查电源模块尽量站在“给模拟电路一个干净环境”的角度去设计而不是塞一个LDO就完事。把这对PCM2706ES9023跑通之后后续升级方向其实很多——换SA9227玩异步USB、增加SPDIF输入切换、做成电池供电的便携耳放、加OLED显示采样率……只要基本功扎实了这些扩展都只是堆料和写代码的问题。先把这个小板子做响、做干净再谈其他的。
返回列表