1. 智能家居音频设计到底在解决什么问题
1.1 音频系统在智慧家庭中的角色
智能家居发展到今天,音频已经不是“能响就行”的附属功能了。你现在走进展厅看到的那一堆智能音箱、智能中控屏、智能门锁、楼宇对讲,凡是带语音交互的,核心体验全部压在音频链路上。用户说了一句“离家模式”,设备如果听不清,后面所有智能联动都无从谈起;门铃响了,你在卧室想通过中控屏看看是谁,如果麦克风拾音一团糟,这个功能基本就是摆设。所以音频链路在智慧家庭里的价值,就是让机器在真实家庭环境下,依然能“听清人、听懂人、回好话”。
它具体解决三类问题:第一类叫拾音,设备需要在两三米之外、有空调声和冰箱噪声的环境下捕捉到有效人声;第二类叫处理,需要把麦克风信号里的回声、混响、环境噪声压下去,把有效语音提取出来;第三类叫播报,扬声器放出来的提示音和语音回复要自然、清晰、不破音。这三件事不是各自独立的,而是环环相扣。前端拾音做得差,后端跑再多算法、再强的模型,效果也好不到哪儿去。这也是我特别建议入门者从TI(德州仪器)这套生态入手的原因——TI的音频ADC、Codec、DSP、D类功放覆盖了从麦克风进来到最后喇叭出去的全链路,参考设计给得又完整,照着学一遍,基本上能避开大部分新手会踩的坑。
1.2 一条完整的音频信号链长什么样
音频信号链听起来很玄,拆开看其实就那么几个环节:模拟麦克风先产生非常微弱的电信号,经过前置放大和ADC采样变成数字量,数字音频通过I2S或TDM总线送到处理器,在DSP或MCU里做降噪、回声消除、波束成形等处理,处理完之后送进DAC还原成模拟信号,再由功放把信号放大到足够驱动扬声器的功率,最后扬声器发声。
这里面最容易忽略的是前置放大这一级。普通MEMS麦克风在正常说话距离下的输出信号幅度只有几毫伏到几十毫伏,而很多主控内置ADC的参考电压可能是3.3V甚至更高,如果把麦克风信号直接接到这种ADC,量化出来的数据量级非常小,有效位都被底噪吃掉了。所以正经设计里要么加一级独立的模拟放大器,要么直接用带可编程增益放大器(PGA)的音频Codec。TI的TLV320ADC3100就内置了0到36dB的PGA,可以配置成差分输入,直接接模拟MEMS麦克风,省掉不少外围电路。
数字处理端的选择余地比较大。低端方案用一颗带FPU和DSP指令的MCU,比如STM32H7,跑跑噪声抑制和简单回声消除够用;复杂一点的四麦克风阵列、远场语音识别,就得上独立DSP。TI的C5515、C6748这些低功耗DSP在智能音频产品里用得很广,耗电低,算法资源也够。处理完的数字流再送到DAC,或者直接把I2S数据送到数字输入的D类功放,整个链路就闭合了。
1.3 设计目标:从“能响”到“能听清”
我见过太多死在音频这关的项目,原因就是一开始只围绕“能响”做设计,等语音交互系统联调时才暴露问题。真正做语音交互的智能家居设备,设计目标必须落到几个可量化的指标上。唤醒率就是一个典型指标,在正常家庭噪声环境下,三米距离唤醒率能不能做到95%以上;误唤醒指标同样重要,不能家里喊一句普通词就把设备激活了;还有回声消除指标,设备正在播报或放音乐时,麦克风还必须准确接收用户新下达的指令,不能因为自己放了音乐就“丢耳朵”。
除了交互指标,音质指标也跑不掉。最大音量播报时有没有破音,待机状态下设备底噪能不能做到人耳基本不可闻,从用户说完唤醒词到设备回应指令的端到端延时能不能控制在200毫秒以内。这几个指标互相拉扯,拾音增益调大了,远场是听清了,但底噪也上来了;回声消除做猛了,人声也被削掉一部分,识别率反而下降。所以入门阶段别急着堆算法,先把信号链每一级的动态范围、信噪比对清楚,把TI评估板在原厂例程下跑出来的底数摸透,后面再优化才有基准线。
2. 核心硬件怎么选:麦克风、编解码器与功放
2.1 麦克风选型:MEMS还是驻极体?
麦克风是音频入口,选型一旦出错,后面全盘皆输。智能家居产品里目前绝大多数用MEMS麦克风,原因是它体积小,可以贴片安装在很窄的边框或者很薄的LCD模组旁边;一致性好,批次和批次之间的灵敏度差异很小,做麦克风阵列的时候不用每个声道单独校准;而且耐高温、抗振动,回流焊不容易损坏。驻极体麦克风也不是不能用,但它在批量上的灵敏度一致性差,温度漂移也明显,用在单麦克风的低成本对讲机上可能无所谓,用在智能中控屏这种需要大量生产、出声质量要求高的产品上,调试成本会非常高。
选MEMS麦克风的时候要重点看几个参数:灵敏度、信噪比、声学过载点(AOP)和供电方式。信噪比至少要63dBA以上,低于这个值,远场拾音基本上就废了;AOP则决定了靠近麦克风大喊时会不会严重削波,一般在120dB SPL以上比较稳妥。接口方面,数字MEMS麦克风输出PDM信号,可以直接接到MCU或DSP的PDM接口,但PDM是过采样数据流,MCU还得做抽取滤波;模拟MEMS麦克风则需要配Codec的ADC。我个人的习惯是优先选模拟MEMS加音频Codec的方案,因为TI这类Codec内部已经处理好了偏置、增益和ADC,寄存器一配就能出干净的数字流,调试效率高很多。
2.2 音频编解码器与麦克风阵列
Codec是整条音频链路的咽喉,它的ADC分辨率和动态范围直接决定系统能拿到多少有效语音信息。选Codec不是越贵越好,而是看它够不够匹配你的拾音拓扑。做单麦克风近场通话,一颗低成本的TLV320ADC3100或者更传统的AIC3204就够了;做四麦克风远场语音交互,建议直接上TLV320ADC6140,它支持4通道同步采样,分辨率24bit,动态范围108dB,采样率最高能到96kHz。四路麦克风的数据全部打进同一条TDM总线,由主控或DSP读出,这样各声道的帧对齐天然一致,省掉很多软件校准的麻烦。
对于音频回放部分,如果产品只需要提示音和简单的TTS播报,Codec带个立体声DAC就够。但如果你想在Codec内部做一些音频后处理,比如EQ、动态范围压缩、音量平滑,那就看带MiniDSP的TLV320AIC3254这类器件。AIC3254内部有可配置的MiniDSP,可以用TI的PurePath Console工具以图形化方式拖拽信号流,生成寄存器配置,再通过I2C写到芯片里。这个工作模式对嵌入式开发很友好,因为主控只需要负责业务逻辑,音效算法全在Codec内部跑,主控和DSP负荷都小,系统整体也更省电。
2.3 低功耗Class-D功放与Speaker保护
功放部分最常见的误区是只看输出功率,不看供电条件和扬声器阻抗。智能面板、智能门锁这类设备往往不是12V大电源直供,而是由PoE、USB-C或锂电池供电,电压通常只有5V或者更低。这时候如果选一颗需要12V供电的传统AB类功放,就会多出来一颗升压芯片,不仅成本上去,效率还掉下来。常规做法是选集成升压或者支持低电压供电的D类功放,比如TI的TPA2016D2,一颗支持单节锂电池供电的2.8W立体声D类功放,非常适合便携智能设备;功率需求再大一点,TPA3116D2这类高电压器件则适合固定安装的中控屏。
D类功放的增益不是软件能随便调的,通常由电路外部的增益电阻决定。我见过不少工程师在产品里猛调Codec的音量寄存器,把音频信号放大到接近满幅,结果功放前端一削波,满音量破音刺耳。正确的做法是把模拟链路的总增益分配到多个环节:Codec PGA负责麦克风侧,DAC输出到功放之间的电平要留出余量,功放的增益电阻按reference design里的推荐值设置,最后在UI里限制最大音量输出,这样才能保证从最小音量到最大音量都不失真。Speaker保护也不能省,特别是小腔体面板,喇叭散热差,长时间播报会烧音圈。TI很多功放内置了SpeakerGuard这类温度预测保护,能实时限制输出功率,最好直接把这类功放定下来,别拿普通功放硬扛。
2.4 主控与DSP的配合:STM32与TI各司其职
在智能家居产品里,主控和音频处理器的分工已经越来越清晰。STM32凭借丰富的生态和性价比,承担网络协议、UI交互、外设管理、应用层逻辑这些任务;TI的DSP或音频Codec则专注于音频信号链。比如STM32通过I2C向Codec写入配置寄存器,通过I2S把要播放的音频流发送给Codec/DSP,同时接收处理完的麦克风数据。这样音频算法的实时性要求不会反过来折磨主控,主控死机或升级固件的时候,音频链路还能独立保底,音频通路也能更稳定。
如果你是刚入门,用一块TI的评估板跑通音频链路,再接到自己熟悉的STM32开发板上联调,这个路径会顺很多。TI的EVM板一般会配套一个USB接口,插上电脑就能被PurePath Console识别,可以在PC端实时调节寄存器、看ADC波形、调试音效。等调好参数,把生成的寄存器配置数组存下来,在STM32工程里通过I2C写进去即可。大部分情况下,你并不需要深刻理解音频信号处理的每一个公式,先把TI这套参考流程走通,再回头补理论,效果远比死磕教科书好。
3. 从原理图到代码:TI方案落地过程
3.1 典型参考设计分析与器件选型
TI官网的参考设计资料是最值得利用的资源,很多初学者不知道从哪下手,其实完全可以反过来:先确定产品形态,再去TI官网搜“Reference Design”。搜索关键词可以是“smart speaker”、“voice interface”、“audio panel”这些,搜索结果里通常会有完整的硬件框图、原理图PDF、BOM表、layout指南和软件例程。看原理图的时候不要只看音频部分,把电源树和时钟树一起看,因为音频对电源和时钟非常敏感。
以一台带屏智能语音中控为例,典型信号链大概是:四颗模拟MEMS麦克风进TLV320ADC6140的四通道ADC,经过TDM总线进入主控DSP或独立DSP;DSP做完波束成形和回声消除后,把干净的语音流交给主控跑识别;回复音频由主控通过I2S送给TLV320AIC3254做DAC,再送到TPA2016D2驱动扬声器。我在实际抄参考设计时学到最重要的一点是:音频芯片的模拟供电引脚附近一定不能省去耦电容,且布局时要尽量让模拟地和数字地分开再单点汇合。不少网友照着画完板子,发现底噪大,十有八九就是省了这几个电容。
3.2 CCS安装与工程环境搭建
如果你选了TI的DSP,IDE通常绕不开Code Composer Studio。CCS的安装在TI官网有逐步向导,下载离线包装上之后需要注意几个问题:第一,安装路径里不要有中文和空格,TI的编译工具链对路径比较敏感,路径带空格有时会引发莫名其妙的编译错误;第二,新装的CCS不一定包含所有TI芯片的编译器支持,比如用C6748需要额外安装C6000编译器,这在“App Center”里有选项,别漏掉;第三,仿真器驱动在Windows下有时会被拦截,遇到连接不上仿真器的问题,先去设备管理器里看看驱动有没有正常识别。
建工程时,强烈建议直接导入TI提供的example工程,而不是从空白工程开始。因为音频工程里不仅有基本的main函数,还要配置中断向量、Linker Command文件里的内存分配、DSPLIB库的路径,这些东西手拼起来十分痛苦。导入example之后,先编译、下载、在例程上确认硬件环境正常,再逐步改动为自己需要的功能,这是最稳的前进方式。
3.3 TLV320ADC3100/ADC6140的配置流程
Codec配置的流程看起来长,其实套路固定。先初始化I2C通信,把Codec从复位状态释放;然后配置PLL和主时钟,确定MCLK、BCLK、LRCLK和采样率的比例关系;接着配置ADC/DAC采样率、数据格式、字长;再设置PGA增益和通道映射;最后使能通路和设置音量。每一步在TI的数据手册里都能找到对应寄存器,如果使用PurePath Console,很多步骤会自动帮你算好,再生成配置代码。
硬件上要特别注意主从关系。常见做法是MCU做I2S主机,产生BCLK和LRCLK,同时给Codec提供一个MCLK;也可以由Codec自身产生时钟,MCU做从机,但需要额外配置Codec的时钟输出。TDM模式下,几路麦克风数据会被编进同一帧的不同时隙,主控需要按照片选通道解包数据,通道顺序别弄反。调试时如果你听到声音的“语速”不对,听起来像磁带加速或减速,那多半是PLL配置或者MCLK与采样率比例不匹配导致的,优先检查这里。
3.4 音频链路调试:音量、增益、噪声
调试音频链路,本质上是在确认信号在每一级有没有出现增益过大、削波、噪声抬升。我的习惯是先灌入一个1kHz正弦波,幅度到-20dBFS左右,沿链路逐级观察波形。从Codec的ADC输入到DSP处理算法,再到DAC输出,最后到功放输出,每一级都应该看到清晰的、无削波的正弦波。然后再关闭输入源,测量输出底噪,判断是否符合规格书上的本底噪声指标。如果底噪高出很多,优先怀疑电源去耦和layout。
音量调试的部分,最容易犯的错误是音响系统的“满幅焦虑”。有人总觉得数字音量越大越好,结果Codec输出已经接近0dBFS了,后面再经功放放大,一到大动态就破音。正确做法是给系统留足够的headroom。比如你录制一条标准语音,在正常说话音量下,最好让ADC输入峰值落在-26dBFS到-20dBFS之间,这样既能保证信噪比,又能在大声说话或者环境噪声突然增大时,不会立即削波。增益分配也一定要均衡,不要单靠Codec的PGA拉到最大,也不要单靠功放增益去凑,要在每一级都留出余量。
4. 语音交互与本地推理:音频设计的进阶方向
4.1 唤醒词检测与麦克风阵列波束成形
语音交互的第一个门槛是唤醒词检测。用户在客厅喊一句唤醒词,设备必须低功耗、低延迟地识别出来并进入工作状态。这意味着唤醒模型往往要跑在一颗功耗很低的DSP上,TI的C5505、C5535低功耗DSP就是为这种常开场景设计的,一颗芯片可以在毫瓦级功耗下不断跑语音活动检测和轻量级关键词识别,一旦检测到唤醒词,再唤醒主控跑更复杂的任务。这种“唤醒低功耗、识别再满负荷”的分层设计,是智能家居设备续航和交互体验兼顾的关键。
远场语音的另一大基础是麦克风阵列。双麦克风做近场拾音够用,要做到客厅级别的远场,至少需要四麦克风阵列配合波束成形。波束成形的基本原理是给麦克风阵列各通道施加不同延时和权重,使目标方向上的语音同相叠加,非目标方向上的噪声异相抵消。这个过程依赖于各通道严格的时间同步,正因如此,我前面不断强调用TDM方式把多路ADC数据打包进同一总线的重要性——硬件层面的同步做好了,算法才有施展空间。TI的TLV320ADC6140天然支持TDM输出,四路麦克风数据能在同一帧里按序送到DSP,这比用多颗独立ADC再用软件对齐要靠谱得多。
4.2 本地语音助手的算力挑战:从qwen到本地GPU
这两年本地跑大模型的热度很高,有人想用qwen这类7B参数级别的大语言模型,把家里的智能音箱变成完全本地推理的语音助手。这个方向在技术上确实可行,但落到硬件选型上要冷静。一个7B模型即使量化到INT4,权重也要占掉接近4GB显存,推理过程中还需要大量的内存带宽和计算能力。我在自己搭的PC上试过用4060 Ti 16G跑这类模型,16G显存是足够装下量化模型的,推理速度也能跑到每秒几token到几十token,但整机功耗动辄一两百瓦,机箱体积和散热都不是嵌入式智能家居节点能承受的。
所以真正合理的产品架构,不是把大模型塞进墙上的面板,而是分层部署。设备本地的TI DSP完成唤醒词、降噪、波束成形和简单的离线指令识别,把决定性的音频前端做好;等到用户确实要和助手对话了,再把压缩后的音频或文本发送到家里的本地推理服务器,由一台装了4060 Ti 16G甚至更强显卡的PC跑大模型理解语义、生成回复,最后把TTS音频流推回设备播放。这种结构既保留了低延迟、即可响应的本地交互体验,又获得了大模型复杂语义理解能力,而且隐私数据不出家庭网关,实际落地性也远高于把一切都塞进边缘设备。
4.3 TI + 边缘AI:器件与算法怎么搭
TI这些年也在往边缘AI方向布局,AM62A、TDA4系列处理器集成了NPU,可以跑轻量级的语音和视觉模型。不过对纯音频交互设备来说,直接用带NPU的SoC做语音,成本不一定划算,传统低功耗DSP配合轻量级神经网络反而是更常见的组合。TI官方提供Edge AI Toolbox,里面有包括语音唤醒、语音识别、异常声音检测等模型示例,并给出了模型在TI器件上的性能和资源占用评估,是很好的选型参考。
这里想提醒一句:在家搭一套“PC+GPU+大模型”的演示系统,和做一台可以批量生产的智能家居音频产品,完全是两回事。前者可以不用关心功耗、体积、量产一致性、高温可靠性,后者则要被成本、散热、85℃环温测试、工厂校准这些现实问题反复折磨。我的建议是,入门者先把TI的EVM板跑起来,用TI官方的降噪、唤醒、回声消除demo走通一遍真实信号链,再用自己的数据做测试。这个过程积累的硬件和算法手感,比单纯聊大模型要实在得多。等哪天真有产品需求了,再用分层架构把本地GPU拉进来也完全来得及。
5. 最小可用的智能音频节点:手把手实操实录
5.1 硬件清单与接线要点
想做一套最小可用的智能音频节点,不一定非要花大价钱买高端开发板。用一块TI的音频EVM加一块STM32开发板,就能把前面讲的链路完整跑起来。我常用的配置是:TLV320ADC3100EVM作为模拟麦克风输入和ADC,一块STM32F407开发板作为主控,负责I2C配置Codec和接收I2S数据。如果你还想做播报,可以再接一个TPA2016D2功放EVM和一只小扬声器。
接线的时候要注意,I2S有四根信号线:MCLK、BCLK、LRCLK、DIN/DOUT,再加上I2C的SCL和SDA,电源和地。MCLK可以由STM32提供,也可以由Codec的外部晶振或Codec内部PLL产生。我在第一次接线时踩过坑,STM32的MCLK和BCLK很容易被接到一起,导致Codec分不清主时钟和位时钟,音频数据完全错位。建议先在纸上把信号流向标清楚,再用万用表测杜邦线连通性,不要凭记忆乱插。
5.2 环境搭建与最小工程导入
软件环境分两边:STM32这边用STM32CubeMX生成基础和I2S外设代码,TI的Codec配置则用PurePath Console生成寄存器表。在STM32CubeMX里把I2S配置成主机模式、飞利浦格式、24bit数据宽度、采样率48kHz,MCLK使用外部PLL生成。生成工程后,在main函数里通过I2C把TI Codec的寄存器数组写入芯片,然后开启DMA接收I2S数据,数据流会源源不断进到内存缓冲区。
TI这边,如果你用的是DSP方案,则在CCS里导入TI例程;如果你只用Codec,其实不需要CCS,PurePath Console就够了。CCS主要给C5515、C6748这些DSP做算法开发用。初次导入例程时,建议先编译一次原封不动的工程,确认没有报错,再改动例程里的音频参数。很多人一上来就急着改代码,结果编译环境都没弄对,白白消耗了大量时间。
5.3 跑通一个基本的回声消除Demo
回声消除是语音交互不可缺少的一环。设备播放音乐时,扬声器声音会被麦克风重新拾取,如果不做回声消除,远端用户听到的就是自己的声音不断被重复。TI的音频DSP例程里经常自带AEC模块,你只需要把参考信号(即播放给扬声器的信号)和麦克风信号同时送进AEC算法,算法会把扬声器通路产生的回声成分估计出来并从麦克风信号中减去。
实测跑AEC时,我建议先拿一个固定频率的正弦波做播放,观察AEC收敛曲线和回波抵消量。TI的例程通常提供调试界面,可以实时看到残余误差信号的能量。如果AEC收敛很慢或者回波抵消有限,先检查参考信号和麦克风信号是否时间对齐。很多时候是I2S的左右声道交叉接反,或者DSP读到的两个数据流起点不同,导致训练序列错位。把对齐问题解决,AEC性能通常立刻会有不小的改善。
5.4 系统联调:让语音节点真正可用
单板跑通不算完,还要做系统联调。把STM32、Codec、功放和扬声器都接在一起,先播放一段测试音频,确认回放通路正常;再打开麦克风数据,在PC上通过串口打印ADC数值,确认拾音通路正常;最后打开AEC和降噪功能,用手机播放噪声作为干扰,对着麦克风说话,观察串口输出的语音数据是否干净。
联调阶段最需要注意的是引入“系统级增益”的概念:处理完的语音信号在送给语音识别API或者本地模型之前,应该统一做音量归一化和采样率对齐。我见过很多项目,麦克风出的是48kHz数据,主控做识别却用16kHz模型,直接把数据降采样时又没有做抗混叠滤波,结果识别率掉得很明显。这个环节其实不复杂,但特别容易被人忽略,也是我觉得“入门者尤其要留个心眼”的地方。
6. 常见问题与排查技巧速查表
6.1 底噪、爆音、没有声音:先用分段定位法
音频问题最忌讳一上来就怀疑芯片坏了。我的排查思路永远是把链路切成段,逐级定位。没有声音的时候,先看Codec的ADC有没有接收到信号,再量功放输入引脚有没有波形,最后看扬声器两端有没有电压。只要把一段一段的信号测出来,问题出在哪一级立刻清楚了。下面的表格是我自己经常用的排查参考:
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 完全没声音 | 未正确使能Codec通路、数字信号未到位 | 用示波器查I2S信号,读Codec寄存器确认通路开关状态 |
| 底噪大 | 模拟电源去耦不足、增益分配不合理 | 检查模拟电源电容,降低PGA增益观察底噪变化 |
| 有声音但破音 | 信号链某级削波 | 从ADC输入到功放输入逐级看波形,找出削波点留headroom |
| 声音变速 | 采样率与MCLK比例不匹配 | 检查PLL配置和MCLK、BCLK、LRCLK频率比例 |
| 左声道右声道串音 | 差分信号接反、layout耦合 | 核对麦克风或Codec的左右声道连接,检查PCB布线 |
6.2 I2S时序、PLL时钟与采样率问题
I2S时序是数字音频最基础也最容易出错的点。I2S要求位时钟BCLK频率是采样率乘以字长乘以声道数,48kHz、24bit、双声道对应的典型BCLK就是2.304MHz,MCLK则一般是采样率的256倍或512倍,也就是12.288MHz或24.576MHz。如果你的MCU没法产生精确的MCLK,也可以由Codec内部PLL根据BCLK恢复时钟,但前提是BCLK频率必须稳定且符合Codec允许范围。很多代码里直接写个固定值,板间晶振误差一大,考试就挂了。
排查这类问题的实用方法是用示波器测量LRCLK和BCLK,正常情况下LRCLK频率应等于采样率,BCLK应为LRCLK的整数倍。如果示波器粗测没问题,再用逻辑分析仪看I2S帧结构,确认每个采样点的位序是24bit还是16bit、数据对齐是左对齐还是右对齐,Codec侧格式和主控侧格式必须完全一致。格式不匹配常见表现是声音正常但音量极低或者有大量爆音。
6.3 低功耗唤醒的取舍与多电源管理
低功耗唤醒是智能家居设备的老大难。待在机状态一直开着DSP跑唤醒模型,功耗可能几百毫瓦到一两瓦,电池供电的产品撑不了几天。通常做法是分两级电源管理:一颗超低功耗的MCU或DSP一直保持极低功耗,通过麦克风通路上的VAD检测到语音活动后,再打开主DSP和应用处理器。TI的低功耗DSP在VAD模式下可以做到很低功耗,同时保持麦克风通路可用,比较适合这种场景。
但我发现很多人忽略了一个细节:唤醒后切换到主系统,音频链路重新上电时需要一段稳定时间,包括电源稳定、Codec上电、DSP加载算法固件等。如果在这段时间里马上处理音频,很可能会把上电瞬态噪声当成语音信号,触发误唤醒。因此设计时要在软件流程里预留一个“音频就绪”标志,在上电稳定和Codec初始化完成之后才开启识别任务。这个细节在低功耗唤醒项目里几乎是必踩的坑,提前注意能省不少排查时间。
6.4 布板与电磁干扰:改动一次弥补不了的坑
音频设备的PCB布局属于“抄得了原理图,抄不了layout”的部分。官方的EVM布局往往是经过反复调优的,参考设计里的Layout Guide甚至比原理图更重要。我记得印象最深的一句话是:音频电路里的地是一个敏感信号,模拟地和数字地要在ADC芯片下方单点连接,不要跨区铺铜。如果分割处有高速数字线跨过,那数字噪声就会耦合到模拟地,底噪问题怎么都消不掉。
另外,扬声器输出走线和麦克风输入走线绝对不能长距离平行。D类功放的输出是PWM波,富含高频能量,哪怕线粗到能承载电流,它也会通过空间和地平面辐射噪声。我的经验是麦克风差分输入线尽量短,并且加滤波电容;D类功放输出端在靠近芯片处放LC滤波;电源走线要宽,模拟电源和数字电源的滤波电容各归其位。这些规则很难在事后用飞线弥补,所以layout阶段必须仔细检查。
结尾:一点个人体会
做音频设计和做纯软件开发最大的不同,是很多问题不是逻辑上的,而是物理上的。信号链上一丁点电源纹波、一根走线的寄生电容、一段没有对齐的I2S时序,都可能让整个系统表现得很“玄学”。也正因为如此,我特别推荐入门者从TI这类有完整硬件参考、工具链和EVM支持的生态入手,先照着一套成熟方案做出来,再逐步理解每一级的原理。等你亲手把一块“能响”的板子调到“能听清、能交互”,再回头看那些数据手册里的指标,会突然明白当初那些参数为什么要这么定。这个过程没有捷径,但确实能让你少走很长一段弯路。