第2章 硬件选型基础:主流低功耗MCU对比与音频ADC/DAC选型要点

各位同学,欢迎来到硬件选型这一章。说实话,很多做语音识别的朋友一上来就调算法、跑模型,结果板子打回来发现功耗压不下去,或者麦克风信号噪声大得离谱。我当年也踩过这个坑——选了个性能很强的MCU,结果电池撑不过两小时,项目直接重来。

今天咱们就聊聊,做低功耗语音识别,到底该怎么挑芯片。

2.1 主流低功耗MCU横向对比

目前市面上适合做语音识别的低功耗MCU,我重点看三款:STM32U5ESP32-S3nRF5340。它们各有各的脾气,咱们一个一个说。

参数 STM32U5 ESP32-S3 nRF5340
核心架构 ARM Cortex-M33 Xtensa LX7双核 ARM Cortex-M33 + M4F
主频 160MHz 240MHz 128MHz + 64MHz
SRAM 最大2.5MB 512KB 512KB + 64KB
Flash 最大4MB 16MB(外置) 1MB + 256KB
运行功耗 约19μA/MHz 约30μA/MHz 约23μA/MHz
待机功耗 0.6μA 5μA 0.9μA
硬件加速 DSP、FPU、AES 向量扩展、FFT加速 DSP、FPU、AES、ARM TrustZone
无线能力 无(需外挂) WiFi + BLE 5.0 BLE 5.2、NFC、Thread
典型场景 工业级低功耗处理 联网语音唤醒 可穿戴、蓝牙音频

2.1.1 STM32U5——稳如老狗的工业选手

我个人习惯把STM32U5叫做「省电王」。它用的是40nm工艺,待机功耗能做到0.6μA,这在语音唤醒场景里太香了。你想想看,设备大部分时间都在等唤醒词,这时候功耗越低越好。

我在项目中遇到过一个问题:用STM32U5做关键词唤醒,跑一个轻量级DNN模型,大概需要80ms的推理时间。配合LPBAM(低功耗后台自主模式),可以在不唤醒主核的情况下,让外设自己采集音频数据。嗯,这里要注意——LPBAM的配置有点绕,建议先看AN6039应用笔记。

选型建议:如果你的产品对功耗要求极其苛刻,比如纽扣电池供电、需要连续待机半年以上,STM32U5是首选。但缺点也很明显——没有内置无线,得外挂蓝牙或WiFi模块。

2.1.2 ESP32-S3——性价比之王,但功耗你得管着点

ESP32-S3这芯片,说白了就是「啥都能干」。双核240MHz,带向量扩展指令集,跑语音算法比Cortex-M33快不少。而且自带WiFi和蓝牙,联网语音识别一条龙。

但它的坑在哪?功耗。运行功耗比STM32U5高了将近一倍。我曾经做过一个测试:同样的语音唤醒模型,ESP32-S3跑起来平均电流12mA,STM32U5只要6mA。所以如果你做电池供电设备,得好好设计休眠策略。

我的小技巧:ESP32-S3有个「ULP协处理器」,可以在主核休眠时做简单的音频检测。我一般用它做第一级唤醒——ULP检测到能量超过阈值,再唤醒主核跑完整模型。这样平均功耗能降40%左右。

2.1.3 nRF5340——蓝牙音频的天然搭档

nRF5340是双核架构,一个M33做应用处理,一个M4F做可编程外设。这设计很有意思——你可以把音频采集和预处理扔给M4F,M33专心跑语音识别。

我记得有个可穿戴项目,客户要求用蓝牙传音频流。nRF5340的BLE 5.2支持LE Audio,延迟能做到20ms以内,比ESP32-S3的经典蓝牙稳定多了。不过它的SRAM只有512KB,跑大模型有点吃力,得做量化压缩。

避坑指南:我曾经在nRF5340上跑一个2MB的语音模型,结果内存爆了。后来用TensorFlow Lite Micro做8bit量化,模型压到400KB才跑起来。所以选它之前,先算算你的模型有多大。

2.2 音频ADC/DAC选型要点

MCU选完了,接下来是音频前端。很多人觉得随便找个ADC就行,其实不然。语音识别的精度,很大程度取决于ADC的信噪比和采样质量。

2.2.1 关键参数怎么看

  • 信噪比(SNR):低于80dB的ADC,我建议直接pass。环境噪声稍微大点,识别率就崩了。我一般选90dB以上的,比如AKM的AK5720。
  • 采样率与位深:语音识别16kHz/16bit是底线。但如果你做远场识别,建议24bit/48kHz,动态范围更宽。
  • 输入通道数:单麦克风用单通道就行。做波束成形的话,至少2通道,推荐4通道。
  • 功耗:低功耗场景下,ADC的功耗不能超过1mW。像TI的TLV320ADC3101,工作功耗只有0.8mW,很适合。

2.2.2 我常用的几款ADC/DAC

型号 类型 SNR 采样率 功耗 接口
AK5720 ADC 110dB 192kHz 1.2mW I2S
TLV320ADC3101 ADC 92dB 48kHz 0.8mW I2S/I2C
WM8960 ADC+DAC 98dB 48kHz 2.5mW I2S
MAX98090 ADC+DAC 93dB 96kHz 1.5mW I2S

2.2.3 麦克风偏置与模拟前端设计

这里有个容易忽略的点——麦克风偏置电压。MEMS麦克风一般需要1.8V到3.3V的偏置,而且纹波要控制在10mV以内。我见过有人直接用MCU的GPIO供电,结果纹波50mV,底噪直接飙到-60dB。

我的做法:用独立的LDO给麦克风供电,比如TPS7A20,纹波只有10μV。然后在ADC输入端加一个RC低通滤波器,截止频率设在采样率的1/2左右。这样出来的音频信号干净很多。

2.2.4 I2S接口的时钟同步问题

ADC和MCU之间用I2S通信,时钟必须同步。我遇到过最头疼的问题——MCU的I2S主时钟和ADC的采样时钟不同步,导致音频数据丢帧。后来查了半天,发现是MCU的PLL配置不对。

解决办法很简单:用MCU的I2S模块做主模式,输出BCLK和LRCLK给ADC。ADC设成从模式,跟着MCU的时钟走。这样只要MCU的时钟源稳定,就不会出问题。

总结一下:硬件选型没有绝对的好坏,关键看你的场景。做超低功耗唤醒,STM32U5+AK5720是黄金组合。做联网语音助手,ESP32-S3+WM8960性价比最高。做可穿戴蓝牙音频,nRF5340+MAX98090最省心。

下一章咱们聊聊麦克风阵列的布局和音频信号调理电路,到时候我会分享一个我踩过的坑——麦克风间距算错了,波束成形效果一塌糊涂。嗯,到时候细说。