STM32-音频播放
前言:
在使用IOT设备进行音频播放的时候有多种解决方案,简单可以归纳为三类:
| 技术方案 | 核心原理 | 音质表现 | 系统复杂度 | 典型应用场景 | 
|---|---|---|---|---|
| PWM/定时器直驱 | 利用STM32的PWM或定时器生成不同频率的方波,直接驱动蜂鸣器或通过简单功放驱动喇叭。 | 较差,仅能播放简单音阶或单音,有数码感。 | 低(硬件和软件都最简单) | 电子琴、八音盒、简单报警提示音。 | 
| 外接专用音频解码芯片 | STM32作为主控,通过SPI等接口将压缩音频数据(如MP3)发送给专业解码芯片(如VS1053),芯片完成高质量解码后输出模拟音频。 | 优秀,支持高保真立体声,可播放MP3、WAV等多种格式。 | 高(需配置解码芯片及文件系统) | 高品质MP3播放器、网络音乐播放器、语音播报设备。 | 
| 片内DAC输出 | 利用STM32自带的DAC,将数字音频数据(如WAV格式的PCM数据)直接转换为模拟电压波形输出。 | 较好,音质受限于DAC性能(通常12位),优于PWM,但不如专业解码芯片。 | 中(需处理未压缩音频数据) | 对音质有一定要求但不需要复杂格式解码的场合,如播放简短的提示音或特定音效。 | 
PWM/定时器直驱方案:
这个方案的核心是让STM32直接产生音频信号。
- 工作原理:STM32通过其定时器产生高频PWM波,或者直接控制GPIO口模拟出音频信号的频率。这个PWM波的本质是一串方波,经过简单的RC低通滤波器后,可以还原出大致的模拟电压波形。但这个信号非常微弱且质量一般,所以必须外接LM386或LM4871这类音频功率放大器进行放大,才能驱动喇叭。 
- 优点:成本最低,电路简单,适合播放简单的提示音或对音质要求极低的场合。 
- 缺点:音质差(底噪大、失真明显),无法处理复杂的音乐文件(如MP3),需要STM32的CPU持续参与信号生成,占用资源多。 
片内DAC输出方案:
这个方案利用了STM32内部的一个专用硬件模块。
- 工作原理:STM32将数字音频数据(如WAV格式的PCM数据)发送给其内部的DAC模块。DAC会将数字值直接转换成对应电压的平滑模拟波形输出。同样,这个线路电平的信号也需要外接功放才能驱动喇叭。 
- 优点:音质优于PWM方案,电路仍然相对简单。 
- 缺点:音质受限于STM32片内DAC的性能(通常是12位),无法直接解码MP3等压缩格式(需要CPU先软件解码),同样需要外接功放。在你的组合中,这可以看作是一个介于PWM和外接Codec之间的选项。 
外接专用音频解码芯片方案:
这是追求音质和功能完整性的方案,核心是引入了一颗专业的音频编解码芯片。
- 工作原理:STM32通过I2S数字音频接口,将压缩的(如MP3)或未压缩的(如WAV)数字音频数据流发送给ES8311。ES8311是一颗专业的音频Codec,它内部集成了高性能的DAC和ADC。它的DAC将数字信号高质量地转换为模拟信号后,再输出给后级的功放芯片(如LM4871)进行功率放大,最终驱动喇叭。 
- 优点: - 高音质:专用Codec的DAC性能远超STM32片内DAC。 
- 功能全面:ES8311通常也包含ADC,因此可以实现录音功能。 
- 减轻CPU负担:STM32只需传输数据,复杂的音频编解码由ES8311硬件完成。 
 
- 缺点:电路最复杂,成本最高,软件配置也更繁琐。 
简单场景分类如下

DAC方案:
这里我们首先已DAC方案进行分析,PWM脉冲的这个过于简单,作为警报这类方案还可以,作为语音音质还是太差,因此低成本采用DAC方案
DAC(数字模拟转换器),主要将数字信号0,1转换为模拟信号,STM32芯片中存在对应的引脚支持DAC数模转换,但是较少
这里我们介绍LM386和LM4871
LM386引脚图:

手册提供的不同增益的电路图:


LM386电路图大概如下,由于选用的LM386型号和使用场景不同,对应的电容电阻会存在调整
其中INPUT为音频输入接口,OUTPUT为喇叭接口

LM4871引脚图:

手册电路图如下:

LM4871的正负输入(+IN和-IN)确实都连接到了MCU,但这并不意味着MCU提供了两个独立的DAC信号。实际上,这是一个非常经典的单端转差分输入的设计。MCU的DAC只提供了一个单一的正向信号,而负输入端的信号是通过一个电阻网络从这个正向信号“衍生”出来的参考地。

为了低成本考虑,典型应用电路中,用到了 10K 20K 1UF 0.39UF 等器件,为了让电路更简洁,将电阻统一改为 10K,电容改为常用的 100nF(0.1UF) 和 22UF。实测没有问题。
Shutdown 是芯片掉电控制引脚,为高电平时功放停止工作实现低功耗;为低电平时功放正常工作。
项目原理图中的 R7 和 R8 电阻跟声音大小成线性关系,两个电阻越大,声音越小;两个电阻越小,声音越大。但是声音的大小始终不会超过喇叭的实际可输出声音大小。毕竟该芯片只有 3W 的功放输出。 W 数越大,功率越高,耗电越大,声音越响。
对应的麦克风电路:

外接专用音频解码芯片:
这里使用的是ES8311+NS4150B方案:
ES8311是一款由Everest Semi(顺芯半导体)推出的高性能、低功耗的单声道音频编解码器(CODEC)芯片。它集成了高精度的模数转换器(ADC)和数模转换器(DAC),专为需要高质量音频录制和播放的便携式及嵌入式设备而设计;
具体特性如下:
| 特性类别 | 具体规格与描述 | 
|---|---|
| 核心架构 | 高性能、低功耗多位 Delta-Sigma ADC 和 DAC | 
| ADC 性能 | 24位分辨率,采样率 8 - 96 kHz,信噪比 (SNR) 100 dB,总谐波失真+噪声 (THD+N) -93 dB | 
| DAC 性能 | 24位分辨率,采样率 8 - 96 kHz,信噪比 (SNR) 110 dB,总谐波失真+噪声 (THD+N) -80 dB | 
| 接口特性 | 支持 I2S/PCM 主从模式数字音频接口;配置接口为 I2C | 
| 电源电压 | 1.8V - 3.3V,宽电压范围利于电池供电设计 | 
| 功耗水平 | 播放和录制模式下功耗典型值仅为 14 mW,待机电流极低 | 
| 封装形式 | QFN-20,紧凑型封装节省电路板空间 | 
| 工作温度 | -40°C 至 +105°C,适应宽温工作环境 | 
ES8311引脚如下:

手册推荐电路如下:

NS4150B引脚:

对应的手册推荐电路:

NS4150B和LM386都属于功放芯片,具体的区别如如下:
| 特性 | NS4150B (D类功放) | LM386 (AB类功放) | 
|---|---|---|
| 工作原理 | D类(开关型) | AB类(线性) | 
| 核心优势 | 高效率(通常85%-90%),低发热,功率密度高 | 电路简单经典,成本极低,电磁干扰(EMI)易处理 | 
| 输出功率 | 较高(5V电压下,4Ω负载可达2.8W-3W) | 较低(6V电压下,8Ω负载典型值约325mW) | 
| 效率 | 高(约88%-90%) | 较低(约30%-40%) | 
| 静态电流 | 约4mA (3.6V, 空载) | 约4mA (6V) | 
| 音质特点 | 理论THD+N较低,但可能有高频开关噪声 | 中规中矩,总谐波失真典型值0.2% (特定条件) | 
| 外围电路 | 简单,通常无需输出滤波电感(免滤波设计) | 简单,但通常需要输出耦合电容 | 
| 热管理 | 发热量小,可能无需散热片 | 发热量相对较大,可能需要考虑散热 | 
| EMI/噪声 | 需关注高频开关噪声和电磁兼容性(EMI)设计 | 电磁干扰较小,但易受电源噪声影响 | 
| 成本 | 相对较高 | 极低 | 
| 理想应用 | 对效率和体积要求高的便携设备(如蓝牙音箱、平板电脑) | 成本敏感、功率要求低的应用(如简易玩具、报警器) | 

对应的麦克风使用的ZTS6216,对应的手册电路如下:

后记:
音频的硬件电路方案常用的就是上面两种,选用的芯片可能不同,但是原理是一样的
